kexi

keximainwindowimpl.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 2003 Lucijan Busch <lucijan@kde.org>
00003    Copyright (C) 2003-2006 Jaroslaw Staniek <js@iidea.pl>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #ifndef KEXIMAINWINDOWIMPL_H
00022 #define KEXIMAINWINDOWIMPL_H
00023 
00024 #include <kmessagebox.h>
00025 #include "core/keximainwindow.h"
00026 #include "core/kexiguimsghandler.h"
00027 
00028 class KexiProjectData;
00029 class KexiActionProxy;
00030 class KMdiChildView;
00031 class KexiSimplePrintingSettings;
00032 
00033 namespace KexiDB {
00034     class Object;
00035     class ConnectionData;
00036 }
00037 namespace KexiPart {
00038     class Info;
00039     class Part;
00040 }
00041 
00043 enum PrintActionType {
00044     PrintItem,
00045     PreviewItem,
00046     PageSetupForItem
00047 };
00048 
00052 class KEXIMAIN_EXPORT KexiMainWindowImpl : public KexiMainWindow, public KexiGUIMessageHandler
00053 {
00054     Q_OBJECT
00055 
00056     public:
00058         KexiMainWindowImpl();
00059         virtual ~KexiMainWindowImpl();
00060 
00064         static int create(int argc, char *argv[], KAboutData* aboutdata = 0);
00065 
00067         static KexiMainWindowImpl* self() { return dynamic_cast<KexiMainWindowImpl*>(qApp->mainWidget()); }
00068 
00070         virtual KexiProject *project();
00071 
00073         virtual void registerChild(KexiDialogBase *dlg);
00074 
00077         bool activateWindow(int id);
00078 
00080         bool activateWindow(KexiDialogBase *dlg);
00081 
00082 //      void startup(KexiProjectData* pdata);
00085         tristate startup();
00086 
00088         bool inFinalMode() const;
00089 
00090         virtual bool eventFilter( QObject *obj, QEvent * e );
00091 
00092         virtual QPopupMenu* findPopupMenu(const char *popupName);
00093 
00095         virtual KActionPtrList allActions() const;
00096 
00099         virtual KexiDialogBase* currentDialog() const;
00100 
00104 //      KexiRelationPart    *relationPart();
00105 
00106 //TODO: move to kexiproject
00112         virtual int generatePrivateID();
00113 
00115         virtual void readProperties(KConfig *config);
00116         virtual void saveProperties(KConfig *config);
00117         virtual void saveGlobalProperties( KConfig* sessionConfig );
00118 
00119     public slots:
00122         virtual void closeWindow(KMdiChildView *pWnd, bool layoutTaskBar = true);
00123 
00125         virtual void addWindow( KMdiChildView* pView, int flags = KMdi::StandardAdd );
00126 
00128         virtual tristate closeDialog(KexiDialogBase *dlg);
00129 
00134         tristate closeDialog(KexiDialogBase *dlg, bool layoutTaskBar, bool doNotSaveChanges = false);
00135 
00136         virtual void detachWindow(KMdiChildView *pWnd,bool bShow=true);
00137         virtual void attachWindow(KMdiChildView *pWnd,bool bShow=true,bool bAutomaticResize=false);
00138 
00143         virtual KexiDialogBase* openObject(KexiPart::Item *item, int viewMode, 
00144             bool &openingCancelled, QMap<QString,QString>* staticObjectArgs = 0);
00145 
00147         virtual KexiDialogBase* openObject(const QCString& mime, const QString& name, 
00148             int viewMode, bool &openingCancelled, QMap<QString,QString>* staticObjectArgs = 0);
00149 
00151         virtual tristate saveObject( KexiDialogBase *dlg,
00152             const QString& messageWhenAskingForName = QString::null, bool dontAsk = false );
00153 
00155         virtual tristate getNewObjectInfo( KexiPart::Item *partItem, KexiPart::Part *part, 
00156             bool& allowOverwriting, const QString& messageWhenAskingForName = QString::null );
00157 
00159         virtual void highlightObject(const QCString& mime, const QCString& name);
00160 
00165         tristate openProject(const KexiProjectData& projectData);
00166 
00177         tristate openProject(const QString& aFileName, KexiDB::ConnectionData *cdata, 
00178             const QString& dbName = QString::null);
00179 
00186         tristate openProject(const QString& aFileName, 
00187             const QString& fileNameForConnectionData, const QString& dbName = QString::null);
00188 
00193         tristate closeProject();
00194 
00195     signals:
00197         void projectOpened();
00198 
00199     protected:
00204         bool initFinalMode(KexiProjectData *projectData);
00205 
00210         void initNavigator();
00211 
00212         void initContextHelp();
00213 
00214         void initPropertyEditor();
00215 
00217 //      virtual void    closeEvent(QCloseEvent *);
00218 
00220         void initActions();
00221 
00223         void initUserActions();
00224 
00226         void restoreSettings();
00227 
00229         void storeSettings();
00230 
00232         void invalidateActions();
00233 
00236         virtual void invalidateSharedActions(QObject *o);
00237 
00240         void invalidateProjectWideActions();
00241 
00245         void invalidateViewModeActions();
00246 
00253         tristate createBlankProject();
00254 
00260         KexiProjectData* createBlankProjectData(bool &cancelled, bool confirmOverwrites = true, 
00261             QString *shortcutFileName = 0);
00262 
00263         void setWindowMenu(QPopupMenu *menu);
00264 
00266 //      QWidget* focusWindow() const;
00267 
00270         virtual bool acceptsSharedActions(QObject *w);
00271 
00275         QWidget* findWindow(QWidget *w);
00276 
00278         void updateAppCaption();
00279 
00280         void restoreWindowConfiguration(KConfig *config);
00281         void storeWindowConfiguration(KConfig *config);
00282 
00283         virtual bool queryClose();
00284         virtual bool queryExit();
00285 
00287         bool switchToViewMode(int viewMode);
00288 
00292         void updateDialogViewGUIClient(KXMLGUIClient *viewClient);
00293 
00296         void updateCustomPropertyPanelTabs(KexiDialogBase *prevDialog, int prevViewMode);
00297 
00299         void updateCustomPropertyPanelTabs(
00300             KexiPart::Part *prevDialogPart, int prevViewMode, KexiPart::Part *curDialogPart, int curViewMode );
00301 
00303         tristate openProjectInExternalKexiInstance(const QString& aFileName, 
00304             KexiDB::ConnectionData *cdata, const QString& dbName);
00305 
00307         tristate openProjectInExternalKexiInstance(const QString& aFileName, 
00308             const QString& fileNameForConnectionData, const QString& dbName);
00309 
00310     protected slots:
00311 
00313         void slotAutoOpenObjectsLater();
00314 
00316         void activeWindowChanged(KMdiChildView *dlg);
00317 
00319         void childClosed(KMdiChildView *dlg);
00320 
00321         void slotPartLoaded(KexiPart::Part* p);
00322 
00323         void slotCaptionForCurrentMDIChild(bool childrenMaximized);
00324         void slotNoMaximizedChildFrmLeft(KMdiChildFrm*);
00325         void slotLastChildViewClosed();
00326         void slotChildViewIsDetachedNow(QWidget*);
00327 
00329         void createKexiProject(KexiProjectData* new_data);
00330 
00336         KexiDialogBase* openObjectFromNavigator(KexiPart::Item* item, int viewMode, 
00337             bool &openingCancelled);
00338 
00340         KexiDialogBase* openObjectFromNavigator(KexiPart::Item* item, int viewMode);
00341 
00342         bool newObject( KexiPart::Info *info );
00343 
00345         KexiDialogBase* openObject(KexiPart::Item *item, int viewMode, 
00346             QMap<QString,QString>* staticObjectArgs = 0)
00347         {
00348             bool openingCancelled;
00349             return openObject(item, viewMode, openingCancelled, staticObjectArgs);
00350         }
00351 
00355         tristate removeObject( KexiPart::Item *item, bool dontAsk = false );
00356 
00360         void renameObject( KexiPart::Item *item, const QString& _newName, bool &succes );
00361 
00365         virtual void slotObjectRenamed(const KexiPart::Item &item, const QCString& oldName);
00366 
00367         virtual void fillWindowMenu();
00368 
00369         void invalidateSharedActions();
00370         void invalidateSharedActionsLater();
00371 
00374         void updateReadOnlyState();
00375 
00376         void slotProjectNew();
00377         void slotProjectOpen();
00378         void slotProjectOpenRecentAboutToShow();
00379         void slotProjectOpenRecent(int id);
00380         void slotProjectOpenRecentMore();
00381         void slotProjectSave();
00382         void slotProjectSaveAs();
00383         void slotProjectPrint();
00384         void slotProjectPrintPreview();
00385         void slotProjectPageSetup();
00386         void slotProjectProperties();
00387         void slotProjectClose();
00388         void slotProjectRelations();
00389         void slotProjectImportDataTable();
00390         void slotProjectExportDataTable();
00391         void slotProjectQuit();
00392         void slotEditPasteSpecialDataTable();
00393         void slotEditCopySpecialDataTable();
00394         void slotViewNavigator();
00395         void slotViewMainArea();
00396         void slotViewPropertyEditor();
00397         void slotViewDataMode();
00398         void slotViewDesignMode();
00399         void slotViewTextMode(); 
00400         void slotShowSettings();
00401         void slotConfigureKeys();
00402         void slotConfigureToolbars();
00403         void slotToolsProjectMigration();
00404         void slotToolsCompactDatabase();
00405 
00407         void slotGetNewStuff();
00408 
00409         void slotTipOfTheDay();
00410 
00412         void importantInfo(bool onStartup);
00413         void slotImportantInfo(); 
00414         void slotStartFeedbackAgent();
00415 
00416         void slotOptionsEnableForms(bool show, bool noMessage = false); //temp.
00417 
00418         void slotImportFile();
00419         void slotImportServer();
00420 
00422         void slotLastActions();
00423 
00424         virtual void acceptPropertySetEditing();
00425 
00426         virtual void propertySetSwitched(KexiDialogBase *dlg, bool force=false,
00427             bool preservePrevSelection = true, const QCString& propertyToSelect = QCString());
00428 
00430         void slotDirtyFlagChanged(KexiDialogBase*);
00431 
00432         void slotMdiModeHasBeenChangedTo(KMdi::MdiMode);
00433 
00435         virtual void switchToIDEAlMode();
00436         void switchToIDEAlMode(bool showMessage);
00437         virtual void switchToChildframeMode();
00438         void switchToChildframeMode(bool showMessage);
00439 
00445         tristate showProjectMigrationWizard(const QString& mimeType, const QString& databaseName,
00446             const KexiDB::ConnectionData *cdata = 0);
00447 
00449         void slotPartItemSelectedInNavigator(KexiPart::Item* item);
00450 
00453         tristate executeItem(KexiPart::Item* item);
00454 
00456         void exportItemAsDataTable(KexiPart::Item* item);
00457 
00460         bool printItem(KexiPart::Item* item, const QString& titleText = QString::null);
00461 
00464         bool printItem(KexiPart::Item* item, const KexiSimplePrintingSettings& settings,
00465             const QString& titleText = QString::null);
00466         
00471         bool printPreviewForItem(KexiPart::Item* item, const QString& titleText = QString::null, 
00472             bool reload = false);
00473 
00476         bool printPreviewForItem(KexiPart::Item* item, const KexiSimplePrintingSettings& settings, 
00477             const QString& titleText = QString::null, bool reload = false);
00478 
00481         tristate pageSetupForItem(KexiPart::Item* item);
00482 
00485         tristate printActionForItem(KexiPart::Item* item, PrintActionType action);
00486 
00487     private:
00488 
00489         class MessageHandler;
00490         class Private;
00491         Private *d;
00492 
00493     friend class KexiDialogBase;
00494 };
00495 
00496 #endif
00497 
KDE Home | KDE Accessibility Home | Description of Access Keys