Skip to content

Commit

Permalink
Shell: Added dialog for starting a local server
Browse files Browse the repository at this point in the history
  • Loading branch information
skyjake committed Feb 3, 2013
1 parent 17c2943 commit 46745e5
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 3 deletions.
6 changes: 4 additions & 2 deletions doomsday/tools/shell/shell-text/shell-text.pro
Expand Up @@ -32,7 +32,8 @@ HEADERS += \
src/shellapp.h \
src/statuswidget.h \
src/openconnectiondialog.h \
src/aboutdialog.h
src/aboutdialog.h \
src/localserverdialog.h

SOURCES += \
src/commandlinewidget.cpp \
Expand All @@ -43,7 +44,8 @@ SOURCES += \
src/shellapp.cpp \
src/statuswidget.cpp \
src/openconnectiondialog.cpp \
src/aboutdialog.cpp
src/aboutdialog.cpp \
src/localserverdialog.cpp

# Installation --------------------------------------------------------------

Expand Down
116 changes: 116 additions & 0 deletions doomsday/tools/shell/shell-text/src/localserverdialog.cpp
@@ -0,0 +1,116 @@
/** @file localserverdialog.cpp Dialog for starting a local server.
*
* @authors Copyright © 2013 Jaakko Keränen <jaakko.keranen@iki.fi>
*
* @par License
* GPL: http://www.gnu.org/licenses/gpl.html
*
* <small>This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. This program is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with this program; if not, see:
* http://www.gnu.org/licenses</small>
*/

#include "localserverdialog.h"
#include <de/shell/TextRootWidget>
#include <de/shell/LabelWidget>
#include <de/shell/MenuWidget>
#include <de/shell/ChoiceWidget>
#include <de/shell/LineEditWidget>

using namespace de;
using namespace de::shell;

struct LocalServerDialog::Instance
{
ChoiceWidget *choice;
};

static struct
{
char const *name;
char const *mode;
}
gameModes[] =
{
{ "None", "" },

{ "Shareware DOOM", "doom1-share" },
{ "DOOM", "doom1" },
{ "Ultimate DOOM", "doom1-ultimate" },
{ "DOOM II", "doom2" },
{ "Final DOOM: Plutonia Experiment", "doom2-plut" },
{ "Final DOOM: TNT Evilution", "doom2-tnt" },
{ "Chex Quest", "chex" },
{ "HacX", "hacx" },

{ "Shareware Heretic", "heretic-share" },
{ "Heretic", "heretic" },
{ "Heretic: Shadow of the Serpent Riders", "heretic-ext" },

{ "Hexen v1.1", "hexen" },
{ "Hexen v1.0", "hexen-v10" },
{ "Hexen: Death Kings of Dark Citadel", "hexen-dk" },
{ "Hexen Demo", "hexen-demo" },

{ 0, 0 }
};

LocalServerDialog::LocalServerDialog() : d(new Instance)
{
d->choice = new ChoiceWidget(String("#%1.choice").arg(id()));

ChoiceWidget::Items modes;
for(int i = 0; gameModes[i].name; ++i)
{
modes << gameModes[i].name;
}
d->choice->setItems(modes);
d->choice->setPrompt(tr("Game mode: "));
d->choice->setBackground(TextCanvas::Char(' ', TextCanvas::Char::Reverse));

setFocusCycle(WidgetList()
<< d->choice
<< &lineEdit()
<< &menu());

add(d->choice);

d->choice->rule()
.setInput(RuleRectangle::Height, Const(1))
.setInput(RuleRectangle::Width, rule().width())
.setInput(RuleRectangle::Left, rule().left())
.setInput(RuleRectangle::Top, label().rule().bottom() + 1);

lineEdit().rule()
.setInput(RuleRectangle::Top, d->choice->rule().bottom() + 1);

rule().setInput(RuleRectangle::Height,
label().rule().height() +
d->choice->rule().height() +
lineEdit().rule().height() +
menu().rule().height() + 3);

setDescription(tr("Specify the settings for starting a new local server."));

setPrompt(tr("Options: "));

setAcceptLabel(tr("Start local server"));
}

LocalServerDialog::~LocalServerDialog()
{
delete d;
}

void LocalServerDialog::prepare()
{
InputDialog::prepare();

root().setFocus(d->choice);
}
38 changes: 38 additions & 0 deletions doomsday/tools/shell/shell-text/src/localserverdialog.h
@@ -0,0 +1,38 @@
/** @file localserverdialog.h Dialog for starting a local server.
*
* @authors Copyright © 2013 Jaakko Keränen <jaakko.keranen@iki.fi>
*
* @par License
* GPL: http://www.gnu.org/licenses/gpl.html
*
* <small>This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version. This program is distributed in the hope that it
* will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
* Public License for more details. You should have received a copy of the GNU
* General Public License along with this program; if not, see:
* http://www.gnu.org/licenses</small>
*/

#ifndef LOCALSERVERDIALOG_H
#define LOCALSERVERDIALOG_H

#include <de/shell/InputDialog>

class LocalServerDialog : public de::shell::InputDialog
{
public:
LocalServerDialog();
~LocalServerDialog();

protected:
void prepare();

private:
struct Instance;
Instance *d;
};

#endif // LOCALSERVERDIALOG_H
12 changes: 11 additions & 1 deletion doomsday/tools/shell/shell-text/src/shellapp.cpp
Expand Up @@ -21,6 +21,7 @@
#include "commandlinewidget.h"
#include "statuswidget.h"
#include "openconnectiondialog.h"
#include "localserverdialog.h"
#include "aboutdialog.h"
#include <de/shell/LabelWidget>
#include <de/shell/MenuWidget>
Expand Down Expand Up @@ -93,7 +94,7 @@ struct ShellApp::Instance
&self, SLOT(askToOpenConnection())), "O");
menu->appendItem(new Action(tr("Disconnect"), &self, SLOT(closeConnection())));
menu->appendSeparator();
menu->appendItem(new Action(tr("Start new server")));
menu->appendItem(new Action(tr("Start new server"), &self, SLOT(askToStartLocalServer())));
menu->appendSeparator();
menu->appendItem(new Action(tr("About"), &self, SLOT(showAbout())));
menu->appendItem(new Action(tr("Quit Shell"),
Expand Down Expand Up @@ -188,6 +189,15 @@ void ShellApp::askToOpenConnection()
}
}

void ShellApp::askToStartLocalServer()
{
LocalServerDialog dlg;
if(dlg.exec(rootWidget()))
{

}
}

void ShellApp::sendCommandToServer(String command)
{
if(d->link)
Expand Down
1 change: 1 addition & 0 deletions doomsday/tools/shell/shell-text/src/shellapp.h
Expand Up @@ -36,6 +36,7 @@ class ShellApp : public CursesApp
public slots:
void showAbout();
void askToOpenConnection();
void askToStartLocalServer();
void closeConnection();
void sendCommandToServer(de::String command);
void handleIncomingPackets();
Expand Down

0 comments on commit 46745e5

Please sign in to comment.