bool MainWindow::removePlugin( const KPluginInfo *info ) { PluginList::Iterator end = mPlugins.end(); for ( PluginList::Iterator it = mPlugins.begin(); it != end; ++it ) if ( ( *it )->identifier() == info->pluginName() ) { Plugin *plugin = *it; KAction *action; QPtrList<KAction> *actionList = plugin->newActions(); for ( action = actionList->first(); action; action = actionList->next() ) { kdDebug(5600) << "Unplugging " << action->name() << endl; action->unplug( mNewActions->popupMenu() ); } if ( mSyncActionsEnabled ) { actionList = plugin->syncActions(); for ( action = actionList->first(); action; action = actionList->next() ) { kdDebug(5600) << "Unplugging " << action->name() << endl; action->unplug( mSyncActions->popupMenu() ); } } removeChildClient( plugin ); if ( mCurrentPlugin == plugin ) mCurrentPlugin = 0; delete plugin; // removes the part automatically mPlugins.remove( it ); if ( mCurrentPlugin == 0 ) { PluginList::Iterator it; for ( it = mPlugins.begin(); it != mPlugins.end(); ++it ) { if ( (*it)->showInSideBar() ) { selectPlugin( *it ); return true; } } } return true; } return false; }
void MainWindow::selectPlugin( Kontact::Plugin *plugin ) { if ( !plugin ) return; if ( plugin->isRunningStandalone() ) { statusBar()->message( i18n( "Application is running standalone. Foregrounding..." ), 1000 ); mSidePane->indicateForegrunding( plugin ); plugin->bringToForeground(); return; } KApplication::setOverrideCursor( QCursor( Qt::WaitCursor ) ); KParts::Part *part = plugin->part(); if ( !part ) { KApplication::restoreOverrideCursor(); KMessageBox::error( this, i18n( "Cannot load part for %1." ) .arg( plugin->title() ) + "\n" + lastErrorMessage() ); plugin->setDisabled( true ); mSidePane->updatePlugins(); return; } // store old focus widget QWidget *focusWidget = kapp->focusWidget(); if ( mCurrentPlugin && focusWidget ) { // save the focus widget only when it belongs to the activated part QWidget *parent = focusWidget->parentWidget(); while ( parent ) { if ( parent == mCurrentPlugin->part()->widget() ) mFocusWidgets.insert( mCurrentPlugin->identifier(), QGuardedPtr<QWidget>( focusWidget ) ); parent = parent->parentWidget(); } } if ( mSidePane ) mSidePane->selectPlugin( plugin ); plugin->select(); mPartManager->setActivePart( part ); QWidget *view = part->widget(); Q_ASSERT( view ); if ( view ) { mPartsStack->raiseWidget( view ); view->show(); if ( mFocusWidgets.contains( plugin->identifier() ) ) { focusWidget = mFocusWidgets[ plugin->identifier() ]; if ( focusWidget ) focusWidget->setFocus(); } else view->setFocus(); mCurrentPlugin = plugin; KAction *newAction = plugin->newActions()->first(); KAction *syncAction = plugin->syncActions()->first(); createGUI( plugin->part() ); KToolBar* navigatorToolBar = findToolBar( "navigatorToolBar" ); // Let the navigator toolbar be always the last one, if it's in the top dockwindow if ( navigatorToolBar && !navigatorToolBar->isHidden() && navigatorToolBar->barPos() == KToolBar::Top ) { topDock()->moveDockWindow( navigatorToolBar, -1 ); } setCaption( i18n( "Plugin dependent window title" ,"%1 - Kontact" ).arg( plugin->title() ) ); if ( newAction ) { mNewActions->setIcon( newAction->icon() ); mNewActions->setText( newAction->text() ); } else { // we'll use the action of the first plugin which offers one PluginList::Iterator it; for ( it = mPlugins.begin(); it != mPlugins.end(); ++it ) { newAction = (*it)->newActions()->first(); if ( newAction ) { mNewActions->setIcon( newAction->icon() ); mNewActions->setText( newAction->text() ); break; } } } if ( mSyncActionsEnabled ) { if ( syncAction ) { mSyncActions->setIcon( syncAction->icon() ); mSyncActions->setText( syncAction->text() ); } else { // we'll use the action of the first plugin which offers one PluginList::Iterator it; for ( it = mPlugins.begin(); it != mPlugins.end(); ++it ) { syncAction = (*it)->syncActions()->first(); if ( syncAction ) { mSyncActions->setIcon( syncAction->icon() ); mSyncActions->setText( syncAction->text() ); break; } } } } } QStringList invisibleActions = plugin->invisibleToolbarActions(); QStringList::ConstIterator it; for ( it = invisibleActions.begin(); it != invisibleActions.end(); ++it ) { KAction *action = part->actionCollection()->action( (*it).latin1() ); if ( action ) { QPtrListIterator<KToolBar> it( toolBarIterator() ); for ( ; it.current() ; ++it ) { action->unplug( it.current() ); } } } KApplication::restoreOverrideCursor(); }
PlaylistWindow::PlaylistWindow() : QWidget( 0, "PlaylistWindow", Qt::WGroupLeader ) , KXMLGUIClient() , m_lastBrowser( 0 ) { s_instance = this; // Sets caption and icon correctly (needed e.g. for GNOME) kapp->setTopWidget( this ); KActionCollection* const ac = actionCollection(); const EngineController* const ec = EngineController::instance(); ac->setAutoConnectShortcuts( false ); ac->setWidget( this ); new K3bExporter(); KStdAction::configureToolbars( kapp, SLOT( slotConfigToolBars() ), ac ); KStdAction::keyBindings( kapp, SLOT( slotConfigShortcuts() ), ac ); KStdAction::keyBindings( kapp, SLOT( slotConfigGlobalShortcuts() ), ac, "options_configure_globals" ); KStdAction::preferences( kapp, SLOT( slotConfigAmarok() ), ac ); KStdAction::quit( kapp, SLOT( quit() ), ac ); KStdAction::open( this, SLOT(slotAddLocation()), ac, "playlist_add" )->setText( i18n("&Add Media...") ); KStdAction::save( this, SLOT(savePlaylist()), ac, "playlist_save" )->setText( i18n("&Save Playlist As...") ); KStdAction::showMenubar( this, SLOT(slotToggleMenu()), ac ); new KAction( i18n("Play Media..."), "fileopen", 0, this, SLOT(slotPlayMedia()), ac, "playlist_playmedia" ); new KAction( i18n("Play Audio CD"), "cdaudio_unmount", 0, this, SLOT(playAudioCD()), ac, "play_audiocd" ); new KAction( i18n("Script Manager"), "pencil", 0, this, SLOT(showScriptSelector()), ac, "script_manager" ); new KAction( i18n("Queue Manager"), "goto", 0, this, SLOT(showQueueManager()), ac, "queue_manager" ); new KAction( i18n("Statistics"), amaroK::icon( "info" ), 0, this, SLOT(showStatistics()), ac, "statistics" ); ac->action( "options_configure_globals" )->setText( i18n( "Configure &Global Shortcuts..." ) ); new KAction( i18n( "Previous Track" ), amaroK::icon( "back" ), 0, ec, SLOT( previous() ), ac, "prev" ); new KAction( i18n( "Play" ), amaroK::icon( "play" ), 0, ec, SLOT( play() ), ac, "play" ); new KAction( i18n( "Pause" ), amaroK::icon( "pause" ), 0, ec, SLOT( pause() ), ac, "pause" ); new KAction( i18n( "Next Track" ), amaroK::icon( "next" ), 0, ec, SLOT( next() ), ac, "next" ); { KAction *gah = new KAction( i18n( "Toggle Focus" ), "reload", CTRL+Key_Tab, this, SLOT( slotToggleFocus() ), ac, "toggle_focus" ); KPopupMenu asdf; gah->plug( &asdf ); gah->unplug( &asdf ); } new amaroK::MenuAction( ac ); new amaroK::StopAction( ac ); new amaroK::PlayPauseAction( ac ); new amaroK::AnalyzerAction( ac ); new amaroK::RepeatAction( ac ); new amaroK::RandomAction( ac ); new amaroK::FavorAction( ac ); new amaroK::VolumeAction( ac ); if( K3bExporter::isAvailable() ) new amaroK::BurnMenuAction( ac ); if( AmarokConfig::playlistWindowSize().isValid() ) { // if first ever run, use sizeHint(), and let // KWin place us otherwise use the stored values resize( AmarokConfig::playlistWindowSize() ); move( AmarokConfig::playlistWindowPos() ); } }