changeeees

This commit is contained in:
Martin Rotter 2013-12-04 21:03:09 +01:00
parent eb0c734369
commit e119d96896
7 changed files with 77 additions and 21 deletions

View File

@ -27,3 +27,24 @@ MessagesModel *MessagesProxyModel::sourceModel() {
bool MessagesProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { bool MessagesProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const {
return QSortFilterProxyModel::lessThan(left, right); return QSortFilterProxyModel::lessThan(left, right);
} }
QModelIndexList MessagesProxyModel::mapListFromSource(const QModelIndexList &idxs) {
QModelIndexList mapped_idxs;
foreach (const QModelIndex &index, idxs) {
mapped_idxs << mapFromSource(index);
}
return mapped_idxs;
}
QModelIndexList MessagesProxyModel::mapListToSource(const QModelIndexList &idxs) {
QModelIndexList source_idxs;
foreach (const QModelIndex &index, idxs) {
source_idxs << mapToSource(index);
}
return source_idxs;
}

View File

@ -17,6 +17,10 @@ class MessagesProxyModel : public QSortFilterProxyModel {
// Source model getter. // Source model getter.
MessagesModel *sourceModel(); MessagesModel *sourceModel();
// Maps list of indexes.
QModelIndexList mapListToSource(const QModelIndexList &idxs);
QModelIndexList mapListFromSource(const QModelIndexList &idxs);
protected: protected:
// Compares two rows of data. // Compares two rows of data.
bool lessThan(const QModelIndex &left, const QModelIndex &right) const; bool lessThan(const QModelIndex &left, const QModelIndex &right) const;

View File

@ -24,16 +24,20 @@ FeedMessageViewer::FeedMessageViewer(QWidget *parent)
m_messagesBrowser(new WebBrowser(this)) { m_messagesBrowser(new WebBrowser(this)) {
initialize(); initialize();
initializeViews(); initializeViews();
setupConnections();
}
// TODO: Separate into createConnections. void FeedMessageViewer::setupConnections() {
// General connections.
connect(m_messagesView, SIGNAL(currentMessageRemoved()), connect(m_messagesView, SIGNAL(currentMessageRemoved()),
m_messagesBrowser, SLOT(clear())); m_messagesBrowser, SLOT(clear()));
connect(m_messagesView, SIGNAL(currentMessageChanged(Message)), connect(m_messagesView, SIGNAL(currentMessageChanged(Message)),
m_messagesBrowser, SLOT(navigateToMessage(Message))); m_messagesBrowser, SLOT(navigateToMessage(Message)));
// Toolbar forwardings.
connect(FormMain::getInstance()->m_ui->m_actionSwitchImportanceOfSelectedMessages, connect(FormMain::getInstance()->m_ui->m_actionSwitchImportanceOfSelectedMessages,
SIGNAL(triggered()), SIGNAL(triggered()), m_messagesView, SLOT(switchSelectedMessagesImportance()));
m_messagesView,
SLOT(switchSelectedMessagesImportance()));
} }
void FeedMessageViewer::initialize() { void FeedMessageViewer::initialize() {

View File

@ -27,6 +27,9 @@ class FeedMessageViewer : public TabContent {
// Initializes both messages/feeds views. // Initializes both messages/feeds views.
void initializeViews(); void initializeViews();
// Sets up connections.
void setupConnections();
private: private:
QToolBar *m_toolBar; QToolBar *m_toolBar;

View File

@ -1,5 +1,6 @@
#include <QHeaderView> #include <QHeaderView>
#include <QKeyEvent> #include <QKeyEvent>
#include <QScrollBar>
#include "gui/messagesview.h" #include "gui/messagesview.h"
#include "core/messagesproxymodel.h" #include "core/messagesproxymodel.h"
@ -121,37 +122,57 @@ void MessagesView::mousePressEvent(QMouseEvent *event) {
void MessagesView::currentChanged(const QModelIndex &current, void MessagesView::currentChanged(const QModelIndex &current,
const QModelIndex &previous) { const QModelIndex &previous) {
QModelIndex mapped_current = m_proxyModel->mapToSource(current); QModelIndex mapped_current_index = m_proxyModel->mapToSource(current);
qDebug("Current row changed, row [%d,%d] source %d %d", qDebug("Current row changed, row [%d,%d] source %d %d",
current.row(), current.column(), current.row(), current.column(),
mapped_current.row(), mapped_current.column()); mapped_current_index.row(), mapped_current_index.column());
m_sourceModel->setMessageRead(mapped_current.row(), 1); if (mapped_current_index.isValid()) {
emit currentMessageChanged(m_sourceModel->messageAt(mapped_current.row())); m_sourceModel->setMessageRead(mapped_current_index.row(), 1);
emit currentMessageChanged(m_sourceModel->messageAt(mapped_current_index.row()));
}
else {
emit currentMessageRemoved();
}
QTreeView::currentChanged(current, previous); QTreeView::currentChanged(current, previous);
} }
void MessagesView::switchSelectedMessagesImportance() { void MessagesView::switchSelectedMessagesImportance() {
/* QModelIndex current_idx = selectionModel()->currentIndex();
// toto muže obsahovat moc indexů -> z jednoho radku to muze QModelIndex mapped_current_idx = m_proxyModel->mapToSource(current_idx);
// obsahovat indexy ze vsech sloupcu, overit. QModelIndexList selected_idxs = selectionModel()->selectedRows();
QItemSelection selected_indexes = selectionModel()->selection(); QModelIndexList mapped_idxs = m_proxyModel->mapListToSource(selected_idxs);
QItemSelection mapped_selection = m_proxyModel->mapSelectionToSource(selected_indexes);
m_sourceModel->switchBatchMessageImportance(mapped_selection.indexes()); m_sourceModel->switchBatchMessageImportance(mapped_idxs);
*/
QModelIndexList selected_indexes = selectionModel()->selectedRows(); //selected_idxs.clear();
QModelIndexList mapped_indexes; selected_idxs = m_proxyModel->mapListFromSource(mapped_idxs);
foreach (const QModelIndex &index, selected_indexes) { sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
mapped_indexes << m_proxyModel->mapToSource(index); /*
foreach (const QModelIndex &index, mapped_idxs) {
selected_idxs << m_proxyModel->mapFromSource(m_sourceModel->index(index.row(),
index.column()));
} }
*/
current_idx = m_proxyModel->mapFromSource(m_sourceModel->index(mapped_current_idx.row(),
mapped_current_idx.column()));
m_sourceModel->switchBatchMessageImportance(mapped_indexes); setCurrentIndex(current_idx);
scrollTo(current_idx);
reselectIndexes(selected_idxs);
}
void MessagesView::reselectIndexes(const QModelIndexList &indexes) {
selectionModel()->clearSelection();
foreach (const QModelIndex &idx, indexes) {
selectionModel()->select(idx,
QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
} }
void MessagesView::setAllMessagesRead() { void MessagesView::setAllMessagesRead() {

View File

@ -27,6 +27,9 @@ class MessagesView : public QTreeView {
void switchSelectedMessagesImportance(); void switchSelectedMessagesImportance();
void setAllMessagesRead(); void setAllMessagesRead();
protected slots:
void reselectIndexes(const QModelIndexList &indexes);
protected: protected:
void setupAppearance(); void setupAppearance();
void mousePressEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event);