Switchable feed tree branches/arrows.
This commit is contained in:
parent
01618be534
commit
fe286a707f
@ -15,63 +15,6 @@ QMenu {
|
|||||||
border: 1px solid #3a4047;
|
border: 1px solid #3a4047;
|
||||||
}
|
}
|
||||||
|
|
||||||
QTreeView::branch:has-siblings:!adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:has-siblings:adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:has-children:!has-siblings:closed,
|
|
||||||
QTreeView::branch:closed:has-children:has-siblings {
|
|
||||||
border-image: none;
|
|
||||||
image: url(qss/branch-closed.png);
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:open:has-children:!has-siblings,
|
|
||||||
QTreeView::branch:open:has-children:has-siblings {
|
|
||||||
border-image: none;
|
|
||||||
image: url(qss/branch-open.png);
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView[hideTree="true"]::branch:!has-chlidren:hasSiblings {
|
|
||||||
border-image: none;
|
|
||||||
image: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch {
|
|
||||||
background-color: rgb(39, 43, 48);
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item {
|
|
||||||
padding: 1px 1px 1px 1px;
|
|
||||||
border: 1px transparent;
|
|
||||||
border-top-color: transparent;
|
|
||||||
border-bottom-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item:hover {
|
|
||||||
background-color: #1b8cbc;
|
|
||||||
border: 1px transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item:selected {
|
|
||||||
border: 1px transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item:selected:active{
|
|
||||||
background-color: #3e444c;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item:selected:!active {
|
|
||||||
background-color: #3e444c;
|
|
||||||
}
|
|
||||||
|
|
||||||
QStatusBar::item {
|
QStatusBar::item {
|
||||||
border: none;
|
border: none;
|
||||||
}
|
}
|
||||||
|
@ -1,38 +1,5 @@
|
|||||||
/* This is Qt CSS theme file for the overall GUI of the application. */
|
/* This is Qt CSS theme file for the overall GUI of the application. */
|
||||||
|
|
||||||
QTreeView::branch:has-siblings:!adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:has-siblings:adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:!has-children:!has-siblings:adjoins-item {
|
|
||||||
border-image: url(qss/dummy.png) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:has-children:!has-siblings:closed,
|
|
||||||
QTreeView::branch:closed:has-children:has-siblings {
|
|
||||||
border-image: none;
|
|
||||||
image: url(qss/branch-closed.png);
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::branch:open:has-children:!has-siblings,
|
|
||||||
QTreeView::branch:open:has-children:has-siblings {
|
|
||||||
border-image: none;
|
|
||||||
image: url(qss/branch-open.png);
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView::item {
|
|
||||||
padding: 1px 1px 1px 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTreeView[hideTree="true"]::branch:!has-chlidren:hasSiblings {
|
|
||||||
border-image: none;
|
|
||||||
image: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTextEdit {
|
QTextEdit {
|
||||||
selection-background-color: #3297FD;
|
selection-background-color: #3297FD;
|
||||||
}
|
}
|
||||||
|
@ -160,6 +160,7 @@ QList<QAction*> FormMain::allActions() const {
|
|||||||
actions << m_ui->m_actionClearSelectedItems;
|
actions << m_ui->m_actionClearSelectedItems;
|
||||||
actions << m_ui->m_actionClearAllItems;
|
actions << m_ui->m_actionClearAllItems;
|
||||||
actions << m_ui->m_actionShowOnlyUnreadItems;
|
actions << m_ui->m_actionShowOnlyUnreadItems;
|
||||||
|
actions << m_ui->m_actionShowTreeBranches;
|
||||||
actions << m_ui->m_actionShowOnlyUnreadMessages;
|
actions << m_ui->m_actionShowOnlyUnreadMessages;
|
||||||
actions << m_ui->m_actionMarkSelectedMessagesAsRead;
|
actions << m_ui->m_actionMarkSelectedMessagesAsRead;
|
||||||
actions << m_ui->m_actionMarkSelectedMessagesAsUnread;
|
actions << m_ui->m_actionMarkSelectedMessagesAsUnread;
|
||||||
@ -586,6 +587,8 @@ void FormMain::loadSize() {
|
|||||||
// Make sure that only unread feeds/messages are shown if user has that feature set on.
|
// Make sure that only unread feeds/messages are shown if user has that feature set on.
|
||||||
m_ui->m_actionShowOnlyUnreadItems->setChecked(settings->value(GROUP(Feeds),
|
m_ui->m_actionShowOnlyUnreadItems->setChecked(settings->value(GROUP(Feeds),
|
||||||
SETTING(Feeds::ShowOnlyUnreadFeeds)).toBool());
|
SETTING(Feeds::ShowOnlyUnreadFeeds)).toBool());
|
||||||
|
m_ui->m_actionShowTreeBranches->setChecked(settings->value(GROUP(Feeds),
|
||||||
|
SETTING(Feeds::ShowTreeBranches)).toBool());
|
||||||
m_ui->m_actionShowOnlyUnreadMessages->setChecked(settings->value(GROUP(Messages),
|
m_ui->m_actionShowOnlyUnreadMessages->setChecked(settings->value(GROUP(Messages),
|
||||||
SETTING(Messages::ShowOnlyUnreadMessages)).toBool());
|
SETTING(Messages::ShowOnlyUnreadMessages)).toBool());
|
||||||
}
|
}
|
||||||
@ -747,6 +750,8 @@ void FormMain::createConnections() {
|
|||||||
tabWidget()->feedMessageViewer(), &FeedMessageViewer::switchMessageSplitterOrientation);
|
tabWidget()->feedMessageViewer(), &FeedMessageViewer::switchMessageSplitterOrientation);
|
||||||
connect(m_ui->m_actionShowOnlyUnreadItems, &QAction::toggled,
|
connect(m_ui->m_actionShowOnlyUnreadItems, &QAction::toggled,
|
||||||
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowOnlyUnreadFeeds);
|
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowOnlyUnreadFeeds);
|
||||||
|
connect(m_ui->m_actionShowTreeBranches, &QAction::toggled,
|
||||||
|
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowFeedTreeBranches);
|
||||||
connect(m_ui->m_actionShowOnlyUnreadMessages, &QAction::toggled,
|
connect(m_ui->m_actionShowOnlyUnreadMessages, &QAction::toggled,
|
||||||
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowOnlyUnreadMessages);
|
tabWidget()->feedMessageViewer(), &FeedMessageViewer::toggleShowOnlyUnreadMessages);
|
||||||
connect(m_ui->m_actionRestoreSelectedMessages, &QAction::triggered,
|
connect(m_ui->m_actionRestoreSelectedMessages, &QAction::triggered,
|
||||||
|
@ -114,6 +114,7 @@
|
|||||||
<addaction name="m_actionDeleteSelectedItem"/>
|
<addaction name="m_actionDeleteSelectedItem"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="m_actionShowOnlyUnreadItems"/>
|
<addaction name="m_actionShowOnlyUnreadItems"/>
|
||||||
|
<addaction name="m_actionShowTreeBranches"/>
|
||||||
<addaction name="m_actionExpandCollapseItem"/>
|
<addaction name="m_actionExpandCollapseItem"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="m_actionSelectNextItem"/>
|
<addaction name="m_actionSelectNextItem"/>
|
||||||
@ -766,6 +767,14 @@
|
|||||||
<string>Message &filters</string>
|
<string>Message &filters</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="m_actionShowTreeBranches">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Show tree branches</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
|
@ -189,6 +189,13 @@ void FeedMessageViewer::toggleShowOnlyUnreadFeeds() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FeedMessageViewer::toggleShowFeedTreeBranches() {
|
||||||
|
const QAction* origin = qobject_cast<QAction*>(sender());
|
||||||
|
|
||||||
|
m_feedsView->setRootIsDecorated(origin->isChecked());
|
||||||
|
qApp->settings()->setValue(GROUP(Feeds), Feeds::ShowTreeBranches, origin->isChecked());
|
||||||
|
}
|
||||||
|
|
||||||
void FeedMessageViewer::displayMessage(const Message& message, RootItem* root) {
|
void FeedMessageViewer::displayMessage(const Message& message, RootItem* root) {
|
||||||
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::EnableMessagePreview)).toBool()) {
|
if (qApp->settings()->value(GROUP(Messages), SETTING(Messages::EnableMessagePreview)).toBool()) {
|
||||||
m_messagesBrowser->loadMessage(message, root);
|
m_messagesBrowser->loadMessage(message, root);
|
||||||
|
@ -66,6 +66,7 @@ class RSSGUARD_DLLSPEC FeedMessageViewer : public TabContent {
|
|||||||
|
|
||||||
void toggleShowOnlyUnreadMessages();
|
void toggleShowOnlyUnreadMessages();
|
||||||
void toggleShowOnlyUnreadFeeds();
|
void toggleShowOnlyUnreadFeeds();
|
||||||
|
void toggleShowFeedTreeBranches();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void displayMessage(const Message& message, RootItem* root);
|
void displayMessage(const Message& message, RootItem* root);
|
||||||
|
@ -476,6 +476,19 @@ void FeedsView::switchVisibility() {
|
|||||||
setVisible(!isVisible());
|
setVisible(!isVisible());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FeedsView::drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const {
|
||||||
|
if (!rootIsDecorated()) {
|
||||||
|
painter->save();
|
||||||
|
painter->setOpacity(0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
QTreeView::drawBranches(painter, rect, index);
|
||||||
|
|
||||||
|
if (!rootIsDecorated()) {
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void FeedsView::focusInEvent(QFocusEvent* event) {
|
void FeedsView::focusInEvent(QFocusEvent* event) {
|
||||||
QTreeView::focusInEvent(event);
|
QTreeView::focusInEvent(event);
|
||||||
|
|
||||||
@ -608,6 +621,7 @@ void FeedsView::setupAppearance() {
|
|||||||
setAnimated(true);
|
setAnimated(true);
|
||||||
setSortingEnabled(true);
|
setSortingEnabled(true);
|
||||||
setItemsExpandable(true);
|
setItemsExpandable(true);
|
||||||
|
setAutoExpandDelay(0);
|
||||||
setExpandsOnDoubleClick(true);
|
setExpandsOnDoubleClick(true);
|
||||||
setEditTriggers(QAbstractItemView::NoEditTriggers);
|
setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||||||
setIndentation(FEEDS_VIEW_INDENTATION);
|
setIndentation(FEEDS_VIEW_INDENTATION);
|
||||||
|
@ -17,19 +17,11 @@ class RSSGUARD_DLLSPEC FeedsView : public QTreeView {
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
// Constructors and destructors.
|
|
||||||
explicit FeedsView(QWidget* parent = nullptr);
|
explicit FeedsView(QWidget* parent = nullptr);
|
||||||
virtual ~FeedsView();
|
virtual ~FeedsView();
|
||||||
|
|
||||||
// Fundamental accessors.
|
FeedsProxyModel* model() const;
|
||||||
inline FeedsProxyModel* model() const {
|
FeedsModel* sourceModel() const;
|
||||||
return m_proxyModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline FeedsModel* sourceModel() const {
|
|
||||||
return m_sourceModel;
|
|
||||||
}
|
|
||||||
|
|
||||||
void reloadFontSettings();
|
void reloadFontSettings();
|
||||||
|
|
||||||
@ -89,6 +81,7 @@ class RSSGUARD_DLLSPEC FeedsView : public QTreeView {
|
|||||||
void openMessagesInNewspaperView(RootItem* root, const QList<Message>& messages);
|
void openMessagesInNewspaperView(RootItem* root, const QList<Message>& messages);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const;
|
||||||
void focusInEvent(QFocusEvent* event);
|
void focusInEvent(QFocusEvent* event);
|
||||||
void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
|
void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
|
||||||
void keyPressEvent(QKeyEvent* event);
|
void keyPressEvent(QKeyEvent* event);
|
||||||
@ -132,4 +125,12 @@ class RSSGUARD_DLLSPEC FeedsView : public QTreeView {
|
|||||||
FeedsProxyModel* m_proxyModel;
|
FeedsProxyModel* m_proxyModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline FeedsProxyModel* FeedsView::model() const {
|
||||||
|
return m_proxyModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline FeedsModel* FeedsView::sourceModel() const {
|
||||||
|
return m_sourceModel;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // FEEDSVIEW_H
|
#endif // FEEDSVIEW_H
|
||||||
|
@ -63,6 +63,10 @@ DKEY Feeds::ShowOnlyUnreadFeeds = "show_only_unread_feeds";
|
|||||||
|
|
||||||
DVALUE(bool) Feeds::ShowOnlyUnreadFeedsDef = false;
|
DVALUE(bool) Feeds::ShowOnlyUnreadFeedsDef = false;
|
||||||
|
|
||||||
|
DKEY Feeds::ShowTreeBranches = "show_tree_branches";
|
||||||
|
|
||||||
|
DVALUE(bool) Feeds::ShowTreeBranchesDef = true;
|
||||||
|
|
||||||
DKEY Feeds::ListFont = "list_font";
|
DKEY Feeds::ListFont = "list_font";
|
||||||
|
|
||||||
// Messages.
|
// Messages.
|
||||||
|
@ -84,6 +84,10 @@ namespace Feeds {
|
|||||||
|
|
||||||
VALUE(bool) ShowOnlyUnreadFeedsDef;
|
VALUE(bool) ShowOnlyUnreadFeedsDef;
|
||||||
|
|
||||||
|
KEY ShowTreeBranches;
|
||||||
|
|
||||||
|
VALUE(bool) ShowTreeBranchesDef;
|
||||||
|
|
||||||
KEY ListFont;
|
KEY ListFont;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user