From d8f32ee2f011ec7a616d088b0c18d80fdc8d2d7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Ker=C3=A4nen?= Date: Thu, 12 Sep 2019 15:44:02 +0300 Subject: [PATCH] Shell: Improved widget layout; opening Help in browser --- doomsday/tools/shell/src/guishellapp.cpp | 31 +++++++++++++++++------- doomsday/tools/shell/src/guishellapp.h | 1 - doomsday/tools/shell/src/linkwindow.cpp | 15 +++++++----- doomsday/tools/shell/src/opendialog.cpp | 2 +- 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/doomsday/tools/shell/src/guishellapp.cpp b/doomsday/tools/shell/src/guishellapp.cpp index 175eadd1b7..2818693efb 100644 --- a/doomsday/tools/shell/src/guishellapp.cpp +++ b/doomsday/tools/shell/src/guishellapp.cpp @@ -39,6 +39,7 @@ using namespace de; using namespace network; DE_PIMPL(GuiShellApp) +, DE_OBSERVES(ServerFinder, Update) { ServerFinder finder; @@ -53,6 +54,7 @@ DE_PIMPL(GuiShellApp) // QList windows; Hash localServers; // port as key Timer localCheckTimer; + ui::ListDataT localServerMenuItems; Preferences *prefs; @@ -60,13 +62,30 @@ DE_PIMPL(GuiShellApp) { localCheckTimer.setInterval(1.0_s); localCheckTimer.setSingleShot(false); + + finder.audienceForUpdate() += this; } - ~Impl() + ~Impl() override { self().glDeinit(); } + void foundServersUpdated() override + { + DE_ASSERT(inMainThread()); + + const auto found = finder.foundServers(); + + // Add new servers. + for (const auto &sv : found) + { + + } + + // Remove servers that are not present. + } + void loadAllShaders() { // Load all the shader program definitions. @@ -352,12 +371,12 @@ void GuiShellApp::aboutShell() void GuiShellApp::showHelp() { -// QDesktopServices::openUrl(QUrl(tr("http://wiki.dengine.net/w/Shell_Help"))); + openBrowserUrl("https://manual.dengine.net/multiplayer/shell_help"); } void GuiShellApp::openWebAddress(const String &url) { -// QDesktopServices::openUrl(QUrl(url)); + openBrowserUrl(url); } void GuiShellApp::showPreferences() @@ -384,12 +403,6 @@ void GuiShellApp::showPreferences() // } } -void GuiShellApp::preferencesDone() -{ -// d->prefs->deleteLater(); -// d->prefs = 0; -} - void GuiShellApp::updateMenu() { #ifdef MACOSX diff --git a/doomsday/tools/shell/src/guishellapp.h b/doomsday/tools/shell/src/guishellapp.h index 7e18288a81..4b92e41b00 100644 --- a/doomsday/tools/shell/src/guishellapp.h +++ b/doomsday/tools/shell/src/guishellapp.h @@ -53,7 +53,6 @@ class GuiShellApp : public de::BaseGuiApp void showHelp(); void openWebAddress(const de::String &address); void showPreferences(); - void preferencesDone(); void updateMenu(); DE_AUDIENCE(LocalServerStop, void localServerStopped(int port)) diff --git a/doomsday/tools/shell/src/linkwindow.cpp b/doomsday/tools/shell/src/linkwindow.cpp index d893f79246..24e55f52ad 100644 --- a/doomsday/tools/shell/src/linkwindow.cpp +++ b/doomsday/tools/shell/src/linkwindow.cpp @@ -256,6 +256,7 @@ DE_PIMPL(LinkWindow) << new ui::ActionItem("New Local Server...", []() { GuiShellApp::app().startLocalServer(); }) << new ui::ActionItem("Stop Server", [this]() { self().stopServer(); }) << new ui::ActionItem("Preferences...", []() { GuiShellApp::app().showPreferences(); }) + << new ui::ActionItem("Help...", [](){ GuiShellApp::app().showHelp(); }) << new ui::ActionItem("About Doomsday Shell", [](){ GuiShellApp::app().aboutShell(); }) << new ui::ActionItem("Quit", []() { GuiShellApp::app().quit(0); }); auto *menuButton = &root.addNew(); @@ -281,20 +282,22 @@ DE_PIMPL(LinkWindow) style.fonts().font("monospace").ascent()); timeCounter->set(GuiWidget::Background(Vec4f(1, 0, 0, 1))); - statusMessage->setText("Status message"); + //statusMessage->setText("Status message"); statusMessage->set(GuiWidget::Background(Vec4f(0, 0, 1, 1))); - gameStatus->setText("game"); - currentHost->setText("localhost"); + //gameStatus->setText(""); + //currentHost->setText("localhost"); - SequentialLayout layout(statusBar->rule().left(), statusBar->rule().top(), ui::Right); + SequentialLayout layout(menuButton->rule().left(), statusBar->rule().top(), ui::Left); - for (auto *label : {statusMessage, gameStatus, timeCounter, currentHost}) + for (auto *label : {timeCounter, currentHost, gameStatus, statusMessage}) { label->setSizePolicy(ui::Expand, ui::Fixed); label->rule().setInput(Rule::Height, statusHeight); statusBar->add(label); layout << *label; } + statusMessage->setSizePolicy(ui::Fixed, ui::Fixed); + statusMessage->rule().setInput(Rule::Left, statusBar->rule().left()); statusBar->rule() .setInput(Rule::Left, root.viewLeft()) @@ -809,7 +812,7 @@ void LinkWindow::closeConnection() d->link->audienceForDisconnected() += [this](){ disconnected(); }; delete d->link; - d->link = 0; + d->link = nullptr; // emit linkClosed(this); } diff --git a/doomsday/tools/shell/src/opendialog.cpp b/doomsday/tools/shell/src/opendialog.cpp index 44102839ee..104409bc09 100644 --- a/doomsday/tools/shell/src/opendialog.cpp +++ b/doomsday/tools/shell/src/opendialog.cpp @@ -215,7 +215,7 @@ void OpenDialog::updateLocalList(bool autoselect) // Update the list of servers. for (const auto &sv : found) { - String label = Stringf("%s (%s; %d/%d)", + String label = Stringf("%s - %s (%d/%d)", sv.first.c_str(), finder.name(sv.second).left(CharPos(20)).c_str(), finder.playerCount(sv.second),