multilineedit: handle unterminated mIRC codes
[quassel.git] / src / client / selectionmodelsynchronizer.h
index 2e153b6..fe19443 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-08 by the Quassel Project                          *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   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.,                                       *
- *   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 <QObject>
 
 class QAbstractItemModel;
 
-class SelectionModelSynchronizer : public QObject {
-  Q_OBJECT
+class CLIENT_EXPORT SelectionModelSynchronizer : public QObject
+{
+    Q_OBJECT
 
 public:
-  SelectionModelSynchronizer(QAbstractItemModel *parent = 0);
+    SelectionModelSynchronizer(QAbstractItemModel* parent = nullptr);
 
-  void addSelectionModel(QItemSelectionModel *selectionModel);
-  void removeSelectionModel(QItemSelectionModel *selectionModel);
+    void synchronizeSelectionModel(QItemSelectionModel* selectionModel);
+    void removeSelectionModel(QItemSelectionModel* selectionModel);
 
-  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(); }
-
-signals:
-  void setCurrentIndex(const QModelIndex &current, QItemSelectionModel::SelectionFlags command);
-  void select(const QItemSelection &selected, QItemSelectionModel::SelectionFlags command);
+    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:
-  void mappedCurrentChanged(const QModelIndex &current, const QModelIndex &previous);
-  void mappedSelectionChanged(const QItemSelection &selected, const QItemSelection &previous);
+    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 setCurrentIndex(const QModelIndex& index);
+    void setCurrentSelection(const QItemSelection& selection);
 
-  void currentChanged(const QModelIndex &current, const QModelIndex &previous);
-  void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
-
-private:
-  QAbstractItemModel *_model;
-  QItemSelectionModel _selectionModel;
-
-  bool checkBaseModel(QItemSelectionModel *model);
-  QModelIndex mapToSource(const QModelIndex &index, QItemSelectionModel *selectionModel);
-  QItemSelection mapSelectionToSource(const QItemSelection &selection, QItemSelectionModel *selectionModel);
+    void currentChanged(const QModelIndex& current, const QModelIndex& previous);
+    void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
 
+    void selectionModelDestroyed(QObject* object);
 
+private:
+    QAbstractItemModel* _model;
+    QItemSelectionModel _selectionModel;
+    bool _changeCurrentEnabled{true};
+    bool _changeSelectionEnabled{true};
+
+    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;
 };
-
-#endif