/*************************************************************************** mainwindowshare.cpp - shared stuff of the main widgets ------------------- begin : 19 Dec 2002 copyright : (C) 2002 by Falk Brettschneider email : falk@tdevelop.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "partcontroller.h" #include "projectmanager.h" #include "core.h" #include "api.h" #include "kdevmakefrontend.h" #include "toplevel.h" #include "plugincontroller.h" #include "kdevplugininfo.h" #include "mainwindowshare.h" #include "shellextension.h" using namespace MainWindowUtils; MainWindowShare::MainWindowShare(TQObject* pParent, const char* name) :TQObject(pParent, name) ,m_toggleMainToolbar(0L) ,m_toggleBuildToolbar(0L) ,m_toggleViewToolbar(0L) ,m_toggleBrowserToolbar(0L) ,m_toggleStatusbar(0L) ,m_stopProcesses(0L) { m_pMainWnd = (KParts::MainWindow*)pParent; } void MainWindowShare::init() { connect(Core::getInstance(), TQT_SIGNAL(contextMenu(TQPopupMenu *, const Context *)), this, TQT_SLOT(contextMenu(TQPopupMenu *, const Context *))); connect( m_pMainWnd->actionCollection(), TQT_SIGNAL( actionStatusText( const TQString & ) ), this, TQT_SLOT( slotActionStatusText( const TQString & ) ) ); } void MainWindowShare::slotActionStatusText( const TQString &text ) { // kdDebug(9000) << "MainWindowShare::slotActionStatusText() - " << text << endl; if ( ! m_pMainWnd ) return; KStatusBar * statusBar = m_pMainWnd->statusBar(); if ( ! statusBar ) return; statusBar->message( text ); } void MainWindowShare::createActions() { ProjectManager::getInstance()->createActions( m_pMainWnd->actionCollection() ); KStdAction::quit(this->parent(), TQT_SLOT(close()), m_pMainWnd->actionCollection()); KAction* action; m_stopProcesses = new KToolBarPopupAction( i18n( "&Stop" ), "stop", Key_Escape, this, TQT_SLOT(slotStopButtonPressed()), m_pMainWnd->actionCollection(), "stop_processes" ); m_stopProcesses->setToolTip(i18n("Stop")); m_stopProcesses->setWhatsThis(i18n("Stop

Stops all running processes (like building process, grep command, etc.). When placed onto a toolbar provides a popup menu to choose a process to stop.")); m_stopProcesses->setEnabled( false ); connect(m_stopProcesses->popupMenu(), TQT_SIGNAL(aboutToShow()), this, TQT_SLOT(slotStopMenuAboutToShow())); connect(m_stopProcesses->popupMenu(), TQT_SIGNAL(activated(int)), this, TQT_SLOT(slotStopPopupActivated(int))); connect( Core::getInstance(), TQT_SIGNAL(activeProcessChanged(KDevPlugin*, bool)), this, TQT_SLOT(slotActiveProcessChanged(KDevPlugin*, bool)) ); action = KStdAction::showMenubar( this, TQT_SLOT(slotShowMenuBar()), m_pMainWnd->actionCollection(), "settings_show_menubar" ); action->setToolTip(beautifyToolTip(action->text())); action->setWhatsThis(TQString("%1

%2").arg(beautifyToolTip(action->text())).arg(i18n("Lets you switch the menubar on/off."))); action = KStdAction::keyBindings( this, TQT_SLOT(slotKeyBindings()), m_pMainWnd->actionCollection(), "settings_configure_shortcuts" ); action->setToolTip(beautifyToolTip(action->text())); action->setWhatsThis(TQString("%1

%2").arg(beautifyToolTip(action->text())).arg(i18n("Lets you configure shortcut keys."))); action = KStdAction::configureToolbars( this, TQT_SLOT(slotConfigureToolbars()), m_pMainWnd->actionCollection(), "settings_configure_toolbars" ); action->setToolTip(beautifyToolTip(action->text())); action->setWhatsThis(TQString("%1

%2").arg(beautifyToolTip(action->text())).arg(i18n("Lets you configure toolbars."))); action = KStdAction::configureNotifications( this, TQT_SLOT(slotConfigureNotifications()), m_pMainWnd->actionCollection(), "settings_configure_notifications" ); action->setToolTip(beautifyToolTip(action->text())); action->setWhatsThis(TQString("%1

%2").arg(beautifyToolTip(action->text())).arg(i18n("Lets you configure system notifications."))); action = KStdAction::preferences(this, TQT_SLOT(slotSettings()), m_pMainWnd->actionCollection(), "settings_configure" ); action->setToolTip( i18n( "Configure TDevelop" ) ); action->setWhatsThis(TQString("%1

%2").arg(i18n( "Configure TDevelop" )).arg(i18n("Lets you customize TDevelop."))); m_toggleStatusbar = KStdAction::showToolbar(this, TQT_SLOT(slotToggleStatusbar()),m_pMainWnd->actionCollection(), "settings_statusbar"); m_toggleStatusbar->setText(i18n("Show &Statusbar")); m_toggleStatusbar->setToolTip( i18n("Show statusbar") ); m_toggleStatusbar->setWhatsThis(i18n("Show statusbar

Hides or shows the statusbar.")); action = new KAction( i18n("&Next Window"), ALT+Key_Right, this, TQT_SIGNAL(gotoNextWindow()),m_pMainWnd->actionCollection(), "view_next_window"); action->setToolTip( i18n("Next window") ); action->setWhatsThis(i18n("Next window

Switches to the next window.")); action = new KAction( i18n("&Previous Window"), ALT+Key_Left, this, TQT_SIGNAL(gotoPreviousWindow()),m_pMainWnd->actionCollection(), "view_previous_window"); action->setToolTip( i18n("Previous window") ); action->setWhatsThis(i18n("Previous window

Switches to the previous window.")); action = new KAction( i18n("&Last Accessed Window"), ALT+Key_Up, this, TQT_SIGNAL(gotoLastWindow()), m_pMainWnd->actionCollection(), "view_last_window"); action->setToolTip( i18n("Last accessed window") ); action->setWhatsThis(i18n("Last accessed window

Switches to the last viewed window (Hold the Alt key pressed and walk on by repeating the Up key).")); action = new KAction( i18n("&First Accessed Window"), ALT+Key_Down, this, TQT_SIGNAL(gotoFirstWindow()), m_pMainWnd->actionCollection(), "view_first_window"); action->setToolTip( i18n("First accessed window") ); action->setWhatsThis(i18n("First accessed window

Switches to the first accessed window (Hold the Alt key pressed and walk on by repeating the Down key).")); action = new KAction( i18n("Configure Plugins..."), SmallIconSet("configure"), 0, PluginController::getInstance(), TQT_SLOT(selectPlugins()), m_pMainWnd->actionCollection(), "settings_configure_plugins" ); m_configureEditorAction = new KAction( i18n("Configure &Editor..."), SmallIconSet("configure"), 0, this, TQT_SLOT( slotConfigureEditors() ), m_pMainWnd->actionCollection(), "settings_configure_editors"); m_configureEditorAction->setToolTip( i18n("Configure editor settings") ); m_configureEditorAction->setWhatsThis(i18n("Configure editor

Opens editor configuration dialog.")); m_configureEditorAction->setEnabled( false ); KDevPartController * partController = API::getInstance()->partController(); connect( partController, TQT_SIGNAL(activePartChanged(KParts::Part*)), this, TQT_SLOT(slotActivePartChanged(KParts::Part* )) ); } void MainWindowShare::slotReportBug() { KBugReport a(m_pMainWnd, true, KGlobal::instance()->aboutData() ); a.exec(); } void MainWindowShare::slotToggleMainToolbar() { if (m_toggleMainToolbar->isChecked()) m_pMainWnd->toolBar("mainToolBar")->show(); else m_pMainWnd->toolBar("mainToolBar")->hide(); } void MainWindowShare::slotToggleBuildToolbar() { if (m_toggleBuildToolbar->isChecked()) m_pMainWnd->toolBar("buildToolBar")->show(); else m_pMainWnd->toolBar("buildToolBar")->hide(); } void MainWindowShare::slotToggleViewToolbar() { if (m_toggleViewToolbar->isChecked()) m_pMainWnd->toolBar("viewToolBar")->show(); else m_pMainWnd->toolBar("viewToolBar")->hide(); } void MainWindowShare::slotToggleBrowserToolbar() { if (m_toggleBrowserToolbar->isChecked()) m_pMainWnd->toolBar("browserToolBar")->show(); else m_pMainWnd->toolBar("browserToolBar")->hide(); } void MainWindowShare::slotToggleStatusbar() { KStatusBar* sb = (KStatusBar*) m_pMainWnd->statusBar(); if (m_toggleStatusbar->isChecked()) sb->show(); else sb->hide(); } void MainWindowShare::slotStopButtonPressed() { Core::getInstance()->doEmitStopButtonPressed(); } void MainWindowShare::slotActiveProcessChanged( KDevPlugin* plugin, bool active ) { if ( !plugin ) return; if ( active ) { activeProcesses.append( plugin ); } else { activeProcesses.removeRef( plugin ); } m_stopProcesses->setEnabled( !activeProcesses.isEmpty() ); } void MainWindowShare::slotStopPopupActivated( int id ) { KDevPlugin* plugin = activeProcesses.at( id ); if ( plugin && plugin->info()->genericName() == m_stopProcesses->popupMenu()->text( id ) ) { Core::getInstance()->doEmitStopButtonPressed( plugin ); return; } else { // oops... list has changed in the meantime TQString str = m_stopProcesses->popupMenu()->text( id ); for ( plugin = activeProcesses.first(); plugin; plugin = activeProcesses.next() ) { if ( plugin->info()->genericName() == str ) { Core::getInstance()->doEmitStopButtonPressed( plugin ); return; } } } } void MainWindowShare::slotStopMenuAboutToShow() { TQPopupMenu* popup = m_stopProcesses->popupMenu(); popup->clear(); int i = 0; for ( KDevPlugin* plugin = activeProcesses.first(); plugin; plugin = activeProcesses.next() ) { popup->insertItem( plugin->info()->genericName(), i++ ); } } void MainWindowShare::slotShowMenuBar() { if (m_pMainWnd->menuBar()->isVisible()) { m_pMainWnd->menuBar()->hide(); } else { m_pMainWnd->menuBar()->show(); } m_pMainWnd->saveMainWindowSettings( KGlobal::config(), "Mainwindow" ); } void MainWindowShare::slotConfigureNotifications() { KNotifyDialog::configure(m_pMainWnd, "Notification Configuration Dialog"); } void MainWindowShare::slotSettings() { KDialogBase dlg(KDialogBase::IconList, i18n("Configure TDevelop"), KDialogBase::Help|KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, m_pMainWnd, "customization dialog"); dlg.setHelp("setup"); ShellExtension::getInstance()->createGlobalSettingsPage(&dlg); KConfig* config = kapp->config(); config->setGroup("Global Settings Dialog"); int height = config->readNumEntry( "Height", 600 ); int width = config->readNumEntry( "Width", 800 ); dlg.resize( width, height ); Core::getInstance()->doEmitConfigWidget(&dlg); dlg.exec(); config->setGroup("Global Settings Dialog"); config->writeEntry( "Height", dlg.size().height() ); config->writeEntry( "Width", dlg.size().width() ); if ( dlg.result() != TQDialog::Rejected ) ShellExtension::getInstance()->acceptGlobalSettingsPage(&dlg); } void MainWindowShare::slotConfigureEditors() { kdDebug(9000) << " *** MainWindowShare::slotConfigureEditors()" << endl; KDevPartController * partController = API::getInstance()->partController(); KParts::Part * part = partController->activePart(); KTextEditor::ConfigInterface * conf = dynamic_cast( part ); if ( ! conf ) { kdDebug(9000) << "*** No KTextEditor::ConfigInterface for part!" << endl; return; } // show the modal config dialog for this part if it has a ConfigInterface conf->configDialog(); conf->writeConfig(); } void MainWindowShare::slotGUICreated( KParts::Part * part ) { // kdDebug(9000) << "MainWindowShare::slotGUICreated()" << endl; if ( ! part ) return; // disable configuration entry if created part is not an editor if ( ! dynamic_cast( part ) ) { m_configureEditorAction->setEnabled( false ); return; } m_configureEditorAction->setEnabled( true ); // remove the part's merged menu entry KAction * action = part->action("set_confdlg"); // name from katepartui.rc if ( action ) { kdDebug(9000) << " *** found \"set_confdlg\" action - unplugging" << endl; action->unplugAll(); } if ( KAction * action = part->action("file_save") ) { kdDebug(9000) << " *** found \"file_save\" action - disconnecting" << endl; disconnect( action, TQT_SIGNAL(activated()), 0, 0 ); connect( action, TQT_SIGNAL(activated()), PartController::getInstance(), TQT_SLOT(slotSave()) ); } if ( KAction * action = part->action("file_reload") ) { kdDebug(9000) << " *** found \"file_reload\" action - disconnecting" << endl; disconnect( action, TQT_SIGNAL(activated()), 0, 0 ); connect( action, TQT_SIGNAL(activated()), PartController::getInstance(), TQT_SLOT(slotReload()) ); } } // called when OK ar Apply is clicked in the EditToolbar Dialog void MainWindowShare::slotNewToolbarConfig() { // replug actionlists here... m_pMainWnd->applyMainWindowSettings( KGlobal::config(), "Mainwindow" ); // PartController::getInstance()->reinstallPopups(); } void MainWindowShare::slotKeyBindings() { KKeyDialog dlg( false, m_pMainWnd ); TQPtrList clients = m_pMainWnd->guiFactory()->clients(); for( TQPtrListIterator it( clients ); it.current(); ++it ) { dlg.insert( (*it)->actionCollection() ); } if ( dlg.configure() == KKeyDialog::Accepted ) { // this is needed for when we have multiple embedded kateparts and change one of them. // it also needs to be done to their views, as they too have actioncollections to update if( const TQPtrList * partlist = PartController::getInstance()->parts() ) { TQPtrListIterator it( *partlist ); while ( KParts::Part* part = it.current() ) { if ( KTextEditor::Document * doc = dynamic_cast( part ) ) { doc->reloadXML(); TQPtrList const & list = doc->views(); TQPtrListIterator itt( list ); while( KTextEditor::View * view = itt.current() ) { view->reloadXML(); ++itt; } } ++it; } } Core::setupShourtcutTips(); } } void MainWindowShare::slotConfigureToolbars() { m_pMainWnd->saveMainWindowSettings( KGlobal::config(), "Mainwindow" ); KEditToolbar dlg( m_pMainWnd->factory() ); connect(&dlg, TQT_SIGNAL(newToolbarConfig()), this, TQT_SLOT(slotNewToolbarConfig())); dlg.exec(); } void MainWindowShare::contextMenu(TQPopupMenu* popup, const Context *) { if ( m_pMainWnd->menuBar()->isVisible() ) return; int id = popup->insertItem( i18n("Show &Menubar"), m_pMainWnd->menuBar(), TQT_SLOT(show()) ); popup->TQMenuData::setWhatsThis(id, i18n("Show menubar

Lets you switch the menubar on/off.")); } void MainWindowShare::slotActivePartChanged( KParts::Part * part ) { m_configureEditorAction->setEnabled( part && dynamic_cast(part) ); } #include "mainwindowshare.moc" //kate: space-indent on; indent-width 4;