Changes...

This commit is contained in:
Martin Rotter 2013-12-08 14:02:28 +01:00
parent 832190edbd
commit 431b668f28
16 changed files with 524 additions and 116 deletions

View File

@ -43,7 +43,7 @@ set(MINIMUM_QT_VERSION 4.7.3)
set(SOURCE_PACKAGE_SUFFIX "Source")
set(EXE_NAME ${APP_LOW_NAME})
option(USE_QT_5 "Use Qt 5 for building" ON)
option(USE_QT_5 "Use Qt 5 for building" OFF)
message(STATUS "[${APP_LOW_NAME}] Welcome to ${APP_NAME} compilation process.")
message(STATUS "[${APP_LOW_NAME}] Compilation process begins right now.")

View File

@ -97,6 +97,18 @@
<source>Toolbar for messages</source>
<translation>Panel zpráv</translation>
</message>
<message>
<source>Update selected/all feeds</source>
<translation>Aktualizovat všechny/vybrané kanály</translation>
</message>
<message>
<source>Select which feeds you want to update.</source>
<translation>Zvolte, zda chcete aktualizovat vybrané nebo všechny kanály.</translation>
</message>
<message>
<source>Feed update menu</source>
<translation>Menu aktualizace kanálů</translation>
</message>
</context>
<context>
<name>FormAbout</name>
@ -415,6 +427,30 @@
<source>Add new feed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source articles in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormSettings</name>
@ -638,11 +674,6 @@
<source>no icon theme</source>
<translation>žádné téma ikon</translation>
</message>
<message>
<source>Some keyboard shortcuts are not unique.
</source>
<translation>Některé klávesové zkrátky jsou duplicitní.</translation>
</message>
<message>
<source>Cannot save settings</source>
<translation>Nastavení nelze uložit</translation>
@ -693,7 +724,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<source>Feeds &amp; messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> some keyboard shortcuts are not unique</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Some critical settings are not set. You must fix these settings in order confirm new settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>List of errors:
%1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> icon theme changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> skin changed</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -766,6 +822,13 @@
<translation>Obsah</translation>
</message>
</context>
<context>
<name>MessagesView</name>
<message>
<source>Context menu for messages</source>
<translation>Kontextové menu pro zprávy</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>

View File

@ -97,6 +97,18 @@
<source>Toolbar for messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Update selected/all feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select which feeds you want to update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Feed update menu</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormAbout</name>
@ -415,6 +427,30 @@
<source>Add new feed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source articles in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormSettings</name>
@ -632,11 +668,6 @@
<source>no icon theme</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Some keyboard shortcuts are not unique.
</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cannot save settings</source>
<translation type="unfinished"></translation>
@ -687,7 +718,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<source>Feeds &amp; messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> some keyboard shortcuts are not unique</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Some critical settings are not set. You must fix these settings in order confirm new settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>List of errors:
%1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> icon theme changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> skin changed</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -760,6 +816,13 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>MessagesView</name>
<message>
<source>Context menu for messages</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>

View File

@ -97,6 +97,18 @@
<source>Toolbar for messages</source>
<translation>Werkbalk voor berichten</translation>
</message>
<message>
<source>Update selected/all feeds</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select which feeds you want to update.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Feed update menu</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormAbout</name>
@ -415,6 +427,30 @@
<source>Add new feed.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected messages in internal browser.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source articles in external browser</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open selected source messages in external browser.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>FormSettings</name>
@ -638,12 +674,6 @@
<source>no icon theme</source>
<translation>Geen pictogram thema</translation>
</message>
<message>
<source>Some keyboard shortcuts are not unique.
</source>
<translation>Sommige sneltoetsen voor toetsenbord zijn niet uniek.
</translation>
</message>
<message>
<source>Cannot save settings</source>
<translation>Kan instellingen niet opslaan</translation>
@ -694,7 +724,32 @@
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<source>Feeds &amp; messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> some keyboard shortcuts are not unique</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Some critical settings are not set. You must fix these settings in order confirm new settings.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>List of errors:
%1.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> language changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> icon theme changed</source>
<translation type="unfinished"></translation>
</message>
<message>
<source> skin changed</source>
<translation type="unfinished"></translation>
</message>
</context>
@ -767,6 +822,13 @@
<translation>Inhoud</translation>
</message>
</context>
<context>
<name>MessagesView</name>
<message>
<source>Context menu for messages</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>QObject</name>
<message>

