Window::Window(QWidget* parent) : QMainWindow(parent) { setObjectName("ChatWindow"); Settings::getInstance().load(); connect(&Settings::getInstance(), &Settings::dataChanged, this, &Window::applySettings); QToolBar* toolbar = new QToolBar(this); toolbar->setIconSize(QSize(24, 24)); toolbar->setFloatable(false); toolbar->setContextMenuPolicy(Qt::PreventContextMenu); addToolBar(toolbar); //QAction* refreshAction = toolbar->addAction(QIcon(":/icons/refresh.png"), "refresh"); //connect(refreshAction, SIGNAL(triggered()), this, SLOT(refreshPlanets())); QDockWidget* inputDock = new QDockWidget(this); inputDock->setObjectName("Input dock"); inputDock->setFeatures(QDockWidget::NoDockWidgetFeatures); inputDock->setTitleBarWidget(new QWidget(inputDock)); inputDock->setContextMenuPolicy(Qt::PreventContextMenu); addDockWidget(Qt::BottomDockWidgetArea, inputDock); QWidget* inputDockWidget = new QWidget(inputDock); QHBoxLayout* inputDockWidgetLayout = new QHBoxLayout(inputDockWidget); nickLabel = new QLabel(inputDockWidget); nickLabel->hide(); inputLine = new QLineEdit(inputDockWidget); connect(inputLine, &QLineEdit::returnPressed, this, &Window::sendMessage); inputDockWidgetLayout->addWidget(nickLabel); inputDockWidgetLayout->addWidget(inputLine); inputDockWidgetLayout->setContentsMargins(2, 2, 2, 6); inputDockWidget->setLayout(inputDockWidgetLayout); inputDock->setFixedHeight(inputDock->height()); inputDock->setWidget(inputDockWidget); QDockWidget* tabDock = new QDockWidget(this); tabDock->setObjectName("Tab dock"); tabDock->setFeatures(QDockWidget::NoDockWidgetFeatures); tabDock->setTitleBarWidget(new QWidget(tabDock)); tabDock->setContextMenuPolicy(Qt::PreventContextMenu); addDockWidget(Qt::LeftDockWidgetArea, tabDock); setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); tabTree = new TabTree(tabDock, 100); tabTree->setHeaderLabel("Chats"); tabTree->setIndentation(8); tabTree->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tabTree->setMinimumWidth(1); tabTree->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); tabDock->setWidget(tabTree); tabTree->setContextMenuPolicy(Qt::CustomContextMenu); connect(tabTree, &QTreeWidget::itemSelectionChanged, this, &Window::tabSelected); connect(tabTree, &QTreeWidget::customContextMenuRequested, this, &Window::showTabTreeContextMenu); QAction* connectAction = new QAction(QIcon(":/icons/connect.png"), "Connect", toolbar); QAction* disconnectAction = new QAction(QIcon(":/icons/disconnect.png"), "Disconnect", toolbar); QAction* settingsAction = toolbar->addAction(QIcon(":/icons/settings.png"), "Settings"); connect(connectAction, &QAction::triggered, this, &Window::connectToServer); connect(disconnectAction, &QAction::triggered, this, &Window::disconnectFromServer); connect(settingsAction, &QAction::triggered, this, &Window::showSettingsDialog); toolbar->addActions(QList<QAction*>() << connectAction << disconnectAction << settingsAction); serverTab = new QTreeWidgetItem(tabTree, QStringList() << "IRC Server"); tabTree->addTopLevelItem(serverTab); userDock = new QDockWidget(this); userDock->setObjectName("User dock"); userDock->setFeatures(QDockWidget::NoDockWidgetFeatures); userDock->setTitleBarWidget(new QWidget(userDock)); userDock->setContextMenuPolicy(Qt::PreventContextMenu); addDockWidget(Qt::RightDockWidgetArea, userDock); setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); userTree = new UserTree(userDock, 100); userTree->setItemsExpandable(false); userTree->setIndentation(8); userTree->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); userTree->setMinimumWidth(1); userTree->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred); userDock->setWidget(userTree); connect(userTree, &UserTree::privateActionTriggered, this, &Window::startPrivate); topicDock = new QDockWidget(this); topicDock->setObjectName("Topic dock"); topicDock->setFeatures(QDockWidget::NoDockWidgetFeatures); topicDock->setTitleBarWidget(new QWidget(topicDock)); topicDock->setContextMenuPolicy(Qt::PreventContextMenu); addDockWidget(Qt::TopDockWidgetArea, topicDock); topicLine = new TopicLabel(topicDock); topicDock->setWidget(topicLine); QMainWindow* pagesWindow = new QMainWindow(0); pages = new QStackedWidget(pagesWindow); serverPage = new ServerPage(serverTab, tabTree); connect(serverPage, &ServerPage::connectActionTriggered, this, &Window::connectToServer); connect(serverPage, &ServerPage::disconnectActionTriggered, this, &Window::disconnectFromServer); pagesWindow->setCentralWidget(pages); pages->addWidget(serverPage); setCentralWidget(pagesWindow); tabTree->setItemSelected(serverTab, true); autojoinTimer = new QTimer(this); autojoinTimer->setSingleShot(true); connect(autojoinTimer, &QTimer::timeout, this, &Window::joinChannels); applySettings(); ircClient->setVersion(QString("%1 %2 by %3; build date: %4").arg(MainWindow::name).arg(MainWindow::version).arg(MainWindow::author).arg(MainWindow::buildDate)); connect(ircClient, &IrcClient::IrcClient::notice, serverPage, &ServerPage::notice); connect(ircClient, &IrcClient::IrcClient::serverResponse, serverPage, &ServerPage::serverResponse); connect(ircClient, &IrcClient::IrcClient::ctcpRequest, serverPage, &ServerPage::ctcpRequest); connect(ircClient, &IrcClient::IrcClient::ctcpReply, serverPage, &ServerPage::ctcpReply); connect(ircClient, &IrcClient::IrcClient::quit, serverPage, &ServerPage::quit); connect(ircClient, &IrcClient::IrcClient::connecting, serverPage, &ServerPage::connecting); connect(ircClient, &IrcClient::IrcClient::disconnected, serverPage, &ServerPage::disconnected); connect(ircClient, &IrcClient::IrcClient::userModeChanged, serverPage, &ServerPage::userModeChanged); connect(ircClient, &IrcClient::IrcClient::join, this, &Window::joinedChannel); connect(ircClient, &IrcClient::IrcClient::connected, this, &Window::connected); connect(ircClient, &IrcClient::IrcClient::privateMessage, this, &Window::routePrivateMessage); connect(ircClient, &IrcClient::IrcClient::action, this, &Window::routePrivateAction); connect(ircClient, &IrcClient::IrcClient::nickChange, nickLabel, &QLabel::setText); connect(ircClient, &IrcClient::IrcClient::connected, nickLabel, &QLabel::show); connect(ircClient, &IrcClient::IrcClient::disconnected, nickLabel, &QLabel::hide); if (Settings::getInstance().getAutoConnect()) { connectToServer(); } ::Settings::loadWindow(this); }