kexi
form.h00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef KFORMDESIGNERFORM_H
00023 #define KFORMDESIGNERFORM_H
00024
00025 #include <qobject.h>
00026 #include <qptrlist.h>
00027
00028 #include "resizehandle.h"
00029 #include "utils.h"
00030 #include "objecttree.h"
00031
00032 class QWidget;
00033 class QDomElement;
00034 class KActionCollection;
00035 class KCommandHistory;
00036 class KCommand;
00037 class PixmapCollection;
00038
00039 namespace KFormDesigner {
00040
00041 class Container;
00042 class WidgetPropertySet;
00043 class WidgetLibrary;
00044 class FormManager;
00045 class ObjectTree;
00046 class ObjectTreeItem;
00047 class ConnectionBuffer;
00048
00050
00053 class KFORMEDITOR_EXPORT FormWidget
00054 {
00055 public:
00056 FormWidget();
00057 virtual ~FormWidget();
00058
00063 virtual void drawRects(const QValueList<QRect> &list, int type) = 0;
00064
00065 virtual void drawRect(const QRect &r, int type) = 0;
00066
00068 virtual void initBuffer() = 0;
00069
00071 virtual void clearForm() = 0;
00072
00075 virtual void highlightWidgets(QWidget *from, QWidget *to) = 0;
00076
00077 protected:
00078 Form *m_form;
00079
00080 friend class Form;
00081 };
00082
00084 class FormPrivate
00085 {
00086 public:
00087 FormPrivate();
00088 ~FormPrivate();
00089
00090
00091 QGuardedPtr<Container> toplevel;
00092 ObjectTree *topTree;
00093 QGuardedPtr<QWidget> widget;
00094
00095 WidgetList selected;
00096 ResizeHandleSet::Dict resizeHandles;
00097
00098 bool dirty;
00099 bool interactive;
00100 bool design;
00101 QString filename;
00102
00103 KCommandHistory *history;
00104 KActionCollection *collection;
00105
00106 ObjectTreeList tabstops;
00107 bool autoTabstops;
00108 ConnectionBuffer *connBuffer;
00109
00110 PixmapCollection *pixcollection;
00111
00113 QMap<QObject*,QCursor> cursors;
00114
00116 QStringList *mouseTrackers;
00117
00118 FormWidget *formWidget;
00119
00122 QMap<QCString,QString> headerProperties;
00123
00125 uint formatVersion;
00127 uint originalFormatVersion;
00128 };
00129
00134
00135 class KFORMEDITOR_EXPORT Form : public QObject
00136 {
00137 Q_OBJECT
00138
00139 public:
00142 Form(WidgetLibrary* library, const char *name=0, bool designMode = true);
00143 ~Form();
00144
00146 WidgetLibrary* library() const { return m_lib; }
00147
00155 void createToplevel(QWidget *container, FormWidget *formWidget =0,
00156 const QCString &classname="QWidget");
00157
00160 Container* toplevelContainer() const { return d->toplevel; }
00161
00163 FormWidget* formWidget() const { return d->formWidget; }
00164
00166 ObjectTree* objectTree() const { return d->topTree; }
00167
00169 QWidget* widget() const;
00170
00171
00172
00173
00177 Container* activeContainer();
00178
00183 Container* parentContainer(QWidget *w=0);
00184
00188 ObjectTreeItem* commonParentContainer(WidgetList *wlist);
00189
00191 WidgetList* selectedWidgets() const {return &(d->selected);}
00192
00196 QWidget* selectedWidget() const { return d->selected.count()==1 ? d->selected.first() : 0; }
00197
00200 void emitActionSignals(bool withUndoAction=true);
00201
00204 void emitSelectionSignals();
00205
00209 void setInteractiveMode(bool interactive) { d->interactive = interactive; }
00210
00217 bool interactiveMode() const { return d->interactive; }
00218
00222 void setDesignMode(bool design);
00223
00225 bool designMode() const { return d->design; }
00226
00227 bool isModified() { return d->dirty; }
00228
00231 int gridSize() { return 10; }
00232
00234 int defaultMargin() { return 11;}
00235
00237 int defaultSpacing() { return 6;}
00238
00240 void emitChildAdded(ObjectTreeItem *item);
00241
00243 void emitChildRemoved(ObjectTreeItem *item);
00244
00247 QString filename() const { return d->filename; }
00248
00250 void setFilename(const QString &file) { d->filename = file; }
00251
00252 KCommandHistory* commandHistory() const { return d->history; }
00253 ConnectionBuffer* connectionBuffer() const { return d->connBuffer; }
00254 PixmapCollection* pixmapCollection() const { return d->pixcollection; }
00255
00258 void addCommand(KCommand *command, bool execute);
00259
00261 void clearCommandHistory();
00262
00266 ObjectTreeList* tabStops() const { return &(d->tabstops); }
00267
00268 inline ObjectTreeListIterator tabStopsIterator() const { return ObjectTreeListIterator(d->tabstops); }
00269
00272 void updateTabStopsOrder();
00273
00275 void addWidgetToTabStops(ObjectTreeItem *it);
00276
00278 bool autoTabStops() const { return d->autoTabstops; }
00279
00285 void setAutoTabStops(bool autoTab) { d->autoTabstops = autoTab;}
00286
00292 void autoAssignTabStops();
00293
00294 #ifdef KEXI_DEBUG_GUI
00296 QString m_recentlyLoadedUICode;
00297 #endif
00298
00302
00303
00304 ResizeHandleSet* resizeHandlesForWidget(QWidget* w);
00305
00308 QMap<QCString,QString>* headerProperties() const { return &d->headerProperties; }
00309
00312 uint formatVersion() const;
00313 void setFormatVersion(uint ver);
00314
00317 uint originalFormatVersion() const;
00318 void setOriginalFormatVersion(uint ver);
00319
00320 public slots:
00324 void changeName(const QCString &oldname, const QCString &newname);
00325
00332 void setSelectedWidget(QWidget *selected, bool add=false, bool dontRaise=false,
00333 bool moreWillBeSelected = false);
00334
00337 void unSelectWidget(QWidget *w);
00338
00340 void selectFormWidget();
00341
00342 void clearSelection();
00343
00344 protected slots:
00348 void formDeleted();
00349
00350 void emitUndoEnabled();
00351 void emitRedoEnabled();
00352
00355 void slotCommandExecuted();
00356
00360 void slotFormRestored();
00361
00362 signals:
00367 void selectionChanged(QWidget *w, bool add, bool moreWillBeSelected = false);
00368
00372 void childAdded(ObjectTreeItem *it);
00373
00377 void childRemoved(ObjectTreeItem *it);
00378
00380 void destroying();
00381
00382 protected:
00383 void setConnectionBuffer(ConnectionBuffer *b) { d->connBuffer = b; }
00384
00385 void setFormWidget(FormWidget* w);
00386 private:
00387 WidgetLibrary *m_lib;
00388 FormPrivate *d;
00389
00390 friend class FormManager;
00391 friend class FormWidget;
00392 friend class ConnectionDialog;
00393 };
00394
00395 }
00396
00397 #endif
|