You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
512 lines
16 KiB
512 lines
16 KiB
/**********************************************************************
|
|
** Copyright (C) 2000 Trolltech AS. All rights reserved.
|
|
**
|
|
** This file is part of Qt Designer.
|
|
**
|
|
** This file may be distributed and/or modified under the terms of the
|
|
** GNU General Public License version 2 as published by the Free Software
|
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
|
** packaging of this file.
|
|
**
|
|
** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
|
|
** licenses may use this file in accordance with the Qt Commercial License
|
|
** Agreement provided with the Software.
|
|
**
|
|
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
**
|
|
** See http://www.trolltech.com/gpl/ for GPL licensing information.
|
|
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
|
|
** information about Qt Commercial License Agreements.
|
|
**
|
|
** Contact info@trolltech.com if any conditions of this licensing are
|
|
** not clear to you.
|
|
**
|
|
**********************************************************************/
|
|
|
|
#ifndef MAINWINDOW_H
|
|
#define MAINWINDOW_H
|
|
|
|
#include "metadatabase.h"
|
|
#include "../interfaces/actioninterface.h" // for GCC 2.7.* compatibility
|
|
#include "../interfaces/editorinterface.h"
|
|
#include "../interfaces/templatewizardiface.h"
|
|
#include "../interfaces/languageinterface.h"
|
|
#include "../interfaces/filterinterface.h"
|
|
#include "../interfaces/interpreterinterface.h"
|
|
#include "../interfaces/preferenceinterface.h"
|
|
#include "../interfaces/projectsettingsiface.h"
|
|
#include "../interfaces/sourcetemplateiface.h"
|
|
#include "sourceeditor.h"
|
|
|
|
#include <qaction.h>
|
|
#include <qmainwindow.h>
|
|
#include <qmap.h>
|
|
#include <qguardedptr.h>
|
|
#include <private/qpluginmanager_p.h>
|
|
#include <qobjectlist.h>
|
|
|
|
class QToolBox;
|
|
class PropertyEditor;
|
|
class QWorkspace;
|
|
class QMenuBar;
|
|
class FormWindow;
|
|
class QPopupMenu;
|
|
class HierarchyView;
|
|
class QCloseEvent;
|
|
class Workspace;
|
|
class ActionEditor;
|
|
class Project;
|
|
class OutputWindow;
|
|
class QTimer;
|
|
class FindDialog;
|
|
struct DesignerProject;
|
|
class ReplaceDialog;
|
|
class GotoLineDialog;
|
|
class SourceFile;
|
|
class FormFile;
|
|
class QAssistantClient;
|
|
class DesignerAction;
|
|
|
|
#if defined(Q_FULL_TEMPLATE_INSTANTIATION)
|
|
#include <qtoolbar.h>
|
|
#else
|
|
class QToolBar;
|
|
#endif
|
|
class Preferences;
|
|
|
|
class KDevDesignerPart;
|
|
|
|
class MainWindow : public QMainWindow
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum LineMode { Error, Step, StackFrame };
|
|
|
|
MainWindow( KDevDesignerPart *part, bool asClient, bool single = FALSE, const QString &plgDir = "/designer" );
|
|
~MainWindow();
|
|
|
|
HierarchyView *objectHierarchy() const;
|
|
Workspace *workspace() const;
|
|
PropertyEditor *propertyeditor() const;
|
|
ActionEditor *actioneditor() const;
|
|
|
|
void resetTool();
|
|
int currentTool() const;
|
|
|
|
FormWindow *formWindow();
|
|
|
|
bool unregisterClient( FormWindow *w );
|
|
void editorClosed( SourceEditor *e );
|
|
QWidget *isAFormWindowChild( QObject *o ) const;
|
|
QWidget *isAToolBarChild( QObject *o ) const;
|
|
|
|
void insertFormWindow( FormWindow *fw );
|
|
QWorkspace *qWorkspace() const;
|
|
|
|
void popupFormWindowMenu( const QPoint &gp, FormWindow *fw );
|
|
void popupWidgetMenu( const QPoint &gp, FormWindow *fw, QWidget *w );
|
|
|
|
QPopupMenu *setupNormalHierarchyMenu( QWidget *parent );
|
|
QPopupMenu *setupTabWidgetHierarchyMenu( QWidget *parent, const char *addSlot, const char *removeSlot );
|
|
|
|
FormWindow *openFormWindow( const QString &fn, bool validFileName = TRUE, FormFile *ff = 0 );
|
|
bool isCustomWidgetUsed( MetaDataBase::CustomWidget *w );
|
|
|
|
void setGrid( const QPoint &p );
|
|
void setShowGrid( bool b );
|
|
void setSnapGrid( bool b );
|
|
QPoint grid() const { return grd; }
|
|
bool showGrid() const { return sGrid; }
|
|
bool snapGrid() const { return snGrid && sGrid; }
|
|
|
|
QString documentationPath() const;
|
|
|
|
static MainWindow *self;
|
|
|
|
QString templatePath() const { return templPath; }
|
|
|
|
void editFunction( const QString &func, bool rereadSource = FALSE );
|
|
|
|
bool isPreviewing() const { return previewing; }
|
|
|
|
Project *currProject() const { return currentProject; }
|
|
|
|
FormWindow *activeForm() const { return lastActiveFormWindow; }
|
|
|
|
TemplateWizardInterface* templateWizardInterface( const QString& className );
|
|
QStringList sourceTemplates() const;
|
|
SourceTemplateInterface* sourceTemplateInterface( const QString& templ );
|
|
QUnknownInterface* designerInterface() const { return desInterface; }
|
|
QPtrList<DesignerProject> projectList() const;
|
|
QStringList projectNames() const;
|
|
QStringList projectFileNames() const;
|
|
Project *findProject( const QString &projectName ) const;
|
|
void setCurrentProject( Project *pro );
|
|
void setCurrentProjectByFilename( const QString& proFilename );
|
|
OutputWindow *outputWindow() const { return oWindow; }
|
|
void addPreferencesTab( QWidget *tab, const QString &title, QObject *receiver, const char *init_slot, const char *accept_slot );
|
|
void addProjectTab( QWidget *tab, const QString &title, QObject *receiver, const char *init_slot, const char *accept_slot );
|
|
void setModified( bool b, QWidget *window );
|
|
void functionsChanged();
|
|
void updateFunctionList();
|
|
void updateWorkspace();
|
|
void runProjectPrecondition();
|
|
void runProjectPostcondition( QObjectList *l );
|
|
|
|
void formNameChanged( FormWindow *fw );
|
|
|
|
int currentLayoutDefaultSpacing() const;
|
|
int currentLayoutDefaultMargin() const;
|
|
|
|
void saveAllBreakPoints();
|
|
void resetBreakPoints();
|
|
|
|
SourceFile *sourceFile();
|
|
void createNewProject( const QString &lang );
|
|
|
|
void popupProjectMenu( const QPoint &pos );
|
|
QObject *findRealObject( QObject *o );
|
|
|
|
void setSingleProject( Project *pro );
|
|
bool singleProjectMode() const { return singleProject; }
|
|
|
|
void showSourceLine( QObject *o, int line, LineMode lm );
|
|
|
|
void shuttingDown();
|
|
void showGUIStuff( bool b );
|
|
void setEditorsReadOnly( bool b );
|
|
bool areEditorsReadOnly() const { return editorsReadOnly; }
|
|
void toggleSignalHandlers( bool show );
|
|
bool showSignalHandlers() const { return sSignalHandlers; }
|
|
void writeConfig();
|
|
|
|
void openProject( const QString &fn );
|
|
void setPluginDirectory( const QString &pd );
|
|
QString pluginDirectory() const { return pluginDir; }
|
|
|
|
QAssistantClient* assistantClient() const { return assistant; }
|
|
|
|
void addRecentlyOpenedFile( const QString &fn ) { addRecentlyOpened( fn, recentlyFiles ); }
|
|
|
|
void statusMessage(const QString &msg);
|
|
|
|
//integration
|
|
KDevDesignerPart *part() const { return m_part; }
|
|
|
|
public slots:
|
|
void showProperties( QObject *w );
|
|
void updateProperties( QObject *w );
|
|
void showDialogHelp();
|
|
void showDebugStep( QObject *o, int line );
|
|
void showStackFrame( QObject *o, int line );
|
|
void showErrorMessage( QObject *o, int line, const QString &errorMessage );
|
|
void finishedRun();
|
|
void breakPointsChanged();
|
|
|
|
signals:
|
|
void currentToolChanged();
|
|
void hasActiveForm( bool );
|
|
void hasActiveWindow( bool );
|
|
void hasActiveWindowOrProject( bool );
|
|
void hasNonDummyProject( bool );
|
|
void formModified( bool );
|
|
void formWindowsChanged();
|
|
void formWindowChanged();
|
|
void projectChanged();
|
|
void editorChanged();
|
|
|
|
protected:
|
|
bool eventFilter( QObject *o, QEvent *e );
|
|
void closeEvent( QCloseEvent *e );
|
|
|
|
public slots:
|
|
void fileNew();
|
|
void fileNewDialog();
|
|
void fileNewFile();
|
|
void fileClose();
|
|
void fileQuit();
|
|
void fileCloseProject(); // not visible in menu, called from fileClose
|
|
void fileOpen();
|
|
void fileOpen( const QString &filter, const QString &extension, const QString &filename = "" , bool inProject = TRUE );
|
|
bool fileSave();
|
|
bool fileSaveForm(); // not visible in menu, called from fileSave
|
|
bool fileSaveProject(); // not visible in menu, called from fileSaveProject
|
|
bool fileSaveAs();
|
|
void fileSaveAll();
|
|
void fileCreateTemplate();
|
|
|
|
public slots:
|
|
void editUndo();
|
|
void editRedo();
|
|
void editCut();
|
|
void editCopy();
|
|
void editPaste();
|
|
void editDelete();
|
|
void editSelectAll();
|
|
void editLower();
|
|
void editRaise();
|
|
void editAdjustSize();
|
|
void editLayoutHorizontal();
|
|
void editLayoutVertical();
|
|
void editLayoutHorizontalSplit();
|
|
void editLayoutVerticalSplit();
|
|
void editLayoutGrid();
|
|
void editLayoutContainerHorizontal();
|
|
void editLayoutContainerVertical();
|
|
void editLayoutContainerGrid();
|
|
void editBreakLayout();
|
|
void editAccels();
|
|
void editFunctions();
|
|
void editConnections();
|
|
SourceEditor *editSource();
|
|
SourceEditor *editSource( SourceFile *f );
|
|
SourceEditor *openSourceEditor();
|
|
SourceEditor *createSourceEditor( QObject *object, Project *project,
|
|
const QString &lang = QString::null,
|
|
const QString &func = QString::null,
|
|
bool rereadSource = FALSE );
|
|
void editFormSettings();
|
|
void editProjectSettings();
|
|
void editPixmapCollection();
|
|
void editDatabaseConnections();
|
|
void editPreferences();
|
|
|
|
void projectInsertFile();
|
|
|
|
void searchFind();
|
|
void searchIncremetalFindMenu();
|
|
void searchIncremetalFind();
|
|
void searchIncremetalFindNext();
|
|
void searchReplace();
|
|
void searchGotoLine();
|
|
|
|
void previewForm();
|
|
void previewForm( const QString& );
|
|
|
|
void toolsCustomWidget();
|
|
void toolsConfigure();
|
|
|
|
void helpContents();
|
|
void helpManual();
|
|
void helpAbout();
|
|
void helpAboutQt();
|
|
void helpRegister();
|
|
|
|
private slots:
|
|
void activeWindowChanged( QWidget *w );
|
|
void updateUndoRedo( bool, bool, const QString &, const QString & );
|
|
void updateEditorUndoRedo();
|
|
|
|
void toolSelected( QAction* );
|
|
|
|
void clipboardChanged();
|
|
void selectionChanged();
|
|
|
|
void windowsMenuActivated( int id );
|
|
void setupWindowActions();
|
|
|
|
void createNewTemplate();
|
|
void projectSelected( QAction *a );
|
|
|
|
void setupRecentlyFilesMenu();
|
|
void setupRecentlyProjectsMenu();
|
|
void recentlyFilesMenuActivated( int id );
|
|
void recentlyProjectsMenuActivated( int id );
|
|
|
|
void emitProjectSignals();
|
|
|
|
void showStartDialog();
|
|
|
|
private:
|
|
void setupMDI();
|
|
void setupMenuBar();
|
|
void setupEditActions();
|
|
void setupProjectActions();
|
|
void setupSearchActions();
|
|
void setupToolActions();
|
|
void setupLayoutActions();
|
|
void setupFileActions();
|
|
void setupPreviewActions();
|
|
void setupHelpActions();
|
|
void setupRMBMenus();
|
|
|
|
void setupPropertyEditor();
|
|
void setupHierarchyView();
|
|
void setupWorkspace();
|
|
void setupActionEditor();
|
|
void setupOutputWindow();
|
|
void setupToolbox();
|
|
|
|
void setupActionManager();
|
|
void setupPluginManagers();
|
|
|
|
void enableAll( bool enable );
|
|
|
|
QWidget* previewFormInternal( QStyle* style = 0, QPalette* pal = 0 );
|
|
|
|
void readConfig();
|
|
|
|
void setupRMBProperties( QValueList<uint> &ids, QMap<QString, int> &props, QWidget *w );
|
|
void handleRMBProperties( int id, QMap<QString, int> &props, QWidget *w );
|
|
void setupRMBSpecialCommands( QValueList<uint> &ids, QMap<QString, int> &commands, QWidget *w );
|
|
void handleRMBSpecialCommands( int id, QMap<QString, int> &commands, QWidget *w );
|
|
void setupRMBSpecialCommands( QValueList<uint> &ids, QMap<QString, int> &commands, FormWindow *w );
|
|
void handleRMBSpecialCommands( int id, QMap<QString, int> &commands, FormWindow *w );
|
|
bool openEditor( QWidget *w, FormWindow *fw );
|
|
void rebuildCustomWidgetGUI();
|
|
void rebuildCommonWidgetsToolBoxPage();
|
|
void checkTempFiles();
|
|
|
|
void addRecentlyOpened( const QString &fn, QStringList &lst );
|
|
|
|
QString whatsThisFrom( const QString &key );
|
|
|
|
private slots:
|
|
void doFunctionsChanged();
|
|
bool openProjectSettings( Project *pro );
|
|
|
|
private:
|
|
struct Tab
|
|
{
|
|
QWidget *w;
|
|
QString title;
|
|
QObject *receiver;
|
|
const char *init_slot, *accept_slot;
|
|
Q_DUMMY_COMPARISON_OPERATOR( Tab )
|
|
};
|
|
|
|
private:
|
|
PropertyEditor *propertyEditor;
|
|
HierarchyView *hierarchyView;
|
|
Workspace *wspace;
|
|
QWidget *lastPressWidget;
|
|
QWorkspace *qworkspace;
|
|
QMenuBar *menubar;
|
|
QGuardedPtr<FormWindow> lastActiveFormWindow;
|
|
bool breakLayout, layoutChilds, layoutSelected;
|
|
QPoint grd;
|
|
bool sGrid, snGrid;
|
|
bool restoreConfig;
|
|
bool backPix;
|
|
bool splashScreen;
|
|
QString fileFilter;
|
|
|
|
QMap<QAction*, Project*> projects;
|
|
DesignerAction *actionEditUndo, *actionEditRedo, *actionEditCut, *actionEditCopy,
|
|
*actionEditPaste, *actionEditDelete,
|
|
*actionEditAdjustSize,
|
|
*actionEditHLayout, *actionEditVLayout, *actionEditGridLayout,
|
|
*actionEditSplitHorizontal, *actionEditSplitVertical,
|
|
*actionEditSelectAll, *actionEditBreakLayout, *actionEditFunctions, *actionEditConnections,
|
|
*actionEditLower, *actionEditRaise;
|
|
QAction *actionInsertSpacer;
|
|
QActionGroup *actionGroupTools, *actionGroupProjects;
|
|
QAction* actionPointerTool, *actionConnectTool, *actionOrderTool, *actionBuddyTool;
|
|
QAction* actionCurrentTool;
|
|
DesignerAction *actionHelpContents, *actionHelpAbout, *actionHelpAboutQt, *actionHelpWhatsThis;
|
|
DesignerAction *actionHelpManual;
|
|
#if defined(QT_NON_COMMERCIAL)
|
|
DesignerAction *actionHelpRegister;
|
|
#endif
|
|
DesignerAction *actionToolsCustomWidget, *actionEditPreferences;
|
|
DesignerAction *actionWindowTile, *actionWindowCascade, *actionWindowClose, *actionWindowCloseAll;
|
|
DesignerAction *actionWindowNext, *actionWindowPrevious;
|
|
DesignerAction *actionEditFormSettings, *actionEditAccels;
|
|
DesignerAction *actionEditSource, *actionNewFile, *actionFileSave, *actionFileExit;
|
|
DesignerAction *actionFileClose, *actionFileSaveAs, *actionFileSaveAll;
|
|
DesignerAction *actionSearchFind, *actionSearchIncremetal, *actionSearchReplace, *actionSearchGotoLine;
|
|
DesignerAction *actionProjectAddFile, *actionEditPixmapCollection, *actionEditDatabaseConnections,
|
|
*actionEditProjectSettings, *actionPreview;
|
|
QActionGroup *actionGroupNew;
|
|
|
|
QPopupMenu *rmbWidgets;
|
|
QPopupMenu *rmbFormWindow;
|
|
QPopupMenu *customWidgetMenu, *windowMenu, *fileMenu, *recentlyFilesMenu, *recentlyProjectsMenu;
|
|
QPopupMenu *toolsMenu, *layoutMenu, *previewMenu;
|
|
QToolBar *customWidgetToolBar, *layoutToolBar, *projectToolBar, *customWidgetToolBar2, *toolsToolBar;
|
|
QToolBar *commonWidgetsToolBar;
|
|
QPtrList<QToolBar> widgetToolBars;
|
|
|
|
Preferences *prefDia;
|
|
QMap<QString,QString> propertyDocumentation;
|
|
bool client;
|
|
QString templPath;
|
|
ActionEditor *actionEditor;
|
|
Project *currentProject;
|
|
QPluginManager<ActionInterface> *actionPluginManager;
|
|
QPluginManager<EditorInterface> *editorPluginManager;
|
|
QPluginManager<TemplateWizardInterface> *templateWizardPluginManager;
|
|
QPluginManager<InterpreterInterface> *interpreterPluginManager;
|
|
QPluginManager<PreferenceInterface> *preferencePluginManager;
|
|
QPluginManager<ProjectSettingsInterface> *projectSettingsPluginManager;
|
|
QPluginManager<SourceTemplateInterface> *sourceTemplatePluginManager;
|
|
QPtrList<SourceEditor> sourceEditors;
|
|
bool previewing;
|
|
QUnknownInterface *desInterface;
|
|
QStringList recentlyFiles;
|
|
QStringList recentlyProjects;
|
|
OutputWindow *oWindow;
|
|
QValueList<Tab> preferenceTabs;
|
|
QValueList<Tab> projectTabs;
|
|
bool databaseAutoEdit;
|
|
QTimer *updateFunctionsTimer;
|
|
QTimer *autoSaveTimer;
|
|
bool autoSaveEnabled;
|
|
int autoSaveInterval;
|
|
QLineEdit *incrementalSearch;
|
|
QGuardedPtr<FindDialog> findDialog;
|
|
QGuardedPtr<ReplaceDialog> replaceDialog;
|
|
QGuardedPtr<GotoLineDialog> gotoLineDialog;
|
|
Project *eProject;
|
|
bool inDebugMode;
|
|
QObjectList debuggingForms;
|
|
QString lastOpenFilter;
|
|
QGuardedPtr<QWidget> previewedForm;
|
|
QPopupMenu *projectMenu;
|
|
QString menuHelpFile;
|
|
bool singleProject;
|
|
QToolBox *toolBox;
|
|
int toolsMenuId, toolsMenuIndex;
|
|
uint guiStuffVisible : 1;
|
|
uint editorsReadOnly : 1;
|
|
uint savePluginPaths : 1;
|
|
QAssistantClient *assistant;
|
|
bool shStartDialog;
|
|
QString pluginDir;
|
|
bool sSignalHandlers;
|
|
|
|
KDevDesignerPart *m_part;
|
|
|
|
public:
|
|
QString lastSaveFilter;
|
|
QPtrList<QAction> toolActions;
|
|
QPtrList<QAction> commonWidgetsPage;
|
|
|
|
friend class KDevDesignerPart;
|
|
};
|
|
|
|
class SenderObject : public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
SenderObject( QUnknownInterface *i ) : iface( i ) { iface->addRef(); }
|
|
~SenderObject() { iface->release(); }
|
|
|
|
public slots:
|
|
void emitInitSignal() { emit initSignal( iface ); }
|
|
void emitAcceptSignal() { emit acceptSignal( iface ); }
|
|
|
|
signals:
|
|
void initSignal( QUnknownInterface * );
|
|
void acceptSignal( QUnknownInterface * );
|
|
|
|
private:
|
|
QUnknownInterface *iface;
|
|
|
|
};
|
|
|
|
#endif
|