QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this));
#endif
+ // we assume that at this point, all configurable actions are defined!
+ QtUi::loadShortcuts();
+
connect(bufferWidget(), SIGNAL(currentChanged(BufferId)), SLOT(currentBufferChanged(BufferId)));
setDisconnectedState(); // Disable menus and stuff
#include "actioncollection.h"
#include "action.h"
+#include "uisettings.h"
ActionCollection::ActionCollection(QObject *parent) : QObject(parent) {
_connectTriggered = _connectHovered = false;
}
void ActionCollection::readSettings() {
-
+ ShortcutSettings s;
+ QStringList savedShortcuts = s.savedShortcuts();
+
+ foreach(const QString &name, _actionByName.keys()) {
+ if(!savedShortcuts.contains(name))
+ continue;
+ Action *action = qobject_cast<Action *>(_actionByName.value(name));
+ if(action)
+ action->setShortcut(s.loadShortcut(name), Action::ActiveShortcut);
+ }
}
void ActionCollection::writeSettings() const {
-
-
+ ShortcutSettings s;
+ foreach(const QString &name, _actionByName.keys()) {
+ Action *action = qobject_cast<Action *>(_actionByName.value(name));
+ if(!action)
+ continue;
+ if(!action->isShortcutConfigurable())
+ continue;
+ if(action->shortcut(Action::ActiveShortcut) == action->shortcut(Action::DefaultShortcut))
+ continue;
+ s.saveShortcut(name, action->shortcut(Action::ActiveShortcut));
+ }
}
void ActionCollection::slotActionTriggered() {
#include "graphicalui.h"
#include "actioncollection.h"
+#include "uisettings.h"
#include "contextmenuactionprovider.h"
#include "toolbaractionprovider.h"
if(_actionCollections.contains(category))
return _actionCollections.value(category);
ActionCollection *coll = new ActionCollection(_mainWidget);
+ coll->setProperty("Category", category);
if(_mainWidget)
coll->addAssociatedWidget(_mainWidget);
_actionCollections.insert(category, coll);
return coll;
}
+QHash<QString, ActionCollection *> GraphicalUi::actionCollections() {
+ return _actionCollections;
+}
+
+void GraphicalUi::loadShortcuts() {
+ foreach(ActionCollection *coll, actionCollections())
+ coll->readSettings();
+}
+
+void GraphicalUi::saveShortcuts() {
+ ShortcutSettings s;
+ s.clear();
+ foreach(ActionCollection *coll, actionCollections())
+ coll->writeSettings();
+}
+
void GraphicalUi::setMainWidget(QWidget *widget) {
_mainWidget = widget;
}
/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2010 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* @param category The category (default: "General")
*/
static ActionCollection *actionCollection(const QString &category = "General");
+ static QHash<QString, ActionCollection *> actionCollections();
+
+ //! Load custom shortcuts from ShortcutSettings
+ /** @note This method assumes that all configurable actions are defined when being called
+ */
+ static void loadShortcuts();
+
+ //! Save custom shortcuts to ShortcutSettings
+ static void saveShortcuts();
inline static ContextMenuActionProvider *contextMenuActionProvider();
inline static ToolBarActionProvider *toolBarActionProvider();
/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2010 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include "uisettings.h"
+#include "action.h"
+#include "actioncollection.h"
+
UiSettings::UiSettings(const QString &group)
: ClientSettings(group)
{
}
}
+/**************************************************************************
+ * ShortcutSettings
+ **************************************************************************/
+
+ShortcutSettings::ShortcutSettings() : UiSettings("Shortcuts") {
+
+}
+
+void ShortcutSettings::clear() {
+ foreach(const QString &key, allLocalKeys())
+ removeLocalKey(key);
+}
+
+QStringList ShortcutSettings::savedShortcuts() {
+ return localChildKeys();
+}
+
+QKeySequence ShortcutSettings::loadShortcut(const QString &name) {
+ return localValue(name, QKeySequence()).value<QKeySequence>();
+}
+
+void ShortcutSettings::saveShortcut(const QString &name, const QKeySequence &seq) {
+ setLocalValue(name, seq);
+}
/***************************************************************************
- * Copyright (C) 2005-09 by the Quassel Project *
+ * Copyright (C) 2005-2010 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
QString _sessionId;
};
+class ShortcutSettings : public UiSettings {
+public:
+ ShortcutSettings();
+
+ //! Remove all stored shortcuts
+ void clear();
+
+ QStringList savedShortcuts();
+
+ void saveShortcut(const QString &name, const QKeySequence &shortcut);
+ QKeySequence loadShortcut(const QString &name);
+};
+
#endif