Initial version of filtering button.
This commit is contained in:
parent
746962c557
commit
11ce7f5389
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user