Skip to content

Commit

Permalink
Shell: Widgets for toolbar buttons
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Sep 1, 2019
1 parent 62b1239 commit f7515e7
Showing 1 changed file with 84 additions and 68 deletions.
152 changes: 84 additions & 68 deletions doomsday/tools/shell/src/linkwindow.cpp
Expand Up @@ -18,14 +18,10 @@

#include "linkwindow.h"
#include "statuswidget.h"
//#include "qtrootwidget.h"
//#include "qttextcanvas.h"
#include "guishellapp.h"
#include "optionspage.h"
//#include "consolepage.h"
#include "preferences.h"
#include "errorlogdialog.h"
//#include "utils.h"

#include <de/LogBuffer>
#include <de/comms/LogWidget>
Expand All @@ -37,30 +33,14 @@
#include <de/NativeFile>
#include <de/LogWidget>
#include <de/CommandWidget>
#include <de/SequentialLayout>
#include <de/StyledLogSinkFormatter>

//#include <QCloseEvent>
//#include <QDebug>
//#include <QFile>
//#include <QHBoxLayout>
//#include <QInputDialog>
//#include <QLabel>
//#include <QMenuBar>
//#include <QMessageBox>
//#include <QPushButton>
//#include <QScrollBar>
//#include <QStackedWidget>
//#include <QStatusBar>
//#include <QTimer>
//#include <QToolBar>
//#include <QToolButton>

//#ifndef MACOSX
//# define MENU_IN_LINK_WINDOW
//#endif

using namespace de;
using namespace de::shell;

