/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the Qt Designer of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QDESIGNER_WORKBENCH_H #define QDESIGNER_WORKBENCH_H #include "designer_enums.h" #include #include #include #include #include QT_BEGIN_NAMESPACE class QDesignerActions; class QDesignerToolWindow; class QDesignerFormWindow; class DockedMainWindow; class QDesignerSettings; class QAction; class QActionGroup; class QDockWidget; class QMenu; class QMenuBar; class QMainWindow; class QToolBar; class QMdiArea; class QMdiSubWindow; class QCloseEvent; class QFont; class QtToolBarManager; class ToolBarManager; class QDesignerFormEditorInterface; class QDesignerFormWindowInterface; class QDesignerFormWindowManagerInterface; class QDesignerIntegration; class QDesignerWorkbench: public QObject { Q_OBJECT public: QDesignerWorkbench(); virtual ~QDesignerWorkbench(); UIMode mode() const; QDesignerFormEditorInterface *core() const; QDesignerFormWindow *findFormWindow(QWidget *widget) const; QDesignerFormWindow *openForm(const QString &fileName, QString *errorMessage); QDesignerFormWindow *openTemplate(const QString &templateFileName, const QString &editorFileName, QString *errorMessage); int toolWindowCount() const; QDesignerToolWindow *toolWindow(int index) const; int formWindowCount() const; QDesignerFormWindow *formWindow(int index) const; QDesignerActions *actionManager() const; QActionGroup *modeActionGroup() const; QRect availableGeometry() const; QRect desktopGeometry() const; int marginHint() const; bool readInForm(const QString &fileName) const; bool writeOutForm(QDesignerFormWindowInterface *formWindow, const QString &fileName) const; bool saveForm(QDesignerFormWindowInterface *fw); bool handleClose(); bool readInBackup(); void updateBackup(QDesignerFormWindowInterface* fwi); void applyUiSettings(); signals: void modeChanged(UIMode mode); void initialized(); public slots: void addFormWindow(QDesignerFormWindow *formWindow); void removeFormWindow(QDesignerFormWindow *formWindow); void bringAllToFront(); void toggleFormMinimizationState(); private slots: void switchToNeutralMode(); void switchToDockedMode(); void switchToTopLevelMode(); void initializeCorePlugins(); void handleCloseEvent(QCloseEvent *); void slotFormWindowActivated(QDesignerFormWindow* fw); void updateWindowMenu(QDesignerFormWindowInterface *fw); void formWindowActionTriggered(QAction *a); void adjustMDIFormPositions(); void minimizationStateChanged(QDesignerFormWindowInterface *formWindow, bool minimized); void restoreUISettings(); void notifyUISettingsChanged(); void slotFileDropped(const QString &f); private: QWidget *magicalParent(const QWidget *w) const; Qt::WindowFlags magicalWindowFlags(const QWidget *widgetForFlags) const; QDesignerFormWindowManagerInterface *formWindowManager() const; void closeAllToolWindows(); QDesignerToolWindow *widgetBoxToolWindow() const; QDesignerFormWindow *loadForm(const QString &fileName, bool detectLineTermiantorMode, QString *errorMessage); void resizeForm(QDesignerFormWindow *fw, const QWidget *mainContainer) const; void saveGeometriesForModeChange(); void saveGeometries(QDesignerSettings &settings) const; bool isFormWindowMinimized(const QDesignerFormWindow *fw); void setFormWindowMinimized(QDesignerFormWindow *fw, bool minimized); void saveSettings() const; QDesignerFormEditorInterface *m_core; QDesignerIntegration *m_integration; QDesignerActions *m_actionManager; QActionGroup *m_windowActions; QMenu *m_windowMenu; QMenuBar *m_globalMenuBar; struct TopLevelData { ToolBarManager *toolbarManager; QList toolbars; }; TopLevelData m_topLevelData; UIMode m_mode; DockedMainWindow *m_dockedMainWindow; QList m_toolWindows; QList m_formWindows; QMenu *m_toolbarMenu; // Helper class to remember the position of a window while switching user // interface modes. class Position { public: Position(const QDockWidget *dockWidget); Position(const QMdiSubWindow *mdiSubWindow, const QPoint &mdiAreaOffset); Position(const QWidget *topLevelWindow, const QPoint &desktopTopLeft); void applyTo(QMdiSubWindow *mdiSubWindow, const QPoint &mdiAreaOffset) const; void applyTo(QWidget *topLevelWindow, const QPoint &desktopTopLeft) const; void applyTo(QDockWidget *dockWidget) const; QPoint position() const { return m_position; } private: bool m_minimized; // Position referring to top-left corner (desktop in top-level mode or // main window in MDI mode) QPoint m_position; }; typedef QHash PositionMap; PositionMap m_Positions; enum State { StateInitializing, StateUp, StateClosing }; State m_state; bool m_uiSettingsChanged; // UI mode changed in preference dialog, trigger delayed slot. }; QT_END_NAMESPACE #endif // QDESIGNER_WORKBENCH_H