mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-09-23 08:39:07 +00:00
119 lines
3.5 KiB
C
119 lines
3.5 KiB
C
|
/**
|
||
|
* \file QSelectionManager.h
|
||
|
* This file is part of LyX, the document processor.
|
||
|
* Licence details can be found in the file COPYING.
|
||
|
*
|
||
|
* \author Richard Heck
|
||
|
* \author Et Alia
|
||
|
*
|
||
|
* Full author contact details are available in file CREDITS.
|
||
|
*/
|
||
|
|
||
|
#ifndef QSELECTIONMANAGER_H
|
||
|
#define QSELECTIONMANAGER_H
|
||
|
|
||
|
#include "Dialog.h"
|
||
|
#include <QObject>
|
||
|
#include <QKeyEvent>
|
||
|
#include <QStringList>
|
||
|
#include <QStringListModel>
|
||
|
#include <QListView>
|
||
|
#include <QPushButton>
|
||
|
|
||
|
namespace lyx {
|
||
|
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 QCitationDialog.
|
||
|
* Note that this is a not a QWidget, though it could be converted to
|
||
|
* one. Rather, the managed widgets---see constructor for descripton
|
||
|
* of them---should be created independently, and then passed to the
|
||
|
* constructor.
|
||
|
*/
|
||
|
class QSelectionManager: public QObject {
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
///
|
||
|
QSelectionManager(
|
||
|
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_; };
|
||
|
|
||
|
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();
|
||
|
|
||
|
|
||
|
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 *);
|
||
|
|
||
|
private:
|
||
|
QListView * availableLV;
|
||
|
QListView * selectedLV;
|
||
|
QPushButton * addPB;
|
||
|
QPushButton * deletePB;
|
||
|
QPushButton * upPB;
|
||
|
QPushButton * downPB;
|
||
|
QStringListModel * availableModel;
|
||
|
QStringListModel * selectedModel;
|
||
|
Dialog::View * dialog;
|
||
|
|
||
|
bool selectedHasFocus_;
|
||
|
};
|
||
|
}//namespace frontend
|
||
|
}//namespace lyx
|
||
|
#endif
|