Initial version of filtering button.

This commit is contained in:
Martin Rotter 2014-04-08 09:12:46 +02:00
parent 746962c557
commit 11ce7f5389
4 changed files with 61 additions and 3 deletions

View File

@ -48,6 +48,14 @@ class MessagesModel : public QSqlTableModel {
Q_OBJECT Q_OBJECT
public: public:
// Enum which describes basic filtering schemes
// for messages.
enum DisplayFilter {
DisplayAll = 100,
DisplayUnread = 101,
DisplayImportant = 102
};
// Constructors and destructors. // Constructors and destructors.
explicit MessagesModel(QObject *parent = 0); explicit MessagesModel(QObject *parent = 0);
virtual ~MessagesModel(); virtual ~MessagesModel();
@ -128,4 +136,6 @@ class MessagesModel : public QSqlTableModel {
QIcon m_unreadIcon; QIcon m_unreadIcon;
}; };
Q_DECLARE_METATYPE(MessagesModel::DisplayFilter)
#endif // MESSAGESMODEL_H #endif // MESSAGESMODEL_H

View File

@ -64,7 +64,8 @@
#define STARTUP_UPDATE_DELAY 1500 #define STARTUP_UPDATE_DELAY 1500
#define TIMEZONE_OFFSET_LIMIT 6 #define TIMEZONE_OFFSET_LIMIT 6
#define CHANGE_EVENT_DELAY 250 #define CHANGE_EVENT_DELAY 250
#define SEACRH_MESSAGES_ACTION_NAME "filter" #define SEACRH_MESSAGES_ACTION_NAME "search"
#define FILTER_ACTION_NAME "filter"
#define SPACER_ACTION_NAME "spacer" #define SPACER_ACTION_NAME "spacer"
#define SEPARATOR_ACTION_NAME "separator" #define SEPARATOR_ACTION_NAME "separator"
#define FILTER_WIDTH 150 #define FILTER_WIDTH 150

View File

