PMShell::PMShell( const KURL& url ) : PMDockMainWindow( 0, "mainwindow" ) { setPluginLoadingMode( DoNotLoadPlugins ); setInstance( PMFactory::instance( ), false ); m_pPart = new PMPart( this, "part", this, "part", true, this ); m_pPart->setReadWrite( ); // read-write mode m_viewNumber = 0; m_objectsToDelete.setAutoDelete( true ); if (!initialGeometrySet()) resize(800,600); setupActions( ); restoreOptions( ); setupView( ); setXMLFile( "kpovmodelershell.rc" ); createGUI( m_pPart ); //guiFactory( )->addClient( m_pPart ); m_pStatusBar = statusBar( ); m_pStatusBar->insertItem( " ", c_statusBarInfo, 1 ); m_pStatusBar->insertItem( "" , c_statusBarControlPoints ); KConfig* config = instance( )->config( ); config->setGroup( "Appearance" ); applyMainWindowSettings( config ); if( !url.isEmpty( ) ) openURL( url ); setCaption( url.prettyURL( ) ); connect( m_pPart, SIGNAL( modified( ) ), SLOT( slotModified( ) ) ); connect( m_pPart, SIGNAL( controlPointMessage( const QString& ) ), SLOT( slotControlPointMsg( const QString& ) ) ); }
KompareShell::KompareShell() : KParts::MainWindow( ), m_textViewPart( 0 ), m_textViewWidget( 0 ), m_eventLoopLocker( new QEventLoopLocker() ) { if ( !initialGeometrySet() ) resize( 800, 480 ); // set the shell's ui resource file setXMLFile("kompareui.rc"); // then, setup our actions setupActions(); setupStatusBar(); m_viewPart = KMimeTypeTrader::createInstanceFromQuery<KParts::ReadWritePart>("text/x-patch", "Kompare/ViewPart", this); if ( m_viewPart ) { setCentralWidget( m_viewPart->widget() ); // and integrate the part's GUI with the shell's createGUI(m_viewPart); } else { // if we couldn't load our Part, we exit since the Shell by // itself can't do anything useful KMessageBox::error(this, i18n( "Could not load our KompareViewPart." ) ); exit(2); } m_navTreeDock = new QDockWidget( i18n( "Navigation" ), this ); m_navTreeDock->setObjectName( "Navigation" ); // This part is implemented in KompareNavTreePart m_navTreePart = KServiceTypeTrader::createInstanceFromQuery<KParts::ReadOnlyPart> ("KParts/ReadOnlyPart", "'Kompare/NavigationPart' in ServiceTypes", m_navTreeDock); if ( m_navTreePart ) { m_navTreeDock->setWidget( m_navTreePart->widget() ); addDockWidget( Qt::TopDockWidgetArea, m_navTreeDock ); // m_navTreeDock->manualDock( m_mainViewDock, KDockWidget::DockTop, 20 ); } else { // if we couldn't load our Part, we exit since the Shell by // itself can't do anything useful KMessageBox::error(this, i18n( "Could not load our KompareNavigationPart." ) ); exit(4); } // Hook up the inter part communication connect( m_viewPart, SIGNAL( modelsChanged(const Diff2::DiffModelList*) ), m_navTreePart, SLOT( slotModelsChanged( const Diff2::DiffModelList*) ) ); connect( m_viewPart, SIGNAL( kompareInfo(Kompare::Info*) ), m_navTreePart, SLOT( slotKompareInfo(Kompare::Info*) ) ); connect( m_navTreePart, SIGNAL( selectionChanged(const Diff2::DiffModel*, const Diff2::Difference*) ), m_viewPart, SIGNAL( selectionChanged(const Diff2::DiffModel*, const Diff2::Difference*) ) ); connect( m_viewPart, SIGNAL( setSelection(const Diff2::DiffModel*, const Diff2::Difference*) ), m_navTreePart, SLOT( slotSetSelection(const Diff2::DiffModel*, const Diff2::Difference*) ) ); connect( m_navTreePart, SIGNAL( selectionChanged(const Diff2::Difference*) ), m_viewPart, SIGNAL( selectionChanged(const Diff2::Difference*) ) ); connect( m_viewPart, SIGNAL( setSelection(const Diff2::Difference*) ), m_navTreePart, SLOT( slotSetSelection(const Diff2::Difference*) ) ); // This is the interpart interface, it is signal and slot based so no "real" nterface here // All you have to do is connect the parts from your application. // These just point to the method with the same name in the KompareModelList or get called // from the method with the same name in KompareModelList. // There is currently no applying possible from the navtreepart to the viewpart connect( m_viewPart, SIGNAL(applyDifference(bool)), m_navTreePart, SLOT(slotApplyDifference(bool)) ); connect( m_viewPart, SIGNAL(applyAllDifferences(bool)), m_navTreePart, SLOT(slotApplyAllDifferences(bool)) ); connect( m_viewPart, SIGNAL(applyDifference(const Diff2::Difference*, bool)), m_navTreePart, SLOT(slotApplyDifference(const Diff2::Difference*, bool)) ); // Hook up the KomparePart -> KompareShell communication connect( m_viewPart, SIGNAL( setStatusBarModelInfo( int, int, int, int, int ) ), this, SLOT( slotUpdateStatusBar( int, int, int, int, int ) ) ); connect( m_viewPart, SIGNAL( setStatusBarText(const QString&) ), this, SLOT( slotSetStatusBarText(const QString&) ) ); connect( m_viewPart, SIGNAL(diffString(const QString&)), this, SLOT(slotSetDiffString(const QString&)) ); // Read basic main-view settings, and set to autosave setAutoSaveSettings( "General Options" ); }
KateMainWindow::KateMainWindow (KConfig *sconfig, const QString &sgroup) : KateMDI::MainWindow (0) { setObjectName((QString("__KateMainWindow#%1").arg(uniqueID)).toLatin1()); // first the very important id myID = uniqueID; uniqueID++; new KateMainWindowAdaptor( this ); m_dbusObjectPath = "/MainWindow/" + QString::number( myID ); QDBusConnection::sessionBus().registerObject( m_dbusObjectPath, this ); m_modignore = false; // here we go, set some usable default sizes if (!initialGeometrySet()) { int scnum = QApplication::desktop()->screenNumber(parentWidget()); QRect desk = QApplication::desktop()->screenGeometry(scnum); QSize size; // try to load size if (sconfig) { KConfigGroup cg( sconfig, sgroup ); size.setWidth (cg.readEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); size.setHeight (cg.readEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); } // if thats fails, try to reuse size if (size.isEmpty()) { // first try to reuse size known from current or last created main window ;=) if (KateApp::self()->mainWindows () > 0) { KateMainWindow *win = KateApp::self()->activeMainWindow (); if (!win) win = KateApp::self()->mainWindow (KateApp::self()->mainWindows () - 1); size = win->size(); } else // now fallback to hard defaults ;) { // first try global app config KConfigGroup cg( KGlobal::config(), "MainWindow" ); size.setWidth (cg.readEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); size.setHeight (cg.readEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); if (size.isEmpty()) size = QSize (qMin (700, desk.width()), qMin(480, desk.height())); } resize (size); } } // start session restore if needed startRestore (sconfig, sgroup); m_mainWindow = new Kate::MainWindow (this); // setup most important actions first, needed by setupMainWindow setupImportantActions (); // setup the most important widgets setupMainWindow(); // setup the actions setupActions(); setStandardToolBarMenuEnabled( true ); setXMLFile( "kateui.rc" ); createShellGUI ( true ); //kDebug() << "****************************************************************************" << sconfig; // register mainwindow in app KateApp::self()->addMainWindow (this); // enable plugin guis KatePluginManager::self()->enableAllPluginsGUI (this, sconfig); // caption update for (uint i = 0; i < KateDocManager::self()->documents(); i++) slotDocumentCreated (KateDocManager::self()->document(i)); connect(KateDocManager::self(), SIGNAL(documentCreated(KTextEditor::Document*)), this, SLOT(slotDocumentCreated(KTextEditor::Document*))); readOptions(); if (sconfig) m_viewManager->restoreViewConfiguration (KConfigGroup(sconfig, sgroup) ); finishRestore (); fileOpenRecent->loadEntries( KConfigGroup(sconfig, "Recent Files" ) ); setAcceptDrops(true); connect(KateSessionManager::self(), SIGNAL(sessionChanged()), this, SLOT(updateCaption())); connect(this,SIGNAL(sigShowPluginConfigPage(Kate::PluginConfigPageInterface *,uint)),this,SLOT(showPluginConfigPage(Kate::PluginConfigPageInterface *,uint))); }