made keybindings persistent (per client)
authorMarcus Eggenberger <egs@quassel-irc.org>
Tue, 5 Feb 2008 21:46:46 +0000 (21:46 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Tue, 5 Feb 2008 21:46:46 +0000 (21:46 +0000)
src/client/clientsettings.cpp
src/client/clientsettings.h
src/client/networkmodel.cpp
src/qtui/mainwin.cpp
src/qtui/mainwin.h
version.inc

index 2bf6412..7cccac6 100644 (file)
@@ -78,6 +78,28 @@ QVariant CoreAccountSettings::accountValue(const QString &key, const QVariant &d
   return localValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().toInt()).arg(_subgroup).arg(key), def);
 }
 
   return localValue(QString("%1/%2/%3").arg(Client::currentCoreAccount().toInt()).arg(_subgroup).arg(key), def);
 }
 
+void CoreAccountSettings::setJumpKeyMap(const QHash<int, BufferId> &keyMap) {
+  QVariantMap variants;
+  QHash<int, BufferId>::const_iterator mapIter = keyMap.constBegin();
+  while(mapIter != keyMap.constEnd()) {
+    variants[QString::number(mapIter.key())] = qVariantFromValue(mapIter.value());
+    mapIter++;
+  }
+  setLocalValue("JumpKeyMap", variants);
+}
+
+QHash<int, BufferId> CoreAccountSettings::jumpKeyMap() {
+  QHash<int, BufferId> keyMap;
+  QVariantMap variants = localValue("JumpKeyMap", QVariant()).toMap();
+  QVariantMap::const_iterator mapIter = variants.constBegin();
+  while(mapIter != variants.constEnd()) {
+    keyMap[mapIter.key().toInt()] = mapIter.value().value<BufferId>();
+    mapIter++;
+  }
+  return keyMap;
+}
+  
+
 void CoreAccountSettings::removeAccount(AccountId id) {
   removeLocalKey(QString("%1").arg(id.toInt()));
 }
 void CoreAccountSettings::removeAccount(AccountId id) {
   removeLocalKey(QString("%1").arg(id.toInt()));
 }
@@ -96,3 +118,6 @@ void BufferSettings::setLastSeen(QDateTime seenDate) {
 QDateTime BufferSettings::lastSeen() {
   return accountValue("LastSeen", QDateTime()).value<QDateTime>();
 }
 QDateTime BufferSettings::lastSeen() {
   return accountValue("LastSeen", QDateTime()).value<QDateTime>();
 }
+
+/***********************************************************************************************/
+
index 7962423..20dc918 100644 (file)
@@ -57,6 +57,9 @@ class CoreAccountSettings : public ClientSettings {
     QVariantMap retrieveAccountData(AccountId);
     void removeAccount(AccountId);
 
     QVariantMap retrieveAccountData(AccountId);
     void removeAccount(AccountId);
 
+    void setJumpKeyMap(const QHash<int, BufferId> &keyMap);
+    QHash<int, BufferId> jumpKeyMap();
+
   protected:
     void setAccountValue(const QString &key, const QVariant &data);
     QVariant accountValue(const QString &key, const QVariant &def = QVariant());
   protected:
     void setAccountValue(const QString &key, const QVariant &data);
     QVariant accountValue(const QString &key, const QVariant &def = QVariant());
index 4f7935c..992f52f 100644 (file)
@@ -285,6 +285,9 @@ void BufferItem::setLastMsgInsert(QDateTime msgDate) {
 }
 
 bool BufferItem::setLastSeen() {
 }
 
 bool BufferItem::setLastSeen() {
+  if(_lastSeen > _lastMsgInsert)
+    return false;
+  
   _lastSeen = _lastMsgInsert;
   BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen);
   return true;
   _lastSeen = _lastMsgInsert;
   BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen);
   return true;
index d1d3fdf..7ed3f58 100644 (file)
@@ -66,7 +66,7 @@ void MainWin::init() {
   connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId)));
   connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId)));
   ui.bufferWidget->init();
   connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId)));
   connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId)));
   ui.bufferWidget->init();
-
+  
   show();
 
   statusBar()->showMessage(tr("Not connected to core."));
   show();
 
   statusBar()->showMessage(tr("Not connected to core."));
