1 /****************************************************************************
2 **
3 ** Copyright (C) 2015 The Qt Company Ltd.
4 ** Contact: http://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Designer of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see http://www.qt.io/terms-conditions. For further
15 ** information use the contact form at http://www.qt.io/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 or version 3 as published by the Free
20 ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
21 ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
22 ** following information to ensure the GNU Lesser General Public License
23 ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
24 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
25 **
26 ** As a special exception, The Qt Company gives you certain additional
27 ** rights. These rights are described in The Qt Company LGPL Exception
28 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
29 **
30 ** GNU General Public License Usage
31 ** Alternatively, this file may be used under the terms of the GNU
32 ** General Public License version 3.0 as published by the Free Software
33 ** Foundation and appearing in the file LICENSE.GPL included in the
34 ** packaging of this file.  Please review the following information to
35 ** ensure the GNU General Public License version 3.0 requirements will be
36 ** met: http://www.gnu.org/copyleft/gpl.html.
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #include "abstractformwindow.h"
43 
44 #include <widgetfactory_p.h>
45 
46 #include <QtGui/QTabBar>
47 #include <QtGui/QSizeGrip>
48 #include <QtGui/QAbstractButton>
49 #include <QtGui/QToolBox>
50 #include <QtGui/QMenuBar>
51 #include <QtGui/QMainWindow>
52 #include <QtGui/QDockWidget>
53 #include <QtGui/QToolBar>
54 
55 #include <QtCore/qdebug.h>
56 
57 QT_BEGIN_NAMESPACE
58 
59 /*!
60     \class QDesignerFormWindowInterface
61 
62     \brief The QDesignerFormWindowInterface class allows you to query
63     and manipulate form windows appearing in Qt Designer's workspace.
64 
65     \inmodule QtDesigner
66 
67     QDesignerFormWindowInterface provides information about
68     the associated form window as well as allowing its properties to be
69     altered. The interface is not intended to be instantiated
70     directly, but to provide access to \QD's current form windows
71     controlled by \QD's \l {QDesignerFormWindowManagerInterface}{form
72     window manager}.
73 
74     If you are looking for the form window containing a specific
75     widget, you can use the static
76     QDesignerFormWindowInterface::findFormWindow() function:
77 
78     \snippet doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp 0
79 
80     But in addition, you can access any of the current form windows
81     through \QD's form window manager: Use the
82     QDesignerFormEditorInterface::formWindowManager() function to
83     retrieve an interface to the manager. Once you have this
84     interface, you have access to all of \QD's current form windows
85     through the QDesignerFormWindowManagerInterface::formWindow()
86     function. For example:
87 
88     \snippet doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp 1
89 
90     The pointer to \QD's current QDesignerFormEditorInterface object
91     (\c formEditor in the example above) is provided by the
92     QDesignerCustomWidgetInterface::initialize() function's
93     parameter. When implementing a custom widget plugin, you must
94     subclass the QDesignerCustomWidgetInterface class to expose your
95     plugin to \QD.
96 
97     Once you have the form window, you can query its properties. For
98     example, a plain custom widget plugin is managed by \QD only at
99     its top level, i.e. none of its child widgets can be resized in
100     \QD's workspace. But QDesignerFormWindowInterface provides you
101     with functions that enables you to control whether a widget should
102     be managed by \QD, or not:
103 
104     \snippet doc/src/snippets/code/tools_designer_src_lib_sdk_abstractformwindow.cpp 2
105 
106     The complete list of functions concerning widget management is:
107     isManaged(), manageWidget() and unmanageWidget(). There is also
108     several associated signals: widgetManaged(), widgetRemoved(),
109     aboutToUnmanageWidget() and widgetUnmanaged().
110 
111     In addition to controlling the management of widgets, you can
112     control the current selection in the form window using the
113     selectWidget(), clearSelection() and emitSelectionChanged()
114     functions, and the selectionChanged() signal.
115 
116     You can also retrieve information about where the form is stored
117     using absoluteDir(), its include files using includeHints(), and
118     its layout and pixmap functions using layoutDefault(),
119     layoutFunction() and pixmapFunction(). You can find out whether
120     the form window has been modified (but not saved) or not, using
121     the isDirty() function. You can retrieve its author(), its
122     contents(), its fileName(), associated comment() and
123     exportMacro(), its mainContainer(), its features(), its grid() and
124     its resourceFiles().
125 
126     The interface provides you with functions and slots allowing you
127     to alter most of this information as well. The exception is the
128     directory storing the form window. Finally, there is several
129     signals associated with changes to the information mentioned above
130     and to the form window in general.
131 
132     \sa QDesignerFormWindowCursorInterface,
133     QDesignerFormEditorInterface, QDesignerFormWindowManagerInterface
134 */
135 
136 /*!
137     \enum QDesignerFormWindowInterface::FeatureFlag
138 
139     This enum describes the features that are available and can be
140     controlled by the form window interface. These values are used
141     when querying the form window to determine which features it
142     supports:
143 
144     \value EditFeature      Form editing
145     \value GridFeature      Grid display and snap-to-grid facilities for editing
146     \value TabOrderFeature  Tab order management
147     \value DefaultFeature   Support for default features (form editing and grid)
148 
149     \sa hasFeature(), features()
150 */
151 
152 /*!
153     Constructs a form window interface with the given \a parent and
154     the specified window \a flags.
155 */
QDesignerFormWindowInterface(QWidget * parent,Qt::WindowFlags flags)156 QDesignerFormWindowInterface::QDesignerFormWindowInterface(QWidget *parent, Qt::WindowFlags flags)
157     : QWidget(parent, flags)
158 {
159 }
160 
161 /*!
162     Destroys the form window interface.
163 */
~QDesignerFormWindowInterface()164 QDesignerFormWindowInterface::~QDesignerFormWindowInterface()
165 {
166 }
167 
168 /*!
169     Returns a pointer to \QD's current QDesignerFormEditorInterface
170     object.
171 */
core() const172 QDesignerFormEditorInterface *QDesignerFormWindowInterface::core() const
173 {
174     return 0;
175 }
176 
177 /*!
178     \fn QDesignerFormWindowInterface *QDesignerFormWindowInterface::findFormWindow(QWidget *widget)
179 
180     Returns the form window interface for the given \a widget.
181 */
182 
stopFindAtTopLevel(const QObject * w,bool stopAtMenu)183 static inline bool stopFindAtTopLevel(const QObject *w, bool stopAtMenu)
184 {
185     // Do we need to go beyond top levels when looking for the form window?
186     // 1) A dialog has a window attribute at the moment it is created
187     //    before it is properly embedded into a form window. The property
188     //    sheet queries the layout attributes precisely at this moment.
189     // 2) In the case of floating docks and toolbars, we also need to go beyond the top level window.
190     // 3) In the case of menu editing, we don't want to block events from the
191     //    Designer menu, so, we say stop.
192     // Note that there must be no false positives for dialogs parented on
193     // the form (for example, the "change object name" dialog), else, its
194     // events will be blocked.
195 
196     if (stopAtMenu && w->inherits("QDesignerMenu"))
197         return true;
198     return !qdesigner_internal::WidgetFactory::isFormEditorObject(w);
199 }
200 
findFormWindow(QWidget * w)201 QDesignerFormWindowInterface *QDesignerFormWindowInterface::findFormWindow(QWidget *w)
202 {
203     while (w != 0) {
204         if (QDesignerFormWindowInterface *fw = qobject_cast<QDesignerFormWindowInterface*>(w)) {
205             return fw;
206         } else {
207             if (w->isWindow() && stopFindAtTopLevel(w, true))
208                 break;
209         }
210 
211         w = w->parentWidget();
212     }
213 
214     return 0;
215 }
216 
217 /*!
218     \fn QDesignerFormWindowInterface *QDesignerFormWindowInterface::findFormWindow(QObject *object)
219 
220     Returns the form window interface for the given \a object.
221 
222     \since 4.4
223 */
224 
findFormWindow(QObject * object)225 QDesignerFormWindowInterface *QDesignerFormWindowInterface::findFormWindow(QObject *object)
226 {
227     while (object != 0) {
228         if (QDesignerFormWindowInterface *fw = qobject_cast<QDesignerFormWindowInterface*>(object)) {
229             return fw;
230         } else {
231             QWidget *w = qobject_cast<QWidget *>(object);
232             // QDesignerMenu is a window, so stopFindAtTopLevel(w) returns 0.
233             // However, we want to find the form window for QActions of a menu.
234             // If this check is inside stopFindAtTopLevel(w), it will break designer
235             // menu editing (e.g. when clicking on items inside an opened menu)
236             if (w && w->isWindow() && stopFindAtTopLevel(w, false))
237                 break;
238 
239         }
240 
241         object = object->parent();
242     }
243 
244     return 0;
245 }
246 
247 /*!
248     \fn virtual QString QDesignerFormWindowInterface::fileName() const
249 
250     Returns the file name of the UI file that describes the form
251     currently being shown.
252 
253     \sa setFileName()
254 */
255 
256 /*!
257     \fn virtual QDir QDesignerFormWindowInterface::absoluteDir() const
258 
259     Returns the absolute location of the directory containing the form
260     shown in the form window.
261 */
262 
263 /*!
264     \fn virtual QString QDesignerFormWindowInterface::contents() const
265 
266     Returns details of the contents of the form currently being
267     displayed in the window.
268 */
269 
270 /*!
271     \fn virtual void QDesignerFormWindowInterface::setContents(QIODevice *device)
272 
273     Sets the form's contents using data obtained from the given \a device.
274 
275     Data can be read from QFile objects or any other subclass of QIODevice.
276 */
277 
278 /*!
279     \fn virtual Feature QDesignerFormWindowInterface::features() const
280 
281     Returns a combination of the features provided by the form window
282     associated with the interface. The value returned can be tested
283     against the \l Feature enum values to determine which features are
284     supported by the window.
285 
286     \sa setFeatures(), hasFeature()
287 */
288 
289 /*!
290     \fn virtual bool QDesignerFormWindowInterface::hasFeature(Feature feature) const
291 
292     Returns true if the form window offers the specified \a feature;
293     otherwise returns false.
294 
295     \sa features()
296 */
297 
298 /*!
299     \fn virtual QString QDesignerFormWindowInterface::author() const
300 
301     Returns details of the author or creator of the form currently
302     being displayed in the window.
303 */
304 
305 /*!
306     \fn virtual void QDesignerFormWindowInterface::setAuthor(const QString &author)
307 
308     Sets the details for the author or creator of the form to the \a
309     author specified.
310 */
311 
312 /*!
313     \fn virtual QString QDesignerFormWindowInterface::comment() const
314 
315     Returns comments about the form currently being displayed in the window.
316 */
317 
318 /*!
319     \fn virtual void QDesignerFormWindowInterface::setComment(const QString &comment)
320 
321     Sets the information about the form to the \a comment
322     specified. This information should be a human-readable comment
323     about the form.
324 */
325 
326 /*!
327     \fn virtual void QDesignerFormWindowInterface::layoutDefault(int *margin, int *spacing)
328 
329     Fills in the default margin and spacing for the form's default
330     layout in the \a margin and \a spacing variables specified.
331 */
332 
333 /*!
334     \fn virtual void QDesignerFormWindowInterface::setLayoutDefault(int margin, int spacing)
335 
336     Sets the default \a margin and \a spacing for the form's layout.
337 
338     \sa layoutDefault()
339 */
340 
341 /*!
342     \fn virtual void QDesignerFormWindowInterface::layoutFunction(QString *margin, QString *spacing)
343 
344     Fills in the current margin and spacing for the form's layout in
345     the \a margin and \a spacing variables specified.
346 */
347 
348 /*!
349     \fn virtual void QDesignerFormWindowInterface::setLayoutFunction(const QString &margin, const QString &spacing)
350 
351     Sets the \a margin and \a spacing for the form's layout.
352 
353     The default layout properties will be replaced by the
354     corresponding layout functions when \c uic generates code for the
355     form, that is, if the functions are specified. This is useful when
356     different environments requires different layouts for the same
357     form.
358 
359     \sa layoutFunction()
360 */
361 
362 /*!
363     \fn virtual QString QDesignerFormWindowInterface::pixmapFunction() const
364 
365     Returns the name of the function used to load pixmaps into the
366     form window.
367 
368     \sa setPixmapFunction()
369 */
370 
371 /*!
372     \fn virtual void QDesignerFormWindowInterface::setPixmapFunction(const QString &pixmapFunction)
373 
374     Sets the function used to load pixmaps into the form window
375     to the given \a pixmapFunction.
376 
377     \sa pixmapFunction()
378 */
379 
380 /*!
381     \fn virtual QString QDesignerFormWindowInterface::exportMacro() const
382 
383     Returns the export macro associated with the form currently being
384     displayed in the window.  The export macro is used when the form
385     is compiled to create a widget plugin.
386 
387     \sa {Creating Custom Widgets for Qt Designer}
388 */
389 
390 /*!
391     \fn virtual void QDesignerFormWindowInterface::setExportMacro(const QString &exportMacro)
392 
393     Sets the form window's export macro to \a exportMacro. The export
394     macro is used when building a widget plugin to export the form's
395     interface to other components.
396 */
397 
398 /*!
399     \fn virtual QStringList QDesignerFormWindowInterface::includeHints() const
400 
401     Returns a list of the header files that will be included in the
402     form window's associated UI file.
403 
404     Header files may be local, i.e. relative to the project's
405     directory, \c "mywidget.h", or global, i.e. part of Qt or the
406     compilers standard libraries: \c <QtGui/QWidget>.
407 
408     \sa setIncludeHints()
409 */
410 
411 /*!
412     \fn virtual void QDesignerFormWindowInterface::setIncludeHints(const QStringList &includeHints)
413 
414     Sets the header files that will be included in the form window's
415     associated UI file to the specified \a includeHints.
416 
417     Header files may be local, i.e. relative to the project's
418     directory, \c "mywidget.h", or global, i.e. part of Qt or the
419     compilers standard libraries: \c <QtGui/QWidget>.
420 
421     \sa includeHints()
422 */
423 
424 /*!
425     \fn virtual QDesignerFormWindowCursorInterface *QDesignerFormWindowInterface::cursor() const
426 
427     Returns the cursor interface used by the form window.
428 */
429 
430 /*!
431     \fn virtual int QDesignerFormWindowInterface::toolCount() const
432 
433     Returns the number of tools available.
434 
435     \internal
436 */
437 
438 /*!
439     \fn virtual int QDesignerFormWindowInterface::currentTool() const
440 
441     Returns the index of the current tool in use.
442 
443     \sa setCurrentTool()
444 
445     \internal
446 */
447 
448 /*!
449     \fn virtual void QDesignerFormWindowInterface::setCurrentTool(int index)
450 
451     Sets the current tool to be the one with the given \a index.
452 
453     \sa currentTool()
454 
455     \internal
456 */
457 
458 /*!
459     \fn virtual QDesignerFormWindowToolInterface *QDesignerFormWindowInterface::tool(int index) const
460 
461     Returns an interface to the tool with the given \a index.
462 
463     \internal
464 */
465 
466 /*!
467     \fn virtual void QDesignerFormWindowInterface::registerTool(QDesignerFormWindowToolInterface *tool)
468 
469     Registers the given \a tool with the form window.
470 
471     \internal
472 */
473 
474 /*!
475     \fn virtual QPoint QDesignerFormWindowInterface::grid() const = 0
476 
477     Returns the grid spacing used by the form window.
478 
479     \sa setGrid()
480 */
481 
482 /*!
483     \fn virtual QWidget *QDesignerFormWindowInterface::mainContainer() const
484 
485     Returns the main container widget for the form window.
486 
487     \sa setMainContainer()
488 */
489 
490 /*!
491     \fn virtual void QDesignerFormWindowInterface::setMainContainer(QWidget *mainContainer)
492 
493     Sets the main container widget on the form to the specified \a
494     mainContainer.
495 
496     \sa mainContainer(), mainContainerChanged()
497 */
498 
499 /*!
500     \fn virtual bool QDesignerFormWindowInterface::isManaged(QWidget *widget) const
501 
502     Returns true if the specified \a widget is managed by the form
503     window; otherwise returns false.
504 
505     \sa manageWidget()
506 */
507 
508 /*!
509     \fn virtual bool QDesignerFormWindowInterface::isDirty() const
510 
511     Returns true if the form window is "dirty" (modified but not
512     saved); otherwise returns false.
513 
514     \sa setDirty()
515 */
516 
517 /*!
518     \fn virtual QUndoStack *QDesignerFormWindowInterface::commandHistory() const
519 
520     Returns an object that can be used to obtain the commands used so
521     far in the construction of the form.
522 
523     \internal
524 */
525 
526 /*!
527     \fn virtual void QDesignerFormWindowInterface::beginCommand(const QString &description)
528 
529     Begins execution of a command with the given \a
530     description. Commands are executed between beginCommand() and
531     endCommand() function calls to ensure that they are recorded on
532     the undo stack.
533 
534     \sa endCommand()
535 
536     \internal
537 */
538 
539 /*!
540     \fn virtual void QDesignerFormWindowInterface::endCommand()
541 
542     Ends execution of the current command.
543 
544     \sa beginCommand()
545 
546     \internal
547 */
548 
549 /*!
550     \fn virtual void QDesignerFormWindowInterface::simplifySelection(QList<QWidget*> *widgets) const
551 
552     Simplifies the selection of widgets specified by \a widgets.
553 
554     \sa selectionChanged()
555     \internal
556 */
557 
558 /*!
559     \fn virtual void QDesignerFormWindowInterface::emitSelectionChanged()
560 
561     Emits the selectionChanged() signal.
562 
563     \sa selectWidget(), clearSelection()
564 */
565 
566 /*!
567     \fn virtual QStringList QDesignerFormWindowInterface::resourceFiles() const
568 
569     Returns a list of paths to resource files that are currently being
570     used by the form window.
571 
572     \sa addResourceFile(), removeResourceFile()
573 */
574 
575 /*!
576     \fn virtual void QDesignerFormWindowInterface::addResourceFile(const QString &path)
577 
578     Adds the resource file at the given \a path to those used by the form.
579 
580     \sa resourceFiles(), resourceFilesChanged()
581 */
582 
583 /*!
584     \fn virtual void QDesignerFormWindowInterface::removeResourceFile(const QString &path)
585 
586     Removes the resource file at the specified \a path from the list
587     of those used by the form.
588 
589     \sa resourceFiles(), resourceFilesChanged()
590 */
591 
592 /*!
593     \fn virtual void QDesignerFormWindowInterface::ensureUniqueObjectName(QObject *object)
594 
595     Ensures that the specified \a object has a unique name amongst the
596     other objects on the form.
597 
598     \internal
599 */
600 
601 // Slots
602 
603 /*!
604     \fn virtual void QDesignerFormWindowInterface::manageWidget(QWidget *widget)
605 
606     Instructs the form window to manage the specified \a widget.
607 
608     \sa isManaged(), unmanageWidget(), widgetManaged()
609 */
610 
611 /*!
612     \fn virtual void QDesignerFormWindowInterface::unmanageWidget(QWidget *widget)
613 
614     Instructs the form window not to manage the specified \a widget.
615 
616     \sa aboutToUnmanageWidget(), widgetUnmanaged()
617 */
618 
619 /*!
620     \fn virtual void QDesignerFormWindowInterface::setFeatures(Feature features)
621 
622     Enables the specified \a features for the form window.
623 
624     \sa features(), featureChanged()
625 */
626 
627 /*!
628     \fn virtual void QDesignerFormWindowInterface::setDirty(bool dirty)
629 
630     If \a dirty is true, the form window is marked as dirty, meaning
631     that it is modified but not saved. If \a dirty is false, the form
632     window is considered to be unmodified.
633 
634     \sa isDirty()
635 */
636 
637 /*!
638 \fn virtual void QDesignerFormWindowInterface::clearSelection(bool update)
639 
640     Clears the current selection in the form window. If \a update is
641     true, the emitSelectionChanged() function is called, emitting the
642     selectionChanged() signal.
643 
644     \sa selectWidget()
645 */
646 
647 /*!
648     \fn virtual void QDesignerFormWindowInterface::selectWidget(QWidget *widget, bool select)
649 
650     If \a select is true, the given \a widget is selected; otherwise
651     the \a widget is deselected.
652 
653     \sa clearSelection(), selectionChanged()
654 */
655 
656 /*!
657     \fn virtual void QDesignerFormWindowInterface::setGrid(const QPoint &grid)
658 
659     Sets the grid size for the form window to the point specified by
660     \a grid. In this function, the coordinates in the QPoint are used
661     to specify the dimensions of a rectangle in the grid.
662 
663     \sa grid()
664 */
665 
666 /*!
667     \fn virtual void QDesignerFormWindowInterface::setFileName(const QString &fileName)
668 
669     Sets the file name for the form to the given \a fileName.
670 
671     \sa fileName(), fileNameChanged()
672 */
673 
674 /*!
675     \fn virtual void QDesignerFormWindowInterface::setContents(const QString &contents)
676 
677     Sets the contents of the form using data read from the specified
678     \a contents string.
679 
680     \sa contents()
681 */
682 
683 /*!
684     \fn virtual void QDesignerFormWindowInterface::editWidgets()
685 
686     Switches the form window into editing mode.
687 
688     \sa \l {Qt Designer's Form Editing Mode}
689 
690     \internal
691 */
692 
693 // Signals
694 
695 /*!
696     \fn void QDesignerFormWindowInterface::mainContainerChanged(QWidget *mainContainer)
697 
698     This signal is emitted whenever the main container changes.
699     The new container is specified by \a mainContainer.
700 
701     \sa setMainContainer()
702 */
703 
704 /*!
705     \fn void QDesignerFormWindowInterface::toolChanged(int toolIndex)
706 
707     This signal is emitted whenever the current tool changes.
708     The specified \a toolIndex is the index of the new tool in the list of
709     tools in the widget box.
710 
711     \internal
712 */
713 
714 /*!
715     \fn void QDesignerFormWindowInterface::fileNameChanged(const QString &fileName)
716 
717     This signal is emitted whenever the file name of the form changes.
718     The new file name is specified by \a fileName.
719 
720     \sa setFileName()
721 */
722 
723 /*!
724     \fn void QDesignerFormWindowInterface::featureChanged(Feature feature)
725 
726     This signal is emitted whenever a feature changes in the form.
727     The new feature is specified by \a feature.
728 
729     \sa setFeatures()
730 */
731 
732 /*!
733     \fn void QDesignerFormWindowInterface::selectionChanged()
734 
735     This signal is emitted whenever the selection in the form changes.
736 
737     \sa selectWidget(), clearSelection()
738 */
739 
740 /*!
741     \fn void QDesignerFormWindowInterface::geometryChanged()
742 
743     This signal is emitted whenever the form's geometry changes.
744 */
745 
746 /*!
747     \fn void QDesignerFormWindowInterface::resourceFilesChanged()
748 
749     This signal is emitted whenever the list of resource files used by the
750     form changes.
751 
752     \sa resourceFiles()
753 */
754 
755 /*!
756     \fn void QDesignerFormWindowInterface::widgetManaged(QWidget *widget)
757 
758     This signal is emitted whenever a widget on the form becomes managed.
759     The newly managed widget is specified by \a widget.
760 
761     \sa manageWidget()
762 */
763 
764 /*!
765     \fn void QDesignerFormWindowInterface::widgetUnmanaged(QWidget *widget)
766 
767     This signal is emitted whenever a widget on the form becomes unmanaged.
768     The newly released widget is specified by \a widget.
769 
770     \sa unmanageWidget(), aboutToUnmanageWidget()
771 */
772 
773 /*!
774     \fn void QDesignerFormWindowInterface::aboutToUnmanageWidget(QWidget *widget)
775 
776     This signal is emitted whenever a widget on the form is about to
777     become unmanaged.  When this signal is emitted, the specified \a
778     widget is still managed, and a widgetUnmanaged() signal will
779     follow, indicating when it is no longer managed.
780 
781     \sa unmanageWidget(), isManaged()
782 */
783 
784 /*!
785     \fn void QDesignerFormWindowInterface::activated(QWidget *widget)
786 
787     This signal is emitted whenever a widget is activated on the form.
788     The activated widget is specified by \a widget.
789 */
790 
791 /*!
792     \fn void QDesignerFormWindowInterface::changed()
793 
794     This signal is emitted whenever a form is changed.
795 */
796 
797 /*!
798     \fn void QDesignerFormWindowInterface::widgetRemoved(QWidget *widget)
799 
800     This signal is emitted whenever a widget is removed from the form.
801     The widget that was removed is specified by \a widget.
802 */
803 
804 /*!
805     \fn void QDesignerFormWindowInterface::objectRemoved(QObject *object)
806 
807     This signal is emitted whenever an object (such as
808     an action or a QButtonGroup) is removed from the form.
809     The object that was removed is specified by \a object.
810 
811    \since 4.5
812 */
813 
814 QT_END_NAMESPACE
815