00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include <kparts/mainwindow.h>
00022
#include <kparts/event.h>
00023
#include <kparts/part.h>
00024
#include <kparts/plugin.h>
00025
#include <kinstance.h>
00026
#include <kstatusbar.h>
00027
#include <khelpmenu.h>
00028
#include <kstandarddirs.h>
00029
#include <qapplication.h>
00030
#include <kxmlguifactory.h>
00031
00032
#include <kaccel.h>
00033
#include <kdebug.h>
00034
00035
#include <assert.h>
00036
00037
using namespace KParts;
00038
00039
namespace KParts
00040 {
00041
class MainWindowPrivate
00042 {
00043
public:
00044 MainWindowPrivate()
00045 {
00046 m_activePart = 0;
00047 m_bShellGUIActivated =
false;
00048 m_helpMenu = 0;
00049 }
00050 ~MainWindowPrivate()
00051 {
00052 }
00053
00054
QGuardedPtr<Part> m_activePart;
00055
bool m_bShellGUIActivated;
00056
KHelpMenu *m_helpMenu;
00057 };
00058 }
00059
00060 MainWindow::MainWindow(
QWidget* parent,
const char *name, WFlags f )
00061 :
KMainWindow( parent, name, f )
00062 {
00063 d =
new MainWindowPrivate();
00064 PartBase::setPartObject(
this );
00065 }
00066
00067 MainWindow::MainWindow(
const char *name, WFlags f )
00068 :
KMainWindow( 0L, name, f )
00069 {
00070 d =
new MainWindowPrivate();
00071 PartBase::setPartObject(
this );
00072 }
00073
00074 MainWindow::MainWindow(
int cflags,
QWidget* parent,
const char *name, WFlags f )
00075 :
KMainWindow( cflags, parent, name, f )
00076 {
00077 d =
new MainWindowPrivate();
00078 PartBase::setPartObject(
this );
00079 }
00080
00081 MainWindow::~MainWindow()
00082 {
00083
delete d;
00084 }
00085
00086 void MainWindow::createGUI(
Part * part )
00087 {
00088
kdDebug(1000) <<
"MainWindow::createGUI, part=" << part <<
" " << ( part ? part->className() :
"" )
00089 <<
" " << ( part ? part->name() :
"" )
00090 <<
endl;
00091
00092
KXMLGUIFactory *factory =
guiFactory();
00093
00094 assert( factory );
00095
00096 setUpdatesEnabled(
false );
00097
00098
QPtrList<Plugin> plugins;
00099
00100
if ( d->m_activePart )
00101 {
00102
kdDebug(1000) <<
"deactivating GUI for " << d->m_activePart <<
" " << d->m_activePart->className()
00103 <<
" " << d->m_activePart->name() <<
endl;
00104
00105
GUIActivateEvent ev(
false );
00106 QApplication::sendEvent( d->m_activePart, &ev );
00107
00108 factory->
removeClient( d->m_activePart );
00109
00110 disconnect( d->m_activePart, SIGNAL( setWindowCaption(
const QString & ) ),
00111
this, SLOT( setCaption(
const QString & ) ) );
00112 disconnect( d->m_activePart, SIGNAL( setStatusBarText(
const QString & ) ),
00113
this, SLOT(
slotSetStatusBarText(
const QString & ) ) );
00114 }
00115
00116
if ( !d->m_bShellGUIActivated )
00117 {
00118 loadPlugins(
this,
this, KGlobal::instance() );
00119 createShellGUI();
00120 d->m_bShellGUIActivated =
true;
00121 }
00122
00123
if ( part )
00124 {
00125
00126 connect( part, SIGNAL( setWindowCaption(
const QString & ) ),
00127
this, SLOT( setCaption(
const QString & ) ) );
00128 connect( part, SIGNAL( setStatusBarText(
const QString & ) ),
00129
this, SLOT(
slotSetStatusBarText(
const QString & ) ) );
00130
00131 factory->
addClient( part );
00132
00133
GUIActivateEvent ev(
true );
00134 QApplication::sendEvent( part, &ev );
00135
if (
autoSaveSettings() )
00136 applyMainWindowSettings( KGlobal::config(),
autoSaveGroup() );
00137 }
00138
00139 setUpdatesEnabled(
true );
00140
00141 d->m_activePart = part;
00142 }
00143
00144 void MainWindow::slotSetStatusBarText(
const QString & text )
00145 {
00146
statusBar()->message( text );
00147 }
00148
00149
void MainWindow::createShellGUI(
bool create )
00150 {
00151
bool bAccelAutoUpdate =
accel()->
setAutoUpdate(
false );
00152 assert( d->m_bShellGUIActivated != create );
00153 d->m_bShellGUIActivated = create;
00154
if ( create )
00155 {
00156
if (
isHelpMenuEnabled() && !d->m_helpMenu )
00157 d->m_helpMenu =
new KHelpMenu(
this,
instance()->aboutData(),
true,
actionCollection() );
00158
00159
QString f =
xmlFile();
00160 setXMLFile(
locate(
"config",
"ui/ui_standards.rc",
instance() ) );
00161
if ( !f.isEmpty() )
00162 setXMLFile( f,
true );
00163
else
00164 {
00165
QString auto_file(
instance()->instanceName() +
"ui.rc" );
00166 setXMLFile( auto_file,
true );
00167 }
00168
00169
GUIActivateEvent ev(
true );
00170 QApplication::sendEvent(
this, &ev );
00171
00172
guiFactory()->
addClient(
this );
00173 }
00174
else
00175 {
00176
GUIActivateEvent ev(
false );
00177 QApplication::sendEvent(
this, &ev );
00178
00179
guiFactory()->
removeClient(
this );
00180 }
00181
accel()->
setAutoUpdate( bAccelAutoUpdate );
00182 }
00183
00184
#include "mainwindow.moc"