Clean-up and refactor the blowfish encryption stuff
[quassel.git] / src / qtui / mainwin.cpp
index 598befd..1362e85 100644 (file)
@@ -69,7 +69,6 @@
 #include "inputwidget.h"
 #include "irclistmodel.h"
 #include "ircconnectionwizard.h"
-#include "jumpkeyhandler.h"
 #include "legacysystemtray.h"
 #include "msgprocessorstatuswidget.h"
 #include "nicklistwidget.h"
 #include "settingspages/notificationssettingspage.h"
 #include "settingspages/topicwidgetsettingspage.h"
 
+#ifndef HAVE_KDE
+#  include "settingspages/shortcutssettingspage.h"
+#endif
+
 MainWin::MainWin(QWidget *parent)
 #ifdef HAVE_KDE
   : KMainWindow(parent),
@@ -146,8 +149,6 @@ MainWin::MainWin(QWidget *parent)
   setWindowTitle("Quassel IRC");
   setWindowIconText("Quassel IRC");
   updateIcon();
-
-  installEventFilter(new JumpKeyHandler(this));
 }
 
 void MainWin::init() {
@@ -306,7 +307,7 @@ void MainWin::updateIcon() {
 }
 
 void MainWin::setupActions() {
-  ActionCollection *coll = QtUi::actionCollection("General");
+  ActionCollection *coll = QtUi::actionCollection("General", tr("General"));
   // File
   coll->addAction("ConnectCore", new Action(SmallIcon("network-connect"), tr("&Connect to Core..."), coll,
                                              this, SLOT(showCoreConnectionDlg())));
@@ -339,6 +340,8 @@ void MainWin::setupActions() {
                                                 0, 0))->setCheckable(true);
 
   // Settings
+  coll->addAction("ConfigureShortcuts", new Action(SmallIcon("configure-shortcuts"), tr("Configure &Shortcuts..."), coll,
+                                                  this, SLOT(showShortcutsDlg())));
   coll->addAction("ConfigureQuassel", new Action(SmallIcon("configure"), tr("&Configure Quassel..."), coll,
                                                   this, SLOT(showSettingsDlg()), QKeySequence(Qt::Key_F7)));
 
@@ -361,8 +364,61 @@ void MainWin::setupActions() {
                                        QtUi::style(), SLOT(reload()), QKeySequence::Refresh));
 
   // Navigation
+  coll = QtUi::actionCollection("Navigation", tr("Navigation"));
+
   coll->addAction("JumpHotBuffer", new Action(tr("Jump to hot chat"), coll,
                                               this, SLOT(on_jumpHotBuffer_triggered()), QKeySequence(Qt::META + Qt::Key_A)));
