]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/GuiSelectionManager.h
Use <cstdint> instead of <boost/cstdint.hpp>
[lyx.git] / src / frontends / qt4 / GuiSelectionManager.h
index ddb7d2c665dcd85de5e28b4a5d694dc1b7f61733..9875396864da53701896d58cc226f99cd6cdeceb 100644 (file)
 
 #include <QObject>
 
+class QAbstractItemModel;
 class QAbstractListModel;
 class QModelIndex;
 class QListView;
 class QPushButton;
 class QVariant;
 class QAbstractItemView;
+class QItemSelection;
 template <class T, class U> class QMap;
 
 namespace lyx {
@@ -27,9 +29,9 @@ namespace frontend {
 
 /** Class to manage a collection of widgets that allows selection
  *  of items from a list of available items. Adapted from code originally
- *  written for GuiCitationDialog. 
+ *  written for GuiCitationDialog.
  *  Note that this is a not a QWidget, though it could be converted to
- *  one. Rather, the managed widgets---see constructor for descripton 
+ *  one. Rather, the managed widgets---see constructor for descripton
  *  of them---should be created independently, and then passed to the
  *  constructor.
  */
@@ -39,33 +41,37 @@ class GuiSelectionManager : public QObject
 
 public:
        ///
-       GuiSelectionManager(
-               QAbstractItemView * availableLV,
-               QListView * selectedLV,
-               QPushButton * addPB, 
-               QPushButton * delPB, 
-               QPushButton * upPB, 
-               QPushButton * downPB,
-               QAbstractListModel * availableModel,
-               QAbstractListModel * selectedModel);
+       GuiSelectionManager(QObject * parent,
+                                               QAbstractItemView * availableLV,
+                                               QAbstractItemView * selectedLV,
+                                               QPushButton * addPB,
+                                               QPushButton * delPB,
+                                               QPushButton * upPB,
+                                               QPushButton * downPB,
+                                               QAbstractItemModel * availableModel,
+                                               QAbstractItemModel * selectedModel,
+                                               int const main_sel_col = 0);
        /// 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, 
+       /// 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() { return selectedHasFocus_; };
+       bool selectedFocused() const { return selectedHasFocus_; }
+       /// Returns the selected index. Note that this will depend upon
+       /// selectedFocused().
+       QModelIndex getSelectedIndex(int const c = 0) const;
 
 Q_SIGNALS:
-       /// Emitted when the list of selected items has changed. 
+       /// Emitted when the list of selected items has changed.
        void selectionChanged();
-       /// Emitted when something has changed that might lead the containing 
+       /// 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
@@ -73,7 +79,7 @@ Q_SIGNALS:
        /// 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 
+       /// Emitted on Ctrl-Enter in the availableLV. Intended to be connected
        /// to an "OK" event in the parent dialog.
        void okHook();
 
@@ -83,29 +89,37 @@ protected:
        /// been selected (i.e., is also in selectedLV).
        bool isSelected(const QModelIndex & idx);
        ///
-       bool insertRowToSelected(int i, QMap<int, QVariant> const & itemData);
+       bool insertRowToSelected(int i, QMap<int, QVariant> const & itemData);
+       ///
+       bool insertRowToSelected(int i, QMap<int, QMap<int, QVariant>> &);
        ///
        QAbstractItemView * availableLV;
        ///
-       QListView * selectedLV;
+       QAbstractItemView * selectedLV;
        ///
        QPushButton * addPB;
        ///
-       QPushButton * deletePB; 
+       QPushButton * deletePB;
        ///
        QPushButton * upPB;
        ///
        QPushButton * downPB;
        ///
-       QAbstractListModel * availableModel;
+       QAbstractItemModel * availableModel;
        ///
-       QAbstractListModel * selectedModel;
+       QAbstractItemModel * selectedModel;
 
 protected Q_SLOTS:
        ///
-       void availableChanged(const QModelIndex & idx, const QModelIndex &);
+       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 &);
        ///
-       void selectedChanged(const QModelIndex & idx, const QModelIndex &);
+       void selectedEdited();
        ///
        virtual void addPB_clicked();
        ///
@@ -115,13 +129,11 @@ protected Q_SLOTS:
        ///
        virtual void downPB_clicked();
        ///
-       void availableLV_clicked(const QModelIndex &);
-       ///
        void availableLV_doubleClicked(const QModelIndex &);
        ///
-       void selectedLV_clicked(const QModelIndex &);
-       ///
        bool eventFilter(QObject *, QEvent *);
+       ///
+       void updateButtons();
 
 private:
        ///
@@ -134,6 +146,8 @@ private:
        virtual void updateUpPB();
        ///
        bool selectedHasFocus_;
+       ///
+       int main_sel_col_;
 };
 
 } // namespace frontend