mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 10:52:49 +00:00
304 lines
11 KiB
C++
304 lines
11 KiB
C++
/***************************************************************************
|
|
* view.h
|
|
* This file is part of the KDE project
|
|
* copyright (c) 2005-2006 Cyrille Berger <cberger@cberger.net>
|
|
* copyright (C) 2006-2007 Sebastian Sauer <mail@dipe.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
* You should have received a copy of the GNU Library General Public License
|
|
* along with this program; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
* Boston, MA 02110-1301, USA.
|
|
***************************************************************************/
|
|
|
|
#ifndef KROSS_VIEW_H
|
|
#define KROSS_VIEW_H
|
|
|
|
#include <kross/core/krossconfig.h>
|
|
|
|
#include <QtCore/QObject>
|
|
#include <QtGui/QWidget>
|
|
#include <QtCore/qabstractitemmodel.h>
|
|
#include <QtGui/qitemselectionmodel.h>
|
|
#include <QtGui/QTreeView>
|
|
|
|
#include <kdialog.h>
|
|
|
|
class KLineEdit;
|
|
class QComboBox;
|
|
class QItemSelection;
|
|
class KActionCollection;
|
|
class KUrlRequester;
|
|
|
|
namespace Kross {
|
|
|
|
class Action;
|
|
class ActionCollection;
|
|
|
|
/**
|
|
* The ActionCollectionEditor class implements a general editor
|
|
* for \a Action and \a ActionCollection instances.
|
|
*
|
|
* Example that shows how to display the editor with an \a Action ;
|
|
* \code
|
|
* KDialog d(this);
|
|
* Action* a = new Action();
|
|
* new ActionCollectionEditor(a, d.mainWidget());
|
|
* d.exec();
|
|
* \endcode
|
|
*
|
|
* Example that shows how to display the editor with an \a ActionCollection ;
|
|
* \code
|
|
* KDialog d(this);
|
|
* ActionCollection* c = new ActionCollection();
|
|
* new ActionCollectionEditor(c, d.mainWidget());
|
|
* d.exec();
|
|
* \endcode
|
|
*/
|
|
class KROSSUI_EXPORT ActionCollectionEditor : public QWidget
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Constructor.
|
|
* \param action The \a Action instance this editor should
|
|
* operate on.
|
|
* \param parent The optional parent widget this widget is child of.
|
|
*/
|
|
explicit ActionCollectionEditor(Action* action, QWidget* parent = 0);
|
|
|
|
/**
|
|
* Constructor.
|
|
* \param collection The \a ActionCollection instance this
|
|
* editor should operate on.
|
|
* \param parent The optional parent widget this widget is child of.
|
|
*/
|
|
explicit ActionCollectionEditor(ActionCollection* collection, QWidget* parent = 0);
|
|
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~ActionCollectionEditor();
|
|
|
|
/**
|
|
* \return the \a Action instance this editor operates on or
|
|
* NULL if this editor does not operate on a \a Action instance.
|
|
*/
|
|
Action* action() const;
|
|
|
|
/**
|
|
* \return the \a ActionCollection instance this editor operates on or
|
|
* NULL if this editor does not operate on a \a ActionCollection instance.
|
|
*/
|
|
ActionCollection* collection() const;
|
|
|
|
/**
|
|
* \return true if the values within the editor fields are valid.
|
|
*/
|
|
virtual bool isValid();
|
|
|
|
/**
|
|
* This method got called if the changes done in the editor
|
|
* should be saved aka committed to the \a Action or
|
|
* \a ActionCollection instance.
|
|
*/
|
|
virtual void commit();
|
|
|
|
/**
|
|
* Following getters are providing access to the edit-widgets once the
|
|
* \a initGui() was called by the constructors. Some widgets like e.g.
|
|
* the \a fileEdit() may return NULL if they are not used / displayed
|
|
* (what is for the fileEdit the case if this \a ActionCollectionEditor
|
|
* instance has no \a Action ).
|
|
*/
|
|
QLineEdit* nameEdit() const;
|
|
QLineEdit* textEdit() const;
|
|
QLineEdit* commentEdit() const;
|
|
QLineEdit* iconEdit() const;
|
|
QComboBox* interpreterEdit() const;
|
|
KUrlRequester* fileEdit() const;
|
|
|
|
protected:
|
|
|
|
/**
|
|
* Initialize the GUI. Called by the both constructors and does
|
|
* create e.g. the \a nameEdit() and the \a textEdit() widgets.
|
|
*/
|
|
virtual void initGui();
|
|
|
|
private:
|
|
/// \internal d-pointer class.
|
|
class Private;
|
|
/// \internal d-pointer instance.
|
|
Private* const d;
|
|
};
|
|
|
|
/**
|
|
* The ActionCollectionView class shows a QTreeView where the content of a
|
|
* \a ActionCollection is displayed and optional actions to run, stop,
|
|
* add, edit and remove scripts are provided.
|
|
*
|
|
* Example how to create, fill and use an instance of a ActionCollectionView;
|
|
* \code
|
|
* // We like to show the widget in a dialog.
|
|
* KDialog d(this);
|
|
* // Create the view.
|
|
* ActionCollectionView* v = new ActionCollectionView( d.mainWidget() );
|
|
* // Create the model.
|
|
* ActionCollectionModel::Mode mode( ActionCollectionModel::Icons | ActionCollectionModel::ToolTips | ActionCollectionModel::UserCheckable );
|
|
* ActionCollectionModel* m = new ActionCollectionModel(view, Manager::self().actionCollection(), mode);
|
|
* // Set the model the view should use.
|
|
* v->setModel(m);
|
|
* // Show the dialog.
|
|
* d.exec();
|
|
* \endcode
|
|
*/
|
|
class KROSSUI_EXPORT ActionCollectionView : public QTreeView
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
|
|
/**
|
|
* Constructor.
|
|
* \param parent The optional parent widget this widget is child of.
|
|
*/
|
|
explicit ActionCollectionView(QWidget* parent = 0);
|
|
|
|
/**
|
|
* Destructor.
|
|
*/
|
|
virtual ~ActionCollectionView();
|
|
|
|
/**
|
|
* Set the model this view should use to \p model . Use an instance of
|
|
* \a ActionCollectionModel or \a ActionCollectionProxyModel as model.
|
|
*/
|
|
virtual void setModel(QAbstractItemModel* model);
|
|
|
|
/**
|
|
* \return true if the collection was modified.
|
|
*/
|
|
bool isModified() const;
|
|
|
|
/**
|
|
* Set the internal modified state of the collection to \p modified .
|
|
*/
|
|
void setModified(bool modified);
|
|
|
|
/**
|
|
* \return the KActionCollection which is filled with KAction
|
|
* instances this view provides. Per default there are the
|
|
* actions "run" to run a script, "stop" to stop execution, "edit"
|
|
* to edit the selected item, "add" to add a new item or resource,
|
|
* "remove" to remove the selected item and "manager" to call and
|
|
* show the modal Script Manager dialog.
|
|
*/
|
|
KActionCollection* actionCollection() const;
|
|
|
|
/**
|
|
* \return the KPushButton instance which has the actionname \p actionname
|
|
* or NULL if there is not such button.
|
|
*/
|
|
KPushButton* button(const QString& actionname) const;
|
|
|
|
/**
|
|
* Create and return a new KPushButton instance for the given actionname.
|
|
* \param parentWidget The parent widget.
|
|
* \param actionname The name of the action. Each button points to an action
|
|
* from within the \a actionCollection() and triggers that action if the
|
|
* button got clicked.
|
|
* \return The new KPushButton instance or NULL if e.g. there exist no
|
|
* such action with \p actionname .
|
|
*/
|
|
KPushButton* createButton(QWidget* parentWidget, const QString& actionname);
|
|
|
|
public Q_SLOTS:
|
|
|
|
/**
|
|
* Called if the "run" action was triggered and the selected script
|
|
* should be executed.
|
|
*/
|
|
virtual void slotRun();
|
|
|
|
/**
|
|
* Called if the "stop" action was triggered and the selected script
|
|
* stops execution if running.
|
|
*/
|
|
virtual void slotStop();
|
|
|
|
/**
|
|
* Called if the "edit" action was triggered and the select item should
|
|
* be edited via the scripts manager editor dialog.
|
|
*/
|
|
virtual void slotEdit();
|
|
|
|
/**
|
|
* Called if the "add" action was triggered and a new item should be added.
|
|
*/
|
|
virtual void slotAdd();
|
|
|
|
/**
|
|
* Called if the "remove" action was triggered and the selected item
|
|
* should be removed.
|
|
*/
|
|
virtual void slotRemove();
|
|
|
|
Q_SIGNALS:
|
|
|
|
/**
|
|
* This signal is emitted if the enabled/disabled state of an action
|
|
* changed. This happens for example if the slotSelectionChanged() above
|
|
* got called cause another item was selected.
|
|
* \param actionname The name of the action that changed. You are able
|
|
* to use \a actionCollection() to receive the to the name matching
|
|
* \a KAction instance. You are able to use e.g. a QSignalMapper here to
|
|
* map such changes direct to your e.g. \a KPushButton instances used
|
|
* to display some of the actions provided with \a actionCollection() .
|
|
*/
|
|
void enabledChanged(const QString& actionname);
|
|
|
|
protected Q_SLOTS:
|
|
|
|
/**
|
|
* This slot got called if the data changed.
|
|
*/
|
|
virtual void slotDataChanged(const QModelIndex& topLeft, const QModelIndex& bottomRight);
|
|
|
|
/**
|
|
* This slot got called if the enable/disable state of an action changed.
|
|
*/
|
|
virtual void slotEnabledChanged(const QString& actionname);
|
|
|
|
/**
|
|
* This slot got called if the selected item changed.
|
|
*/
|
|
virtual void slotSelectionChanged();
|
|
|
|
protected:
|
|
|
|
/**
|
|
* This method provides us access to the QItemSelection. Compared to
|
|
* the selectionModel()->selection() method this method does also
|
|
* map the selection to the source-model for the case e.g. the
|
|
* \a ActionCollectionProxyModel proxy-model was used rather then
|
|
* a \a ActionCollectionModel direct.
|
|
*/
|
|
QItemSelection itemSelection() const;
|
|
|
|
private:
|
|
/// \internal d-pointer class.
|
|
class Private;
|
|
/// \internal d-pointer instance.
|
|
Private* const d;
|
|
};
|
|
|
|
}
|
|
|
|
#endif
|