#include "actioncollection.h"
#include "buffermodel.h"
#include "bufferview.h"
-#include "bufferviewmanager.h"
#include "bufferwidget.h"
#include "channellistdlg.h"
#include "chatlinemodel.h"
#include "client.h"
#include "clientsyncer.h"
#include "clientbacklogmanager.h"
+#include "clientbufferviewconfig.h"
+#include "clientbufferviewmanager.h"
#include "coreinfodlg.h"
#include "coreconnectdlg.h"
#include "contextmenuactionprovider.h"
#include "inputwidget.h"
#include "inputline.h"
#include "irclistmodel.h"
+#include "ircconnectionwizard.h"
#include "jumpkeyhandler.h"
#include "msgprocessorstatuswidget.h"
#include "nicklistwidget.h"
#include "sessionsettings.h"
#include "settingsdlg.h"
#include "settingspagedlg.h"
+#include "systemtray.h"
#include "toolbaractionprovider.h"
#include "topicwidget.h"
#include "verticaldock.h"
#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"
sslLabel(new QLabel()),
msgProcessorStatusWidget(new MsgProcessorStatusWidget()),
_titleSetter(this),
- _trayIcon(new QSystemTrayIcon(this)),
_awayLog(0)
{
QtUiSettings uiSettings;
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
restoreState(s.value("MainWinState").toByteArray());
// restore locked state of docks
- QtUi::actionCollection("General")->action("LockDockPositions")->setChecked(s.value("LockDocks", false).toBool());
+ QtUi::actionCollection("General")->action("LockLayout")->setChecked(s.value("LockLayout", false).toBool());
setDisconnectedState(); // Disable menus and stuff
show();
+
if(Quassel::runMode() != Quassel::Monolithic) {
showCoreConnectionDlg(true); // autoconnect if appropriate
} else {
}
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() {
// View
coll->addAction("ConfigureBufferViews", new Action(tr("&Configure Buffer Views..."), coll,
this, SLOT(on_actionConfigureViews_triggered())));
- QAction *lockAct = coll->addAction("LockDockPositions", new Action(tr("&Lock Dock Positions"), coll));
+
+ QAction *lockAct = coll->addAction("LockLayout", new Action(tr("&Lock Layout"), coll));
lockAct->setCheckable(true);
- connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockDockPositions_toggled(bool)));
+ connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockLayout_toggled(bool)));
coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll,
0, 0, tr("Ctrl+F")))->setCheckable(true);
_viewMenu = menuBar()->addMenu(tr("&View"));
_bufferViewsMenu = _viewMenu->addMenu(tr("&Buffer Views"));
_bufferViewsMenu->addAction(coll->action("ConfigureBufferViews"));
+ _toolbarMenu = _viewMenu->addMenu(tr("&Toolbars"));
_viewMenu->addSeparator();
_viewMenu->addAction(coll->action("ToggleSearchBar"));
_viewMenu->addAction(coll->action("ToggleStatusBar"));
_viewMenu->addSeparator();
- _viewMenu->addAction(coll->action("LockDockPositions"));
+ _viewMenu->addAction(coll->action("LockLayout"));
_settingsMenu = menuBar()->addMenu(tr("&Settings"));
#ifdef HAVE_KDE
}
void MainWin::addBufferView(int bufferViewConfigId) {
- addBufferView(Client::bufferViewManager()->bufferViewConfig(bufferViewConfigId));
+ addBufferView(Client::bufferViewManager()->clientBufferViewConfig(bufferViewConfigId));
}
-void MainWin::addBufferView(BufferViewConfig *config) {
+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
dlg.exec();
}
-void MainWin::on_actionLockDockPositions_toggled(bool lock) {
+void MainWin::on_actionLockLayout_toggled(bool lock) {
QList<VerticalDock *> docks = findChildren<VerticalDock *>();
foreach(VerticalDock *dock, docks) {
dock->showTitle(!lock);
}
- QtUiSettings().setValue("LockDocks", lock);
+ if(Client::bufferViewManager()) {
+ foreach(ClientBufferViewConfig *config, Client::bufferViewManager()->clientBufferViewConfigs()) {
+ config->setLocked(lock);
+ }
+ }
+ QtUiSettings().setValue("LockLayout", lock);
}
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)));
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());
statusBar()->addPermanentWidget(sslLabel);
sslLabel->hide();
- _viewMenu->addSeparator();
QAction *showStatusbar = QtUi::actionCollection("General")->action("ToggleStatusBar");
QtUiSettings uiSettings;
}
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() {
- _networkToolBar = addToolBar("Network");
- _networkToolBar->setObjectName("NetworkToolBar");
- QtUi::toolBarActionProvider()->addActions(_networkToolBar, ToolBarActionProvider::NetworkToolBar);
+ connect(_bufferWidget, SIGNAL(currentChanged(QModelIndex)),
+ QtUi::toolBarActionProvider(), SLOT(currentBufferChanged(QModelIndex)));
+ connect(_nickListWidget, SIGNAL(nickSelectionChanged(QModelIndexList)),
+ QtUi::toolBarActionProvider(), SLOT(nickSelectionChanged(QModelIndexList)));
- _nickToolBar = addToolBar("User");
- _nickToolBar->setObjectName("NickToolBar");
- QtUi::toolBarActionProvider()->addActions(_nickToolBar, ToolBarActionProvider::NickToolBar);
+#ifdef Q_WS_MAC
+ setUnifiedTitleAndToolBarOnMac(true);
+#endif
+ _mainToolBar = addToolBar("Main Toolbar");
+ _mainToolBar->setObjectName("MainToolBar");
+
+ QtUi::toolBarActionProvider()->addActions(_mainToolBar, ToolBarActionProvider::MainToolBar);
+ _toolbarMenu->addAction(_mainToolBar->toggleViewAction());
+
+ //_nickToolBar = addToolBar("User");
+ //_nickToolBar->setObjectName("NickToolBar");
+ //QtUi::toolBarActionProvider()->addActions(_nickToolBar, ToolBarActionProvider::NickToolBar);
#ifdef HAVE_KDE
- _networkToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
- _nickToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ _mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ //_nickToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
#endif
}
// _viewMenu->setEnabled(true);
if(!Client::internalCore())
statusBar()->showMessage(tr("Connected to core."));
+ else
+ statusBar()->clearMessage();
if(Client::signalProxy()->isSecure()) {
sslLabel->setPixmap(SmallIcon("security-high"));
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() {
sslLabel->hide();
updateLagIndicator();
coreLagLabel->hide();
+ if(msgProcessorStatusWidget)
+ msgProcessorStatusWidget->setProgress(0, 0);
updateIcon();
+ systemTray()->setState(SystemTray::Inactive);
}
void MainWin::startInternalCore() {
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();
}
}
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() {
// restore
setWindowState((windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
show();
+ activateWindow();
raise();
} else {
setWindowState((windowState() & ~Qt::WindowActive) | Qt::WindowMinimized);
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);