[Kde-pim] KDE/kdepim/kontact/src

Rafael Fernández López ereslibre at kde.org
Wed Jul 2 16:04:09 BST 2008


SVN commit 827296 by ereslibre:

Set shortcuts as we had on 3.5 kontact version. Plug in the list on the navigation toolbar. Some comments:

* We need to set proper shortcuts. With 11 plugins in sidebar, we would run out of shortcuts.
* If unloading a plugin, and later reloading it will make the newly plugin have count() + 1 shortcut, without mattering the weight of the plugin. This needs to be improved.

BUG: 165236
CCMAIL: winter at kde.org, kde-pim at kde.org


 M  +48 -2     mainwindow.cpp  
 M  +5 -0      mainwindow.h  


--- trunk/KDE/kdepim/kontact/src/mainwindow.cpp #827295:827296
@@ -71,6 +71,7 @@
 #include <khbox.h>
 #include <kvbox.h>
 #include <kicon.h>
+#include <kxmlguifactory.h>
 
 #include <QComboBox>
 #include <QCursor>
@@ -162,6 +163,9 @@
 
   mSidePane->setMaximumWidth( mSidePane->sizeHint().width() );
   mSidePane->setMinimumWidth( mSidePane->sizeHint().width() );
+
+  factory()->plugActionList( this, QString( "navigator_actionlist" ),
+                             *reinterpret_cast<QList<QAction*>*>( &mActionPlugins ) );
 }
 
 void MainWindow::initGUI()
@@ -522,13 +526,29 @@
   }
 }
 
+void MainWindow::updateShortcuts()
+{
+  ActionPluginList::ConstIterator end = mActionPlugins.end();
+  ActionPluginList::ConstIterator it;
+  int i = 1;
+  for ( it = mActionPlugins.begin(); it != end; ++it ) {
+    KAction *action = *it;
+    QString shortcut = QString( "Ctrl+%1" ).arg( i );
+    action->setShortcut( KShortcut( shortcut ) );
+    i++;
+  }
+  factory()->unplugActionList( this, QString( "navigator_actionlist" ) );
+  factory()->plugActionList( this, QString( "navigator_actionlist" ),
+                             *reinterpret_cast<QList<QAction*>*>( &mActionPlugins ) );
+}
+
 bool MainWindow::removePlugin( const KPluginInfo &info )
 {
   PluginList::Iterator end = mPlugins.end();
+  ActionPluginList::Iterator it2 = mActionPlugins.begin();
   for ( PluginList::Iterator it = mPlugins.begin(); it != end; ++it ) {
+    Plugin *plugin = *it;
     if ( ( *it )->identifier() == info.pluginName() ) {
-      Plugin *plugin = *it;
-
       const QList<KAction*> *actionList = plugin->newActions();
       QList<KAction*>::const_iterator listIt;
 
@@ -553,6 +573,10 @@
 
       plugin->deleteLater(); // removes the part automatically
       mPlugins.erase( it );
+      if ( plugin->showInSideBar() ) {
+        delete *it2; // remove the KAction, so we free the shortcut for later us
+        mActionPlugins.erase( it2 );
+      }
 
       if ( mCurrentPlugin == 0 ) {
         PluginList::Iterator it;
@@ -565,6 +589,10 @@
       }
       return true;
     }
+
+    if ( plugin->showInSideBar() ) {
+      it2++;
+    }
   }
 
   return false;
@@ -576,6 +604,17 @@
 
   mPlugins.append( plugin );
 
+  if ( plugin->showInSideBar() ) {
+    QString shortcut = QString( "Ctrl+%1" ).arg( mActionPlugins.count() + 1 );
+    KAction *action = new KAction( KIcon( plugin->icon() ), plugin->title(), this );
+    action->setData( plugin->identifier() ); // on the slot we can decode which action was
+                                             // triggered
+    action->setShortcut( KShortcut( shortcut ) );
+    connect( action, SIGNAL(triggered(bool)), SLOT(slotActionTriggered()) );
+    actionCollection()->addAction( plugin->title(), action );
+    mActionPlugins.append( action );
+  }
+
   // merge the plugins GUI into the main window
   insertChildClient( plugin );
 }
@@ -781,6 +820,12 @@
   QApplication::restoreOverrideCursor();
 }
 
+void MainWindow::slotActionTriggered()
+{
+  KAction *actionSender = static_cast<KAction*>( sender() );
+  mSidePane->setCurrentPlugin( actionSender->data().toString() );
+}
+
 void MainWindow::selectPlugin( const QString &pluginName )
 {
   PluginList::ConstIterator end = mPlugins.end();
@@ -887,6 +932,7 @@
   unloadPlugins();
   loadPlugins();
   mSidePane->updatePlugins();
+  updateShortcuts();
 }
 
 void MainWindow::updateConfig()
--- trunk/KDE/kdepim/kontact/src/mainwindow.h #827295:827296
@@ -52,6 +52,7 @@
 class AboutDialog;
 
 typedef QList<Kontact::Plugin*> PluginList;
+typedef QList<KAction*> ActionPluginList;
 
 class KONTACT_EXPORT MainWindow : public Kontact::Core
 {
@@ -63,11 +64,13 @@
     ~MainWindow();
 
     virtual PluginList pluginList() const { return mPlugins; }
+    virtual ActionPluginList actionPluginList() const { return mActionPlugins; }
     void setActivePluginModule( const QString & );
 
   public slots:
     virtual void selectPlugin( Kontact::Plugin *plugin );
     Q_SCRIPTABLE virtual void selectPlugin( const QString &pluginName );
+    void slotActionTriggered();
 
     void updateConfig();
 
@@ -97,6 +100,7 @@
     Kontact::Plugin *pluginFromInfo( const KPluginInfo & );
     void loadPlugins();
     void unloadPlugins();
+    void updateShortcuts();
     bool removePlugin( const KPluginInfo & );
     void addPlugin( Kontact::Plugin *plugin );
     void partLoaded( Kontact::Plugin *plugin, KParts::ReadOnlyPart *part );
@@ -128,6 +132,7 @@
     KParts::PartManager *mPartManager;
     PluginList mPlugins;
     PluginList mDelayedPreload;
+    ActionPluginList mActionPlugins;
     QList<KPluginInfo> mPluginInfos;
     KHTMLPart *mIntroPart;
 
_______________________________________________
KDE PIM mailing list kde-pim at kde.org
https://mail.kde.org/mailman/listinfo/kde-pim
KDE PIM home page at http://pim.kde.org/



More information about the kde-pim mailing list