From 9806b265c4ef42f956a1e2a8cb1596f5228c4228 Mon Sep 17 00:00:00 2001 From: Marcus Eggenberger Date: Tue, 5 Feb 2008 21:46:46 +0000 Subject: [PATCH] made keybindings persistent (per client) --- src/client/clientsettings.cpp | 25 +++++++++++++ src/client/clientsettings.h | 3 ++ src/client/networkmodel.cpp | 3 ++ src/qtui/mainwin.cpp | 69 +++++++++++++++++++++++------------ src/qtui/mainwin.h | 5 ++- version.inc | 2 +- 6 files changed, 82 insertions(+), 25 deletions(-) diff --git a/src/client/clientsettings.cpp b/src/client/clientsettings.cpp index 2bf6412b..7cccac6d 100644 --- a/src/client/clientsettings.cpp +++ b/src/client/clientsettings.cpp @@ -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); } +void CoreAccountSettings::setJumpKeyMap(const QHash &keyMap) { + QVariantMap variants; + QHash::const_iterator mapIter = keyMap.constBegin(); + while(mapIter != keyMap.constEnd()) { + variants[QString::number(mapIter.key())] = qVariantFromValue(mapIter.value()); + mapIter++; + } + setLocalValue("JumpKeyMap", variants); +} + +QHash CoreAccountSettings::jumpKeyMap() { + QHash keyMap; + QVariantMap variants = localValue("JumpKeyMap", QVariant()).toMap(); + QVariantMap::const_iterator mapIter = variants.constBegin(); + while(mapIter != variants.constEnd()) { + keyMap[mapIter.key().toInt()] = mapIter.value().value(); + mapIter++; + } + return keyMap; +} + + 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(); } + +/***********************************************************************************************/ + diff --git a/src/client/clientsettings.h b/src/client/clientsettings.h index 79624234..20dc9188 100644 --- a/src/client/clientsettings.h +++ b/src/client/clientsettings.h @@ -57,6 +57,9 @@ class CoreAccountSettings : public ClientSettings { QVariantMap retrieveAccountData(AccountId); void removeAccount(AccountId); + void setJumpKeyMap(const QHash &keyMap); + QHash jumpKeyMap(); + protected: void setAccountValue(const QString &key, const QVariant &data); QVariant accountValue(const QString &key, const QVariant &def = QVariant()); diff --git a/src/client/networkmodel.cpp b/src/client/networkmodel.cpp index 4f7935cf..992f52f2 100644 --- a/src/client/networkmodel.cpp +++ b/src/client/networkmodel.cpp @@ -285,6 +285,9 @@ void BufferItem::setLastMsgInsert(QDateTime msgDate) { } bool BufferItem::setLastSeen() { + if(_lastSeen > _lastMsgInsert) + return false; + _lastSeen = _lastMsgInsert; BufferSettings(bufferInfo().bufferId()).setLastSeen(_lastSeen); return true; diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index d1d3fdfb..7ed3f58a 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -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(); - + show(); statusBar()->showMessage(tr("Not connected to core.")); @@ -420,28 +420,51 @@ void MainWin::keyPressEvent(QKeyEvent *event) { 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(); - 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(); } + +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(); + 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(); + + _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); + +} diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 277e4e8c..49d67781 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -94,7 +94,10 @@ class MainWin : public QMainWindow { void enableMenus(); - QHash _keyboardJump; + void bindKey(int key); + void jumpKey(int key); + + QHash _keyboardJump; QSystemTrayIcon *systray; CoreConnectDlg *coreConnectDlg; diff --git a/version.inc b/version.inc index 8c5ac174..b2db73ca 100644 --- a/version.inc +++ b/version.inc @@ -5,7 +5,7 @@ quasselVersion = "0.2.0-pre"; quasselDate = "2008-02-05"; - quasselBuild = 468; + quasselBuild = 469; //! Minimum client build number the core needs clientBuildNeeded = 464; -- 2.20.1