Code refactoring.

This commit is contained in:
Martin Rotter 2014-09-22 19:38:25 +02:00
parent 134f2d408d
commit cac1e78adf
6 changed files with 71 additions and 56 deletions

View File

@ -264,7 +264,7 @@ bool MessagesModel::setMessageRead(int row_index, int read) {
// can reflect.
emit dataChanged(index(row_index, 0),
index(row_index, columnCount() - 1));
emit feedCountsChanged(false);
emit messageCountsChanged(false);
return true;
}
else {
@ -341,7 +341,7 @@ bool MessagesModel::switchBatchMessageImportance(const QModelIndexList &messages
select();
fetchAll();
//emit feedCountsChanged(false);
//emit messageCountsChanged(false);
return true;
}
else {
@ -375,7 +375,7 @@ bool MessagesModel::setBatchMessagesDeleted(const QModelIndexList &messages, int
select();
fetchAll();
emit feedCountsChanged(true);
emit messageCountsChanged(true);
return true;
}
else {
@ -400,7 +400,7 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
select();
fetchAll();
emit feedCountsChanged(true);
emit messageCountsChanged(true);
return true;
}
else {
@ -411,9 +411,37 @@ bool MessagesModel::setBatchMessagesRead(const QModelIndexList &messages, int re
bool MessagesModel::setBatchMessagesRestored(const QModelIndexList &messages) {
// TODO: Model -> setBatchMessagesRestored();
// obnovime zpravy, po obnoveni je treba jako ve funkci setBatchMessagesDeleted
// pres feedCountsChanged dat informaci ze pocty zprav se zmenily, ale oni
// pres messageCountsChanged dat informaci ze pocty zprav se zmenily, ale oni
// se zmenily nejen ve vybranych kanalech (je vybran odkadkovy kos) ale v kanalech do kterych patri
return true;
if (m_messageMode == MessagesFromFeeds) {
qDebug("Cannot restore non-deleted messages.");
return false;
}
QSqlDatabase db_handle = database();
QSqlQuery query_read_msg(db_handle);
QStringList message_ids;
query_read_msg.setForwardOnly(true);
// Obtain IDs of all desired messages.
foreach (const QModelIndex &message, messages) {
message_ids.append(QString::number(messageId(message.row())));
}
QString sql_delete_query = QString("UPDATE Messages SET is_deleted = 0 WHERE id IN (%1);").arg(message_ids.join(", "));
if (query_read_msg.exec(sql_delete_query)) {
select();
fetchAll();
emit messageCountsChanged(true);
return true;
}
else {
return false;
}
}
QVariant MessagesModel::headerData(int section, Qt::Orientation orientation, int role) const {

View File

@ -113,9 +113,8 @@ class MessagesModel : public QSqlTableModel {
void filterMessages(MessageFilter filter);
signals:
// Emitted if some persistent change is made which affects
// count of "unread/all" messages.
void feedCountsChanged(bool total_message_number_changed = true);
// Emitted if some persistent change is made which affects count of "unread/all" messages.
void messageCountsChanged(bool total_message_number_changed);
protected:
// Returns selected feed ids in concatenated textual form,

View File

@ -80,12 +80,8 @@ void FeedMessageViewer::saveSize() {
m_feedsView->saveExpandedStates();
// Store offsets of splitters.
settings->setValue(APP_CFG_GUI,
"splitter_feeds",
QString(m_feedSplitter->saveState().toBase64()));
settings->setValue(APP_CFG_GUI,
"splitter_messages",
QString(m_messageSplitter->saveState().toBase64()));
settings->setValue(APP_CFG_GUI, "splitter_feeds", QString(m_feedSplitter->saveState().toBase64()));
settings->setValue(APP_CFG_GUI, "splitter_messages", QString(m_messageSplitter->saveState().toBase64()));
// States of splitters are stored, let's store
// widths of columns.
@ -93,12 +89,8 @@ void FeedMessageViewer::saveSize() {
int width_column_date = m_messagesView->columnWidth(MSG_DB_DCREATED_INDEX);
if (width_column_author != 0 && width_column_date != 0) {
settings->setValue(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_AUTHOR_INDEX),
width_column_author);
settings->setValue(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_DCREATED_INDEX),
width_column_date);
settings->setValue(APP_CFG_GUI, KEY_MESSAGES_VIEW + QString::number(MSG_DB_AUTHOR_INDEX), width_column_author);
settings->setValue(APP_CFG_GUI, KEY_MESSAGES_VIEW + QString::number(MSG_DB_DCREATED_INDEX), width_column_date);
}
// Store "visibility" of toolbars and list headers.
@ -117,14 +109,12 @@ void FeedMessageViewer::loadSize() {
m_messageSplitter->restoreState(QByteArray::fromBase64(settings->value(APP_CFG_GUI, "splitter_messages").toString().toLocal8Bit()));
// Splitters are restored, now, restore widths of columns.
m_messagesView->setColumnWidth(MSG_DB_AUTHOR_INDEX,
settings->value(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_AUTHOR_INDEX),
default_msg_section_size).toInt());
m_messagesView->setColumnWidth(MSG_DB_DCREATED_INDEX,
settings->value(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_DCREATED_INDEX),
default_msg_section_size).toInt());
m_messagesView->setColumnWidth(MSG_DB_AUTHOR_INDEX, settings->value(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_AUTHOR_INDEX),
default_msg_section_size).toInt());
m_messagesView->setColumnWidth(MSG_DB_DCREATED_INDEX, settings->value(APP_CFG_GUI,
KEY_MESSAGES_VIEW + QString::number(MSG_DB_DCREATED_INDEX),
default_msg_section_size).toInt());
}
void FeedMessageViewer::quit() {
@ -155,8 +145,7 @@ void FeedMessageViewer::setListHeadersEnabled(bool enable) {
m_messagesView->header()->setVisible(enable);
}
void FeedMessageViewer::updateTrayIconStatus(int unread_messages,
int total_messages) {
void FeedMessageViewer::updateTrayIconStatus(int unread_messages, int total_messages) {
Q_UNUSED(total_messages)
if (SystemTrayIcon::isSystemTrayActivated()) {
@ -191,10 +180,8 @@ void FeedMessageViewer::createConnections() {
FormMain *form_main = qApp->mainForm();
// Filtering & searching.
connect(m_toolBarMessages, SIGNAL(messageSearchPatternChanged(QString)),
m_messagesView, SLOT(searchMessages(QString)));
connect(m_toolBarMessages, SIGNAL(messageFilterChanged(MessagesModel::MessageFilter)),
m_messagesView, SLOT(filterMessages(MessagesModel::MessageFilter)));
connect(m_toolBarMessages, SIGNAL(messageSearchPatternChanged(QString)), m_messagesView, SLOT(searchMessages(QString)));
connect(m_toolBarMessages, SIGNAL(messageFilterChanged(MessagesModel::MessageFilter)), m_messagesView, SLOT(filterMessages(MessagesModel::MessageFilter)));
// Message changers.
connect(m_messagesView, SIGNAL(currentMessagesRemoved()), m_messagesBrowser, SLOT(clear()));
@ -204,14 +191,14 @@ void FeedMessageViewer::createConnections() {
connect(m_feedsView, SIGNAL(feedsSelected(QList<int>)), m_messagesView, SLOT(loadFeeds(QList<int>)));
// If user changes status of some messages, recalculate message counts.
connect(m_messagesView, SIGNAL(feedCountsChanged(bool)), m_feedsView, SLOT(updateCountsOfSelectedFeeds(bool)));
connect(m_messagesView, SIGNAL(messageCountsChanged(bool)), m_feedsView, SLOT(updateCountsOfSelectedFeeds(bool)));
// State of many messages is changed, then we need
// to reload selections.
connect(m_feedsView, SIGNAL(feedsNeedToBeReloaded(int)), m_messagesView, SLOT(reloadSelections(int)));
// If counts of unread/all messages change, update the tray icon.
connect(m_feedsView, SIGNAL(feedCountsChanged(int,int)), this, SLOT(updateTrayIconStatus(int,int)));
connect(m_feedsView, SIGNAL(messageCountsChanged(int, int)), this, SLOT(updateTrayIconStatus(int, int)));
// Message openers.
connect(m_messagesView, SIGNAL(openMessagesInNewspaperView(QList<Message>)),

View File

@ -123,7 +123,7 @@ class FeedsView : public QTreeView {
// Notifies other components about messages
// counts.
inline void notifyWithCounts() {
emit feedCountsChanged(m_sourceModel->countOfUnreadMessages(), m_sourceModel->countOfAllMessages());
emit messageCountsChanged(m_sourceModel->countOfUnreadMessages(), m_sourceModel->countOfAllMessages());
}
// Selects next/previous item (feed/category) in the list.
@ -157,7 +157,7 @@ class FeedsView : public QTreeView {
void feedsUpdateRequested(const QList<FeedsModelFeed*> feeds);
// Emitted if counts of messages are changed.
void feedCountsChanged(int unread_messages, int total_messages);
void messageCountsChanged(int unread_messages, int total_messages);
// Emitted if currently selected feeds needs to be reloaded.
void feedsNeedToBeReloaded(int mark_current_index_read);

View File

@ -50,7 +50,7 @@ MessagesView::~MessagesView() {
void MessagesView::createConnections() {
// Forward feed counts changes.
connect(m_sourceModel, SIGNAL(feedCountsChanged(bool)), this, SIGNAL(feedCountsChanged(bool)));
connect(m_sourceModel, SIGNAL(messageCountsChanged(bool)), this, SIGNAL(messageCountsChanged(bool)));
// Make sure that source message is opened
// in new tab on double click.
@ -368,23 +368,24 @@ void MessagesView::restoreSelectedMessages() {
QModelIndexList selected_indexes = selectionModel()->selectedRows();
QModelIndexList mapped_indexes = m_proxyModel->mapListToSource(selected_indexes);
m_sourceModel->setBatchMessagesRestored(mapped_indexes);
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
if (m_sourceModel->setBatchMessagesRestored(mapped_indexes)) {
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
int row_count = m_sourceModel->rowCount();
if (row_count > 0) {
QModelIndex last_item = current_index.row() < row_count ?
m_proxyModel->index(current_index.row(),
MSG_DB_TITLE_INDEX) :
m_proxyModel->index(row_count - 1,
MSG_DB_TITLE_INDEX);
int row_count = m_sourceModel->rowCount();
if (row_count > 0) {
QModelIndex last_item = current_index.row() < row_count ?
m_proxyModel->index(current_index.row(),
MSG_DB_TITLE_INDEX) :
m_proxyModel->index(row_count - 1,
MSG_DB_TITLE_INDEX);
setCurrentIndex(last_item);
scrollTo(last_item);
reselectIndexes(QModelIndexList() << last_item);
}
else {
emit currentMessagesRemoved();
setCurrentIndex(last_item);
scrollTo(last_item);
reselectIndexes(QModelIndexList() << last_item);
}
else {
emit currentMessagesRemoved();
}
}
}

View File

@ -115,7 +115,7 @@ class MessagesView : public QTreeView {
// Emitted if counts of unread/total messages has changed
// because of user interaction with list of messages.
void feedCountsChanged(bool total_message_number_changed = true);
void messageCountsChanged(bool total_message_number_changed);
private:
QMenu *m_contextMenu;