X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=caecd84ae986d80b1f053b5f4557758e7a10316e;hp=6c8628a6e25c39cfcb0493cae481ba141f814265;hb=85b55cf023c96f4dbd61ec415a15214f99e281b3;hpb=31253a98ef87edb8f87ff53270529ed4f7659612 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 6c8628a6..caecd84a 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -27,13 +27,16 @@ #include "channellistdlg.h" #include "chatlinemodel.h" #include "chatmonitorfilter.h" +#include "chatmonitorview.h" #include "chatview.h" +#include "chatviewsearchbar.h" #include "client.h" #include "clientbacklogmanager.h" #include "coreinfodlg.h" #include "coreconnectdlg.h" #include "msgprocessorstatuswidget.h" #include "qtuimessageprocessor.h" +#include "qtuiapplication.h" #include "networkmodel.h" #include "buffermodel.h" #include "nicklistwidget.h" @@ -45,9 +48,9 @@ #include "irclistmodel.h" #include "verticaldock.h" #include "uisettings.h" -#include "util.h" #include "qtuisettings.h" #include "jumpkeyhandler.h" +#include "sessionsettings.h" #include "selectionmodelsynchronizer.h" #include "mappedselectionmodel.h" @@ -63,30 +66,26 @@ #include "settingspages/networkssettingspage.h" #include "settingspages/notificationssettingspage.h" -#include "debugconsole.h" #include "global.h" #include "qtuistyle.h" -MainWin::MainWin(QtUi *_gui, QWidget *parent) +MainWin::MainWin(QWidget *parent) : QMainWindow(parent), - gui(_gui), coreLagLabel(new QLabel()), sslLabel(new QLabel()), msgProcessorStatusWidget(new MsgProcessorStatusWidget()), + _titleSetter(this), systray(new QSystemTrayIcon(this)), + activeTrayIcon(":/icons/quassel-icon-active.png"), onlineTrayIcon(":/icons/quassel-icon.png"), offlineTrayIcon(":/icons/quassel-icon-offline.png"), trayIconActive(false), - timer(new QTimer(this)), - channelListDlg(new ChannelListDlg(this)), - settingsDlg(new SettingsDlg(this)), - debugConsole(new DebugConsole(this)) + + timer(new QTimer(this)) { UiSettings uiSettings; - loadTranslation(uiSettings.value("Locale", QLocale::system()).value()); - QString style = uiSettings.value("Style", QString("")).toString(); if(style != "") { QApplication::setStyle(style); @@ -112,6 +111,9 @@ MainWin::MainWin(QtUi *_gui, QWidget *parent) connect(desktopNotifications, SIGNAL(NotificationClosed(uint, uint)), this, SLOT(desktopNotificationClosed(uint, uint))); connect(desktopNotifications, SIGNAL(ActionInvoked(uint, const QString&)), this, SLOT(desktopNotificationInvoked(uint, const QString&))); #endif + QtUiApplication* app = qobject_cast qApp; + connect(app, SIGNAL(saveStateToSession(const QString&)), this, SLOT(saveStateToSession(const QString&))); + connect(app, SIGNAL(saveStateToSessionSettings(SessionSettings&)), this, SLOT(saveStateToSessionSettings(SessionSettings&))); } void MainWin::init() { @@ -121,8 +123,6 @@ void MainWin::init() { else resize(QSize(800, 500)); - Client::signalProxy()->attachSignal(this, SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant))); - connect(QApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(saveLayout())); connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId))); @@ -150,21 +150,19 @@ void MainWin::init() { setupStatusBar(); setupSystray(); - setupSettingsDlg(); - // 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 // attach the BufferWidget to the BufferModel and the default selection ui.bufferWidget->setModel(Client::bufferModel()); ui.bufferWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); + ui.menuViews->addAction(ui.bufferWidget->searchBar()->toggleViewAction()); _titleSetter.setModel(Client::bufferModel()); _titleSetter.setSelectionModel(Client::bufferModel()->standardSelectionModel()); @@ -183,7 +181,6 @@ void MainWin::setupMenus() { connect(ui.actionCoreInfo, SIGNAL(triggered()), this, SLOT(showCoreInfoDlg())); connect(ui.actionQuit, SIGNAL(triggered()), QCoreApplication::instance(), SLOT(quit())); connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg())); - // 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())); } @@ -237,22 +234,6 @@ void MainWin::removeBufferView(int bufferViewConfigId) { } } -void MainWin::setupSettingsDlg() { - //Category: Appearance - settingsDlg->registerSettingsPage(new ColorSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new FontsSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new AppearanceSettingsPage(settingsDlg)); //General - //Category: Behaviour - settingsDlg->registerSettingsPage(new GeneralSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new HighlightSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new AliasesSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new NotificationsSettingsPage(settingsDlg)); - //Category: General - settingsDlg->registerSettingsPage(new IdentitiesSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new NetworksSettingsPage(settingsDlg)); - settingsDlg->registerSettingsPage(new BufferViewSettingsPage(settingsDlg)); -} - void MainWin::on_actionEditNetworks_triggered() { SettingsPageDlg dlg(new NetworksSettingsPage(this), this); dlg.exec(); @@ -295,7 +276,7 @@ void MainWin::setupChatMonitor() { dock->setObjectName("ChatMonitorDock"); ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this); - ChatView *chatView = new ChatView(filter, this); + ChatMonitorView *chatView = new ChatMonitorView(filter, this); chatView->show(); dock->setWidget(chatView); dock->show(); @@ -325,7 +306,6 @@ 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); @@ -410,23 +390,13 @@ void MainWin::changeEvent(QEvent *event) { } } -// 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)); -} - void MainWin::connectedToCore() { Q_CHECK_PTR(Client::bufferViewManager()); connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigAdded(int)), this, SLOT(addBufferView(int))); connect(Client::bufferViewManager(), SIGNAL(bufferViewConfigDeleted(int)), this, SLOT(removeBufferView(int))); connect(Client::bufferViewManager(), SIGNAL(initDone()), this, SLOT(loadLayout())); - foreach(BufferInfo id, Client::allBufferInfos()) { - Client::backlogManager()->requestBacklog(id.bufferId(), 500, -1); - } + Client::backlogManager()->requestInitialBacklog(); setConnectedState(); } @@ -503,43 +473,49 @@ void MainWin::setDisconnectedState() { } void MainWin::showCoreConnectionDlg(bool autoConnect) { - coreConnectDlg = new CoreConnectDlg(this, autoConnect); - connect(coreConnectDlg, SIGNAL(finished(int)), this, SLOT(coreConnectionDlgFinished(int))); - coreConnectDlg->setModal(true); - coreConnectDlg->show(); -} - -void MainWin::coreConnectionDlgFinished(int /*code*/) { - coreConnectDlg->close(); - //exit(1); + CoreConnectDlg(autoConnect, this).exec(); } void MainWin::showChannelList(NetworkId netId) { + ChannelListDlg *channelListDlg = new ChannelListDlg(); + if(!netId.isValid()) { QAction *action = qobject_cast(sender()); if(action) netId = action->data().value(); } + + channelListDlg->setAttribute(Qt::WA_DeleteOnClose); channelListDlg->setNetwork(netId); channelListDlg->show(); } void MainWin::showCoreInfoDlg() { - CoreInfoDlg dlg(this); - dlg.exec(); + CoreInfoDlg(this).exec(); } void MainWin::showSettingsDlg() { - settingsDlg->show(); -} + SettingsDlg *dlg = new SettingsDlg(); -void MainWin::showDebugConsole() { - debugConsole->show(); + //Category: Appearance + dlg->registerSettingsPage(new ColorSettingsPage(dlg)); + dlg->registerSettingsPage(new FontsSettingsPage(dlg)); + dlg->registerSettingsPage(new AppearanceSettingsPage(dlg)); //General + //Category: Behaviour + dlg->registerSettingsPage(new GeneralSettingsPage(dlg)); + dlg->registerSettingsPage(new HighlightSettingsPage(dlg)); + dlg->registerSettingsPage(new AliasesSettingsPage(dlg)); + dlg->registerSettingsPage(new NotificationsSettingsPage(dlg)); + //Category: General + dlg->registerSettingsPage(new IdentitiesSettingsPage(dlg)); + dlg->registerSettingsPage(new NetworksSettingsPage(dlg)); + dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); + + dlg->show(); } void MainWin::showAboutDlg() { - AboutDlg dlg(this); - dlg.exec(); + AboutDlg(this).exec(); } void MainWin::closeEvent(QCloseEvent *event) { @@ -587,12 +563,10 @@ void MainWin::toggleVisibility() { void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { Q_UNUSED(parent); + if(QApplication::activeWindow() != 0) return; - // FIXME - return; - for(int i = start; i <= end; i++) { QModelIndex idx = Client::messageModel()->index(i, ChatLineModel::ContentsColumn); if(!idx.isValid()) { @@ -600,6 +574,10 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { continue; } Message::Flags flags = (Message::Flags)idx.data(ChatLineModel::FlagsRole).toInt(); + if(flags.testFlag(Message::Backlog)) continue; + flags |= Message::Backlog; // we only want to trigger a highlight once! + Client::messageModel()->setData(idx, (int)flags, ChatLineModel::FlagsRole); + BufferId bufId = idx.data(ChatLineModel::BufferIdRole).value(); BufferInfo::Type bufType = Client::networkModel()->bufferType(bufId); @@ -788,3 +766,19 @@ void MainWin::on_actionDebugNetworkModel_triggered(bool) { view->resize(610, 300); view->show(); } + +void MainWin::saveStateToSession(const QString &sessionId) { + return; + SessionSettings s(sessionId); + + s.setValue("MainWinSize", size()); + s.setValue("MainWinPos", pos()); + s.setValue("MainWinState", saveState()); +} + +void MainWin::saveStateToSessionSettings(SessionSettings & s) +{ + s.setValue("MainWinSize", size()); + s.setValue("MainWinPos", pos()); + s.setValue("MainWinState", saveState()); +}