#include "buffermodel.h"
#include "nicklistwidget.h"
#include "settingsdlg.h"
+#include "settingspagedlg.h"
#include "signalproxy.h"
#include "topicwidget.h"
#include "inputwidget.h"
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."));
connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt()));
actionEditNetworks = new QAction(QIcon(":/22x22/actions/configure"), tr("Edit &Networks..."), this);
- actionEditNetworks->setEnabled(false); // FIXME
ui.menuNetworks->addAction(actionEditNetworks);
+ connect(actionEditNetworks, SIGNAL(triggered()), this, SLOT(showNetworkDlg()));
}
void MainWin::setupViews() {
QString toolTip("left click to minimize the quassel client to tray");
systray->setToolTip(toolTip);
- QMenu *systrayMenu = new QMenu(this);
+ systrayMenu = new QMenu(this);
systrayMenu->addAction(ui.actionAboutQuassel);
systrayMenu->addSeparator();
systrayMenu->addAction(ui.actionConnectCore);
systray->setContextMenu(systrayMenu);
systray->show();
+ #ifndef Q_WS_MAC
connect(systray, SIGNAL(activated( QSystemTrayIcon::ActivationReason )),
this, SLOT(systrayActivated( QSystemTrayIcon::ActivationReason )));
+ #endif
}
void MainWin::connectedToCore() {
void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReason) {
if (activationReason == QSystemTrayIcon::Trigger) {
- if (isHidden())
+ if(isHidden()) {
show();
- else
+ if(isMinimized()) {
+ if(isMaximized()) {
+ showMaximized();
+ } else {
+ showNormal();
+ }
+ }
+ raise();
+ activateWindow();
+ } else {
hide();
+ }
}
}
+void MainWin::showNetworkDlg() {
+ SettingsPageDlg dlg(new NetworksSettingsPage(this), this);
+ dlg.exec();
+}
+
void MainWin::clientNetworkCreated(NetworkId id) {
const Network *net = Client::network(id);
QAction *act = new QAction(net->networkName(), this);
if(net->connectionState() == Network::Disconnected) net->requestConnect();
else net->requestDisconnect();
}
+
+void MainWin::keyPressEvent(QKeyEvent *event) {
+#ifdef Q_WS_MAC
+ int bindModifier = Qt::ControlModifier | Qt::AltModifier;
+ int jumpModifier = Qt::ControlModifier;
+#else
+ int bindModifier = Qt::ControlModifier;
+ int jumpModifier = Qt::AltModifier;
+#endif
+
+ 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<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);
+
+}