+
+  // Jump keys
+#ifdef Q_WS_MAC
+  const int bindModifier = Qt::ControlModifier | Qt::AltModifier;
+  const int jumpModifier = Qt::ControlModifier;
+#else
+  const int bindModifier = Qt::ControlModifier;
+  const int jumpModifier = Qt::AltModifier;
+#endif
+
+  coll->addAction("BindJumpKey0", new Action(tr("Set Quick Access #0"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_0)))->setProperty("Index", 0);
+  coll->addAction("BindJumpKey1", new Action(tr("Set Quick Access #1"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_1)))->setProperty("Index", 1);
+  coll->addAction("BindJumpKey2", new Action(tr("Set Quick Access #2"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_2)))->setProperty("Index", 2);
+  coll->addAction("BindJumpKey3", new Action(tr("Set Quick Access #3"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_3)))->setProperty("Index", 3);
+  coll->addAction("BindJumpKey4", new Action(tr("Set Quick Access #4"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_4)))->setProperty("Index", 4);
+  coll->addAction("BindJumpKey5", new Action(tr("Set Quick Access #5"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_5)))->setProperty("Index", 5);
+  coll->addAction("BindJumpKey6", new Action(tr("Set Quick Access #6"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_6)))->setProperty("Index", 6);
+  coll->addAction("BindJumpKey7", new Action(tr("Set Quick Access #7"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_7)))->setProperty("Index", 7);
+  coll->addAction("BindJumpKey8", new Action(tr("Set Quick Access #8"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_8)))->setProperty("Index", 8);
+  coll->addAction("BindJumpKey9", new Action(tr("Set Quick Access #9"), coll, this, SLOT(bindJumpKey()),
+                                             QKeySequence(bindModifier + Qt::Key_9)))->setProperty("Index", 9);
+
+  coll->addAction("JumpKey0", new Action(tr("Quick Access #0"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_0)))->setProperty("Index", 0);
+  coll->addAction("JumpKey1", new Action(tr("Quick Access #1"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_1)))->setProperty("Index", 1);
+  coll->addAction("JumpKey2", new Action(tr("Quick Access #2"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_2)))->setProperty("Index", 2);
+  coll->addAction("JumpKey3", new Action(tr("Quick Access #3"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_3)))->setProperty("Index", 3);
+  coll->addAction("JumpKey4", new Action(tr("Quick Access #4"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_4)))->setProperty("Index", 4);
+  coll->addAction("JumpKey5", new Action(tr("Quick Access #5"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_5)))->setProperty("Index", 5);
+  coll->addAction("JumpKey6", new Action(tr("Quick Access #6"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_6)))->setProperty("Index", 6);
+  coll->addAction("JumpKey7", new Action(tr("Quick Access #7"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_7)))->setProperty("Index", 7);
+  coll->addAction("JumpKey8", new Action(tr("Quick Access #8"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_8)))->setProperty("Index", 8);
+  coll->addAction("JumpKey9", new Action(tr("Quick Access #9"), coll, this, SLOT(onJumpKey()),
+                                         QKeySequence(jumpModifier + Qt::Key_9)))->setProperty("Index", 9);
 }
 
 void MainWin::setupMenus() {
@@ -408,6 +464,8 @@ void MainWin::setupMenus() {
 #ifdef HAVE_KDE
   _settingsMenu->addAction(KStandardAction::configureNotifications(this, SLOT(showNotificationsDlg()), this));
   _settingsMenu->addAction(KStandardAction::keyBindings(this, SLOT(showShortcutsDlg()), this));
+#else
+  _settingsMenu->addAction(coll->action("ConfigureShortcuts"));
 #endif
   _settingsMenu->addAction(coll->action("ConfigureQuassel"));
 
@@ -974,11 +1032,17 @@ void MainWin::showAboutDlg() {
   AboutDlg(this).exec();
 }
 
-#ifdef HAVE_KDE
 void MainWin::showShortcutsDlg() {
-  KShortcutsDialog::configure(QtUi::actionCollection("General"), KShortcutsEditor::LetterShortcutsDisallowed);
-}
+#ifdef HAVE_KDE
+  KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsDisallowed, this);
+  foreach(KActionCollection *coll, QtUi::actionCollections())
+    dlg.addCollection(coll, coll->property("Category").toString());
+  dlg.exec();
+#else
+  SettingsPageDlg dlg(new ShortcutsSettingsPage(QtUi::actionCollections(), this), this);
+  dlg.exec();
 #endif
+}
 
 /********************************************************************************************************/
 
@@ -1136,6 +1200,34 @@ void MainWin::on_jumpHotBuffer_triggered() {
   Client::bufferModel()->switchToBuffer(bufferId);
 }
 
+void MainWin::onJumpKey() {
+  QAction *action = qobject_cast<QAction *>(sender());
+  if(!action || !Client::bufferModel())
+    return;
+  int idx = action->property("Index").toInt();
+
+  if(_jumpKeyMap.isEmpty())
+    _jumpKeyMap = CoreAccountSettings().jumpKeyMap();
+
+  if(!_jumpKeyMap.contains(idx))
+    return;
+
+  BufferId buffer = _jumpKeyMap.value(idx);
+  if(buffer.isValid())
+    Client::bufferModel()->switchToBuffer(buffer);
+
+}
+
+void MainWin::bindJumpKey() {
+  QAction *action = qobject_cast<QAction *>(sender());
+  if(!action || !Client::bufferModel())
+    return;
+  int idx = action->property("Index").toInt();
+
+  _jumpKeyMap[idx] = Client::bufferModel()->currentBuffer();
+  CoreAccountSettings().setJumpKeyMap(_jumpKeyMap);
+}
+
 void MainWin::on_actionDebugNetworkModel_triggered() {
   QTreeView *view = new QTreeView;
   view->setAttribute(Qt::WA_DeleteOnClose);