mirror of
https://github.com/martinrotter/rssguard.git
synced 2025-02-02 18:36:49 +01:00
Work on changeable toolbars.
This commit is contained in:
parent
4daf095371
commit
b1b9471200
@ -1,9 +1,31 @@
|
||||
#include "gui/basetoolbar.h"
|
||||
|
||||
#include "definitions/definitions.h"
|
||||
#include "gui/formmain.h"
|
||||
#include "miscellaneous/settings.h"
|
||||
|
||||
|
||||
BaseToolBar::BaseToolBar(const QString &title, QWidget *parent)
|
||||
: QToolBar(title, parent) {
|
||||
}
|
||||
|
||||
BaseToolBar::~BaseToolBar() {
|
||||
qDebug("Destroying BaseToolBar instance.");
|
||||
}
|
||||
|
||||
void BaseToolBar::loadChangeableActions() {
|
||||
QHash<QString, QAction*> available_actions = FormMain::instance()->allActions();
|
||||
QStringList action_names = Settings::instance()->value(APP_CFG_GUI,
|
||||
"messages_toolbar",
|
||||
"m_actionMarkSelectedMessagesAsRead,m_actionMarkSelectedMessagesAsUnread,m_actionSwitchImportanceOfSelectedMessages").toString().split(',',
|
||||
QString::SkipEmptyParts);
|
||||
|
||||
actions().clear();
|
||||
|
||||
// Iterate action names and add respectable actions into the toolbar.
|
||||
foreach (const QString &action_name, action_names) {
|
||||
if (available_actions.contains(action_name)) {
|
||||
addAction(available_actions.value(action_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -13,9 +13,8 @@ class BaseToolBar : public QToolBar {
|
||||
virtual ~BaseToolBar();
|
||||
|
||||
virtual QList<QAction*> changeableActions() const = 0;
|
||||
virtual void setChangeableActions(const QList<QAction*> actions) = 0;
|
||||
virtual void saveChangeableActions() const = 0;
|
||||
virtual void loadChangeableActions() = 0;
|
||||
virtual void loadChangeableActions();
|
||||
|
||||
signals:
|
||||
|
||||
|
@ -64,7 +64,7 @@ FormMain::FormMain(QWidget *parent, Qt::WindowFlags f)
|
||||
// Add these actions to the list of actions of the main window.
|
||||
// This allows to use actions via shortcuts
|
||||
// even if main menu is not visible.
|
||||
addActions(allActions());
|
||||
addActions(allActions().values());
|
||||
|
||||
// Prepare tabs.
|
||||
m_ui->m_tabWidget->initializeTabs();
|
||||
@ -85,44 +85,50 @@ FormMain *FormMain::instance() {
|
||||
return s_instance;
|
||||
}
|
||||
|
||||
QList<QAction*> FormMain::allActions() {
|
||||
QList<QAction*> actions;
|
||||
QHash<QString, QAction*> FormMain::allActions() {
|
||||
QHash<QString, QAction*> actions;
|
||||
|
||||
// Add basic actions.
|
||||
actions << m_ui->m_actionSettings << m_ui->m_actionQuit <<
|
||||
m_ui->m_actionFullscreen << m_ui->m_actionAboutGuard <<
|
||||
m_ui->m_actionSwitchFeedsList << m_ui->m_actionSwitchMainWindow <<
|
||||
m_ui->m_actionSwitchMainMenu << m_ui->m_actionSwitchToolBars <<
|
||||
m_ui->m_actionSwitchListHeaders;
|
||||
actions.insert(m_ui->m_actionSettings->objectName(), m_ui->m_actionSettings);
|
||||
actions.insert(m_ui->m_actionSettings->objectName(), m_ui->m_actionSettings);
|
||||
actions.insert(m_ui->m_actionQuit->objectName(), m_ui->m_actionQuit);
|
||||
actions.insert(m_ui->m_actionFullscreen->objectName(), m_ui->m_actionFullscreen);
|
||||
actions.insert(m_ui->m_actionAboutGuard->objectName(), m_ui->m_actionAboutGuard);
|
||||
actions.insert(m_ui->m_actionSwitchFeedsList->objectName(), m_ui->m_actionSwitchFeedsList);
|
||||
actions.insert(m_ui->m_actionSwitchMainWindow->objectName(), m_ui->m_actionSwitchMainWindow);
|
||||
actions.insert(m_ui->m_actionSwitchMainMenu->objectName(), m_ui->m_actionSwitchMainMenu);
|
||||
actions.insert(m_ui->m_actionSwitchToolBars->objectName(), m_ui->m_actionSwitchToolBars);
|
||||
actions.insert(m_ui->m_actionSwitchListHeaders->objectName(), m_ui->m_actionSwitchListHeaders);
|
||||
|
||||
// Add web browser actions
|
||||
actions << m_ui->m_actionAddBrowser << m_ui->m_actionCloseCurrentTab <<
|
||||
m_ui->m_actionCloseAllTabs;
|
||||
actions.insert(m_ui->m_actionAddBrowser->objectName(), m_ui->m_actionAddBrowser);
|
||||
actions.insert(m_ui->m_actionCloseCurrentTab->objectName(), m_ui->m_actionCloseCurrentTab);
|
||||
actions.insert(m_ui->m_actionCloseAllTabs->objectName(), m_ui->m_actionCloseAllTabs);
|
||||
|
||||
// Add feeds/messages actions.
|
||||
actions << m_ui->m_actionOpenSelectedSourceArticlesExternally <<
|
||||
m_ui->m_actionOpenSelectedSourceArticlesInternally <<
|
||||
m_ui->m_actionOpenSelectedMessagesInternally <<
|
||||
m_ui->m_actionMarkAllFeedsRead <<
|
||||
m_ui->m_actionMarkSelectedFeedsAsRead <<
|
||||
m_ui->m_actionMarkSelectedFeedsAsUnread <<
|
||||
m_ui->m_actionClearSelectedFeeds <<
|
||||
m_ui->m_actionMarkSelectedMessagesAsRead <<
|
||||
m_ui->m_actionMarkSelectedMessagesAsUnread <<
|
||||
m_ui->m_actionSwitchImportanceOfSelectedMessages <<
|
||||
m_ui->m_actionDeleteSelectedMessages <<
|
||||
m_ui->m_actionUpdateAllFeeds <<
|
||||
m_ui->m_actionUpdateSelectedFeedsCategories <<
|
||||
m_ui->m_actionEditSelectedFeedCategory <<
|
||||
m_ui->m_actionDeleteSelectedFeedCategory <<
|
||||
m_ui->m_actionViewSelectedItemsNewspaperMode <<
|
||||
m_ui->m_actionAddCategory <<
|
||||
m_ui->m_actionAddFeed <<
|
||||
m_ui->m_actionSelectNextFeedCategory <<
|
||||
m_ui->m_actionSelectPreviousFeedCategory <<
|
||||
m_ui->m_actionSelectNextMessage <<
|
||||
m_ui->m_actionSelectPreviousMessage <<
|
||||
m_ui->m_actionDefragmentDatabase;
|
||||
actions.insert(m_ui->m_actionOpenSelectedSourceArticlesExternally->objectName(), m_ui->m_actionOpenSelectedSourceArticlesExternally);
|
||||
actions.insert(m_ui->m_actionOpenSelectedSourceArticlesInternally->objectName(), m_ui->m_actionOpenSelectedSourceArticlesInternally);
|
||||
actions.insert(m_ui->m_actionOpenSelectedMessagesInternally->objectName(), m_ui->m_actionOpenSelectedMessagesInternally);
|
||||
actions.insert(m_ui->m_actionMarkAllFeedsRead->objectName(), m_ui->m_actionMarkAllFeedsRead);
|
||||
actions.insert(m_ui->m_actionMarkSelectedFeedsAsRead->objectName(), m_ui->m_actionMarkSelectedFeedsAsRead);
|
||||
actions.insert(m_ui->m_actionMarkSelectedFeedsAsUnread->objectName(), m_ui->m_actionMarkSelectedFeedsAsUnread);
|
||||
actions.insert(m_ui->m_actionClearSelectedFeeds->objectName(), m_ui->m_actionClearSelectedFeeds);
|
||||
actions.insert(m_ui->m_actionMarkSelectedMessagesAsRead->objectName(), m_ui->m_actionMarkSelectedMessagesAsRead);
|
||||
actions.insert(m_ui->m_actionMarkSelectedMessagesAsUnread->objectName(), m_ui->m_actionMarkSelectedMessagesAsUnread);
|
||||
actions.insert(m_ui->m_actionSwitchImportanceOfSelectedMessages->objectName(), m_ui->m_actionSwitchImportanceOfSelectedMessages);
|
||||
actions.insert(m_ui->m_actionDeleteSelectedMessages->objectName(), m_ui->m_actionDeleteSelectedMessages);
|
||||
actions.insert(m_ui->m_actionUpdateAllFeeds->objectName(), m_ui->m_actionUpdateAllFeeds);
|
||||
actions.insert(m_ui->m_actionUpdateSelectedFeedsCategories->objectName(), m_ui->m_actionUpdateSelectedFeedsCategories);
|
||||
actions.insert(m_ui->m_actionEditSelectedFeedCategory->objectName(), m_ui->m_actionEditSelectedFeedCategory);
|
||||
actions.insert(m_ui->m_actionDeleteSelectedFeedCategory->objectName(), m_ui->m_actionDeleteSelectedFeedCategory);
|
||||
actions.insert(m_ui->m_actionViewSelectedItemsNewspaperMode->objectName(), m_ui->m_actionViewSelectedItemsNewspaperMode);
|
||||
actions.insert(m_ui->m_actionAddCategory->objectName(), m_ui->m_actionAddCategory);
|
||||
actions.insert(m_ui->m_actionAddFeed->objectName(), m_ui->m_actionAddFeed);
|
||||
actions.insert(m_ui->m_actionSelectNextFeedCategory->objectName(), m_ui->m_actionSelectNextFeedCategory);
|
||||
actions.insert(m_ui->m_actionSelectPreviousFeedCategory->objectName(), m_ui->m_actionSelectPreviousFeedCategory);
|
||||
actions.insert(m_ui->m_actionSelectNextMessage->objectName(), m_ui->m_actionSelectNextMessage);
|
||||
actions.insert(m_ui->m_actionSelectPreviousMessage->objectName(), m_ui->m_actionSelectPreviousMessage);
|
||||
actions.insert(m_ui->m_actionDefragmentDatabase->objectName(), m_ui->m_actionDefragmentDatabase);
|
||||
|
||||
return actions;
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ class FormMain : public QMainWindow {
|
||||
// Returns list of all globally available actions.
|
||||
// NOTE: This is used for setting dynamic shortcuts
|
||||
// for given actions.
|
||||
QList<QAction*> allActions();
|
||||
QHash<QString, QAction *> allActions();
|
||||
|
||||
// Singleton accessor.
|
||||
static FormMain *instance();
|
||||
|
@ -486,7 +486,7 @@ void FormSettings::saveLanguage() {
|
||||
}
|
||||
|
||||
void FormSettings::loadShortcuts() {
|
||||
m_ui->m_shortcuts->populate(FormMain::instance()->allActions());
|
||||
m_ui->m_shortcuts->populate(FormMain::instance()->allActions().values());
|
||||
}
|
||||
|
||||
void FormSettings::saveShortcuts() {
|
||||
@ -494,7 +494,7 @@ void FormSettings::saveShortcuts() {
|
||||
m_ui->m_shortcuts->updateShortcuts();
|
||||
|
||||
// Save new shortcuts to the settings.
|
||||
DynamicShortcuts::save(FormMain::instance()->allActions());
|
||||
DynamicShortcuts::save(FormMain::instance()->allActions().values());
|
||||
}
|
||||
|
||||
void FormSettings::loadDataStorage() {
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "definitions/definitions.h"
|
||||
#include "gui/baselineedit.h"
|
||||
#include "gui/formmain.h"
|
||||
#include "miscellaneous/settings.h"
|
||||
|
||||
|
||||
MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
|
||||
@ -15,6 +16,7 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
|
||||
m_txtFilter->setFixedWidth(FILTER_WIDTH);
|
||||
m_txtFilter->setPlaceholderText(tr("Filter messages"));
|
||||
|
||||
// Update right margin of filter textbox.
|
||||
QMargins margins = contentsMargins();
|
||||
margins.setRight(margins.right() + FILTER_RIGHT_MARGIN);
|
||||
setContentsMargins(margins);
|
||||
@ -23,16 +25,44 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
|
||||
MessagesToolBar::~MessagesToolBar() {
|
||||
}
|
||||
|
||||
QList<QAction*> MessagesToolBar::changeableActions() const {
|
||||
// TODO: Vracet akce, ktere muze uzivatel upravovat v tomto toolbaru.
|
||||
// nebudou se tedy vracet spacer widgety nebo lineedity a tak podobně,
|
||||
// proste jen akce ktere sou uzivatelsky upravitelne
|
||||
// http://stackoverflow.com/questions/5364957/in-qt-4-7-how-can-a-pop-up-menu-be-added-to-a-qtoolbar-button
|
||||
QList<QAction*> changeable_actions;
|
||||
|
||||
// Iterates all actions present in the toolbar and
|
||||
// returns actions which can be replaced by user.
|
||||
foreach (QAction *action, actions()) {
|
||||
QString action_name = action->objectName();
|
||||
|
||||
if (action_name != FILTER_OBJECT_NAME && action_name != SPACER_OBJECT_NAME) {
|
||||
changeable_actions.append(action);
|
||||
}
|
||||
}
|
||||
|
||||
return changeable_actions;
|
||||
}
|
||||
|
||||
void MessagesToolBar::saveChangeableActions() const {
|
||||
QStringList action_names;
|
||||
|
||||
// Iterates all actions present in the toolbar and
|
||||
// returns actions which can be replaced by user.
|
||||
foreach (QAction *action, actions()) {
|
||||
QString action_name = action->objectName();
|
||||
|
||||
if (action_name != FILTER_OBJECT_NAME && action_name != SPACER_OBJECT_NAME) {
|
||||
action_names.append(action->objectName());
|
||||
}
|
||||
}
|
||||
|
||||
Settings::instance()->setValue(APP_CFG_GUI, "messages_toolbar", action_names.join(','));
|
||||
}
|
||||
|
||||
void MessagesToolBar::loadChangeableActions() {
|
||||
|
||||
// TODO: udelat dynamicky, nacitat z nastaveni
|
||||
// pouzit formmain::allActions treba a ukladat podle "objectname"
|
||||
// allactions ale nani qhash, tak pouzit treba
|
||||
// http://qt-project.org/doc/qt-4.8/qobject.html#findChild na hledani podle jmena
|
||||
|
||||
addAction(FormMain::instance()->m_ui->m_actionMarkSelectedMessagesAsRead);
|
||||
addAction(FormMain::instance()->m_ui->m_actionMarkSelectedMessagesAsUnread);
|
||||
addAction(FormMain::instance()->m_ui->m_actionSwitchImportanceOfSelectedMessages);
|
||||
BaseToolBar::loadChangeableActions();
|
||||
|
||||
addWidget(m_spacer);
|
||||
addWidget(m_txtFilter);
|
||||
|
@ -14,24 +14,9 @@ class MessagesToolBar : public BaseToolBar {
|
||||
explicit MessagesToolBar(const QString &title, QWidget *parent = 0);
|
||||
virtual ~MessagesToolBar();
|
||||
|
||||
QList<QAction*> changeableActions() const {
|
||||
// TODO: Vracet akce, ktere muze uzivatel upravovat v tomto toolbaru.
|
||||
// nebudou se tedy vracet spacer widgety nebo lineedity a tak podobně,
|
||||
// proste jen akce ktere sou uzivatelsky upravitelne
|
||||
// http://stackoverflow.com/questions/5364957/in-qt-4-7-how-can-a-pop-up-menu-be-added-to-a-qtoolbar-button
|
||||
// http://www.qtcentre.org/threads/23840-how-align-some-buttons-in-QToolbar-from-right-to-left
|
||||
return QList<QAction*>();
|
||||
}
|
||||
|
||||
void setChangeableActions(const QList<QAction *> actions) {
|
||||
// TODO: ulozit akce, ktere muze uzivatel upravovat do tohoto toolbaru
|
||||
// todle musi zachovat vsechny widgety na konci - treba filtrovaci
|
||||
// lineedit zprav
|
||||
}
|
||||
|
||||
void saveChangeableActions() const {
|
||||
}
|
||||
|
||||
// Operations with changeable actions.
|
||||
QList<QAction*> changeableActions() const;
|
||||
void saveChangeableActions() const;
|
||||
void loadChangeableActions();
|
||||
|
||||
signals:
|
||||
|
@ -101,7 +101,7 @@ int main(int argc, char *argv[]) {
|
||||
main_window.setWindowTitle(APP_LONG_NAME);
|
||||
|
||||
// Now is a good time to initialize dynamic keyboard shortcuts.
|
||||
DynamicShortcuts::load(main_window.allActions());
|
||||
DynamicShortcuts::load(main_window.allActions().values());
|
||||
|
||||
// Display main window.
|
||||
if (Settings::instance()->value(APP_CFG_GUI, "start_hidden",
|
||||
|
Loading…
x
Reference in New Issue
Block a user