cmake: avoid de-duplication of user's CXXFLAGS
[quassel.git] / src / client / selectionmodelsynchronizer.h
index 5cda9cc..62a8b9d 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-2022 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
  ***************************************************************************/
 
-#ifndef _SELECTIONMODELSYNCHRONIZER_H_
-#define _SELECTIONMODELSYNCHRONIZER_H_
+#pragma once
+
+#include "client-export.h"
 
 
-#include <QObject>
 #include <QItemSelectionModel>
 #include <QItemSelectionModel>
+#include <QObject>
 
 class QAbstractItemModel;
 
 class QAbstractItemModel;
-class MappedSelectionModel;
 
 
-class SelectionModelSynchronizer : public QObject {
-  Q_OBJECT
+class CLIENT_EXPORT SelectionModelSynchronizer : public QObject
+{
+    Q_OBJECT
 
 public:
 
 public:
-  SelectionModelSynchronizer(QAbstractItemModel *parent = 0);
-  virtual ~SelectionModelSynchronizer();
+    SelectionModelSynchronizer(QAbstractItemModel* parent = nullptr);
 
 
-  void addSelectionModel(MappedSelectionModel *model);
-  void addRegularSelectionModel(QItemSelectionModel *model);
-  void removeSelectionModel(MappedSelectionModel *model);
+    void synchronizeSelectionModel(QItemSelectionModel* selectionModel);
+    void removeSelectionModel(QItemSelectionModel* selectionModel);
 
 
-  inline QAbstractItemModel *model() { return _model; }
+    inline QAbstractItemModel* model() { return _model; }
+    inline QItemSelectionModel* selectionModel() const { return const_cast<QItemSelectionModel*>(&_selectionModel); }
+    inline QModelIndex currentIndex() const { return _selectionModel.currentIndex(); }
+    inline QItemSelection currentSelection() const { return _selectionModel.selection(); }
 
 private slots:
 
 private slots:
-  void _mappedCurrentChanged(const QModelIndex &current);
-  void _mappedSelectionChanged(const QItemSelection &selected);
+    void syncedCurrentChanged(const QModelIndex& current, const QModelIndex& previous);
+    void syncedSelectionChanged(const QItemSelection& selected, const QItemSelection& previous);
+
+    void setCurrentIndex(const QModelIndex& index);
+    void setCurrentSelection(const QItemSelection& selection);
 
 
-  void _regularCurrentChanged(const QModelIndex &newCurrent, const QModelIndex &oldCurrent);
-  void _regularSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
+    void currentChanged(const QModelIndex& current, const QModelIndex& previous);
+    void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
+
+    void selectionModelDestroyed(QObject* object);
 
 
-signals:
-  void select(const QItemSelection &selection, QItemSelectionModel::SelectionFlags command);
-  void setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command);
-  
 private:
 private:
-  QAbstractItemModel *_model;
-};
+    QAbstractItemModel* _model;
+    QItemSelectionModel _selectionModel;
+    bool _changeCurrentEnabled{true};
+    bool _changeSelectionEnabled{true};
 
 
-#endif
+    bool checkBaseModel(QItemSelectionModel* model);
+    QModelIndex mapFromSource(const QModelIndex& sourceIndex, const QItemSelectionModel* selectionModel);
+    QItemSelection mapSelectionFromSource(const QItemSelection& sourceSelection, const QItemSelectionModel* selectionModel);
+    QModelIndex mapToSource(const QModelIndex& index, QItemSelectionModel* selectionModel);
+    QItemSelection mapSelectionToSource(const QItemSelection& selection, QItemSelectionModel* selectionModel);
+
+    QSet<QItemSelectionModel*> _selectionModels;
+};