X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=9769de79fb984e8d7c3bb9afcaaa5cb2de6c3388;hp=2343b8a30e0b6a5eda9d28128be01424fd8aaa91;hb=71ef3ec0c4c4d02431aa560ed83b379c416798c5;hpb=ee7d56f3abdb6ee4ce6c79ddea0142407b4e9e74 diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 2343b8a3..9769de79 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -35,6 +35,8 @@ #include "actioncollection.h" #include "buffermodel.h" #include "bufferview.h" +#include "bufferviewoverlay.h" +#include "bufferviewoverlayfilter.h" #include "bufferwidget.h" #include "channellistdlg.h" #include "chatlinemodel.h" @@ -55,6 +57,7 @@ #include "inputwidget.h" #include "inputline.h" #include "irclistmodel.h" +#include "ircconnectionwizard.h" #include "jumpkeyhandler.h" #include "msgprocessorstatuswidget.h" #include "nicklistwidget.h" @@ -64,6 +67,7 @@ #include "sessionsettings.h" #include "settingsdlg.h" #include "settingspagedlg.h" +#include "systemtray.h" #include "toolbaractionprovider.h" #include "topicwidget.h" #include "verticaldock.h" @@ -87,7 +91,6 @@ #include "settingspages/bufferviewsettingspage.h" #include "settingspages/chatmonitorsettingspage.h" #include "settingspages/colorsettingspage.h" -#include "settingspages/fontssettingspage.h" #include "settingspages/generalsettingspage.h" #include "settingspages/highlightsettingspage.h" #include "settingspages/identitiessettingspage.h" @@ -105,7 +108,6 @@ MainWin::MainWin(QWidget *parent) sslLabel(new QLabel()), msgProcessorStatusWidget(new MsgProcessorStatusWidget()), _titleSetter(this), - _trayIcon(new QSystemTrayIcon(this)), _awayLog(0) { QtUiSettings uiSettings; @@ -137,6 +139,8 @@ void MainWin::init() { connect(QApplication::instance(), SIGNAL(aboutToQuit()), SLOT(saveLayout())); connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), SLOT(clientNetworkCreated(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), SLOT(clientNetworkRemoved(NetworkId))); + connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), + SLOT(messagesInserted(const QModelIndex &, int, int))); connect(GraphicalUi::contextMenuActionProvider(), SIGNAL(showChannelList(NetworkId)), SLOT(showChannelList(NetworkId))); // Setup Dock Areas @@ -182,6 +186,7 @@ void MainWin::init() { setDisconnectedState(); // Disable menus and stuff show(); + if(Quassel::runMode() != Quassel::Monolithic) { showCoreConnectionDlg(true); // autoconnect if appropriate } else { @@ -197,14 +202,19 @@ MainWin::~MainWin() { } void MainWin::updateIcon() { +#ifdef Q_WS_MAC + const int size = 128; +#else + const int size = 48; +#endif + QPixmap icon; if(Client::isConnected()) - icon = DesktopIcon("quassel", IconLoader::SizeEnormous); + icon = DesktopIcon("quassel", size); else - icon = DesktopIcon("quassel_disconnected", IconLoader::SizeEnormous); + icon = DesktopIcon("quassel_inactive", size); setWindowIcon(icon); qApp->setWindowIcon(icon); - systemTrayIcon()->setIcon(icon); } void MainWin::setupActions() { @@ -247,6 +257,8 @@ void MainWin::setupActions() { qApp, SLOT(aboutQt()))); coll->addAction("DebugNetworkModel", new Action(SmallIcon("tools-report-bug"), tr("Debug &NetworkModel"), coll, this, SLOT(on_actionDebugNetworkModel_triggered()))); + coll->addAction("DebugBufferViewOverlay", new Action(SmallIcon("tools-report-bug"), tr("Debug &BufferViewOverlay"), coll, + this, SLOT(on_actionDebugBufferViewOverlay_triggered()))); coll->addAction("DebugMessageModel", new Action(SmallIcon("tools-report-bug"), tr("Debug &MessageModel"), coll, this, SLOT(on_actionDebugMessageModel_triggered()))); coll->addAction("DebugLog", new Action(SmallIcon("tools-report-bug"), tr("Debug &Log"), coll, @@ -307,6 +319,7 @@ void MainWin::setupMenus() { _helpMenu->addSeparator(); _helpDebugMenu = _helpMenu->addMenu(SmallIcon("tools-report-bug"), tr("Debug")); _helpDebugMenu->addAction(coll->action("DebugNetworkModel")); + _helpDebugMenu->addAction(coll->action("DebugBufferViewOverlay")); _helpDebugMenu->addAction(coll->action("DebugMessageModel")); _helpDebugMenu->addAction(coll->action("DebugLog")); } @@ -326,6 +339,7 @@ void MainWin::addBufferView(ClientBufferViewConfig *config) { if(!config) return; + config->setLocked(QtUiSettings().value("LockLayout", false).toBool()); BufferViewDock *dock = new BufferViewDock(config, this); //create the view and initialize it's filter @@ -342,6 +356,7 @@ void MainWin::addBufferView(ClientBufferViewConfig *config) { addDockWidget(Qt::LeftDockWidgetArea, dock); _bufferViewsMenu->addAction(dock->toggleViewAction()); + connect(dock->toggleViewAction(), SIGNAL(toggled(bool)), this, SLOT(bufferViewToggled(bool))); _bufferViews.append(dock); } @@ -361,6 +376,18 @@ void MainWin::removeBufferView(int bufferViewConfigId) { } } +void MainWin::bufferViewToggled(bool enabled) { + QAction *action = qobject_cast(sender()); + Q_ASSERT(action); + BufferViewDock *dock = qobject_cast(action->parent()); + Q_ASSERT(dock); + if(enabled) { + Client::bufferViewManager()->bufferViewOverlay()->addView(dock->bufferViewId()); + } else { + Client::bufferViewManager()->bufferViewOverlay()->removeView(dock->bufferViewId()); + } +} + BufferView *MainWin::allBuffersView() const { // "All Buffers" is always the first dock created if(_bufferViews.count() > 0) @@ -388,8 +415,10 @@ void MainWin::on_actionLockLayout_toggled(bool lock) { foreach(VerticalDock *dock, docks) { dock->showTitle(!lock); } - foreach(ClientBufferViewConfig *config, Client::bufferViewManager()->clientBufferViewConfigs()) { - config->setLocked(lock); + if(Client::bufferViewManager()) { + foreach(ClientBufferViewConfig *config, Client::bufferViewManager()->clientBufferViewConfigs()) { + config->setLocked(lock); + } } QtUiSettings().setValue("LockLayout", lock); } @@ -406,7 +435,7 @@ void MainWin::setupNickWidget() { addDockWidget(Qt::RightDockWidgetArea, nickDock); _viewMenu->addAction(nickDock->toggleViewAction()); nickDock->toggleViewAction()->setText(tr("Show Nick List")); - nickDock->toggleViewAction()->setIcon(SmallIcon("view-sidetree")); + // See NickListDock::NickListDock(); // connect(nickDock->toggleViewAction(), SIGNAL(triggered(bool)), nickListWidget, SLOT(showWidget(bool))); @@ -423,7 +452,7 @@ void MainWin::setupChatMonitor() { ChatMonitorView *chatView = new ChatMonitorView(filter, this); chatView->show(); dock->setWidget(chatView); - dock->show(); + dock->hide(); addDockWidget(Qt::TopDockWidgetArea, dock, Qt::Vertical); _viewMenu->addAction(dock->toggleViewAction()); @@ -486,7 +515,6 @@ void MainWin::setupStatusBar() { statusBar()->addPermanentWidget(sslLabel); sslLabel->hide(); - _viewMenu->addSeparator(); QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar"); QtUiSettings uiSettings; @@ -505,27 +533,12 @@ void MainWin::saveStatusBarStatus(bool enabled) { } void MainWin::setupSystray() { - connect(Client::messageModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)), - SLOT(messagesInserted(const QModelIndex &, int, int))); - - ActionCollection *coll = QtUi::actionCollection("General"); - systrayMenu = new QMenu(this); - systrayMenu->addAction(coll->action("ConnectCore")); - systrayMenu->addAction(coll->action("DisconnectCore")); - systrayMenu->addAction(coll->action("CoreInfo")); - systrayMenu->addSeparator(); - systrayMenu->addAction(coll->action("Quit")); - - systemTrayIcon()->setContextMenu(systrayMenu); - - QtUiSettings s; - if(s.value("UseSystemTrayIcon", QVariant(true)).toBool()) { - systemTrayIcon()->show(); - } + _systemTray = new SystemTray(this); #ifndef Q_WS_MAC - connect(systemTrayIcon(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason))); + connect(systemTray(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(systrayActivated(QSystemTrayIcon::ActivationReason))); #endif + } void MainWin::setupToolBars() { @@ -534,8 +547,12 @@ void MainWin::setupToolBars() { connect(_nickListWidget, SIGNAL(nickSelectionChanged(QModelIndexList)), QtUi::toolBarActionProvider(), SLOT(nickSelectionChanged(QModelIndexList))); +#ifdef Q_WS_MAC + setUnifiedTitleAndToolBarOnMac(true); +#endif _mainToolBar = addToolBar("Main Toolbar"); _mainToolBar->setObjectName("MainToolBar"); + QtUi::toolBarActionProvider()->addActions(_mainToolBar, ToolBarActionProvider::MainToolBar); _toolbarMenu->addAction(_mainToolBar->toggleViewAction()); @@ -606,6 +623,12 @@ void MainWin::setConnectedState() { sslLabel->setVisible(!Client::internalCore()); coreLagLabel->setVisible(!Client::internalCore()); updateIcon(); + systemTray()->setState(SystemTray::Active); + + if(Client::networkIds().isEmpty()) { + IrcConnectionWizard *wizard = new IrcConnectionWizard(this, Qt::Sheet); + wizard->show(); + } } void MainWin::loadLayout() { @@ -665,6 +688,7 @@ void MainWin::setDisconnectedState() { if(msgProcessorStatusWidget) msgProcessorStatusWidget->setProgress(0, 0); updateIcon(); + systemTray()->setState(SystemTray::Inactive); } void MainWin::startInternalCore() { @@ -715,20 +739,19 @@ void MainWin::showSettingsDlg() { SettingsDlg *dlg = new SettingsDlg(); //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 BacklogSettingsPage(dlg)); + dlg->registerSettingsPage(new ColorSettingsPage(dlg)); dlg->registerSettingsPage(new HighlightSettingsPage(dlg)); - dlg->registerSettingsPage(new AliasesSettingsPage(dlg)); dlg->registerSettingsPage(new NotificationsSettingsPage(dlg)); + dlg->registerSettingsPage(new BacklogSettingsPage(dlg)); + dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); dlg->registerSettingsPage(new ChatMonitorSettingsPage(dlg)); - //Category: General + + //Category: Misc + dlg->registerSettingsPage(new GeneralSettingsPage(dlg)); dlg->registerSettingsPage(new IdentitiesSettingsPage(dlg)); dlg->registerSettingsPage(new NetworksSettingsPage(dlg)); - dlg->registerSettingsPage(new BufferViewSettingsPage(dlg)); + dlg->registerSettingsPage(new AliasesSettingsPage(dlg)); dlg->show(); } @@ -763,14 +786,13 @@ void MainWin::systrayActivated(QSystemTrayIcon::ActivationReason activationReaso } void MainWin::hideToTray() { - if(!systemTrayIcon()->isSystemTrayAvailable()) { + if(!systemTray()->isSystemTrayAvailable()) { qWarning() << Q_FUNC_INFO << "was called with no SystemTray available!"; return; } - clearFocus(); hide(); - systemTrayIcon()->show(); + systemTray()->setIconVisible(); } void MainWin::toggleMinimizedToTray() { @@ -778,6 +800,7 @@ void MainWin::toggleMinimizedToTray() { // restore setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); show(); + activateWindow(); raise(); } else { setWindowState((windowState() & ~Qt::WindowActive) | Qt::WindowMinimized); @@ -798,7 +821,7 @@ 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; + if(flags.testFlag(Message::Backlog) || flags.testFlag(Message::Self)) continue; flags |= Message::Backlog; // we only want to trigger a highlight once! Client::messageModel()->setData(idx, (int)flags, ChatLineModel::FlagsRole); @@ -892,6 +915,20 @@ void MainWin::on_actionDebugNetworkModel_triggered() { view->show(); } +void MainWin::on_actionDebugBufferViewOverlay_triggered() { + QTreeView *view = new QTreeView; + view->setAttribute(Qt::WA_DeleteOnClose); + view->setWindowTitle("Debug BufferViewOverlay View"); + BufferViewOverlayFilter *filter = new BufferViewOverlayFilter(Client::bufferModel(), Client::bufferViewManager()->bufferViewOverlay()); + filter->setParent(view); + view->setModel(filter); + view->setColumnWidth(0, 250); + view->setColumnWidth(1, 250); + view->setColumnWidth(2, 80); + view->resize(610, 300); + view->show(); +} + void MainWin::on_actionDebugMessageModel_triggered() { QTableView *view = new QTableView(0); DebugMessageModelFilter *filter = new DebugMessageModelFilter(view);