@@ -420,28 +420,51 @@ void MainWin::keyPressEvent(QKeyEvent *event) {
   int jumpModifier = Qt::AltModifier;
 #endif
 
   int jumpModifier = Qt::AltModifier;
 #endif
 
-  if(Qt::Key_0 <= event->key() && event->key() <= Qt::Key_9) {
-    if(event->modifiers() ==  bindModifier) {
-      QModelIndex bufferIdx = Client::bufferModel()->standardSelectionModel()->currentIndex();
-      NetworkId netId = bufferIdx.data(NetworkModel::NetworkIdRole).value<NetworkId>();
-      const Network *net = Client::network(netId);
-      if(!net)
-       return;
-      QString bufferName = bufferIdx.sibling(bufferIdx.row(), 0).data().toString();
-
-      _keyboardJump[event->key()] = bufferIdx;
-      statusBar()->showMessage(tr("Bound Buffer %1::%2 to Key %3").arg(net->networkName()).arg(bufferName).arg(event->key() - Qt::Key_0), 10000);
-      event->accept();
-    }
-    
-    else if(event->modifiers() == jumpModifier && _keyboardJump.contains(event->key())) {
-      Client::bufferModel()->standardSelectionModel()->setCurrentIndex(_keyboardJump[event->key()], QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
-      event->accept();
-    }
-    
-    else {
-      event->ignore();
-    }
+  if(event->modifiers() ==  bindModifier) {
+    event->accept();
+    return bindKey(event->key());
   }
   }
+  
+  if(event->modifiers() == jumpModifier) {
+    event->accept();
+    return jumpKey(event->key());
+  }
+  
   event->ignore();
 }
   event->ignore();
 }
+
+void MainWin::bindKey(int key) {
+  if(key < Qt::Key_0 || Qt::Key_9 < key)
+    return;
+  
+  QModelIndex bufferIdx = Client::bufferModel()->standardSelectionModel()->currentIndex();
+  NetworkId netId = bufferIdx.data(NetworkModel::NetworkIdRole).value<NetworkId>();
+  const Network *net = Client::network(netId);
+  if(!net)
+    return;
+  
+  QString bufferName = bufferIdx.sibling(bufferIdx.row(), 0).data().toString();
+  BufferId bufferId = bufferIdx.data(NetworkModel::BufferIdRole).value<BufferId>();
+  
+  _keyboardJump[key] = bufferId;
+  CoreAccountSettings().setJumpKeyMap(_keyboardJump);
+  statusBar()->showMessage(tr("Bound Buffer %1::%2 to Key %3").arg(net->networkName()).arg(bufferName).arg(key - Qt::Key_0), 10000);
+}
+
+void MainWin::jumpKey(int key) {
+  if(key < Qt::Key_0 || Qt::Key_9 < key)
+    return;
+
+  if(_keyboardJump.isEmpty())
+    _keyboardJump = CoreAccountSettings().jumpKeyMap();
+
+  if(!_keyboardJump.contains(key))
+    return;
+
+  QModelIndex source_bufferIdx = Client::networkModel()->bufferIndex(_keyboardJump[key]);
+  QModelIndex bufferIdx = Client::bufferModel()->mapFromSource(source_bufferIdx);
+
+  if(bufferIdx.isValid())
+    Client::bufferModel()->standardSelectionModel()->setCurrentIndex(bufferIdx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+  
+}
index 277e4e8..49d6778 100644 (file)
@@ -94,7 +94,10 @@ class MainWin : public QMainWindow {
 
     void enableMenus();
 
 
     void enableMenus();
 
-    QHash<int, QModelIndex> _keyboardJump;
+    void bindKey(int key);
+    void jumpKey(int key);
+
+    QHash<int, BufferId> _keyboardJump;
     QSystemTrayIcon *systray;
 
     CoreConnectDlg *coreConnectDlg;
     QSystemTrayIcon *systray;
 
     CoreConnectDlg *coreConnectDlg;
index 8c5ac17..b2db73c 100644 (file)
@@ -5,7 +5,7 @@
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-02-05";
 
   quasselVersion = "0.2.0-pre";
   quasselDate = "2008-02-05";
-  quasselBuild = 468;
+  quasselBuild = 469;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 464;
 
   //! Minimum client build number the core needs
   clientBuildNeeded = 464;