X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fmainwin.cpp;h=6330e2cc8a65351ad598410056194bea052adba6;hp=3ada47fddc0603d1c2c248c3b7d97305ea6e8f9e;hb=e2188dc438be6f3eb0d9cdf47d28821aefe9835e;hpb=f88bfa81380ceb2c4afce5b15f753570a1ef063d diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 3ada47fd..6330e2cc 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -28,15 +28,6 @@ #include #include -#ifdef HAVE_KDE4 -# include -# include -# include -# include -# include -# include -#endif - #ifdef HAVE_KF5 # include # include @@ -79,7 +70,7 @@ #include "coreinfodlg.h" #include "contextmenuactionprovider.h" #include "debugbufferviewoverlay.h" -#include "debuglogwidget.h" +#include "debuglogdlg.h" #include "debugmessagemodelfilter.h" #include "flatproxymodel.h" #include "icon.h" @@ -95,6 +86,7 @@ #include "qtuisettings.h" #include "qtuistyle.h" #include "receivefiledlg.h" +#include "resourcetreedlg.h" #include "settingsdlg.h" #include "settingspagedlg.h" #include "statusnotifieritem.h" @@ -107,9 +99,6 @@ # ifdef HAVE_QTMULTIMEDIA # include "qtmultimedianotificationbackend.h" # endif -# ifdef HAVE_PHONON -# include "phononnotificationbackend.h" -# endif # include "systraynotificationbackend.h" # include "taskbarnotificationbackend.h" #else /* HAVE_KDE */ @@ -126,10 +115,6 @@ # include "sslinfodlg.h" #endif -#ifdef HAVE_INDICATEQT - #include "indicatornotificationbackend.h" -#endif - #ifdef HAVE_NOTIFICATION_CENTER #include "osxnotificationbackend.h" #endif @@ -176,11 +161,7 @@ MainWin::MainWin(QWidget *parent) #endif _msgProcessorStatusWidget(new MsgProcessorStatusWidget(this)), _coreConnectionStatusWidget(new CoreConnectionStatusWidget(Client::coreConnection(), this)), - _titleSetter(this), - _awayLog(0), - _layoutLoaded(false), - _activeBufferViewIndex(-1), - _aboutToQuit(false) + _titleSetter(this) { setAttribute(Qt::WA_DeleteOnClose, false); // we delete the mainwin manually @@ -256,9 +237,6 @@ void MainWin::init() #ifndef HAVE_KDE # ifdef HAVE_QTMULTIMEDIA QtUi::registerNotificationBackend(new QtMultimediaNotificationBackend(this)); -# endif -# ifdef HAVE_PHONON - QtUi::registerNotificationBackend(new PhononNotificationBackend(this)); # endif QtUi::registerNotificationBackend(new TaskbarNotificationBackend(this)); #else /* HAVE_KDE */ @@ -275,10 +253,6 @@ void MainWin::init() QtUi::registerNotificationBackend(new SystrayNotificationBackend(this)); #endif -#ifdef HAVE_INDICATEQT - QtUi::registerNotificationBackend(new IndicatorNotificationBackend(this)); -#endif - #ifdef HAVE_NOTIFICATION_CENTER QtUi::registerNotificationBackend(new OSXNotificationBackend(this)); #endif @@ -305,21 +279,17 @@ void MainWin::init() // restore locked state of docks QtUi::actionCollection("General")->action("LockLayout")->setChecked(s.value("LockLayout", false).toBool()); - QTimer::singleShot(0, this, SLOT(doAutoConnect())); -} - - -MainWin::~MainWin() -{ -} - + Quassel::registerQuitHandler([this]() { + QtUiSettings s; + saveStateToSettings(s); + saveLayout(); + // Close all open dialogs and the MainWin, so we can safely kill the Client instance afterwards + // Note: This does not quit the application, as quitOnLastWindowClosed is set to false. + // We rely on another quit handler to be registered that actually quits the application. + qApp->closeAllWindows(); + }); -void MainWin::quit() -{ - QtUiSettings s; - saveStateToSettings(s); - saveLayout(); - QApplication::quit(); + QTimer::singleShot(0, this, SLOT(doAutoConnect())); } @@ -416,7 +386,7 @@ void MainWin::setupActions() // // See https://doc.qt.io/qt-5/qkeysequence.html coll->addAction("Quit", new Action(icon::get("application-exit"), tr("&Quit"), coll, - this, SLOT(quit()), Qt::CTRL + Qt::Key_Q)); + Quassel::instance(), SLOT(quit()), Qt::CTRL + Qt::Key_Q)); // View coll->addAction("ConfigureBufferViews", new Action(tr("&Configure Chat Lists..."), coll, @@ -427,14 +397,14 @@ void MainWin::setupActions() connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockLayout_toggled(bool))); coll->addAction("ToggleSearchBar", new Action(icon::get("edit-find"), tr("Show &Search Bar"), coll, - 0, 0, QKeySequence::Find))->setCheckable(true); + nullptr, nullptr, QKeySequence::Find))->setCheckable(true); coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll, this, SLOT(showAwayLog()))); coll->addAction("ToggleMenuBar", new Action(icon::get("show-menu"), tr("Show &Menubar"), coll, - 0, 0))->setCheckable(true); + nullptr, nullptr))->setCheckable(true); coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll, - 0, 0))->setCheckable(true); + nullptr, nullptr))->setCheckable(true); #ifdef HAVE_KDE _fullScreenAction = KStandardAction::fullScreen(this, SLOT(onFullScreenToggled()), this, coll); @@ -481,6 +451,8 @@ void MainWin::setupActions() this, SLOT(on_actionDebugHotList_triggered()))); coll->addAction("DebugLog", new Action(icon::get("tools-report-bug"), tr("Debug &Log"), coll, this, SLOT(on_actionDebugLog_triggered()))); + coll->addAction("ShowResourceTree", new Action(icon::get("tools-report-bug"), tr("Show &Resource Tree"), coll, + this, SLOT(on_actionShowResourceTree_triggered()))); coll->addAction("ReloadStyle", new Action(icon::get("view-refresh"), tr("Reload Stylesheet"), coll, QtUi::style(), SLOT(reload()), QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_R))); @@ -656,6 +628,7 @@ void MainWin::setupMenus() _helpDebugMenu->addAction(coll->action("DebugMessageModel")); _helpDebugMenu->addAction(coll->action("DebugHotList")); _helpDebugMenu->addAction(coll->action("DebugLog")); + _helpDebugMenu->addAction(coll->action("ShowResourceTree")); _helpDebugMenu->addSeparator(); _helpDebugMenu->addAction(coll->action("ReloadStyle")); @@ -693,10 +666,10 @@ void MainWin::addBufferView(ClientBufferViewConfig *config) return; config->setLocked(QtUiSettings().value("LockLayout", false).toBool()); - BufferViewDock *dock = new BufferViewDock(config, this); + auto *dock = new BufferViewDock(config, this); //create the view and initialize it's filter - BufferView *view = new BufferView(dock); + auto *view = new BufferView(dock); view->setFilteredModel(Client::bufferModel(), config); view->installEventFilter(_inputWidget); // for key presses @@ -753,9 +726,9 @@ void MainWin::bufferViewToggled(bool enabled) // since this isn't our fault and we can't do anything about it, we suppress the resulting calls return; } - QAction *action = qobject_cast(sender()); + auto *action = qobject_cast(sender()); Q_ASSERT(action); - BufferViewDock *dock = qobject_cast(action->parent()); + auto *dock = qobject_cast(action->parent()); Q_ASSERT(dock); // Make sure we don't toggle backlog fetch for a view we've already removed @@ -772,7 +745,7 @@ void MainWin::bufferViewToggled(bool enabled) void MainWin::bufferViewVisibilityChanged(bool visible) { Q_UNUSED(visible); - BufferViewDock *dock = qobject_cast(sender()); + auto *dock = qobject_cast(sender()); Q_ASSERT(dock); if ((!dock->isHidden() && !activeBufferView()) || (dock->isHidden() && dock->isActive())) nextBufferView(); @@ -784,16 +757,16 @@ BufferView *MainWin::allBuffersView() const // "All Buffers" is always the first dock created if (_bufferViews.count() > 0) return _bufferViews[0]->bufferView(); - return 0; + return nullptr; } BufferView *MainWin::activeBufferView() const { if (_activeBufferViewIndex < 0 || _activeBufferViewIndex >= _bufferViews.count()) - return 0; + return nullptr; BufferViewDock *dock = _bufferViews.at(_activeBufferViewIndex); - return dock->isActive() ? dock->bufferView() : 0; + return dock->isActive() ? dock->bufferView() : nullptr; } @@ -823,13 +796,12 @@ void MainWin::changeActiveBufferView(int bufferViewId) void MainWin::showPasswordChangeDlg() { if(Client::isCoreFeatureEnabled(Quassel::Feature::PasswordChange)) { - PasswordChangeDlg dlg(this); - dlg.exec(); + PasswordChangeDlg{}.exec(); } else { QMessageBox box(QMessageBox::Warning, tr("Feature Not Supported"), tr("Your Quassel Core does not support this feature"), - QMessageBox::Ok, this); + QMessageBox::Ok); box.setInformativeText(tr("You need a Quassel Core v0.12.0 or newer in order to be able to remotely change your password.")); box.exec(); } @@ -865,7 +837,7 @@ void MainWin::onExitRequested(const QString &reason) QMessageBox box(QMessageBox::Critical, tr("Fatal error"), "" + tr("Quassel encountered a fatal error and is terminated.") + "", - QMessageBox::Ok, this); + QMessageBox::Ok); box.setInformativeText("

