X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=e3dece21a585eadd6029840186139a4c6942a038;hp=ebd83f6cdb94b5683fe05306eff25b82b5b9519c;hb=52df0969e22249e6758714eec9e5afd7d4fe9b83;hpb=7431a7bfe8419ed104621fb8e77b37e4e1943fd9 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index ebd83f6c..e3dece21 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -25,9 +25,10 @@ #include "bufferviewconfig.h" #include "bufferviewfilter.h" #include "bufferviewmanager.h" -#include "chatline-old.h" +#include "channellistdlg.h" #include "client.h" #include "clientbacklogmanager.h" +#include "coreinfodlg.h" #include "coreconnectdlg.h" #include "networkmodel.h" #include "buffermodel.h" @@ -37,6 +38,7 @@ #include "signalproxy.h" #include "topicwidget.h" #include "inputwidget.h" +#include "irclistmodel.h" #include "verticaldock.h" #include "uisettings.h" #include "qtuisettings.h" @@ -73,6 +75,7 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) offlineTrayIcon(":/icons/quassel-icon-offline.png"), trayIconActive(false), timer(new QTimer(this)), + channelListDlg(new ChannelListDlg(this)), settingsDlg(new SettingsDlg(this)), debugConsole(new DebugConsole(this)) { @@ -107,7 +110,6 @@ 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(); @@ -136,6 +138,10 @@ void MainWin::init() { // restore mainwin state restoreState(s.value("MainWinState").toByteArray()); + // restore locked state of docks + ui.actionLockDockPositions->setChecked(s.value("LockDocks", false).toBool()); + + setDisconnectedState(); // Disable menus and stuff showCoreConnectionDlg(true); // autoconnect if appropriate @@ -157,22 +163,15 @@ MainWin::~MainWin() { void MainWin::setupMenus() { connect(ui.actionConnectCore, SIGNAL(triggered()), this, SLOT(showCoreConnectionDlg())); connect(ui.actionDisconnectCore, SIGNAL(triggered()), Client::instance(), SLOT(disconnectFromCore())); + connect(ui.actionCoreInfo, SIGNAL(triggered()), this, SLOT(showCoreInfoDlg())); connect(ui.actionQuit, SIGNAL(triggered()), QCoreApplication::instance(), SLOT(quit())); - //connect(ui.actionNetworkList, SIGNAL(triggered()), this, SLOT(showServerList())); connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg())); - connect(ui.actionDebug_Console, SIGNAL(triggered()), this, SLOT(showDebugConsole())); + // connect(ui.actionDebug_Console, SIGNAL(triggered()), this, SLOT(showDebugConsole())); connect(ui.actionAboutQuassel, SIGNAL(triggered()), this, SLOT(showAboutDlg())); connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt())); - - actionEditNetworks = new QAction(QIcon(":/22x22/actions/configure"), tr("Edit &Networks..."), this); - ui.menuNetworks->addAction(actionEditNetworks); - connect(actionEditNetworks, SIGNAL(triggered()), this, SLOT(showNetworkDlg())); - connect(ui.actionManageViews, SIGNAL(triggered()), this, SLOT(showManageViewsDlg())); } void MainWin::setupViews() { - QAction *separator = ui.menuViews->addSeparator(); - separator->setData("__EOBV__"); addBufferView(); } @@ -192,22 +191,15 @@ void MainWin::addBufferView(BufferViewConfig *config) { view->setFilteredModel(Client::bufferModel(), config); view->show(); + connect(&view->showChannelList, SIGNAL(triggered()), this, SLOT(showChannelList())); + Client::bufferModel()->synchronizeView(view); dock->setWidget(view); dock->show(); addDockWidget(Qt::LeftDockWidgetArea, dock); - - QAction *endOfBufferViews = 0; - foreach(QAction *action, ui.menuViews->actions()) { - if(action->data().toString() == "__EOBV__") { - endOfBufferViews = action; - break; - } - } - Q_CHECK_PTR(endOfBufferViews); - ui.menuViews->insertAction(endOfBufferViews, dock->toggleViewAction()); + ui.menuBufferViews->addAction(dock->toggleViewAction()); _netViews.append(dock); } @@ -215,13 +207,10 @@ void MainWin::addBufferView(BufferViewConfig *config) { void MainWin::removeBufferView(int bufferViewConfigId) { QVariant actionData; BufferViewDock *dock; - foreach(QAction *action, ui.menuViews->actions()) { + foreach(QAction *action, ui.menuBufferViews->actions()) { actionData = action->data(); if(!actionData.isValid()) continue; - - if(actionData.toString() == "__EOBV__") - break; dock = qobject_cast(action->parent()); if(dock && actionData.toInt() == bufferViewConfigId) { @@ -245,16 +234,24 @@ void MainWin::setupSettingsDlg() { settingsDlg->registerSettingsPage(new BufferViewSettingsPage(settingsDlg)); } -void MainWin::showNetworkDlg() { +void MainWin::on_actionEditNetworks_triggered() { SettingsPageDlg dlg(new NetworksSettingsPage(this), this); dlg.exec(); } -void MainWin::showManageViewsDlg() { +void MainWin::on_actionManageViews_triggered() { SettingsPageDlg dlg(new BufferViewSettingsPage(this), this); dlg.exec(); } +void MainWin::on_actionLockDockPositions_toggled(bool lock) { + QList docks = findChildren(); + foreach(VerticalDock *dock, docks) { + dock->showTitle(!lock); + } + QtUiSettings().setValue("LockDocks", lock); +} + void MainWin::setupNickWidget() { // create nick dock NickListDock *nickDock = new NickListDock(tr("Nicks"), this); @@ -275,6 +272,7 @@ void MainWin::setupNickWidget() { } void MainWin::setupChatMonitor() { +#ifndef SPUTDEV VerticalDock *dock = new VerticalDock(tr("Chat Monitor"), this); dock->setObjectName("ChatMonitorDock"); @@ -293,6 +291,7 @@ void MainWin::setupChatMonitor() { addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); ui.menuViews->addAction(dock->toggleViewAction()); +#endif /* SPUTDEV */ } void MainWin::setupInputWidget() { @@ -415,7 +414,6 @@ void MainWin::setConnectedState() { //ui.menuCore->setEnabled(true); ui.actionConnectCore->setEnabled(false); ui.actionDisconnectCore->setEnabled(true); - //ui.actionNetworkList->setEnabled(true); ui.bufferWidget->show(); statusBar()->showMessage(tr("Connected to core.")); setWindowIcon(onlineTrayIcon); @@ -439,8 +437,6 @@ void MainWin::saveLayout() { void MainWin::securedConnection() { // todo: make status bar entry - qDebug() << "secured the connection"; - sslLabel->setPixmap(QPixmap::fromImage(QImage(":/16x16/status/ssl"))); } @@ -449,13 +445,10 @@ void MainWin::disconnectedFromCore() { saveLayout(); QVariant actionData; BufferViewDock *dock; - foreach(QAction *action, ui.menuViews->actions()) { + foreach(QAction *action, ui.menuBufferViews->actions()) { actionData = action->data(); if(!actionData.isValid()) continue; - - if(actionData.toString() == "__EOBV__") - break; dock = qobject_cast(action->parent()); if(dock && actionData.toInt() != -1) { @@ -472,10 +465,8 @@ void MainWin::setDisconnectedState() { ui.menuViews->setEnabled(false); //ui.menuCore->setEnabled(false); ui.actionDisconnectCore->setEnabled(false); - //ui.actionNetworkList->setEnabled(false); ui.bufferWidget->hide(); ui.actionConnectCore->setEnabled(true); - // nickListWidget->reset(); statusBar()->showMessage(tr("Not connected to core.")); setWindowIcon(offlineTrayIcon); qApp->setWindowIcon(offlineTrayIcon); @@ -483,10 +474,6 @@ void MainWin::setDisconnectedState() { sslLabel->setPixmap(QPixmap()); } -AbstractUiMsg *MainWin::layoutMsg(const Message &msg) { - return new ChatLineOld(msg); -} - void MainWin::showCoreConnectionDlg(bool autoConnect) { coreConnectDlg = new CoreConnectDlg(this, autoConnect); connect(coreConnectDlg, SIGNAL(finished(int)), this, SLOT(coreConnectionDlgFinished(int))); @@ -499,6 +486,21 @@ void MainWin::coreConnectionDlgFinished(int /*code*/) { //exit(1); } +void MainWin::showChannelList(NetworkId netId) { + if(!netId.isValid()) { + QAction *action = qobject_cast(sender()); + if(action) + netId = action->data().value(); + } + channelListDlg->setNetwork(netId); + channelListDlg->show(); +} + +void MainWin::showCoreInfoDlg() { + CoreInfoDlg dlg(this); + dlg.exec(); +} + void MainWin::showSettingsDlg() { settingsDlg->show(); } @@ -523,7 +525,7 @@ void MainWin::closeEvent(QCloseEvent *event) { } void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReason) { - if (activationReason == QSystemTrayIcon::Trigger) { + if(activationReason == QSystemTrayIcon::Trigger) { toggleVisibility(); } } @@ -531,11 +533,12 @@ void MainWin::systrayActivated( QSystemTrayIcon::ActivationReason activationReas void MainWin::toggleVisibility() { if(isHidden() /*|| !isActiveWindow()*/) { show(); - if(isMinimized()) - if (isMaximized()) + if(isMinimized()) { + if(isMaximized()) showMaximized(); else showNormal(); + } raise(); activateWindow(); @@ -570,12 +573,13 @@ void MainWin::receiveMessage(const Message &msg) { UiSettings uiSettings; +#ifndef SPUTDEV if(uiSettings.value("DisplayPopupMessages", QVariant(true)).toBool()) { // FIXME don't invoke style engine for this! - QString text = QtUi::style()->styleString(Message::mircToInternal(msg.text())).text; + QString text = QtUi::style()->styleString(Message::mircToInternal(msg.contents())).plainText; displayTrayIconMessage(title, text); } - +#endif if(uiSettings.value("AnimateTrayIcon", QVariant(true)).toBool()) { QApplication::alert(this); setTrayIconActivity(true); @@ -613,61 +617,58 @@ void MainWin::makeTrayIconBlink() { } } - - void MainWin::clientNetworkCreated(NetworkId id) { const Network *net = Client::network(id); QAction *act = new QAction(net->networkName(), this); + act->setObjectName(QString("NetworkAction-%1").arg(id.toInt())); act->setData(QVariant::fromValue(id)); connect(net, SIGNAL(updatedRemotely()), this, SLOT(clientNetworkUpdated())); connect(act, SIGNAL(triggered()), this, SLOT(connectOrDisconnectFromNet())); - bool inserted = false; - for(int i = 0; i < networkActions.count(); i++) { - if(net->networkName().localeAwareCompare(networkActions[i]->text()) < 0) { - networkActions.insert(i, act); - inserted = true; + + QAction *beforeAction = 0; + foreach(QAction *action, ui.menuNetworks->actions()) { + if(action->isSeparator()) { + beforeAction = action; + break; + } + if(net->networkName().localeAwareCompare(action->text()) < 0) { + beforeAction = action; break; } } - if(!inserted) networkActions.append(act); - ui.menuNetworks->clear(); // why the f*** isn't there a QMenu::insertAction()??? - foreach(QAction *a, networkActions) ui.menuNetworks->addAction(a); - ui.menuNetworks->addSeparator(); - ui.menuNetworks->addAction(actionEditNetworks); + Q_CHECK_PTR(beforeAction); + ui.menuNetworks->insertAction(beforeAction, act); } void MainWin::clientNetworkUpdated() { const Network *net = qobject_cast(sender()); - if(!net) return; - foreach(QAction *a, networkActions) { - if(a->data().value() == net->networkId()) { - a->setText(net->networkName()); - if(net->connectionState() == Network::Initialized) { - a->setIcon(QIcon(":/16x16/actions/network-connect")); - //a->setEnabled(true); - } else if(net->connectionState() == Network::Disconnected) { - a->setIcon(QIcon(":/16x16/actions/network-disconnect")); - //a->setEnabled(true); - } else { - a->setIcon(QIcon(":/16x16/actions/gear")); - //a->setEnabled(false); - } - return; - } + if(!net) + return; + + QAction *action = findChild(QString("NetworkAction-%1").arg(net->networkId().toInt())); + if(!action) + return; + + action->setText(net->networkName()); + + switch(net->connectionState()) { + case Network::Initialized: + action->setIcon(QIcon(":/16x16/actions/network-connect")); + break; + case Network::Disconnected: + action->setIcon(QIcon(":/16x16/actions/network-disconnect")); + break; + default: + action->setIcon(QIcon(":/16x16/actions/gear")); } } void MainWin::clientNetworkRemoved(NetworkId id) { - QList::iterator actionIter = networkActions.begin();; - QAction *action; - while(actionIter != networkActions.end()) { - action = *actionIter; - if(action->data().value() == id) { - action->deleteLater(); - actionIter = networkActions.erase(actionIter); - } else - actionIter++; - } + QAction *action = findChild(QString("NetworkAction-%1").arg(id.toInt())); + if(!action) + return; + + action->deleteLater(); } void MainWin::connectOrDisconnectFromNet() {