kdeui Library API Documentation

kmainwindow.h

00001 /*
00002     This file is part of the KDE libraries
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License version 2 as published by the Free Software Foundation.
00007 
00008     This library is distributed in the hope that it will be useful,
00009     but WITHOUT ANY WARRANTY; without even the implied warranty of
00010     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00011     Library General Public License for more details.
00012 
00013     You should have received a copy of the GNU Library General Public License
00014     along with this library; see the file COPYING.LIB.  If not, write to
00015     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00016     Boston, MA 02111-1307, USA.
00017 
00018     $Id: kmainwindow.h,v 1.99 2004/01/05 11:05:55 bhards Exp $
00019 
00020 */
00021 
00022 #ifndef KMAINWINDOW_H
00023 #define KMAINWINDOW_H
00024 
00025 #include "kxmlguifactory.h"
00026 #include "kxmlguiclient.h"
00027 #include "kxmlguibuilder.h"
00028 #include <qmainwindow.h>
00029 #include <qmetaobject.h>
00030 #include <ktoolbar.h>
00031 #include <kdemacros.h>
00032 
00033 class KPopupMenu;
00034 class KXMLGUIFactory;
00035 class KConfig;
00036 class KHelpMenu;
00037 class KStatusBar;
00038 class QStatusBar;
00039 class KMenuBar;
00040 class KMWSessionManaged;
00041 class KMainWindowPrivate;
00042 class KAccel;
00043 class KToolBarMenuAction;
00044 class DCOPObject;
00045 
00046 #define KDE_DEFAULT_WINDOWFLAGS WType_TopLevel | WDestructiveClose
00047 
00048 
00099 class KMainWindow : public QMainWindow, public KXMLGUIBuilder, virtual public KXMLGUIClient
00100 {
00101     friend class KMWSessionManaged;
00102     Q_OBJECT
00103 
00104 public:
00137     KMainWindow( QWidget* parent = 0, const char *name = 0, WFlags f = WType_TopLevel | WDestructiveClose );
00138 
00149     enum CreationFlags
00150     {
00151         NoDCOPObject = 1
00152     };
00153 
00159     KMainWindow( int cflags, QWidget* parent = 0, const char *name = 0, WFlags f = WType_TopLevel | WDestructiveClose );
00160 
00167     virtual ~KMainWindow();
00168 
00193     KPopupMenu* helpMenu( const QString &aboutAppText = QString::null,
00194               bool showWhatsThis = true );
00195 
00218     KPopupMenu* customHelpMenu( bool showWhatsThis = true );
00219 
00286     static bool canBeRestored( int number );
00287 
00295     // KDE 4 return QCString - QObject::className() returns const char*
00296     static const QString classNameOfToplevel( int number );
00297 
00301     // KDE4 remove this method if this has been fixed in Qt
00302     virtual void show();
00303 
00307     // KDE4 remove this method if this has been fixed in Qt
00308     virtual void hide();
00309 
00318     bool restore( int number, bool show = true );
00319 
00320     virtual KXMLGUIFactory *guiFactory();
00321 
00341     void createGUI( const QString &xmlfile = QString::null, bool _conserveMemory = true );
00342 
00349     void setHelpMenuEnabled(bool showHelpMenu = true);
00350 
00354     bool isHelpMenuEnabled();
00355 
00356 
00361      bool hasMenuBar();
00362 
00368     KMenuBar *menuBar();
00369 
00376     KStatusBar *statusBar();
00377 
00381     static QPtrList<KMainWindow>* memberList;
00382 
00393     KToolBar *toolBar( const char *name=0 );
00394 
00398     QPtrListIterator<KToolBar> toolBarIterator();
00399 
00404     KAccel *accel();
00405 
00406     void setFrameBorderWidth( int ) {}
00407 
00425     void setAutoSaveSettings( const QString & groupName = QString::fromLatin1("MainWindow"),
00426                               bool saveWindowSize = true );
00427 
00432     void resetAutoSaveSettings();
00433 
00439     bool autoSaveSettings() const;
00440 
00448     QString autoSaveGroup() const;
00449 
00458     void applyMainWindowSettings(KConfig *config, const QString &groupName = QString::null);
00459 
00468     void saveMainWindowSettings(KConfig *config, const QString &groupName = QString::null);
00469 
00488     void setStandardToolBarMenuEnabled( bool enable );
00490     bool isStandardToolBarMenuEnabled() const;
00491 
00492 
00513     void createStandardStatusBarAction();
00514 
00515 
00520     KAction *toolBarMenuAction();
00521 
00522     // why do we support old gcc versions? using KXMLGUIBuilder::finalizeGUI;
00524     virtual void finalizeGUI( KXMLGUIClient *client );
00525 
00529     void finalizeGUI( bool force );
00530 
00535     bool initialGeometrySet() const;
00536 
00541     void ignoreInitialGeometry();
00542 
00558     // KDE4 to be removed
00559     QSize sizeForCentralWidgetSize(QSize size) KDE_DEPRECATED;
00560 
00561 public slots:
00569     virtual void setCaption( const QString &caption );
00579     virtual void setCaption( const QString &caption, bool modified );
00580 
00587     virtual void setPlainCaption( const QString &caption );
00588 
00610     void appHelpActivated( void );
00611 
00618     virtual void slotStateChanged(const QString &newstate);
00619 
00628     void slotStateChanged(const QString &newstate,
00629                           KXMLGUIClient::ReverseStateChange); // KDE 4.0: remove this
00630 
00631 
00639 //     void slotStateChanged(const QString &newstate,
00640 //                           bool reverse); // KDE 4.0: enable this
00641 
00649     void setSettingsDirty();
00650 
00651 protected:
00652     void paintEvent( QPaintEvent* e );
00653     void childEvent( QChildEvent* e);
00654     void resizeEvent( QResizeEvent* e);
00662     virtual void closeEvent ( QCloseEvent *);
00663 
00664     // KDE4 This seems to be flawed to me. Either the app has only one
00665     // mainwindow, so queryClose() is enough, or if it can have more of them,
00666     // then the windows should take care of themselves, and queryExit()
00667     // would be useful only for the annoying 'really quit' dialog, which
00668     // also doesn't make sense in apps with multiple mainwindows.
00669     // And saving configuration in something called queryExit()? IMHO
00670     // one can e.g. use KApplication::shutDown(), which if nothing else
00671     // has at least better fitting name.
00672     // See also KApplication::sessionSaving().
00673     // This stuff should get changed somehow, so that it at least doesn't
00674     // mess with session management.
00702     virtual bool queryExit();
00703 
00738     virtual bool queryClose();
00739 
00753     virtual void saveProperties( KConfig* ) {}
00754 
00758     virtual void readProperties( KConfig* ) {}
00759 
00776     virtual void saveGlobalProperties( KConfig* sessionConfig );
00777 
00783     virtual void readGlobalProperties( KConfig* sessionConfig );
00784     void savePropertiesInternal( KConfig*, int );
00785     bool readPropertiesInternal( KConfig*, int );
00786 
00790     bool settingsDirty() const;
00794     QString settingsGroup() const;
00799     void saveWindowSize( KConfig * config ) const;
00805     void restoreWindowSize( KConfig * config );
00806 
00808     void parseGeometry(bool parsewidth);
00809 
00810 protected slots:
00811 
00836     virtual void showAboutApplication();
00837 
00861     void saveAutoSaveSettings();
00862 
00863 private slots:
00867     void shuttingDown();
00868 
00869 private:
00870     KMenuBar *internalMenuBar();
00871     KStatusBar *internalStatusBar();
00872     KHelpMenu *mHelpMenu, *helpMenu2;
00873     KXMLGUIFactory *factory_;
00874     QPtrList<KToolBar> toolbarList;
00875 protected:
00876     virtual void virtual_hook( int id, void* data );
00877 private:
00878     KMainWindowPrivate *d;
00879     void initKMainWindow(const char *name, int cflags);
00880 };
00881 
00882 #define RESTORE(type) { int n = 1;\
00883     while (KMainWindow::canBeRestored(n)){\
00884       (new type)->restore(n);\
00885       n++;}}
00886 
00887 #define KDE_RESTORE_MAIN_WINDOWS_NUM_TEMPLATE_ARGS 3
00888 
00899 template <typename T>
00900 inline void kRestoreMainWindows() {
00901   for ( int n = 1 ; KMainWindow::canBeRestored( n ) ; ++n ) {
00902     const QString className = KMainWindow::classNameOfToplevel( n );
00903     if ( className == QString::fromLatin1( T::staticMetaObject()->className() ) )
00904       (new T)->restore( n );
00905   }
00906 }
00907 
00908 template <typename T0, typename T1>
00909 inline void kRestoreMainWindows() {
00910   const char * classNames[2];
00911   classNames[0] = T0::staticMetaObject()->className();
00912   classNames[1] = T1::staticMetaObject()->className();
00913   for ( int n = 1 ; KMainWindow::canBeRestored( n ) ; ++n ) {
00914     const QString className = KMainWindow::classNameOfToplevel( n );
00915     if ( className == QString::fromLatin1( classNames[0] ) )
00916       (new T0)->restore( n );
00917     else if ( className == QString::fromLatin1( classNames[1] ) )
00918       (new T1)->restore( n );
00919   }
00920 }
00921 
00922 template <typename T0, typename T1, typename T2>
00923 inline void kRestoreMainWindows() {
00924   const char * classNames[3];
00925   classNames[0] = T0::staticMetaObject()->className();
00926   classNames[1] = T1::staticMetaObject()->className();
00927   classNames[2] = T1::staticMetaObject()->className();
00928   for ( int n = 1 ; KMainWindow::canBeRestored( n ) ; ++n ) {
00929     const QString className = KMainWindow::classNameOfToplevel( n );
00930     if ( className == QString::fromLatin1( classNames[0] ) )
00931       (new T0)->restore( n );
00932     else if ( className == QString::fromLatin1( classNames[1] ) )
00933       (new T1)->restore( n );
00934     else if ( className == QString::fromLatin1( classNames[2] ) )
00935       (new T2)->restore( n );
00936   }
00937 }
00938 
00939 #endif
KDE Logo
This file is part of the documentation for kdeui Library Version 3.2.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Mar 4 22:43:53 2004 by doxygen 1.3.6-20040222 written by Dimitri van Heesch, © 1997-2003