View File

@ -236,11 +236,77 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
}
bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int deleted) {
// Submit changes first.
submitAll();
if (!database().transaction()) {
qWarning("Starting transaction for batch message deletion.");
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET deleted = :deleted "
"WHERE id = :id")) {
qWarning("Query preparation failed for message deletion.");
return false;
}
foreach (const QModelIndex &message, messages) {
message_id = messageId(message.row());
query_delete_msg.bindValue(":id", message_id);
query_delete_msg.bindValue(":deleted", deleted);
query_delete_msg.exec();
}
// Commit changes.
if (db_handle.commit()) {
// FULLY reload the model if underlying data is changed.
select();
fetchAll();
return true;
}
else {
return db_handle.rollback();
}
}
bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int read) {
// Submit changes first.
submitAll();
if (!database().transaction()) {
qWarning("Starting transaction for batch message read change.");
return false;
}
QSqlDatabase db_handle = database();
int message_id;
QSqlQuery query_delete_msg(db_handle);
if (!query_delete_msg.prepare("UPDATE messages SET read = :read "
"WHERE id = :id")) {
qWarning("Query preparation failed for message read change.");
return false;
}
foreach (const QModelIndex &message, messages) {
message_id = messageId(message.row());
query_delete_msg.bindValue(":id", message_id);
query_delete_msg.bindValue(":read", read);
query_delete_msg.exec();
}
// Commit changes.
if (db_handle.commit()) {
// FULLY reload the model if underlying data is changed.
select();
fetchAll();
return true;
}
else {
return db_handle.rollback();
}
}
bool MessagesModel::switchAllMessageImportance() {

View File

@ -28,20 +28,25 @@ bool MessagesProxyModel::lessThan(const QModelIndex &left, const QModelIndex &ri
return QSortFilterProxyModel::lessThan(left, right);
}
QModelIndexList MessagesProxyModel::mapListFromSource(const QModelIndexList &idxs) {
QModelIndexList MessagesProxyModel::mapListFromSource(const QModelIndexList &indexes, bool deep) {
QModelIndexList mapped_idxs;
foreach (const QModelIndex &index, idxs) {
mapped_idxs << mapFromSource(index);
foreach (const QModelIndex &index, indexes) {
if (deep) {
mapped_idxs << mapFromSource(m_sourceModel->index(index.row(), index.column()));
}
else {
mapped_idxs << mapFromSource(index);
}
}
return mapped_idxs;
}
QModelIndexList MessagesProxyModel::mapListToSource(const QModelIndexList &idxs) {
QModelIndexList MessagesProxyModel::mapListToSource(const QModelIndexList &indexes) {
QModelIndexList source_idxs;
foreach (const QModelIndex &index, idxs) {
foreach (const QModelIndex &index, indexes) {
source_idxs << mapToSource(index);
}

View File

@ -18,8 +18,8 @@ class MessagesProxyModel : public QSortFilterProxyModel {
MessagesModel *sourceModel();
// Maps list of indexes.
QModelIndexList mapListToSource(const QModelIndexList &idxs);
QModelIndexList mapListFromSource(const QModelIndexList &idxs);
QModelIndexList mapListToSource(const QModelIndexList &indexes);
QModelIndexList mapListFromSource(const QModelIndexList &indexes, bool deep = false);
protected:
// Compares two rows of data.

View File

@ -48,7 +48,6 @@ void DynamicShortcutsWidget::populate(const QList<QAction *> actions) {
m_actionBindings.clear();
int row_id = 0;
bool second_column = false;
foreach (QAction *action, actions) {
// Create shortcut catcher for this action and set default shortcut.
@ -68,27 +67,13 @@ void DynamicShortcutsWidget::populate(const QList<QAction *> actions) {
label->setText(action->text().remove('&'));
label->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
if (second_column) {
m_layout->addWidget(label, row_id, 2);
m_layout->addWidget(catcher, row_id, 3);
second_column = false;
m_layout->addWidget(label, row_id, 0);
m_layout->addWidget(catcher, row_id, 1);
// Continue to the next row.
row_id++;
}
else {
QMargins catcher_margins = catcher->contentsMargins();
catcher_margins.setRight(10);
catcher->setContentsMargins(catcher_margins);
m_layout->addWidget(label, row_id, 0);
m_layout->addWidget(catcher, row_id, 1);
second_column = true;
}
row_id++;
}
// Make sure that "spacer" is added.
m_layout->setRowStretch(second_column ? ++row_id : row_id, 1);
m_layout->setRowStretch(row_id, 1);
m_layout->setColumnStretch(0, 1);
}

View File

@ -25,10 +25,10 @@ FeedMessageViewer::FeedMessageViewer(QWidget *parent)
m_messagesBrowser(new WebBrowser(this)) {
initialize();
initializeViews();
setupConnections();
createConnections();
}
void FeedMessageViewer::setupConnections() {
void FeedMessageViewer::createConnections() {
// General connections.
connect(m_messagesView, SIGNAL(currentMessageRemoved()),
m_messagesBrowser, SLOT(clear()));
@ -38,7 +38,18 @@ void FeedMessageViewer::setupConnections() {
// Toolbar forwardings.
connect(FormMain::getInstance()->m_ui->m_actionSwitchImportanceOfSelectedMessages,
SIGNAL(triggered()), m_messagesView, SLOT(switchSelectedMessagesImportance()));
connect(FormMain::getInstance()->m_ui->m_actionDeleteSelectedMessages,
SIGNAL(triggered()), m_messagesView, SLOT(deleteSelectedMessages()));
connect(FormMain::getInstance()->m_ui->m_actionMarkSelectedMessagesAsRead,
SIGNAL(triggered()), m_messagesView, SLOT(markSelectedMessagesRead()));
connect(FormMain::getInstance()->m_ui->m_actionMarkSelectedMessagesAsUnread,
SIGNAL(triggered()), m_messagesView, SLOT(markSelectedMessagesUnread()));
connect(FormMain::getInstance()->m_ui->m_actionOpenSelectedSourceArticlesExternally,
SIGNAL(triggered()), m_messagesView, SLOT(openSelectedSourceArticlesExternally()));
connect(FormMain::getInstance()->m_ui->m_actionOpenSelectedSourceArticlesInternally,
SIGNAL(triggered()), m_messagesView, SLOT(openSelectedSourceMessagesInternally()));
connect(FormMain::getInstance()->m_ui->m_actionOpenSelectedMessagesInternally,
SIGNAL(triggered()), m_messagesView, SLOT(openSelectedMessagesInternally()));
}
void FeedMessageViewer::initialize() {

View File

@ -28,7 +28,7 @@ class FeedMessageViewer : public TabContent {
void initializeViews();
// Sets up connections.
void setupConnections();
void createConnections();
private:
QToolBar *m_toolBar;

View File

@ -70,7 +70,7 @@ QList<QAction*> FormMain::getActions() {
// Add feeds/messages actions.
actions << m_ui->m_actionOpenSelectedSourceArticlesExternally <<
m_ui->m_actionOpenSelectedMessagesExternally <<
m_ui->m_actionOpenSelectedSourceArticlesInternally <<
m_ui->m_actionOpenSelectedMessagesInternally <<
m_ui->m_actionMarkAllMessagesAsRead <<
m_ui->m_actionMarkAllMessagesAsUnread <<
@ -186,7 +186,7 @@ void FormMain::setupIcons() {
m_ui->m_actionMarkSelectedMessagesAsRead->setIcon(IconThemeFactory::getInstance()->fromTheme("mail-mark-read"));
m_ui->m_actionMarkSelectedMessagesAsUnread->setIcon(IconThemeFactory::getInstance()->fromTheme("mail-mark-unread"));
m_ui->m_actionSwitchImportanceOfSelectedMessages->setIcon(IconThemeFactory::getInstance()->fromTheme("mail-mark-important"));
m_ui->m_actionOpenSelectedMessagesExternally->setIcon(IconThemeFactory::getInstance()->fromTheme("document-open"));
m_ui->m_actionOpenSelectedSourceArticlesInternally->setIcon(IconThemeFactory::getInstance()->fromTheme("document-open"));
m_ui->m_actionOpenSelectedSourceArticlesExternally->setIcon(IconThemeFactory::getInstance()->fromTheme("document-open"));
m_ui->m_actionOpenSelectedMessagesInternally->setIcon(IconThemeFactory::getInstance()->fromTheme("document-open"));

View File

@ -357,15 +357,12 @@
<string>Add new feed.</string>
</property>
</action>
<action name="m_actionOpenSelectedMessagesExternally">
<action name="m_actionOpenSelectedSourceArticlesExternally">
<property name="text">
<string>Open selected messages in external browser</string>
<string>Open selected source articles in external browser</string>
</property>
<property name="toolTip">
<string>Open selected messages in external browser.</string>
</property>
<property name="shortcut">
<string notr="true"/>
<string>Open selected source articles in external browser.</string>
</property>
</action>
<action name="m_actionOpenSelectedMessagesInternally">
@ -379,12 +376,12 @@
<string notr="true"/>
</property>
</action>
<action name="m_actionOpenSelectedSourceArticlesExternally">
<action name="m_actionOpenSelectedSourceArticlesInternally">
<property name="text">
<string>Open selected source articles in external browser</string>
<string>Open selected source articles in internal browser</string>
</property>
<property name="toolTip">
<string>Open selected source messages in external browser.</string>
<string>Open selected source messages in internal browser.</string>
</property>
</action>
</widget>

View File

@ -353,17 +353,17 @@ void FormSettings::loadGeneral() {
// Load auto-start status.
SystemFactory::AutoStartStatus autostart_status = SystemFactory::getAutoStartStatus();
switch (autostart_status) {
case SystemFactory::Enabled:
m_ui->m_checkAutostart->setChecked(true);
break;
case SystemFactory::Disabled:
m_ui->m_checkAutostart->setChecked(false);
break;
default:
m_ui->m_checkAutostart->setEnabled(false);
m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text() +
tr(" (not supported on this platform)"));
break;
case SystemFactory::Enabled:
m_ui->m_checkAutostart->setChecked(true);
break;
case SystemFactory::Disabled:
m_ui->m_checkAutostart->setChecked(false);
break;
default:
m_ui->m_checkAutostart->setEnabled(false);
m_ui->m_checkAutostart->setText(m_ui->m_checkAutostart->text() +
tr(" (not supported on this platform)"));
break;
}
}
@ -408,9 +408,11 @@ void FormSettings::loadInterface() {
foreach (const QString &icon_theme_name, IconThemeFactory::getInstance()->getInstalledIconThemes()) {
if (icon_theme_name == APP_THEME_SYSTEM) {
#if defined(Q_OS_LINUX)
// Add "default theme" and "no theme" on Linux.
m_ui->m_cmbIconTheme->addItem(tr("system icon theme (default)"),
APP_THEME_SYSTEM);
#else
// Add just "no theme" on other systems.
m_ui->m_cmbIconTheme->addItem(tr("no icon theme"),
APP_THEME_SYSTEM);
#endif

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>966</width>
<height>445</height>
<width>803</width>
<height>373</height>
</rect>
</property>
<property name="windowTitle">
@ -147,8 +147,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>167</width>
<height>219</height>
<width>195</width>
<height>238</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
@ -634,7 +634,120 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="m_pageFeedsMessages"/>
<widget class="QWidget" name="m_pageFeedsMessages">
<layout class="QHBoxLayout" name="horizontalLayout_9">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QTabWidget" name="m_tabFeedsMessages">
<property name="currentIndex">
<number>1</number>
</property>
<widget class="QWidget" name="m_tabFeeds">
<attribute name="title">
<string>Feeds</string>
</attribute>
</widget>
<widget class="QWidget" name="m_tabMessages">
<attribute name="title">
<string>Messages</string>
</attribute>
<layout class="QFormLayout" name="formLayout_10">
<item row="0" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>External web browser for message viewing</string>
</property>
<layout class="QFormLayout" name="formLayout_11">
<property name="fieldGrowthPolicy">
<enum>QFormLayout::AllNonFixedFieldsGrow</enum>
</property>
<item row="0" column="0">
<widget class="QLabel" name="m_lblExternalBrowserPreset">
<property name="text">
<string>Preset</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="m_cmbExternalBrowserPreset">
<item>
<property name="text">
<string>custom</string>
</property>
</item>
<item>
<property name="text">
<string>Chromium</string>
</property>
</item>
<item>
<property name="text">
<string>Google Chrome</string>
</property>
</item>
<item>
<property name="text">
<string>Opera</string>
</property>
</item>
<item>
<property name="text">
<string>Mozilla Firefox</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="m_lblExternalBrowserExecutable">
<property name="text">
<string>Web browser executable</string>
</property>
</widget>
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLineEdit" name="m_txtExternalBrowserExecutable"/>
</item>
<item>
<widget class="QToolButton" name="m_btnExternalBrowserExecutable">
<property name="text">
<string>...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<widget class="QLabel" name="m_lblExternalBrowserArguments">
<property name="text">
<string>Executable arguments</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="m_txtExternalBrowserArguments"/>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item row="0" column="0">

View File

@ -120,13 +120,9 @@ void MessagesView::contextMenuEvent(QContextMenuEvent *event) {
void MessagesView::initializeContextMenu() {
m_contextMenu = new QMenu(tr("Context menu for messages"), this);
connect(FormMain::getInstance()->m_ui->m_actionOpenSelectedMessagesExternally,
SIGNAL(triggered()), this, SLOT(openSelectedMessagesExternally()));
m_contextMenu->addActions(QList<QAction*>() <<
FormMain::getInstance()->m_ui->m_actionOpenSelectedSourceArticlesExternally <<
FormMain::getInstance()->m_ui->m_actionOpenSelectedMessagesExternally <<
FormMain::getInstance()->m_ui->m_actionOpenSelectedSourceArticlesInternally <<
FormMain::getInstance()->m_ui->m_actionOpenSelectedMessagesInternally <<
FormMain::getInstance()->m_ui->m_actionMarkSelectedMessagesAsRead <<
FormMain::getInstance()->m_ui->m_actionMarkSelectedMessagesAsUnread <<
@ -160,32 +156,89 @@ void MessagesView::currentChanged(const QModelIndex &current,
const QModelIndex &previous) {
QModelIndex mapped_current_index = m_proxyModel->mapToSource(current);
qDebug("Current row changed, row [%d,%d] source %d %d",
current.row(), current.column(),
mapped_current_index.row(), mapped_current_index.column());
if (mapped_current_index.isValid()) {
m_sourceModel->setMessageRead(mapped_current_index.row(), 1);
emit currentMessageChanged(m_sourceModel->messageAt(mapped_current_index.row()));
}
else {
emit currentMessageRemoved();
if (!signalsBlocked()) {
if (mapped_current_index.isValid()) {
m_sourceModel->setMessageRead(mapped_current_index.row(), 1);
emit currentMessageChanged(m_sourceModel->messageAt(mapped_current_index.row()));
}
else {
emit currentMessageRemoved();
}
}
QTreeView::currentChanged(current, previous);
}
void MessagesView::openSelectedMessagesExternally() {
void MessagesView::openSelectedSourceArticlesExternally() {
// TODO: otevře vybrane zpravy v externim prohlizeci
}
void MessagesView::openSelectedSourceMessagesInternally() {
// TODO: otevre vybrane nactene zpravy v internch tabech
// TODO: otevre vybrane zpravy ze zdrojovych webz v internch tabech
}
void MessagesView::openSelectedTargetMessagesInternally() {
// TODO: otevre vybrane zpravy ze zdrojovych webz v internich tabech
void MessagesView::openSelectedMessagesInternally() {
// TODO: otevre vybrane nactene zpravy v internich tabech
}
void MessagesView::markSelectedMessagesRead() {
setSelectedMessagesReadStatus(1);
}
void MessagesView::markSelectedMessagesUnread() {
setSelectedMessagesReadStatus(0);
}
void MessagesView::setSelectedMessagesReadStatus(int read) {
QModelIndex current_index = selectionModel()->currentIndex();
QModelIndex mapped_current_index = m_proxyModel->mapToSource(current_index);
QModelIndexList selected_indexes = selectionModel()->selectedRows();
QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes);
m_sourceModel->setBatchMessagesRead(mapped_indexes, read);
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
selected_indexes = m_proxyModel->mapListFromSource(mapped_indexes, true);
current_index = m_proxyModel->mapFromSource(m_sourceModel->index(mapped_current_index.row(),
mapped_current_index.column()));
if (read == 0) {
// User selected to mark some messages as unread, if one
// of them will be marked as current, then it will be read again.
blockSignals(true);
setCurrentIndex(current_index);
blockSignals(false);
}
else {
setCurrentIndex(current_index);
}
scrollTo(current_index);
reselectIndexes(selected_indexes);
}
void MessagesView::deleteSelectedMessages() {
QModelIndex current_index = selectionModel()->currentIndex();
QModelIndex mapped_current_index = m_proxyModel->mapToSource(current_index);
QModelIndexList selected_indexes = selectionModel()->selectedRows();
QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes);
m_sourceModel->setBatchMessagesDeleted(mapped_indexes, 1);
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
selected_indexes = m_proxyModel->mapListFromSource(mapped_indexes, true);
current_index = m_proxyModel->mapFromSource(m_sourceModel->index(mapped_current_index.row(),
mapped_current_index.column()));
setCurrentIndex(current_index);
scrollTo(current_index);
reselectIndexes(selected_indexes);
}
void MessagesView::switchSelectedMessagesImportance() {
@ -196,16 +249,11 @@ void MessagesView::switchSelectedMessagesImportance() {
m_sourceModel->switchBatchMessageImportance(mapped_indexes);
selected_indexes.clear();
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
foreach (const QModelIndex &index, mapped_indexes) {
selected_indexes << m_proxyModel->mapFromSource(m_sourceModel->index(index.row(),
index.column()));
}
selected_indexes = m_proxyModel->mapListFromSource(mapped_indexes, true);
current_index = m_proxyModel->mapFromSource(m_sourceModel->index(mapped_current_index.row(),
mapped_current_index.column()));
mapped_current_index.column()));
setCurrentIndex(current_index);
scrollTo(current_index);
@ -221,15 +269,3 @@ void MessagesView::reselectIndexes(const QModelIndexList &indexes) {
QItemSelectionModel::Rows);
}
}
void MessagesView::setAllMessagesRead() {
selectAll();
QModelIndexList selected_indexes = selectedIndexes();
QModelIndexList mapp;
foreach (const QModelIndex &index, selected_indexes) {
mapp << m_proxyModel->mapToSource(index);
}
m_sourceModel->switchBatchMessageImportance(mapp);
}

View File

@ -24,13 +24,18 @@ class MessagesView : public QTreeView {
public slots:
// Message manipulators.
void openSelectedMessagesExternally();
void openSelectedSourceArticlesExternally();
void openSelectedSourceMessagesInternally();
void openSelectedTargetMessagesInternally();
void openSelectedMessagesInternally();
void setSelectedMessagesReadStatus(int read);
void markSelectedMessagesRead();
void markSelectedMessagesUnread();
void deleteSelectedMessages();
void switchSelectedMessagesImportance();
void setAllMessagesRead();
protected slots:
// Marks given indexes as selected.
void reselectIndexes(const QModelIndexList &indexes);
protected: