Skip to content

Commit

Permalink
Shell|Windows|GUI: Multiple improvements for the Windows platform
Browse files Browse the repository at this point in the history
Also, configuring the IWAD folder in the Local Server dialog.
  • Loading branch information
skyjake committed Feb 10, 2013
1 parent d34404a commit 7f77d73
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 31 deletions.
6 changes: 5 additions & 1 deletion doomsday/tools/shell/shell-gui/shell-gui.pro
Expand Up @@ -56,7 +56,11 @@ RESOURCES += \

# Deployment ----------------------------------------------------------------

macx {
win32 {
INSTALLS += target
target.path = $$DENG_BIN_DIR
}
else:macx {
ICON = res/macx/shell.icns

# Clean up previous deployment.
Expand Down
28 changes: 25 additions & 3 deletions doomsday/tools/shell/shell-gui/src/guishellapp.cpp
Expand Up @@ -55,10 +55,13 @@ GuiShellApp::GuiShellApp(int &argc, char **argv)
setApplicationName ("doomsday-shell-gui");
setApplicationVersion (SHELL_VERSION);

d->localMenu = new QMenu(tr("Local Servers"));
connect(d->localMenu, SIGNAL(aboutToShow()), this, SLOT(updateLocalServerMenu()));

#ifdef MACOSX
setQuitOnLastWindowClosed(false);
#endif

// On Mac OS X, the menu is not window-specific.
d->menuBar = new QMenuBar(0);

QMenu *menu = d->menuBar->addMenu(tr("Server"));
Expand All @@ -73,10 +76,10 @@ GuiShellApp::GuiShellApp(int &argc, char **argv)
menu->addAction(tr("Start Local Server"), this, SLOT(startLocalServer()),
QKeySequence(tr("Ctrl+N", "Server|Start Local Server")));

d->localMenu = menu->addMenu(tr("Local Servers"));
connect(d->localMenu, SIGNAL(aboutToShow()), this, SLOT(updateLocalServerMenu()));
menu->addMenu(d->localMenu);

menu->addAction(tr("About"), this, SLOT(aboutShell()));
#endif

newOrReusedConnectionWindow();
}
Expand Down Expand Up @@ -127,6 +130,11 @@ GuiShellApp &GuiShellApp::app()
return *static_cast<GuiShellApp *>(qApp);
}

QMenu *GuiShellApp::localServersMenu()
{
return d->localMenu;
}

ServerFinder &GuiShellApp::serverFinder()
{
return d->finder;
Expand Down Expand Up @@ -192,6 +200,20 @@ void GuiShellApp::startLocalServer()
}
}

void GuiShellApp::stopServer()
{
LinkWindow *win = dynamic_cast<LinkWindow *>(activeWindow());
if(win && win->isConnected())
{
if(QMessageBox::question(win, tr("Stop Server?"),
tr("Are you sure you want to stop this server?"),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
win->sendCommandToServer("quit");
}
}
}

void GuiShellApp::updateLocalServerMenu()
{
d->localMenu->clear();
Expand Down
3 changes: 3 additions & 0 deletions doomsday/tools/shell/shell-gui/src/guishellapp.h
Expand Up @@ -21,6 +21,7 @@

#include "qtguiapp.h"
#include <de/shell/ServerFinder>
#include <QMenu>

class LinkWindow;

Expand All @@ -36,13 +37,15 @@ class GuiShellApp : public QtGuiApp
de::shell::ServerFinder &serverFinder();

static GuiShellApp &app();
QMenu *localServersMenu();

public slots:
void connectToServer();
void connectToLocalServer();
void disconnectFromServer();
void closeActiveWindow();
void startLocalServer();
void stopServer();
void updateLocalServerMenu();
void aboutShell();

Expand Down
91 changes: 68 additions & 23 deletions doomsday/tools/shell/shell-gui/src/linkwindow.cpp
Expand Up @@ -20,11 +20,13 @@
#include "statuswidget.h"
#include "qtrootwidget.h"
#include "qttextcanvas.h"
#include "guishellapp.h"
#include <de/LogBuffer>
#include <de/shell/LogWidget>
#include <de/shell/CommandLineWidget>
#include <de/shell/Link>
#include <QToolBar>
#include <QMenuBar>
#include <QTimer>
#include <QCloseEvent>
#include <QMessageBox>
Expand All @@ -50,6 +52,7 @@ DENG2_PIMPL(LinkWindow)
QtRootWidget *root;
QLabel *timeCounter;
QLabel *currentHost;
QAction *stopAction;

Instance(Public &i)
: Private(i),
Expand Down Expand Up @@ -93,23 +96,37 @@ DENG2_PIMPL(LinkWindow)

void updateCurrentHost()
{
QString txt;
if(link)
{
if(self.isConnected() && !link->address().isNull())
{
currentHost->setText(QString("<small><b>%1</b>:%2</small>")
.arg(link->address().host().toString())
.arg(link->address().port()));
txt = tr("<b>%1</b>:%2")
.arg(link->address().host().toString())
.arg(link->address().port());
}
else if(self.isConnected() && link->address().isNull())
{
currentHost->setText(tr("<small>Looking up host...</small>"));
txt = tr("Looking up host...");
}
}
else
{
currentHost->setText("<small></small>");
}
#ifdef MACOSX
currentHost->setText("<small>" + txt + "</small>");
#else
currentHost->setText(txt);
#endif
}

void disconnected()
{
self.setTitle(tr("Disconnected"));
root->setOverlaidMessage(tr("Disconnected"));
self.statusBar()->clearMessage();
stopAction->setDisabled(true);

status->linkDisconnected();
updateCurrentHost();
updateStyle();
}
};

Expand All @@ -118,6 +135,30 @@ LinkWindow::LinkWindow(QWidget *parent)
{
setUnifiedTitleAndToolBarOnMac(true);

GuiShellApp *app = &GuiShellApp::app();

d->stopAction = new QAction(tr("Stop Server"), this);
connect(d->stopAction, SIGNAL(triggered()), app, SLOT(stopServer()));

#ifndef MACOSX
// Menus are window-specific on non-Mac platforms.
QMenu *menu = menuBar()->addMenu(tr("Server"));
menu->addAction(tr("Connect..."), app, SLOT(connectToServer()),
QKeySequence(tr("Ctrl+O", "Server|Connect")));
menu->addAction(tr("Disconnect"), this, SLOT(closeConnection()),
QKeySequence(tr("Ctrl+D", "Server|Disconnect")));
menu->addSeparator();
menu->addAction(tr("Start Local Server"), app, SLOT(startLocalServer()),
QKeySequence(tr("Ctrl+N", "Server|Start Local Server")));
menu->addAction(d->stopAction);

menu->addMenu(app->localServersMenu());

menu->addSeparator();

menu->addAction(tr("&Quit"), app, SLOT(quit()), QKeySequence(tr("Ctrl+Q")));
#endif

d->stack = new QStackedWidget;

// Status page.
Expand All @@ -131,7 +172,7 @@ LinkWindow::LinkWindow(QWidget *parent)
#ifdef MACOSX
d->root->setFont(QFont("Menlo", 13));
#else
d->root->setFont(QFont("Courier", 15));
d->root->setFont(QFont("Fixedsys", 9));
#endif
d->updateStyle();

Expand All @@ -140,21 +181,27 @@ LinkWindow::LinkWindow(QWidget *parent)
setCentralWidget(d->stack);

// Status bar.
#ifdef MACOSX
d->timeCounter = new QLabel("<small>0:00:00</small>");
#else
d->timeCounter = new QLabel("0:00:00");
#endif
d->currentHost = new QLabel;
statusBar()->addPermanentWidget(d->currentHost);
statusBar()->addPermanentWidget(d->timeCounter);

QToolBar *tools = addToolBar(tr("View"));

d->statusButton = new QToolButton;
d->statusButton->setFocusPolicy(Qt::NoFocus);
d->statusButton->setText(tr("Status"));
d->statusButton->setCheckable(true);
d->statusButton->setChecked(true);
connect(d->statusButton, SIGNAL(pressed()), this, SLOT(switchToStatus()));
tools->addWidget(d->statusButton);

d->consoleButton = new QToolButton;
d->consoleButton->setFocusPolicy(Qt::NoFocus);
d->consoleButton->setText(tr("Console"));
d->consoleButton->setCheckable(true);
connect(d->consoleButton, SIGNAL(pressed()), this, SLOT(switchToConsole()));
Expand All @@ -181,6 +228,7 @@ LinkWindow::LinkWindow(QWidget *parent)

d->root->setOverlaidMessage(tr("Disconnected"));
setTitle(tr("Disconnected"));
d->stopAction->setDisabled(true);
}

LinkWindow::~LinkWindow()
Expand Down Expand Up @@ -238,6 +286,7 @@ void LinkWindow::openConnection(QString address)

setTitle(address);
d->root->setOverlaidMessage(tr("Looking up host..."));
statusBar()->showMessage(tr("Looking up host..."));
d->status->linkConnected(d->link);
d->updateCurrentHost();
d->updateStyle();
Expand All @@ -255,13 +304,8 @@ void LinkWindow::closeConnection()

delete d->link;
d->link = 0;
//d->status->setShellLink(0);

setTitle(tr("Disconnected"));
d->root->setOverlaidMessage(tr("Disconnected"));
d->status->linkDisconnected();
d->updateCurrentHost();
d->updateStyle();
d->disconnected();
}
}