@ -7,6 +7,8 @@
#include "miscellaneous/settings.h" #include "miscellaneous/settings.h"
#include <QWidgetAction> #include <QWidgetAction>
#include <QToolButton>
#include <QMenu>
MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent) MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
@ -23,6 +25,25 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
m_actionSearchMessages->setProperty("type", SEACRH_MESSAGES_ACTION_NAME); m_actionSearchMessages->setProperty("type", SEACRH_MESSAGES_ACTION_NAME);
m_actionSearchMessages->setProperty("name", tr("Message search box")); m_actionSearchMessages->setProperty("name", tr("Message search box"));
m_menuFilterMessages = new QMenu(tr("Menu for filtering messages"), this);
m_menuFilterMessages->addAction(IconFactory::instance()->fromTheme("mail-mark-read"),
tr("Display all messages"))->setData(QVariant::fromValue(MessagesModel::DisplayAll));
m_menuFilterMessages->addAction(IconFactory::instance()->fromTheme("mail-mark-unread"),
tr("Display unread messages"))->setData(QVariant::fromValue(MessagesModel::DisplayUnread));
m_menuFilterMessages->addAction(IconFactory::instance()->fromTheme("mail-mark-favorite"),
tr("Display important messages"))->setData(QVariant::fromValue(MessagesModel::DisplayImportant));
m_btnFilterMessages = new QToolButton(this);
m_btnFilterMessages->setToolTip(tr("Display all messages"));
m_btnFilterMessages->setMenu(m_menuFilterMessages);
m_btnFilterMessages->setPopupMode(QToolButton::MenuButtonPopup);
m_btnFilterMessages->setIcon(IconFactory::instance()->fromTheme("mail-mark-read"));
m_actionFilterMessages = new QWidgetAction(this);
m_actionFilterMessages->setDefaultWidget(m_btnFilterMessages);
m_actionFilterMessages->setProperty("type", FILTER_ACTION_NAME);
m_actionFilterMessages->setProperty("name", tr("Message filter"));
// Update right margin of filter textbox. // Update right margin of filter textbox.
QMargins margins = contentsMargins(); QMargins margins = contentsMargins();
margins.setRight(margins.right() + FILTER_RIGHT_MARGIN); margins.setRight(margins.right() + FILTER_RIGHT_MARGIN);
@ -30,6 +51,8 @@ MessagesToolBar::MessagesToolBar(const QString &title, QWidget *parent)
connect(m_txtSearchMessages, SIGNAL(textChanged(QString)), connect(m_txtSearchMessages, SIGNAL(textChanged(QString)),
this, SIGNAL(messageSearchPatternChanged(QString))); this, SIGNAL(messageSearchPatternChanged(QString)));
connect(m_menuFilterMessages, SIGNAL(triggered(QAction*)),
this, SLOT(handleMessageFilterChange(QAction*)));
} }
MessagesToolBar::~MessagesToolBar() { MessagesToolBar::~MessagesToolBar() {
@ -38,6 +61,7 @@ MessagesToolBar::~MessagesToolBar() {
QHash<QString, QAction*> MessagesToolBar::availableActions() const { QHash<QString, QAction*> MessagesToolBar::availableActions() const {
QHash<QString, QAction*> available_actions = FormMain::instance()->allActions(); QHash<QString, QAction*> available_actions = FormMain::instance()->allActions();
available_actions.insert(SEACRH_MESSAGES_ACTION_NAME, m_actionSearchMessages); available_actions.insert(SEACRH_MESSAGES_ACTION_NAME, m_actionSearchMessages);
available_actions.insert(FILTER_ACTION_NAME, m_actionFilterMessages);
return available_actions; return available_actions;
} }
@ -74,6 +98,10 @@ void MessagesToolBar::loadChangeableActions(const QStringList& actions) {
// Add search box. // Add search box.
addAction(m_actionSearchMessages); addAction(m_actionSearchMessages);
} }
else if (action_name == FILTER_ACTION_NAME) {
// Add filter button.
addAction(m_actionFilterMessages);
}
else if (action_name == SPACER_ACTION_NAME) { else if (action_name == SPACER_ACTION_NAME) {
// Add new spacer. // Add new spacer.
QWidget *spacer = new QWidget(this); QWidget *spacer = new QWidget(this);
@ -87,10 +115,17 @@ void MessagesToolBar::loadChangeableActions(const QStringList& actions) {
} }
} }
void MessagesToolBar::handleMessageFilterChange(QAction *action) {
m_btnFilterMessages->setIcon(action->icon());
m_btnFilterMessages->setToolTip(action->text());
emit messageFilterChanged(action->data().value<MessagesModel::DisplayFilter>());
}
void MessagesToolBar::loadChangeableActions() { void MessagesToolBar::loadChangeableActions() {
QStringList action_names = Settings::instance()->value(APP_CFG_GUI, QStringList action_names = Settings::instance()->value(APP_CFG_GUI,
"messages_toolbar", "messages_toolbar",
"m_actionMarkSelectedMessagesAsRead,m_actionMarkSelectedMessagesAsUnread,m_actionSwitchImportanceOfSelectedMessages,spacer,filter").toString().split(',', "m_actionMarkSelectedMessagesAsRead,m_actionMarkSelectedMessagesAsUnread,m_actionSwitchImportanceOfSelectedMessages,spacer,search").toString().split(',',
QString::SkipEmptyParts); QString::SkipEmptyParts);
loadChangeableActions(action_names); loadChangeableActions(action_names);

View File

@ -3,9 +3,13 @@
#include "gui/basetoolbar.h" #include "gui/basetoolbar.h"
#include "core/messagesmodel.h"
class BaseLineEdit; class BaseLineEdit;
class QWidgetAction; class QWidgetAction;
class QToolButton;
class QMenu;
class MessagesToolBar : public BaseToolBar { class MessagesToolBar : public BaseToolBar {
Q_OBJECT Q_OBJECT
@ -35,9 +39,17 @@ class MessagesToolBar : public BaseToolBar {
// na tuto udalost se navaze filtrovani // na tuto udalost se navaze filtrovani
void messageSearchPatternChanged(const QString &pattern); void messageSearchPatternChanged(const QString &pattern);
public slots: // Emitted if message filter is changed.
void messageFilterChanged(MessagesModel::DisplayFilter filter);
private slots:
void handleMessageFilterChange(QAction *action);
private: private:
QWidgetAction *m_actionFilterMessages;
QToolButton *m_btnFilterMessages;
QMenu *m_menuFilterMessages;
QWidgetAction *m_actionSearchMessages; QWidgetAction *m_actionSearchMessages;
BaseLineEdit *m_txtSearchMessages; BaseLineEdit *m_txtSearchMessages;
}; };