+ settingsDlg->registerSettingsPage(new BufferViewSettingsPage(settingsDlg));
+}
+
+void MainWin::on_actionEditNetworks_triggered() {
+ SettingsPageDlg dlg(new NetworksSettingsPage(this), this);
+ dlg.exec();
+}
+
+void MainWin::on_actionManageViews_triggered() {
+ SettingsPageDlg dlg(new BufferViewSettingsPage(this), this);
+ dlg.exec();
+}
+
+void MainWin::on_actionLockDockPositions_toggled(bool lock) {
+ QList<VerticalDock *> docks = findChildren<VerticalDock *>();
+ foreach(VerticalDock *dock, docks) {
+ dock->showTitle(!lock);
+ }
+ QtUiSettings().setValue("LockDocks", lock);
+}
+
+void MainWin::setupNickWidget() {
+ // create nick dock
+ NickListDock *nickDock = new NickListDock(tr("Nicks"), this);
+ nickDock->setObjectName("NickDock");
+ nickDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+ nickListWidget = new NickListWidget(nickDock);
+ nickDock->setWidget(nickListWidget);
+
+ addDockWidget(Qt::RightDockWidgetArea, nickDock);
+ ui.menuViews->addAction(nickDock->toggleViewAction());
+ // See NickListDock::NickListDock();
+ // connect(nickDock->toggleViewAction(), SIGNAL(triggered(bool)), nickListWidget, SLOT(showWidget(bool)));
+
+ // attach the NickListWidget to the BufferModel and the default selection
+ nickListWidget->setModel(Client::bufferModel());
+ nickListWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+}
+
+void MainWin::setupChatMonitor() {
+#ifndef SPUTDEV
+ VerticalDock *dock = new VerticalDock(tr("Chat Monitor"), this);
+ dock->setObjectName("ChatMonitorDock");
+
+ ChatWidget *chatWidget = new ChatWidget(0, this);
+ chatWidget->show();
+ dock->setWidget(chatWidget);
+ dock->show();
+
+ Buffer *buf = Client::monitorBuffer();
+ if(!buf)
+ return;
+
+ chatWidget->setContents(buf->contents());
+ connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatWidget, SLOT(appendMsg(AbstractUiMsg *)));
+ connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *)));
+
+ addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical);
+ ui.menuViews->addAction(dock->toggleViewAction());
+#endif /* SPUTDEV */
+}
+
+void MainWin::setupInputWidget() {
+ VerticalDock *dock = new VerticalDock(tr("Inputline"), this);
+ dock->setObjectName("InputDock");
+
+ InputWidget *inputWidget = new InputWidget(dock);
+ dock->setWidget(inputWidget);
+
+ addDockWidget(Qt::BottomDockWidgetArea, dock);
+
+ ui.menuViews->addAction(dock->toggleViewAction());
+
+ inputWidget->setModel(Client::bufferModel());
+ inputWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+
+ ui.bufferWidget->setFocusProxy(inputWidget);
+}
+
+void MainWin::setupTopicWidget() {
+ VerticalDock *dock = new VerticalDock(tr("Topic"), this);
+ dock->setObjectName("TopicDock");
+ TopicWidget *topicwidget = new TopicWidget(dock);
+ connect(topicwidget, SIGNAL(topicChanged(const QString &)), this, SLOT(changeTopic(const QString &)));
+
+ dock->setWidget(topicwidget);
+
+ topicwidget->setModel(Client::bufferModel());
+ topicwidget->setSelectionModel(Client::bufferModel()->standardSelectionModel());
+
+ addDockWidget(Qt::TopDockWidgetArea, dock);
+
+ ui.menuViews->addAction(dock->toggleViewAction());
+}
+
+void MainWin::setupStatusBar() {
+ // Core Lag:
+ updateLagIndicator(0);
+ statusBar()->addPermanentWidget(coreLagLabel);
+ connect(Client::signalProxy(), SIGNAL(lagUpdated(float)), this, SLOT(updateLagIndicator(float)));
+
+ // SSL indicator
+ connect(Client::instance(), SIGNAL(securedConnection()), this, SLOT(securedConnection()));
+ sslLabel->setPixmap(QPixmap());
+ statusBar()->addPermanentWidget(sslLabel);
+
+ ui.menuViews->addSeparator();
+ QAction *showStatusbar = ui.menuViews->addAction(tr("Statusbar"));
+ showStatusbar->setCheckable(true);
+
+ UiSettings uiSettings;
+
+ bool enabled = uiSettings.value("ShowStatusBar", QVariant(true)).toBool();
+ showStatusbar->setChecked(enabled);
+ enabled ? statusBar()->show() : statusBar()->hide();
+
+ connect(showStatusbar, SIGNAL(toggled(bool)), statusBar(), SLOT(setVisible(bool)));
+ connect(showStatusbar, SIGNAL(toggled(bool)), this, SLOT(saveStatusBarStatus(bool)));
+}
+
+void MainWin::saveStatusBarStatus(bool enabled) {
+ UiSettings uiSettings;
+ uiSettings.setValue("ShowStatusBar", enabled);
+}
+
+void MainWin::setupSystray() {
+ connect(timer, SIGNAL(timeout()), this, SLOT(makeTrayIconBlink()));
+ connect(Client::instance(), SIGNAL(messageReceived(const Message &)), this, SLOT(receiveMessage(const Message &)));
+
+ systrayMenu = new QMenu(this);
+ systrayMenu->addAction(ui.actionAboutQuassel);
+ systrayMenu->addSeparator();
+ systrayMenu->addAction(ui.actionConnectCore);
+ systrayMenu->addAction(ui.actionDisconnectCore);
+ systrayMenu->addSeparator();
+ systrayMenu->addAction(ui.actionQuit);
+
+ systray->setContextMenu(systrayMenu);
+
+ UiSettings s;
+ if(s.value("UseSystemTrayIcon", QVariant(true)).toBool()) {
+ systray->show();
+ }
+
+#ifndef Q_WS_MAC
+ connect(systray, SIGNAL(activated( QSystemTrayIcon::ActivationReason )),
+ this, SLOT(systrayActivated( QSystemTrayIcon::ActivationReason )));
+#endif
+
+}
+
+void MainWin::changeEvent(QEvent *event) {
+ if(event->type() == QEvent::WindowStateChange) {
+ if(windowState() & Qt::WindowMinimized) {
+ UiSettings s;
+ if(s.value("UseSystemTrayIcon").toBool() && s.value("MinimizeOnMinimize").toBool()) {
+ toggleVisibility();
+ event->ignore();
+ }
+ }
+ }
+}
+
+// FIXME this should be made prettier...
+void MainWin::changeTopic(const QString &topic) {
+ BufferId id = ui.bufferWidget->currentBuffer();
+ if(!id.isValid()) return;
+ Buffer *buffer = Client::buffer(id);
+ if(buffer) Client::userInput(buffer->bufferInfo(), QString("/topic %1").arg(topic));