Expand All @@ -283,7 +327,11 @@ void LinkWindow::updateWhenConnected()
if(d->link)
{
TimeDelta elapsed = d->link->connectedAt().since();
#ifdef MACOSX
String time = String("<small>%1:%2:%3</small>")
#else
String time = String("%1:%2:%3")
#endif
.arg(int(elapsed.asHours()))
.arg(int(elapsed.asMinutes()) % 60, 2, 10, QLatin1Char('0'))
.arg(int(elapsed) % 60, 2, 10, QLatin1Char('0'));
Expand Down Expand Up @@ -311,7 +359,7 @@ void LinkWindow::handleIncomingPackets()
LogEntryPacket *pkt = static_cast<LogEntryPacket *>(packet.data());
foreach(LogEntry *e, pkt->entries())
{
d->logBuffer.add(new LogEntry(*e));
d->logBuffer.add(new LogEntry(*e, LogEntry::Remote));
}
break; }

Expand Down Expand Up @@ -356,31 +404,28 @@ void LinkWindow::sendCommandToServer(de::String command)
void LinkWindow::addressResolved()
{
d->root->setOverlaidMessage(tr("Connecting..."));
statusBar()->showMessage(tr("Connecting..."));
d->updateCurrentHost();
}

void LinkWindow::connected()
{
d->root->setOverlaidMessage("");
d->status->linkConnected(d->link);
statusBar()->clearMessage();
updateWhenConnected();
d->stopAction->setEnabled(true);
}

void LinkWindow::disconnected()
{
if(!d->link) return;

d->status->linkDisconnected();

// The link was disconnected.
disconnect(d->link, SIGNAL(packetsReady()), this, SLOT(handleIncomingPackets()));

d->link->deleteLater();
d->link = 0;
//d->status->setShellLink(0);

setTitle(tr("Disconnected"));
d->root->setOverlaidMessage(tr("Disconnected"));
d->updateCurrentHost();
d->updateStyle();
d->disconnected();
}
2 changes: 1 addition & 1 deletion doomsday/tools/shell/shell-gui/src/linkwindow.h
Expand Up @@ -44,13 +44,13 @@ class LinkWindow : public QMainWindow
public slots:
void openConnection(QString address);
void closeConnection();
void sendCommandToServer(de::String command);
void switchToStatus();
void switchToConsole();
void updateWhenConnected();

protected slots:
void handleIncomingPackets();
void sendCommandToServer(de::String command);
void addressResolved();
void connected();
void disconnected();
Expand Down

0 comments on commit 7f77d73

Please sign in to comment.