diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml
index 5d310b483..4f6436566 100644
--- a/resources/desktop/com.github.rssguard.appdata.xml
+++ b/resources/desktop/com.github.rssguard.appdata.xml
@@ -26,7 +26,7 @@
https://github.com/sponsors/martinrotter
-
+
none
diff --git a/src/librssguard/gui/dialogs/formsettings.cpp b/src/librssguard/gui/dialogs/formsettings.cpp
index 3a274ce41..7c711e053 100644
--- a/src/librssguard/gui/dialogs/formsettings.cpp
+++ b/src/librssguard/gui/dialogs/formsettings.cpp
@@ -130,8 +130,19 @@ void FormSettings::cancelSettings() {
void FormSettings::addSettingsPanel(SettingsPanel* panel) {
m_ui.m_listSettings->addItem(panel->title());
m_panels.append(panel);
- m_ui.m_stackedSettings->addWidget(panel);
+
+ QScrollArea* scr = new QScrollArea(m_ui.m_stackedSettings);
+
+ scr->setWidgetResizable(true);
+ scr->setFrameShape(QFrame::Shape::NoFrame);
+
+ //panel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ scr->setWidget(panel);
+
+ m_ui.m_stackedSettings->addWidget(scr);
+
panel->loadSettings();
+
connect(panel, &SettingsPanel::settingsChanged, this, [this]() {
m_btnApply->setEnabled(true);
});
diff --git a/src/librssguard/gui/dialogs/formsettings.ui b/src/librssguard/gui/dialogs/formsettings.ui
index 9616b9431..38608c029 100644
--- a/src/librssguard/gui/dialogs/formsettings.ui
+++ b/src/librssguard/gui/dialogs/formsettings.ui
@@ -6,8 +6,8 @@
0
0
- 1000
- 680
+ 800
+ 550
@@ -45,13 +45,6 @@
- -
-
-
- -1
-
-
-
-
@@ -62,6 +55,13 @@
+ -
+
+
+ -1
+
+
+
diff --git a/src/librssguard/gui/feedsview.cpp b/src/librssguard/gui/feedsview.cpp
index b3ee82b56..4a1140607 100644
--- a/src/librssguard/gui/feedsview.cpp
+++ b/src/librssguard/gui/feedsview.cpp
@@ -28,7 +28,7 @@
#include
FeedsView::FeedsView(QWidget* parent)
- : QTreeView(parent), m_contextMenuService(nullptr), m_contextMenuBin(nullptr), m_contextMenuCategories(nullptr),
+ : BaseTreeView(parent), m_contextMenuService(nullptr), m_contextMenuBin(nullptr), m_contextMenuCategories(nullptr),
m_contextMenuFeeds(nullptr), m_contextMenuImportant(nullptr), m_contextMenuEmptySpace(nullptr), m_contextMenuOtherItems(nullptr),
m_contextMenuLabel(nullptr) {
setObjectName(QSL("FeedsView"));
@@ -774,9 +774,9 @@ void FeedsView::selectionChanged(const QItemSelection& selected, const QItemSele
}
void FeedsView::keyPressEvent(QKeyEvent* event) {
- QTreeView::keyPressEvent(event);
+ BaseTreeView::keyPressEvent(event);
- if (event->key() == Qt::Key_Delete) {
+ if (event->key() == Qt::Key::Key_Delete) {
deleteSelectedItem();
}
}
diff --git a/src/librssguard/gui/feedsview.h b/src/librssguard/gui/feedsview.h
index fb3a97599..046df78c7 100644
--- a/src/librssguard/gui/feedsview.h
+++ b/src/librssguard/gui/feedsview.h
@@ -3,7 +3,7 @@
#ifndef FEEDSVIEW_H
#define FEEDSVIEW_H
-#include
+#include "gui/reusable/basetreeview.h"
#include "core/feedsmodel.h"
@@ -13,7 +13,7 @@ class FeedsProxyModel;
class Feed;
class Category;
-class RSSGUARD_DLLSPEC FeedsView : public QTreeView {
+class RSSGUARD_DLLSPEC FeedsView : public BaseTreeView {
Q_OBJECT
public:
diff --git a/src/librssguard/gui/messagesview.cpp b/src/librssguard/gui/messagesview.cpp
index 93aec1168..834709a98 100644
--- a/src/librssguard/gui/messagesview.cpp
+++ b/src/librssguard/gui/messagesview.cpp
@@ -27,7 +27,7 @@
#include
MessagesView::MessagesView(QWidget* parent)
- : QTreeView(parent), m_contextMenu(nullptr), m_columnsAdjusted(false), m_processingMouse(false) {
+ : BaseTreeView(parent), m_contextMenu(nullptr), m_columnsAdjusted(false), m_processingMouse(false) {
m_sourceModel = qApp->feedReader()->messagesModel();
m_proxyModel = qApp->feedReader()->messagesProxyModel();
@@ -227,11 +227,14 @@ void MessagesView::focusInEvent(QFocusEvent* event) {
}
void MessagesView::keyPressEvent(QKeyEvent* event) {
- QTreeView::keyPressEvent(event);
+ BaseTreeView::keyPressEvent(event);
if (event->key() == Qt::Key::Key_Delete) {
deleteSelectedMessages();
}
+ else if (event->key() == Qt::Key::Key_Backspace) {
+ restoreSelectedMessages();
+ }
}
void MessagesView::contextMenuEvent(QContextMenuEvent* event) {
diff --git a/src/librssguard/gui/messagesview.h b/src/librssguard/gui/messagesview.h
index 451056106..332fc6e34 100644
--- a/src/librssguard/gui/messagesview.h
+++ b/src/librssguard/gui/messagesview.h
@@ -3,16 +3,16 @@
#ifndef MESSAGESVIEW_H
#define MESSAGESVIEW_H
-#include "core/messagesmodel.h"
+#include "gui/reusable/basetreeview.h"
+#include "core/messagesmodel.h"
#include "services/abstract/rootitem.h"
#include
-#include
class MessagesProxyModel;
-class MessagesView : public QTreeView {
+class MessagesView : public BaseTreeView {
Q_OBJECT
public:
diff --git a/src/librssguard/gui/reusable/basetreeview.cpp b/src/librssguard/gui/reusable/basetreeview.cpp
new file mode 100755
index 000000000..13c058264
--- /dev/null
+++ b/src/librssguard/gui/reusable/basetreeview.cpp
@@ -0,0 +1,42 @@
+// For license of this file, see /LICENSE.md.
+
+#include "gui/reusable/basetreeview.h"
+
+#include
+
+BaseTreeView::BaseTreeView(QWidget* parent) : QTreeView(parent), m_keyboardShortcutsLimited(false) {
+ m_allowedKeyboardKeys = {
+ Qt::Key::Key_Back,
+ Qt::Key::Key_Select,
+ Qt::Key::Key_Copy,
+ Qt::Key::Key_Shift,
+ Qt::Key::Key_Control,
+ Qt::Key::Key_Up,
+ Qt::Key::Key_Down,
+ Qt::Key::Key_Left,
+ Qt::Key::Key_Right,
+ Qt::Key::Key_Home,
+ Qt::Key::Key_End,
+ Qt::Key::Key_PageUp,
+ Qt::Key::Key_PageDown
+ };
+}
+
+bool BaseTreeView::keyboardShortcutsLimited() const {
+ return m_keyboardShortcutsLimited;
+}
+
+void BaseTreeView::setKeyboardShortcutsLimited(bool limited) {
+ m_keyboardShortcutsLimited = limited;
+}
+
+void BaseTreeView::keyPressEvent(QKeyEvent* event) {
+ if (m_keyboardShortcutsLimited &&
+ !m_allowedKeyboardKeys.contains(event->key()) &&
+ !event->matches(QKeySequence::StandardKey::SelectAll)) {
+ event->ignore();
+ }
+ else {
+ QTreeView::keyPressEvent(event);
+ }
+}
diff --git a/src/librssguard/gui/reusable/basetreeview.h b/src/librssguard/gui/reusable/basetreeview.h
new file mode 100755
index 000000000..90e68e3de
--- /dev/null
+++ b/src/librssguard/gui/reusable/basetreeview.h
@@ -0,0 +1,25 @@
+// For license of this file, see /LICENSE.md.
+
+#ifndef BASETREEVIEW_H
+#define BASETREEVIEW_H
+
+#include
+
+class BaseTreeView : public QTreeView {
+ Q_OBJECT
+
+ public:
+ explicit BaseTreeView(QWidget* parent = nullptr);
+
+ bool keyboardShortcutsLimited() const;
+ void setKeyboardShortcutsLimited(bool limited);
+
+ protected:
+ virtual void keyPressEvent(QKeyEvent* event);
+
+ private:
+ bool m_keyboardShortcutsLimited;
+ QList m_allowedKeyboardKeys;
+};
+
+#endif // BASETREEVIEW_H
diff --git a/src/librssguard/gui/settings/settingsbrowsermail.ui b/src/librssguard/gui/settings/settingsbrowsermail.ui
index 1946a7470..960294309 100644
--- a/src/librssguard/gui/settings/settingsbrowsermail.ui
+++ b/src/librssguard/gui/settings/settingsbrowsermail.ui
@@ -6,7 +6,7 @@
0
0
- 658
+ 481
330
@@ -36,10 +36,23 @@
-
- Always open links from simple internal text browser in external web browser
+ Always open hyperlinks in external web browser
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
-
@@ -135,8 +148,15 @@
- -
-
+
+
+
+
+ External e-mail client
+
+
+
-
+
Qt::Vertical
@@ -148,13 +168,6 @@
-
-
-
-
- External e-mail client
-
-
-
@@ -255,19 +268,6 @@
- -
-
-
- Qt::Vertical
-
-
-
- 20
- 40
-
-
-
-
@@ -275,13 +275,6 @@
External tools
- -
-
-
- On this page, you can setup a list of external tools which can open URLs of selected messages.
-
-
-
-
@@ -309,6 +302,37 @@
+ -
+
+
-
+
+
+ &Add tool
+
+
+
+ -
+
+
+ false
+
+
+ &Edit selected tool
+
+
+
+ -
+
+
+ false
+
+
+ &Delete selected tool
+
+
+
+
+
-
@@ -322,36 +346,12 @@
- -
-
-
-
-
-
- &Add new external tool
-
-
-
- -
-
-
- false
-
-
- &Edit selected external tool
-
-
-
- -
-
-
- false
-
-
- &Delete selected external tool
-
-
-
-
+ -
+
+
+ On this page, you can setup a list of external tools which can open URLs of selected messages.
+
+
diff --git a/src/librssguard/gui/settings/settingsdatabase.ui b/src/librssguard/gui/settings/settingsdatabase.ui
index c7ae81c70..f4aa1e841 100644
--- a/src/librssguard/gui/settings/settingsdatabase.ui
+++ b/src/librssguard/gui/settings/settingsdatabase.ui
@@ -6,7 +6,7 @@
0
0
- 558
+ 547
356
diff --git a/src/librssguard/gui/settings/settingsdownloads.ui b/src/librssguard/gui/settings/settingsdownloads.ui
index 06ed812ea..a4460a073 100644
--- a/src/librssguard/gui/settings/settingsdownloads.ui
+++ b/src/librssguard/gui/settings/settingsdownloads.ui
@@ -6,7 +6,7 @@
0
0
- 758
+ 469
300
@@ -36,13 +36,6 @@
Target directory for downloaded files
- -
-
-
- Ask for each individual downloaded file
-
-
-
-
-
@@ -87,6 +80,13 @@
+ -
+
+
+ Ask for each individual downloaded file
+
+
+
diff --git a/src/librssguard/gui/settings/settingsfeedsmessages.ui b/src/librssguard/gui/settings/settingsfeedsmessages.ui
index 2deb5e19f..63d086baf 100644
--- a/src/librssguard/gui/settings/settingsfeedsmessages.ui
+++ b/src/librssguard/gui/settings/settingsfeedsmessages.ui
@@ -6,7 +6,7 @@
0
0
- 788
+ 479
433
@@ -26,7 +26,7 @@
-
- 0
+ 1
@@ -36,7 +36,7 @@
-
- Fetch articles for all feeds on application startup with initial delay of
+ Fetch all articles on startup with initial delay of
@@ -45,6 +45,12 @@
false
+
+
+ 150
+ 0
+
+
false
@@ -65,6 +71,12 @@
false
+
+
+ 150
+ 0
+
+
false
@@ -124,6 +136,12 @@
-
+
+
+ 150
+ 0
+
+
Connection timeout is time interval which is reserved for downloading new messages for the feed. If this time interval elapses, then download process is aborted.
@@ -144,7 +162,7 @@
-
- Height or rows in feed list (-1 = default height)
+ Feed list row height (-1 = default)
m_spinHeightRowsFeeds
@@ -153,6 +171,12 @@
-
+
+
+ 150
+ 0
+
+
-1
@@ -173,6 +197,12 @@
-
+
+
+ 150
+ 0
+
+
@@ -278,7 +308,7 @@
-
- Height or rows in article list (-1 = default height)
+ Article list row height (-1 = default)
m_spinHeightRowsMessages
@@ -287,6 +317,12 @@
-
+
+
+ 150
+ 0
+
+
-1
@@ -307,6 +343,12 @@
-
+
+
+ 150
+ 0
+
+
22
@@ -318,7 +360,7 @@
-
- Use custom date/time format (overrides format loaded from active localization)
+ Use custom date/time format
true
@@ -329,7 +371,14 @@
-
-
+
+
+
+ 150
+ 0
+
+
+
-
diff --git a/src/librssguard/gui/settings/settingsgeneral.ui b/src/librssguard/gui/settings/settingsgeneral.ui
index c603416bc..f1ae15204 100644
--- a/src/librssguard/gui/settings/settingsgeneral.ui
+++ b/src/librssguard/gui/settings/settingsgeneral.ui
@@ -6,7 +6,7 @@
0
0
- 552
+ 360
148
diff --git a/src/librssguard/gui/settings/settingsgui.ui b/src/librssguard/gui/settings/settingsgui.ui
index a73a1eaa0..51285e011 100644
--- a/src/librssguard/gui/settings/settingsgui.ui
+++ b/src/librssguard/gui/settings/settingsgui.ui
@@ -6,10 +6,16 @@
0
0
- 670
+ 667
394
+
+
+ 0
+ 0
+
+
0
@@ -71,12 +77,6 @@
-
-
-
- 0
- 0
-
-
0
diff --git a/src/librssguard/gui/settings/settingslocalization.ui b/src/librssguard/gui/settings/settingslocalization.ui
index f320e9210..831ae7df8 100644
--- a/src/librssguard/gui/settings/settingslocalization.ui
+++ b/src/librssguard/gui/settings/settingslocalization.ui
@@ -6,8 +6,8 @@
0
0
- 400
- 300
+ 435
+ 263
diff --git a/src/librssguard/gui/settings/settingsnotifications.ui b/src/librssguard/gui/settings/settingsnotifications.ui
index ff4386e12..d5bbdd8f4 100644
--- a/src/librssguard/gui/settings/settingsnotifications.ui
+++ b/src/librssguard/gui/settings/settingsnotifications.ui
@@ -6,13 +6,10 @@
0
0
- 400
+ 367
300
-
- Form
-
0
diff --git a/src/librssguard/librssguard.pro b/src/librssguard/librssguard.pro
index 6bebf9faa..c7be264fb 100644
--- a/src/librssguard/librssguard.pro
+++ b/src/librssguard/librssguard.pro
@@ -64,6 +64,7 @@ HEADERS += core/feeddownloader.h \
gui/notifications/notificationseditor.h \
gui/notifications/singlenotificationeditor.h \
gui/reusable/baselineedit.h \
+ gui/reusable/basetreeview.h \
gui/reusable/helpspoiler.h \
gui/reusable/progressbarwithtext.h \
gui/reusable/resizablestackedwidget.h \
@@ -246,6 +247,7 @@ SOURCES += core/feeddownloader.cpp \
gui/notifications/notificationseditor.cpp \
gui/notifications/singlenotificationeditor.cpp \
gui/reusable/baselineedit.cpp \
+ gui/reusable/basetreeview.cpp \
gui/reusable/helpspoiler.cpp \
gui/reusable/progressbarwithtext.cpp \
gui/reusable/resizablestackedwidget.cpp \