[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