diff --git a/doomsday/tools/shell/shell-text/shell-text.pro b/doomsday/tools/shell/shell-text/shell-text.pro index d6f1f315b4..17f260d5ec 100644 --- a/doomsday/tools/shell/shell-text/shell-text.pro +++ b/doomsday/tools/shell/shell-text/shell-text.pro @@ -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 \ @@ -43,7 +44,8 @@ SOURCES += \ src/shellapp.cpp \ src/statuswidget.cpp \ src/openconnectiondialog.cpp \ - src/aboutdialog.cpp + src/aboutdialog.cpp \ + src/localserverdialog.cpp # Installation -------------------------------------------------------------- diff --git a/doomsday/tools/shell/shell-text/src/localserverdialog.cpp b/doomsday/tools/shell/shell-text/src/localserverdialog.cpp new file mode 100644 index 0000000000..98a6bc5c4a --- /dev/null +++ b/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 + * + * @par License + * GPL: http://www.gnu.org/licenses/gpl.html + * + * 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 + */ + +#include "localserverdialog.h" +#include +#include +#include +#include +#include + +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); +} diff --git a/doomsday/tools/shell/shell-text/src/localserverdialog.h b/doomsday/tools/shell/shell-text/src/localserverdialog.h new file mode 100644 index 0000000000..ea035cad04 --- /dev/null +++ b/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 + * + * @par License + * GPL: http://www.gnu.org/licenses/gpl.html + * + * 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 + */ + +#ifndef LOCALSERVERDIALOG_H +#define LOCALSERVERDIALOG_H + +#include + +class LocalServerDialog : public de::shell::InputDialog +{ +public: + LocalServerDialog(); + ~LocalServerDialog(); + +protected: + void prepare(); + +private: + struct Instance; + Instance *d; +}; + +#endif // LOCALSERVERDIALOG_H diff --git a/doomsday/tools/shell/shell-text/src/shellapp.cpp b/doomsday/tools/shell/shell-text/src/shellapp.cpp index 4f180d11c6..0c1bca43a4 100644 --- a/doomsday/tools/shell/shell-text/src/shellapp.cpp +++ b/doomsday/tools/shell/shell-text/src/shellapp.cpp @@ -21,6 +21,7 @@ #include "commandlinewidget.h" #include "statuswidget.h" #include "openconnectiondialog.h" +#include "localserverdialog.h" #include "aboutdialog.h" #include #include @@ -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"), @@ -188,6 +189,15 @@ void ShellApp::askToOpenConnection() } } +void ShellApp::askToStartLocalServer() +{ + LocalServerDialog dlg; + if(dlg.exec(rootWidget())) + { + + } +} + void ShellApp::sendCommandToServer(String command) { if(d->link) diff --git a/doomsday/tools/shell/shell-text/src/shellapp.h b/doomsday/tools/shell/shell-text/src/shellapp.h index a817d6a37b..cfab8f6143 100644 --- a/doomsday/tools/shell/shell-text/src/shellapp.h +++ b/doomsday/tools/shell/shell-text/src/shellapp.h @@ -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();