* Full author contact details are available in file CREDITS.
*/
-#ifndef QSELECTIONMANAGER_H
-#define QSELECTIONMANAGER_H
+#ifndef GUISELECTIONMANAGER_H
+#define GUISELECTIONMANAGER_H
-#include "Dialog.h"
#include <QObject>
-#include <QKeyEvent>
-#include <QStringList>
-#include <QStringListModel>
-#include <QListView>
-#include <QPushButton>
+class QAbstractListModel;
+class QModelIndex;
+class QListView;
+class QPushButton;
+class QVariant;
+class QAbstractItemView;
+class QItemSelection;
+template <class T, class U> class QMap;
namespace lyx {
namespace frontend {
* of them---should be created independently, and then passed to the
* constructor.
*/
-class GuiSelectionManager : public QObject {
+class GuiSelectionManager : public QObject
+{
Q_OBJECT
- public:
- ///
- GuiSelectionManager(
- QListView * availableLV,
- QListView * selectedLV,
- QPushButton * addPB,
- QPushButton * delPB,
- QPushButton * upPB,
- QPushButton * downPB,
- QStringListModel * availableModel,
- QStringListModel * selectedModel);
- /// Sets the state of the various push buttons, depending upon the
- /// state of the widgets. (E.g., "delete" is enabled only if the
- /// selection is non-empty.)
- virtual void update();
-
- /// Not strictly a matter of focus, which may be elsewhere, but
- /// whether selectedLV is `more focused' than availableLV. Intended
- /// to be used, for example, in displaying information about a
- /// highlighted item: should it be the highlighted available item
- /// or the highlighted selected item that is displayed?
- bool selectedFocused() { return selectedHasFocus_; };
+public:
+ ///
+ GuiSelectionManager(
+ QAbstractItemView * availableLV,
+ QListView * selectedLV,
+ QPushButton * addPB,
+ QPushButton * delPB,
+ QPushButton * upPB,
+ QPushButton * downPB,
+ QAbstractListModel * availableModel,
+ QAbstractListModel * selectedModel);
+ /// Sets the state of the various push buttons, depending upon the
+ /// state of the widgets. (E.g., "delete" is enabled only if the
+ /// selection is non-empty.)
+ /// Note: this is separated out into updateAddPB(), etc, below,
+ /// for easy over-riding of these functions.
+ void update();
+
+ /// Not strictly a matter of focus, which may be elsewhere, but
+ /// whether selectedLV is `more focused' than availableLV. Intended
+ /// to be used, for example, in displaying information about a
+ /// highlighted item: should it be the highlighted available item
+ /// or the highlighted selected item that is displayed?
+ bool selectedFocused() const { return selectedHasFocus_; };
+ /// Returns the selected index. Note that this will depend upon
+ /// selectedFocused().
+ QModelIndex getSelectedIndex() const;
- Q_SIGNALS:
- ///Emitted when the list of selected items has changed.
- void selectionChanged();
- ///Emitted when something has changed that might lead the containing
- ///dialog to want to update---the focused subwidget or selected item.
- ///(Specifically, it is emitted by *_PB_clicked() and *_LV_clicked.)
- ///NOTE: No automatic update of the button state is done here. If you
- ///just want to do that, connect updateHook() to update(). Much of the
- ///time, though, you will want to do a bit more processing first, so
- ///you can connect to some other function that itself calls update().
- void updateHook();
- ///Emitted on Ctrl-Enter in the availableLV. Intended to be connected
- ///to an "OK" event in the parent dialog.
- void okHook();
+Q_SIGNALS:
+ /// Emitted when the list of selected items has changed.
+ void selectionChanged();
+ /// Emitted when something has changed that might lead the containing
+ /// dialog to want to update---the focused subwidget or selected item.
+ /// (Specifically, it is emitted by *_PB_clicked() and *_LV_clicked.)
+ /// NOTE: No automatic update of the button state is done here. If you
+ /// just want to do that, connect updateHook() to updateView(). Much of the
+ /// time, though, you will want to do a bit more processing first, so
+ /// you can connect to some other function that itself calls updateView().
+ void updateHook();
+ /// Emitted on Ctrl-Enter in the availableLV. Intended to be connected
+ /// to an "OK" event in the parent dialog.
+ void okHook();
-
- protected:
- ///Given a QModelIndex from availableLV, determines whether it has
- ///been selected (i.e., is also in selectedLV).
- bool isSelected(const QModelIndex & idx);
- protected Q_SLOTS:
- ///
- void availableChanged(const QModelIndex & idx, const QModelIndex &);
- ///
- void selectedChanged(const QModelIndex & idx, const QModelIndex &);
- ///
- void addPB_clicked();
- ///
- void deletePB_clicked();
- ///
- void upPB_clicked();
- ///
- void downPB_clicked();
- ///
- void availableLV_clicked(const QModelIndex &);
- ///
- void availableLV_doubleClicked(const QModelIndex &);
- ///
- void selectedLV_clicked(const QModelIndex &);
- ///
- bool eventFilter(QObject *, QEvent *);
+protected:
+ /// Given a QModelIndex from availableLV, determines whether it has
+ /// been selected (i.e., is also in selectedLV).
+ bool isSelected(const QModelIndex & idx);
+ ///
+ bool insertRowToSelected(int i, QMap<int, QVariant> const & itemData);
+ ///
+ QAbstractItemView * availableLV;
+ ///
+ QListView * selectedLV;
+ ///
+ QPushButton * addPB;
+ ///
+ QPushButton * deletePB;
+ ///
+ QPushButton * upPB;
+ ///
+ QPushButton * downPB;
+ ///
+ QAbstractListModel * availableModel;
+ ///
+ QAbstractListModel * selectedModel;
+
+protected Q_SLOTS:
+ ///
+ void availableChanged(QModelIndex const & idx, QModelIndex const &);
+ ///
+ void selectedChanged(QModelIndex const & idx, QModelIndex const &);
+ ///
+ void availableChanged(QItemSelection const & qis, QItemSelection const &);
+ ///
+ void selectedChanged(QItemSelection const & qis, QItemSelection const &);
+ ///
+ virtual void addPB_clicked();
+ ///
+ virtual void deletePB_clicked();
+ ///
+ virtual void upPB_clicked();
+ ///
+ virtual void downPB_clicked();
+ ///
+ void availableLV_doubleClicked(const QModelIndex &);
+ ///
+ bool eventFilter(QObject *, QEvent *);
- private:
- QListView * availableLV;
- QListView * selectedLV;
- QPushButton * addPB;
- QPushButton * deletePB;
- QPushButton * upPB;
- QPushButton * downPB;
- QStringListModel * availableModel;
- QStringListModel * selectedModel;
- Dialog::View * dialog;
-
- bool selectedHasFocus_;
+private:
+ ///
+ virtual void updateAddPB();
+ ///
+ virtual void updateDelPB();
+ ///
+ virtual void updateDownPB();
+ ///
+ virtual void updateUpPB();
+ ///
+ bool selectedHasFocus_;
};
} // namespace frontend
} // namespace lyx
-#endif
+#endif // GUISELECTIONMANAGER