mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-01-01 02:48:05 +01:00
more space for script lines in feed edit dialog
This commit is contained in:
parent
a9efaac825
commit
65ec98daff
@ -30,7 +30,7 @@
|
||||
<url type="donation">https://martinrotter.github.io/donate/</url>
|
||||
<content_rating type="oars-1.1" />
|
||||
<releases>
|
||||
<release version="3.8.4" date="2021-02-03"/>
|
||||
<release version="3.8.4" date="2021-02-04"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.0">
|
||||
<content_attribute id="violence-cartoon">none</content_attribute>
|
||||
|
@ -3,6 +3,7 @@
|
||||
* [Downloads](Downloads.md)
|
||||
* [Philosophy](#philosophy)
|
||||
* [Versioning](#versioning)
|
||||
* [How to contribute](#how-to-contribute)
|
||||
* [Reporting bugs](#reporting-bugs)
|
||||
* [Localizations](#localizations)
|
||||
* [Web-based and lite app variants](#web-based-and-lite-app-variants)
|
||||
@ -34,7 +35,7 @@ I am glad to accept any kind of donations, see ♥ **Sponsor** button on the top
|
||||
Note that some more elaborate parts of this documentation are placed in separate files for practical purposes.
|
||||
|
||||
## Philosophy
|
||||
RSS Guard tends to be independent software. It's free, it's open-source. RSS Guard accepts donations but only as a way of saying "thank you for RSS Guard".
|
||||
RSS Guard tends to be independent software. It's free, it's open-source.
|
||||
|
||||
## Versioning
|
||||
RSS Guard uses [semantic versioning](https://semver.org/). The versioning scheme is `X.Y.Z`, where:
|
||||
@ -43,6 +44,16 @@ RSS Guard uses [semantic versioning](https://semver.org/). The versioning scheme
|
||||
* `Y` indicates that there is new major feature available.
|
||||
* `Z` indicates that there are newly fixed bugs or small features introduced.
|
||||
|
||||
## How to contribute
|
||||
RSS Guard is open source application with free GNU GPLv3 license. Everyone willing to contribute is welcomed. You can contribute in many ways by:
|
||||
* fixing bugs and requesting PRs (pull requests),
|
||||
* [localizing](#localizations) to other languages,
|
||||
* supporting author with [donations](https://github.com/sponsors/martinrotter),
|
||||
* spreading the word,
|
||||
* reporting discovered [bugs](#reporting-bugs).
|
||||
|
||||
If you decide to contribute code, then please try to follow the style and formatting of existing source code. Also, I use [uncrustify](https://github.com/martinrotter/rssguard/blob/master/resources/scripts/uncrustify/uncrustify.cfg) to format source code.
|
||||
|
||||
## Reporting bugs
|
||||
Please report all issues/bugs/ideas to [Issues](https://github.com/martinrotter/rssguard/issues) section. Describe your problem as precisely as possible, along with steps taken leading up to the issue occurring.
|
||||
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 9c10723bfbaf6cb85107d6ee16e0324e9e487749
|
||||
Subproject commit 47f4125753452eff8800dbd6600c5a05540b15d9
|
@ -21,3 +21,18 @@ LineEditWithStatus::LineEditWithStatus(QWidget* parent)
|
||||
m_layout->addWidget(m_wdgInput);
|
||||
m_layout->addWidget(m_btnStatus);
|
||||
}
|
||||
|
||||
TextEditWithStatus::TextEditWithStatus(QWidget* parent)
|
||||
: WidgetWithStatus(parent) {
|
||||
m_wdgInput = new QPlainTextEdit(this);
|
||||
setFocusProxy(m_wdgInput);
|
||||
|
||||
// Set correct size for the tool button.
|
||||
const int txt_input_height = QLineEdit().sizeHint().height();
|
||||
|
||||
m_btnStatus->setFixedSize(txt_input_height, txt_input_height);
|
||||
|
||||
// Compose the layout.
|
||||
m_layout->addWidget(m_wdgInput);
|
||||
m_layout->addWidget(m_btnStatus);
|
||||
}
|
||||
|
@ -7,6 +7,8 @@
|
||||
|
||||
#include "gui/baselineedit.h"
|
||||
|
||||
#include <QPlainTextEdit>
|
||||
|
||||
class LineEditWithStatus : public WidgetWithStatus {
|
||||
Q_OBJECT
|
||||
|
||||
@ -21,4 +23,18 @@ inline BaseLineEdit* LineEditWithStatus::lineEdit() const {
|
||||
return static_cast<BaseLineEdit*>(m_wdgInput);
|
||||
}
|
||||
|
||||
class TextEditWithStatus : public WidgetWithStatus {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TextEditWithStatus(QWidget* parent = nullptr);
|
||||
|
||||
// Access to line edit.
|
||||
QPlainTextEdit* textEdit() const;
|
||||
};
|
||||
|
||||
inline QPlainTextEdit* TextEditWithStatus::textEdit() const {
|
||||
return static_cast<QPlainTextEdit*>(m_wdgInput);
|
||||
}
|
||||
|
||||
#endif // LINEEDITWITHSTATUS_H
|
||||
|
@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>500</width>
|
||||
<height>450</height>
|
||||
<height>600</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
|
@ -48,16 +48,16 @@ int FormStandardFeedDetails::addEditFeed(StandardFeed* input_feed, RootItem* par
|
||||
|
||||
void FormStandardFeedDetails::guessFeed() {
|
||||
m_standardFeedDetails->guessFeed(m_standardFeedDetails->sourceType(),
|
||||
m_standardFeedDetails->m_ui.m_txtSource->lineEdit()->text(),
|
||||
m_standardFeedDetails->m_ui.m_txtPostProcessScript->lineEdit()->text(),
|
||||
m_standardFeedDetails->m_ui.m_txtSource->textEdit()->toPlainText(),
|
||||
m_standardFeedDetails->m_ui.m_txtPostProcessScript->textEdit()->toPlainText(),
|
||||
m_authDetails->m_txtUsername->lineEdit()->text(),
|
||||
m_authDetails->m_txtPassword->lineEdit()->text());
|
||||
}
|
||||
|
||||
void FormStandardFeedDetails::guessIconOnly() {
|
||||
m_standardFeedDetails->guessIconOnly(m_standardFeedDetails->sourceType(),
|
||||
m_standardFeedDetails->m_ui.m_txtSource->lineEdit()->text(),
|
||||
m_standardFeedDetails->m_ui.m_txtPostProcessScript->lineEdit()->text(),
|
||||
m_standardFeedDetails->m_ui.m_txtSource->textEdit()->toPlainText(),
|
||||
m_standardFeedDetails->m_ui.m_txtPostProcessScript->textEdit()->toPlainText(),
|
||||
m_authDetails->m_txtUsername->lineEdit()->text(),
|
||||
m_authDetails->m_txtPassword->lineEdit()->text());
|
||||
}
|
||||
@ -79,8 +79,8 @@ void FormStandardFeedDetails::apply() {
|
||||
new_feed->setEncoding(m_standardFeedDetails->m_ui.m_cmbEncoding->currentText());
|
||||
new_feed->setType(type);
|
||||
new_feed->setSourceType(m_standardFeedDetails->sourceType());
|
||||
new_feed->setPostProcessScript(m_standardFeedDetails->m_ui.m_txtPostProcessScript->lineEdit()->text());
|
||||
new_feed->setUrl(m_standardFeedDetails->m_ui.m_txtSource->lineEdit()->text());
|
||||
new_feed->setPostProcessScript(m_standardFeedDetails->m_ui.m_txtPostProcessScript->textEdit()->toPlainText());
|
||||
new_feed->setUrl(m_standardFeedDetails->m_ui.m_txtSource->textEdit()->toPlainText());
|
||||
new_feed->setPasswordProtected(m_authDetails->m_gbAuthentication->isChecked());
|
||||
new_feed->setUsername(m_authDetails->m_txtUsername->lineEdit()->text());
|
||||
new_feed->setPassword(m_authDetails->m_txtPassword->lineEdit()->text());
|
||||
|
@ -21,10 +21,10 @@ StandardFeedDetails::StandardFeedDetails(QWidget* parent) : QWidget(parent) {
|
||||
m_ui.m_txtTitle->lineEdit()->setToolTip(tr("Set title for your feed."));
|
||||
m_ui.m_txtDescription->lineEdit()->setPlaceholderText(tr("Feed description"));
|
||||
m_ui.m_txtDescription->lineEdit()->setToolTip(tr("Set description for your feed."));
|
||||
m_ui.m_txtSource->lineEdit()->setPlaceholderText(tr("Full feed source identifier"));
|
||||
m_ui.m_txtSource->lineEdit()->setToolTip(tr("Full feed source identifier which can be URL."));
|
||||
m_ui.m_txtPostProcessScript->lineEdit()->setPlaceholderText(tr("Full command to execute"));
|
||||
m_ui.m_txtPostProcessScript->lineEdit()->setToolTip(tr("You can enter full command including interpreter here."));
|
||||
m_ui.m_txtSource->textEdit()->setPlaceholderText(tr("Full feed source identifier"));
|
||||
m_ui.m_txtSource->textEdit()->setToolTip(tr("Full feed source identifier which can be URL."));
|
||||
m_ui.m_txtPostProcessScript->textEdit()->setPlaceholderText(tr("Full command to execute"));
|
||||
m_ui.m_txtPostProcessScript->textEdit()->setToolTip(tr("You can enter full command including interpreter here."));
|
||||
|
||||
// Add source types.
|
||||
m_ui.m_cmbSourceType->addItem(StandardFeed::sourceTypeToString(StandardFeed::SourceType::Url),
|
||||
@ -71,7 +71,7 @@ StandardFeedDetails::StandardFeedDetails(QWidget* parent) : QWidget(parent) {
|
||||
m_iconMenu->addAction(m_actionLoadIconFromFile);
|
||||
m_iconMenu->addAction(m_actionUseDefaultIcon);
|
||||
m_ui.m_btnIcon->setMenu(m_iconMenu);
|
||||
m_ui.m_txtSource->lineEdit()->setFocus(Qt::TabFocusReason);
|
||||
m_ui.m_txtSource->textEdit()->setFocus(Qt::FocusReason::TabFocusReason);
|
||||
|
||||
// Set feed metadata fetch label.
|
||||
m_ui.m_lblFetchMetadata->setStatus(WidgetWithStatus::StatusType::Information,
|
||||
@ -82,10 +82,14 @@ StandardFeedDetails::StandardFeedDetails(QWidget* parent) : QWidget(parent) {
|
||||
connect(m_ui.m_txtDescription->lineEdit(), &BaseLineEdit::textChanged, this, &StandardFeedDetails::onDescriptionChanged);
|
||||
connect(m_ui.m_cmbSourceType, QOverload<int>::of(&QComboBox::currentIndexChanged),
|
||||
this, [this]() {
|
||||
onUrlChanged(m_ui.m_txtSource->lineEdit()->text());
|
||||
onUrlChanged(m_ui.m_txtSource->textEdit()->toPlainText());
|
||||
});
|
||||
connect(m_ui.m_txtSource->textEdit(), &QPlainTextEdit::textChanged, this, [this]() {
|
||||
onUrlChanged(m_ui.m_txtSource->textEdit()->toPlainText());
|
||||
});
|
||||
connect(m_ui.m_txtPostProcessScript->textEdit(), &QPlainTextEdit::textChanged, this, [this]() {
|
||||
onPostProcessScriptChanged(m_ui.m_txtPostProcessScript->textEdit()->toPlainText());
|
||||
});
|
||||
connect(m_ui.m_txtSource->lineEdit(), &BaseLineEdit::textChanged, this, &StandardFeedDetails::onUrlChanged);
|
||||
connect(m_ui.m_txtPostProcessScript->lineEdit(), &BaseLineEdit::textChanged, this, &StandardFeedDetails::onPostProcessScriptChanged);
|
||||
connect(m_actionLoadIconFromFile, &QAction::triggered, this, &StandardFeedDetails::onLoadIconFromFile);
|
||||
connect(m_actionUseDefaultIcon, &QAction::triggered, this, &StandardFeedDetails::onUseDefaultIcon);
|
||||
|
||||
@ -94,9 +98,9 @@ StandardFeedDetails::StandardFeedDetails(QWidget* parent) : QWidget(parent) {
|
||||
setTabOrder(m_ui.m_cmbEncoding, m_ui.m_txtTitle->lineEdit());
|
||||
setTabOrder(m_ui.m_txtTitle->lineEdit(), m_ui.m_txtDescription->lineEdit());
|
||||
setTabOrder(m_ui.m_txtDescription->lineEdit(), m_ui.m_cmbSourceType);
|
||||
setTabOrder(m_ui.m_cmbSourceType, m_ui.m_txtSource->lineEdit());
|
||||
setTabOrder(m_ui.m_txtSource->lineEdit(), m_ui.m_txtPostProcessScript->lineEdit());
|
||||
setTabOrder(m_ui.m_txtPostProcessScript->lineEdit(), m_ui.m_btnFetchMetadata);
|
||||
setTabOrder(m_ui.m_cmbSourceType, m_ui.m_txtSource->textEdit());
|
||||
setTabOrder(m_ui.m_txtSource->textEdit(), m_ui.m_txtPostProcessScript->textEdit());
|
||||
setTabOrder(m_ui.m_txtPostProcessScript->textEdit(), m_ui.m_btnFetchMetadata);
|
||||
setTabOrder(m_ui.m_btnFetchMetadata, m_ui.m_btnIcon);
|
||||
|
||||
GuiUtilities::setLabelAsNotice(*m_ui.m_lblScriptInfo, false);
|
||||
@ -309,10 +313,10 @@ void StandardFeedDetails::prepareForNewFeed(RootItem* parent_to_select, const QS
|
||||
}
|
||||
|
||||
if (!url.isEmpty()) {
|
||||
m_ui.m_txtSource->lineEdit()->setText(url);
|
||||
m_ui.m_txtSource->textEdit()->setPlainText(url);
|
||||
}
|
||||
else if (Application::clipboard()->mimeData()->hasText()) {
|
||||
m_ui.m_txtSource->lineEdit()->setText(Application::clipboard()->text());
|
||||
m_ui.m_txtSource->textEdit()->setPlainText(Application::clipboard()->text());
|
||||
}
|
||||
|
||||
m_ui.m_txtSource->setFocus();
|
||||
@ -324,8 +328,8 @@ void StandardFeedDetails::setExistingFeed(StandardFeed* feed) {
|
||||
m_ui.m_txtTitle->lineEdit()->setText(feed->title());
|
||||
m_ui.m_txtDescription->lineEdit()->setText(feed->description());
|
||||
m_ui.m_btnIcon->setIcon(feed->icon());
|
||||
m_ui.m_txtSource->lineEdit()->setText(feed->url());
|
||||
m_ui.m_txtPostProcessScript->lineEdit()->setText(feed->postProcessScript());
|
||||
m_ui.m_txtSource->textEdit()->setPlainText(feed->url());
|
||||
m_ui.m_txtPostProcessScript->textEdit()->setPlainText(feed->postProcessScript());
|
||||
m_ui.m_cmbType->setCurrentIndex(m_ui.m_cmbType->findData(QVariant::fromValue(int(feed->type()))));
|
||||
m_ui.m_cmbEncoding->setCurrentIndex(m_ui.m_cmbEncoding->findData(feed->encoding(),
|
||||
Qt::ItemDataRole::DisplayRole,
|
||||
|
@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>429</width>
|
||||
<height>321</height>
|
||||
<width>400</width>
|
||||
<height>460</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@ -111,23 +111,61 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="m_cmbSourceType"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="LineEditWithStatus" name="m_txtSource" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<widget class="QComboBox" name="m_cmbSourceType"/>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="6" column="1">
|
||||
<widget class="TextEditWithStatus" name="m_txtSource" native="true">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>50</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>50</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Post-process script</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="TextEditWithStatus" name="m_txtPostProcessScript" native="true">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>50</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>50</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<widget class="QLabel" name="m_lblScriptInfo">
|
||||
<property name="text">
|
||||
<string>You can use URL as a source of your feed or you can produce your feed with custom script. Also, you can post-process generated feed data with yet another script if you wish. These are advanced features and make sure to read the documentation before your use them.</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Fetch metadata</string>
|
||||
@ -137,7 +175,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="9" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QPushButton" name="m_btnFetchMetadata">
|
||||
@ -161,7 +199,7 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="m_lblIcon">
|
||||
<property name="text">
|
||||
<string>Icon</string>
|
||||
@ -171,7 +209,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<item row="10" column="1">
|
||||
<widget class="QToolButton" name="m_btnIcon">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
@ -208,28 +246,18 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="LineEditWithStatus" name="m_txtPostProcessScript" native="true"/>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Post-process script</string>
|
||||
<item row="11" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QLabel" name="m_lblScriptInfo">
|
||||
<property name="text">
|
||||
<string>You can use URL as a source of your feed or you can produce your feed with custom script. Also, you can post-process generated feed data with yet another script if you wish. These are advanced features and make sure to read the documentation before your use them.</string>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@ -246,6 +274,12 @@
|
||||
<header>lineeditwithstatus.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>TextEditWithStatus</class>
|
||||
<extends>QWidget</extends>
|
||||
<header>lineeditwithstatus.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
Loading…
Reference in New Issue
Block a user