diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/formeditor/commands.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/formeditor/commands.h')
-rw-r--r-- | kexi/formeditor/commands.h | 380 |
1 files changed, 380 insertions, 0 deletions
diff --git a/kexi/formeditor/commands.h b/kexi/formeditor/commands.h new file mode 100644 index 00000000..619ef791 --- /dev/null +++ b/kexi/formeditor/commands.h @@ -0,0 +1,380 @@ +/* This file is part of the KDE project + Copyright (C) 2004 Cedric Pasteur <[email protected]> + Copyright (C) 2005 Jaroslaw Staniek <[email protected]> + + This library 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 library 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 library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KFORMEDITOR_COMMANDS_H +#define KFORMEDITOR_COMMANDS_H + +#include <qmap.h> +#include <qdict.h> +#include <qptrlist.h> +#include <qptrdict.h> +#include <qvariant.h> +#include <qdom.h> + +#include <kcommand.h> +#include "utils.h" + +class QWidget; +class QRect; +class QPoint; +class QStringList; +class QCString; + +namespace KFormDesigner { + +class WidgetPropertySet; +class ObjectTreeItem; +class Container; +class Form; + +//! Base class for KFormDesigner's commands +class KFORMEDITOR_EXPORT Command : public KCommand +{ + public: + Command(); + virtual ~Command(); + + virtual void debug() = 0; +}; + +/*! This command is used when changing a property for one or more widgets. \a oldvalues is a QMap + of the old values of the property for every widget, to allow reverting the change. \a value is + the new value of the property. You can use the simpler constructor for a single widget. + */ +class KFORMEDITOR_EXPORT PropertyCommand : public Command +{ + public: + PropertyCommand(WidgetPropertySet *set, const QCString &wname, const QVariant &oldValue, + const QVariant &value, const QCString &property); + PropertyCommand(WidgetPropertySet *set, const QMap<QCString, QVariant> &oldvalues, + const QVariant &value, const QCString &property); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + QCString property() const { return m_property; } + + void setValue(const QVariant &value); + const QMap<QCString, QVariant>& oldValues() const { return m_oldvalues; } + virtual void debug(); + + protected: + WidgetPropertySet *m_propSet; + QVariant m_value; + QMap<QCString, QVariant> m_oldvalues; + QCString m_property; +}; + +/*! This command is used when moving multiples widgets at the same time, while holding Ctrl or Shift. + You need to supply a list of widget names, and the position of the cursor before moving. Use setPos() + to tell the new cursor pos every time it changes.*/ +class KFORMEDITOR_EXPORT GeometryPropertyCommand : public Command +{ + public: + GeometryPropertyCommand(WidgetPropertySet *set, const QStringList &names, const QPoint& oldPos); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + void setPos(const QPoint& pos); + virtual void debug(); + + protected: + WidgetPropertySet *m_propSet; + QStringList m_names; + QPoint m_oldPos; + QPoint m_pos; +}; + +/*! This command is used when an item in 'Align Widgets position' is selected. You just need +to give the list of widget names (the selected ones), and the + type of alignment (see the enum for possible values). */ +class KFORMEDITOR_EXPORT AlignWidgetsCommand : public Command +{ + public: + enum { AlignToGrid = 100, AlignToLeft, AlignToRight, AlignToTop, AlignToBottom }; + + AlignWidgetsCommand(int type, WidgetList &list, Form *form); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + Form *m_form; + int m_type; + QMap<QCString, QPoint> m_pos; +}; + +/*! This command is used when an item in 'Adjust Widgets Size' is selected. You just need + to give the list of widget names (the selected ones), and the + type of size modification (see the enum for possible values). */ +class KFORMEDITOR_EXPORT AdjustSizeCommand : public Command +{ + public: + enum { SizeToGrid = 200, SizeToFit, SizeToSmallWidth, SizeToBigWidth, + SizeToSmallHeight, SizeToBigHeight }; + + AdjustSizeCommand(int type, WidgetList &list, Form *form); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + QSize getSizeFromChildren(ObjectTreeItem *item); + + protected: + Form *m_form; + int m_type; + QMap<QCString, QPoint> m_pos; + QMap<QCString, QSize> m_sizes; +}; + +/*! This command is used when switching the layout of a Container. It remembers the old pos + of every widget inside the Container. */ +class KFORMEDITOR_EXPORT LayoutPropertyCommand : public PropertyCommand +{ + public: + LayoutPropertyCommand(WidgetPropertySet *set, const QCString &wname, + const QVariant &oldValue, const QVariant &value); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + Form *m_form; + QMap<QCString,QRect> m_geometries; +}; + +/*! This command is used when inserting a widger using toolbar or menu. You only need to give +the parent Container and the widget pos. + The other information is taken from FormManager. */ +class KFORMEDITOR_EXPORT InsertWidgetCommand : public Command +{ + public: + InsertWidgetCommand(Container *container); + + /*! This ctor allows to set explicit class name and position. + Used for dropping widgets on the form surface. + If \a namePrefix is empty, widget's unique name is constructed using + hint for \a className (WidgetLibrary::namePrefix()), + otherwise, \a namePrefix is used to generate widget's name. + This allows e.g. inserting a widgets having name constructed using + */ + InsertWidgetCommand(Container *container, const QCString& className, + const QPoint& pos, const QCString& namePrefix = QCString()); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + //! \return inserted widget's name + QCString widgetName() const { return m_name; } + + protected: + Form *m_form; + QString m_containername; + QPoint m_point; + QCString m_name; + QCString m_class; + QRect m_insertRect; +}; + +/*! This command is used when creating a layout from some widgets using "Lay out in..." menu item. + It remembers the old pos of every widget, and takes care of updating ObjectTree too. You need + to supply a WidgetList of the selected widgets. */ +class KFORMEDITOR_EXPORT CreateLayoutCommand : public Command +{ + public: + CreateLayoutCommand(int layoutType, WidgetList &list, Form *form); + CreateLayoutCommand() {;} // for BreakLayoutCommand + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + Form *m_form; + QString m_containername; + QString m_name; + QMap<QCString,QRect> m_pos; + int m_type; +}; + +/*! This command is used when the 'Break Layout' menu item is selected. It does exactly the + opposite of CreateLayoutCommand. */ +class KFORMEDITOR_EXPORT BreakLayoutCommand : public CreateLayoutCommand +{ + public: + BreakLayoutCommand(Container *container); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); +}; + +/*! This command is used when pasting widgets. You need to give the QDomDocument containing +the widget(s) to paste, and optionnally the point where to paste widgets. */ +class KFORMEDITOR_EXPORT PasteWidgetCommand : public Command +{ + public: + PasteWidgetCommand(QDomDocument &domDoc, Container *container, const QPoint& p = QPoint()); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + /*! Internal function used to change the coordinates of a widget to \a newpos + before pasting it (to paste it at the position of the contextual menu). It modifies + the "geometry" property of the QDomElement representing the widget. */ + void changePos(QDomElement &widg, const QPoint &newpos); + /*! Internal function used to fix the coordinates of a widget before pasting it + (to avoid having two widgets at the same position). It moves the widget by + (10, 10) increment (several times if there are already pasted widgets at this position). */ + void fixPos(QDomElement &el, Container *container); + void moveWidgetBy(QDomElement &el, Container *container, const QPoint &p); + /*! Internal function used to fix the names of the widgets before pasting them. + It prevents from pasting a widget with + the same name as an actual widget. The child widgets are also fixed recursively.\n + If the name of the widget ends with a number (eg "QLineEdit1"), the new name is + just incremented by one (eg becomes "QLineEdit2"). Otherwise, a "2" is just + appended at the end of the name (eg "myWidget" becomes "myWidget2"). */ + void fixNames(QDomElement &el); + + protected: + Form *m_form; + QCString m_data; + QString m_containername; + QPoint m_point; + QStringList m_names; +}; + +/*! This command is used when deleting a widget using the "Delete" menu item. +You need to give a WidgetList of the selected widgets. */ +class KFORMEDITOR_EXPORT DeleteWidgetCommand : public Command +{ + public: + DeleteWidgetCommand(WidgetList &list, Form *form); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + QDomDocument m_domDoc; + Form *m_form; + QMap<QCString, QCString> m_containers; + QMap<QCString, QCString> m_parents; +}; + +/*! This command is used when cutting widgets. It is basically a DeleteWidgetCommand +which also updates the clipboard contents. */ +class KFORMEDITOR_EXPORT CutWidgetCommand : public DeleteWidgetCommand +{ + public: + CutWidgetCommand(WidgetList &list, Form *form); + + virtual void execute(); + virtual void unexecute(); + virtual QString name() const; + virtual void debug(); + + protected: + QCString m_data; +}; + +/*! A Command Group is a command that holds several subcommands. + It will appear as one to the user and in the command history, + but it can use the implementation of multiple commands internally. + It extends KMacroCommand by providing the list of commands executed. + Selected subcommands can be marked as nonexecutable by adding them using + addCommand(KCommand *command, bool allowExecute) special method. +*/ +class KFORMEDITOR_EXPORT CommandGroup : public Command +{ + public: + CommandGroup( const QString & name, WidgetPropertySet *propSet ); + virtual ~CommandGroup(); + + /*! Like KmacroCommand::addCommand(KCommand*) + but if \a allowExecute is false, \a command will not be executed + as a subcommand when CommandGroup::execute() is called. + + This is useful e.g. in KexiFormView::insertAutoFields(), + where a number of subcommands of InsertWidgetCommand type and subcommands + is groupped using CommandGroup but some of these subcommands are executed + before executing CommandGroup::execute(). + + If \a allowExecute is true, this method behaves exactly like + KmacroCommand::addCommand(KCommand*). + + Note that unexecute() doesn't check \a allowExecute flag: + all subcommands will be unexecuted (in reverse order + to the one in which they were added). + */ + void addCommand(KCommand *command, bool allowExecute); + + /*! Executes all subcommands added to this group + in the same order as they were added. Subcommands added with + addCommand(KCommand *command, bool allowExecute) where allowExecute == false, + will not be executed. */ + virtual void execute(); + + /*! Unexecutes all subcommands added to this group, + (in reversed order). */ + virtual void unexecute(); + + virtual QString name() const; + + /*! \return a list of all subcommands of this group. + Note that if a given subcommand is a group itself, + it will not be expanded to subcommands on this list. */ + const QPtrList<KCommand>& commands() const; + + /*! Resets all 'allowExecute' flags that was set in addCommand(). + Call this after calling CommandGroup::execute() to ensure that + in the future, when REDO is be executed, all subcommands will be executed. */ + void resetAllowExecuteFlags(); + + virtual void debug(); + + protected: + class SubCommands; + SubCommands *m_subCommands; + //! Used to store pointers to subcommands that shouldn't be executed + //! on CommandGroup::execute() + QPtrDict<char> m_commandsShouldntBeExecuted; + WidgetPropertySet *m_propSet; +}; + +} + +#endif |