X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fselectionmodelsynchronizer.cpp;h=169fddcd43a796b36fde1cc386149d4419f6336c;hp=a31572918f857bb6e33e2a4e1b1cbcedb4fa7e06;hb=2201f8913b72367969211f0f0c0c4f5dcff9b995;hpb=d6b056e936ec441258d291b7a8af7b83f9f53016 diff --git a/src/client/selectionmodelsynchronizer.cpp b/src/client/selectionmodelsynchronizer.cpp index a3157291..169fddcd 100644 --- a/src/client/selectionmodelsynchronizer.cpp +++ b/src/client/selectionmodelsynchronizer.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-07 by the Quassel IRC Team * + * Copyright (C) 2005-08 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -36,6 +36,11 @@ SelectionModelSynchronizer::~SelectionModelSynchronizer() { } void SelectionModelSynchronizer::addSelectionModel(MappedSelectionModel *selectionmodel) { + if(selectionmodel->model() == model()) { + addRegularSelectionModel(selectionmodel); + return; + } + if(selectionmodel->baseModel() != model()) { qWarning() << "cannot Syncronize SelectionModel" << selectionmodel << "which has a different baseModel()"; return; @@ -50,6 +55,22 @@ void SelectionModelSynchronizer::addSelectionModel(MappedSelectionModel *selecti selectionmodel, SLOT(mappedSetCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags))); connect(this, SIGNAL(select(QItemSelection, QItemSelectionModel::SelectionFlags)), selectionmodel, SLOT(mappedSelect(QItemSelection, QItemSelectionModel::SelectionFlags))); +} + +void SelectionModelSynchronizer::addRegularSelectionModel(QItemSelectionModel *selectionmodel) { + if(selectionmodel->model() != model()) { + qWarning() << "cannot Syncronize QItemSelectionModel" << selectionmodel << "which has a different model()"; + return; + } + connect(selectionmodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), + this, SLOT(_regularCurrentChanged(QModelIndex, QModelIndex))); + connect(selectionmodel, SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + this, SLOT(_regularSelectionChanged(QItemSelection, QItemSelection))); + + connect(this, SIGNAL(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)), + selectionmodel, SLOT(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags))); + connect(this, SIGNAL(select(QItemSelection, QItemSelectionModel::SelectionFlags)), + selectionmodel, SLOT(select(QItemSelection, QItemSelectionModel::SelectionFlags))); } @@ -59,9 +80,21 @@ void SelectionModelSynchronizer::removeSelectionModel(MappedSelectionModel *mode } void SelectionModelSynchronizer::_mappedCurrentChanged(const QModelIndex ¤t) { - emit setCurrentIndex(current, QItemSelectionModel::ClearAndSelect); + emit setCurrentIndex(current, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } void SelectionModelSynchronizer::_mappedSelectionChanged(const QItemSelection &selected) { emit select(selected, QItemSelectionModel::ClearAndSelect); } + +void SelectionModelSynchronizer::_regularCurrentChanged(const QModelIndex &newCurrent, const QModelIndex &oldCurrent) { + Q_UNUSED(oldCurrent) + emit setCurrentIndex(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); +} + +void SelectionModelSynchronizer::_regularSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) { + Q_UNUSED(selected) + Q_UNUSED(deselected) + QItemSelectionModel *selectionModel = qobject_cast(sender()); + emit select(selectionModel->selection(), QItemSelectionModel::ClearAndSelect); +}