//static String statusText(const String &txt)
//{
Expand All @@ -87,24 +67,23 @@ DE_PIMPL(LinkWindow)
{
GuiRootWidget root;
LogBuffer logBuffer;
Link *link;
shell::Link *link;
duint16 waitingForLocalPort = 0;
Time startedWaitingAt;
Timer waitTimeout;
String linkName;
NativePath errorLog;
// QToolBar *tools;
// QToolButton *statusButton;
// QToolButton *optionsButton;
// QToolButton *consoleButton;
// QStackedWidget *stack;
GuiWidget *tools;
ButtonWidget *statusButton;
ButtonWidget *optionsButton;
ButtonWidget *consoleButton;
GuiWidget *newLocalServerPage;
GuiWidget *pageContent;
GuiWidget *consolePage;
List<GuiWidget *> pages;
StatusWidget *status;
OptionsPage *options;
StyledLogSinkFormatter logFormatter{LogEntry::Styled | LogEntry::OmitLevel};
de::LogWidget *logWidget;
LogWidget *logWidget;
ServerCommandWidget *commandWidget;
LabelWidget *gameStatus;
LabelWidget *timeCounter;
Expand Down Expand Up @@ -138,47 +117,82 @@ DE_PIMPL(LinkWindow)
~Impl() override
{
// Make sure the local sink is removed.
// LogBuffer::get().removeSink(console->log().logSink());
LogBuffer::get().removeSink(logWidget->logSink());
}

ButtonWidget *createToolbarButton(const String &label)
{
auto *button = new ButtonWidget;
button->setText(label);
button->setTextAlignment(ui::AlignRight);
button->setOverrideImageSize(Style::get().fonts().font("default").height());
button->setSizePolicy(ui::Expand, ui::Expand);
return button;
}

void createWidgets()
{
// Toolbar + menu bar.
{
tools = new GuiWidget;
root.add(tools);

statusButton = createToolbarButton("Status");
statusButton->setStyleImage("refresh");
tools->add(statusButton);

optionsButton = createToolbarButton("Options");
optionsButton->setStyleImage("gear");
tools->add(optionsButton);

consoleButton = createToolbarButton("Console");
consoleButton->setStyleImage("gauge");
tools->add(consoleButton);

tools->rule()
.setInput(Rule::Left, root.viewLeft())
.setInput(Rule::Right, root.viewRight())
.setInput(Rule::Top, root.viewTop())
.setInput(Rule::Height, statusButton->rule().height());

SequentialLayout layout(tools->rule().left(), tools->rule().top(), ui::Right);
layout << *statusButton << *optionsButton << *consoleButton;
}

// Pages.
pageContent = new GuiWidget;
pageContent->set(GuiWidget::Background());
pageContent->rule().setRect(root.viewRule());
root.add(pageContent);

logWidget = new de::LogWidget;
logFormatter.setShowMetadata(true);
logWidget->setLogFormatter(logFormatter);
pageContent->add(logWidget);

commandWidget = new ServerCommandWidget;
commandWidget->rule()
.setInput(Rule::Left, root.viewLeft())
.setInput(Rule::Right, root.viewRight())
.setInput(Rule::Bottom, pageContent->rule().bottom());
pageContent->add(commandWidget);
commandWidget->setEmptyContentHint("Enter commands");

logWidget->rule()
.setInput(Rule::Left, root.viewLeft())
.setInput(Rule::Right, root.viewRight())
.setInput(Rule::Top, root.viewTop())
.setInput(Rule::Bottom, commandWidget->rule().top());

auto *test = new ButtonWidget;
test->setText("Press This");
test->setSizePolicy(ui::Expand, ui::Expand);
test->rule()
.setMidAnchorX(root.viewRule().midX())
.setMidAnchorY(root.viewRule().midY());
root.add(test);

LogBuffer::get().addSink(logWidget->logSink());
consolePage = new GuiWidget;
consolePage->set(GuiWidget::Background());
consolePage->rule()
.setRect(root.viewRule())
.setInput(Rule::Top, tools->rule().bottom());
root.add(consolePage);
pages.push_back(consolePage);

// Console page.
{
const auto &pageRule = consolePage->rule();

logWidget = new LogWidget;
logFormatter.setShowMetadata(true);
logWidget->setLogFormatter(logFormatter);
consolePage->add(logWidget);

commandWidget = new ServerCommandWidget;
commandWidget->rule()
.setInput(Rule::Left, pageRule.left())
.setInput(Rule::Right, pageRule.right())
.setInput(Rule::Bottom, pageRule.bottom());
consolePage->add(commandWidget);
commandWidget->setEmptyContentHint("Enter commands");

logWidget->rule()
.setInput(Rule::Left, pageRule.left())
.setInput(Rule::Right, pageRule.right())
.setInput(Rule::Top, pageRule.top())
.setInput(Rule::Bottom, commandWidget->rule().top());

LogBuffer::get().addSink(logWidget->logSink());
}

// Status bar.
}
Expand Down Expand Up @@ -279,7 +293,7 @@ DE_PIMPL(LinkWindow)
// return tb;
// }

void updateStatusBarWithGameState(de::Record &rec)
void updateStatusBarWithGameState(Record &rec)
{
String gameMode = rec["mode"].value().asText();
String mapId = rec["mapId"].value().asText();
Expand Down Expand Up @@ -467,7 +481,7 @@ GuiRootWidget &LinkWindow::root()
return d->root;
}

de::Vec2f LinkWindow::windowContentSize() const
Vec2f LinkWindow::windowContentSize() const
{
// Current root widget size.
return d->root.viewRule().size();
Expand All @@ -491,7 +505,7 @@ void LinkWindow::drawWindowContent()

bool LinkWindow::isConnected() const
{
return d->link && d->link->status() != Link::Disconnected;
return d->link && d->link->status() != shell::Link::Disconnected;
}

#if 0
Expand Down Expand Up @@ -558,7 +572,7 @@ void LinkWindow::waitForLocalConnection(duint16 localPort,
// d->checkCurrentTab(true);
}

void LinkWindow::openConnection(Link *link, const String& name)
void LinkWindow::openConnection(shell::Link *link, const String& name)
{
// closeConnection();

Expand Down Expand Up @@ -656,6 +670,8 @@ void LinkWindow::updateWhenConnected()

void LinkWindow::handleIncomingPackets()
{
using namespace de::shell;

for (;;)
{
DE_ASSERT(d->link != 0);
Expand Down Expand Up @@ -843,7 +859,7 @@ void LinkWindow::checkFoundServers()
{
// This is the one!
const Address dest = addr;
Loop::timer(0.100, [this, dest]() { openConnection(new Link(dest)); });
Loop::timer(0.100, [this, dest]() { openConnection(new shell::Link(dest)); });
d->waitingForLocalPort = 0;
}
}
Expand Down

0 comments on commit f7515e7

Please sign in to comment.