" + tr("Reason:") + " " + reason + ""); box.exec(); } @@ -942,22 +914,19 @@ void MainWin::hideCurrentBuffer() void MainWin::showNotificationsDlg() { - SettingsPageDlg dlg(new NotificationsSettingsPage(this), this); - dlg.exec(); + SettingsPageDlg{new NotificationsSettingsPage{}}.exec(); } void MainWin::on_actionConfigureNetworks_triggered() { - SettingsPageDlg dlg(new NetworksSettingsPage(this), this); - dlg.exec(); + SettingsPageDlg{new NetworksSettingsPage{}}.exec(); } void MainWin::on_actionConfigureViews_triggered() { - SettingsPageDlg dlg(new BufferViewSettingsPage(this), this); - dlg.exec(); + SettingsPageDlg{new BufferViewSettingsPage{}}.exec(); } @@ -1022,7 +991,7 @@ void MainWin::setupChatMonitor() VerticalDock *dock = new VerticalDock(tr("Chat Monitor"), this); dock->setObjectName("ChatMonitorDock"); - ChatMonitorFilter *filter = new ChatMonitorFilter(Client::messageModel(), this); + auto *filter = new ChatMonitorFilter(Client::messageModel(), this); _chatMonitorView = new ChatMonitorView(filter, this); _chatMonitorView->show(); dock->setWidget(_chatMonitorView); @@ -1135,7 +1104,7 @@ void MainWin::setupStatusBar() void MainWin::setupHotList() { - FlatProxyModel *flatProxy = new FlatProxyModel(this); + auto *flatProxy = new FlatProxyModel(this); flatProxy->setSourceModel(Client::bufferModel()); _bufferHotList = new BufferHotListFilter(flatProxy); } @@ -1393,7 +1362,7 @@ void MainWin::setDisconnectedState() void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, const QString &errorMessage) { Q_UNUSED(errorMessage) - CoreConnectAuthDlg dlg(account, this); + CoreConnectAuthDlg dlg(account); *valid = (dlg.exec() == QDialog::Accepted); } @@ -1401,7 +1370,7 @@ void MainWin::userAuthenticationRequired(CoreAccount *account, bool *valid, cons void MainWin::handleNoSslInClient(bool *accepted) { QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your client does not support SSL encryption"), - QMessageBox::Ignore|QMessageBox::Cancel, this); + QMessageBox::Ignore|QMessageBox::Cancel); box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); box.setDefaultButton(QMessageBox::Ignore); *accepted = box.exec() == QMessageBox::Ignore; @@ -1411,7 +1380,7 @@ void MainWin::handleNoSslInClient(bool *accepted) void MainWin::handleNoSslInCore(bool *accepted) { QMessageBox box(QMessageBox::Warning, tr("Unencrypted Connection"), tr("Your core does not support SSL encryption"), - QMessageBox::Ignore|QMessageBox::Cancel, this); + QMessageBox::Ignore|QMessageBox::Cancel); box.setInformativeText(tr("Sensitive data, like passwords, will be transmitted unencrypted to your Quassel core.")); box.setDefaultButton(QMessageBox::Ignore); *accepted = box.exec() == QMessageBox::Ignore; @@ -1430,7 +1399,7 @@ void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *pe QMessageBox box(QMessageBox::Warning, tr("Untrusted Security Certificate"), tr("The SSL certificate provided by the core at %1 is untrusted for the following reasons:").arg(socket->peerName()), - QMessageBox::Cancel, this); + QMessageBox::Cancel); box.setInformativeText(errorString); box.addButton(tr("Continue"), QMessageBox::AcceptRole); box.setDefaultButton(box.addButton(tr("Show Certificate"), QMessageBox::HelpRole)); @@ -1440,7 +1409,7 @@ void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *pe box.exec(); role = box.buttonRole(box.clickedButton()); if (role == QMessageBox::HelpRole) { - SslInfoDlg dlg(socket, this); + SslInfoDlg dlg(socket); dlg.exec(); } } @@ -1451,7 +1420,7 @@ void MainWin::handleSslErrors(const QSslSocket *socket, bool *accepted, bool *pe QMessageBox box2(QMessageBox::Warning, tr("Untrusted Security Certificate"), tr("Would you like to accept this certificate forever without being prompted?"), - 0, this); + 0); box2.setDefaultButton(box2.addButton(tr("Current Session Only"), QMessageBox::NoRole)); box2.addButton(tr("Forever"), QMessageBox::YesRole); box2.exec(); @@ -1470,7 +1439,7 @@ void MainWin::handleCoreConnectionError(const QString &error) void MainWin::showCoreConnectionDlg() { - CoreConnectDlg dlg(this); + CoreConnectDlg dlg; if (dlg.exec() == QDialog::Accepted) { AccountId accId = dlg.selectedAccount(); if (accId.isValid()) @@ -1481,7 +1450,7 @@ void MainWin::showCoreConnectionDlg() void MainWin::showCoreConfigWizard(const QVariantList &backends, const QVariantList &authenticators) { - CoreConfigWizard *wizard = new CoreConfigWizard(Client::coreConnection(), backends, authenticators, this); + auto *wizard = new CoreConfigWizard(Client::coreConnection(), backends, authenticators, this); wizard->show(); } @@ -1489,10 +1458,8 @@ void MainWin::showCoreConfigWizard(const QVariantList &backends, const QVariantL void MainWin::showChannelList(NetworkId netId, const QString &channelFilters, bool listImmediately) { - ChannelListDlg *channelListDlg = new ChannelListDlg(); - if (!netId.isValid()) { - QAction *action = qobject_cast(sender()); + auto *action = qobject_cast(sender()); if (action) netId = action->data().value(); if (!netId.isValid()) { @@ -1500,14 +1467,14 @@ void MainWin::showChannelList(NetworkId netId, const QString &channelFilters, bo // on the client homescreen when no networks are connected. QMessageBox box(QMessageBox::Information, tr("No network selected"), QString("%1").arg(tr("No network selected")), - QMessageBox::Ok, this); + QMessageBox::Ok); box.setInformativeText(tr("Select a network before trying to view the channel list.")); box.exec(); return; } } - + auto *channelListDlg = new ChannelListDlg(this); channelListDlg->setAttribute(Qt::WA_DeleteOnClose); channelListDlg->setNetwork(netId); if (!channelFilters.isEmpty()) { @@ -1522,7 +1489,7 @@ void MainWin::showChannelList(NetworkId netId, const QString &channelFilters, bo void MainWin::showNetworkConfig(NetworkId netId) { - SettingsPageDlg dlg(new NetworksSettingsPage(this), this); + SettingsPageDlg dlg{new NetworksSettingsPage{}}; if (netId.isValid()) qobject_cast(dlg.currentPage())->bufferList_Open(netId); dlg.exec(); @@ -1531,7 +1498,7 @@ void MainWin::showNetworkConfig(NetworkId netId) void MainWin::showIgnoreList(QString newRule) { - SettingsPageDlg dlg(new IgnoreListSettingsPage(this), this); + SettingsPageDlg dlg{new IgnoreListSettingsPage{}}; // prepare config dialog for new rule if (!newRule.isEmpty()) qobject_cast(dlg.currentPage())->editIgnoreRule(newRule); @@ -1541,7 +1508,7 @@ void MainWin::showIgnoreList(QString newRule) void MainWin::showCoreInfoDlg() { - CoreInfoDlg(this).exec(); + CoreInfoDlg{}.exec(); } @@ -1549,8 +1516,8 @@ void MainWin::showAwayLog() { if (_awayLog) return; - AwayLogFilter *filter = new AwayLogFilter(Client::messageModel()); - _awayLog = new AwayLogView(filter, 0); + auto *filter = new AwayLogFilter(Client::messageModel()); + _awayLog = new AwayLogView(filter, nullptr); filter->setParent(_awayLog); connect(_awayLog, SIGNAL(destroyed()), this, SLOT(awayLogDestroyed())); _awayLog->setAttribute(Qt::WA_DeleteOnClose); @@ -1560,13 +1527,13 @@ void MainWin::showAwayLog() void MainWin::awayLogDestroyed() { - _awayLog = 0; + _awayLog = nullptr; } void MainWin::showSettingsDlg() { - SettingsDlg *dlg = new SettingsDlg(); + auto *dlg = new SettingsDlg(); //Category: Interface dlg->registerSettingsPage(new AppearanceSettingsPage(dlg)); @@ -1605,20 +1572,19 @@ void MainWin::showSettingsDlg() void MainWin::showAboutDlg() { - AboutDlg(this).exec(); + AboutDlg{}.exec(); } void MainWin::showShortcutsDlg() { #ifdef HAVE_KDE - KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsDisallowed, this); + KShortcutsDialog dlg(KShortcutsEditor::AllActions, KShortcutsEditor::LetterShortcutsDisallowed); foreach(KActionCollection *coll, QtUi::actionCollections()) dlg.addCollection(coll, coll->property("Category").toString()); dlg.configure(true); #else - SettingsPageDlg dlg(new ShortcutsSettingsPage(QtUi::actionCollections(), this), this); - dlg.exec(); + SettingsPageDlg{new ShortcutsSettingsPage{QtUi::actionCollections()}}.exec(); #endif } @@ -1628,7 +1594,7 @@ void MainWin::showNewTransferDlg(const QUuid &transferId) auto transfer = Client::transferManager()->transfer(transferId); if (transfer) { if (transfer->status() == Transfer::Status::New) { - ReceiveFileDlg *dlg = new ReceiveFileDlg(transfer, this); + auto *dlg = new ReceiveFileDlg(transfer, this); dlg->show(); } } @@ -1697,7 +1663,7 @@ void MainWin::resizeEvent(QResizeEvent *event) void MainWin::closeEvent(QCloseEvent *event) { QtUiSettings s; - QtUiApplication *app = qobject_cast qApp; + auto *app = qobject_cast qApp; Q_ASSERT(app); // On OSX it can happen that the closeEvent occurs twice. (Especially if packaged with Frameworks) // This messes up MainWinState/MainWinHidden save/restore. @@ -1709,7 +1675,7 @@ void MainWin::closeEvent(QCloseEvent *event) else if(!_aboutToQuit) { _aboutToQuit = true; event->accept(); - quit(); + Quassel::instance()->quit(); } else { event->ignore(); @@ -1721,7 +1687,7 @@ void MainWin::messagesInserted(const QModelIndex &parent, int start, int end) { Q_UNUSED(parent); - bool hasFocus = QApplication::activeWindow() != 0; + bool hasFocus = QApplication::activeWindow() != nullptr; for (int i = start; i <= end; i++) { QModelIndex idx = Client::messageModel()->index(i, ChatLineModel::ContentsColumn); @@ -1783,13 +1749,13 @@ void MainWin::currentBufferChanged(BufferId buffer) void MainWin::clientNetworkCreated(NetworkId id) { const Network *net = Client::network(id); - QAction *act = new QAction(net->networkName(), this); + auto *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())); - QAction *beforeAction = 0; + QAction *beforeAction = nullptr; foreach(QAction *action, _networksMenu->actions()) { if (!action->data().isValid()) // ignore stock actions continue; @@ -1804,11 +1770,11 @@ void MainWin::clientNetworkCreated(NetworkId id) void MainWin::clientNetworkUpdated() { - const Network *net = qobject_cast(sender()); + const auto *net = qobject_cast(sender()); if (!net) return; - QAction *action = findChild(QString("NetworkAction-%1").arg(net->networkId().toInt())); + auto *action = findChild(QString("NetworkAction-%1").arg(net->networkId().toInt())); if (!action) return; @@ -1837,7 +1803,7 @@ void MainWin::clientNetworkUpdated() void MainWin::clientNetworkRemoved(NetworkId id) { - QAction *action = findChild(QString("NetworkAction-%1").arg(id.toInt())); + auto *action = findChild(QString("NetworkAction-%1").arg(id.toInt())); if (!action) return; @@ -1847,7 +1813,7 @@ void MainWin::clientNetworkRemoved(NetworkId id) void MainWin::connectOrDisconnectFromNet() { - QAction *act = qobject_cast(sender()); + auto *act = qobject_cast(sender()); if (!act) return; const Network *net = Client::network(act->data().value()); if (!net) return; @@ -1931,7 +1897,7 @@ void MainWin::on_bufferSearch_triggered() void MainWin::onJumpKey() { - QAction *action = qobject_cast(sender()); + auto *action = qobject_cast(sender()); if (!action || !Client::bufferModel()) return; int idx = action->property("Index").toInt(); @@ -1950,7 +1916,7 @@ void MainWin::onJumpKey() void MainWin::bindJumpKey() { - QAction *action = qobject_cast(sender()); + auto *action = qobject_cast(sender()); if (!action || !Client::bufferModel()) return; int idx = action->property("Index").toInt(); @@ -1962,7 +1928,7 @@ void MainWin::bindJumpKey() void MainWin::on_actionDebugNetworkModel_triggered() { - QTreeView *view = new QTreeView; + auto *view = new QTreeView; view->setAttribute(Qt::WA_DeleteOnClose); view->setWindowTitle("Debug NetworkModel View"); view->setModel(Client::networkModel()); @@ -1979,7 +1945,7 @@ void MainWin::on_actionDebugHotList_triggered() _bufferHotList->invalidate(); _bufferHotList->sort(0, Qt::DescendingOrder); - QTreeView *view = new QTreeView; + auto *view = new QTreeView; view->setAttribute(Qt::WA_DeleteOnClose); view->setModel(_bufferHotList); view->show(); @@ -1988,7 +1954,7 @@ void MainWin::on_actionDebugHotList_triggered() void MainWin::on_actionDebugBufferViewOverlay_triggered() { - DebugBufferViewOverlay *overlay = new DebugBufferViewOverlay(0); + auto *overlay = new DebugBufferViewOverlay(nullptr); overlay->setAttribute(Qt::WA_DeleteOnClose); overlay->show(); } @@ -1996,8 +1962,8 @@ void MainWin::on_actionDebugBufferViewOverlay_triggered() void MainWin::on_actionDebugMessageModel_triggered() { - QTableView *view = new QTableView(0); - DebugMessageModelFilter *filter = new DebugMessageModelFilter(view); + auto *view = new QTableView(nullptr); + auto *filter = new DebugMessageModelFilter(view); filter->setSourceModel(Client::messageModel()); view->setModel(filter); view->setAttribute(Qt::WA_DeleteOnClose, true); @@ -2009,10 +1975,15 @@ void MainWin::on_actionDebugMessageModel_triggered() void MainWin::on_actionDebugLog_triggered() { - DebugLogWidget *logWidget = new DebugLogWidget(nullptr); // will be deleted on close - logWidget->show(); + auto dlg = new DebugLogDlg(this); // will be deleted on close + dlg->show(); } +void MainWin::on_actionShowResourceTree_triggered() +{ + auto dlg = new ResourceTreeDlg(this); // will be deleted on close + dlg->show(); +} void MainWin::showStatusBarMessage(const QString &message) {