Added a very simple tooltip for ircusers (aka: visible in the nicklist)
[quassel.git] / src / client / selectionmodelsynchronizer.cpp
index a315729..169fddc 100644 (file)
@@ -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 &current) {
-  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<QItemSelectionModel *>(sender());
+  emit select(selectionModel->selection(), QItemSelectionModel::ClearAndSelect);
+}