summaryrefslogtreecommitdiff
path: root/src/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui')
-rw-r--r--src/gui/char_server.cpp93
-rw-r--r--src/gui/char_server.h38
-rw-r--r--src/gui/login.cpp139
-rw-r--r--src/gui/login.h25
4 files changed, 168 insertions, 127 deletions
diff --git a/src/gui/char_server.cpp b/src/gui/char_server.cpp
index df88adc6..e71fdd00 100644
--- a/src/gui/char_server.cpp
+++ b/src/gui/char_server.cpp
@@ -29,11 +29,53 @@
char server[30];
int showServerList = 1;
-ServerListModel *serverListModel;
-gcn::ListBox *serverList;
+ServerSelectDialog::ServerSelectDialog():
+ Window("Select Server")
+{
+ serverListModel = new ServerListModel();
+ serverList = new gcn::ListBox(serverListModel);
+ scrollArea = new gcn::ScrollArea(serverList);
+ okButton = new Button("OK");
+ cancelButton = new Button("Cancel");
+
+ setDimension(gcn::Rectangle(300, 200, 200, 100));
+ scrollArea->setDimension(gcn::Rectangle(4, 4, 192, 55));
+ okButton->setPosition(120, 70);
+ cancelButton->setPosition(146, 70);
+
+ serverList->setEventId("ok");
+ okButton->setEventId("ok");
+ cancelButton->setEventId("cancel");
+
+ serverList->addActionListener(this);
+ okButton->addActionListener(this);
+ cancelButton->addActionListener(this);
+
+ add(scrollArea);
+ add(okButton);
+ add(cancelButton);
+
+ if (n_server == 0) {
+ // Disable Ok button
+ //okButton->char_server_dialog[2].flags |= D_DISABLED;
+ } else {
+ // Select first server
+ serverList->setSelected(1);
+ }
+}
+
+ServerSelectDialog::~ServerSelectDialog()
+{
+ delete serverList;
+ delete serverListModel;
+ delete scrollArea;
+ delete okButton;
+ delete cancelButton;
+}
-void ServerSelectListener::action(const std::string& eventId) {
+void ServerSelectDialog::action(const std::string& eventId)
+{
if (eventId == "ok") {
server_char_server(serverList->getSelected());
}
@@ -56,49 +98,12 @@ std::string ServerListModel::getElementAt(int i) {
void char_server() {
- // Create dialog
- gcn::Container *dialog;
- gcn::Button *okButton;
- gcn::Button *cancelButton;
- gcn::ScrollArea *scrollArea;
-
- serverListModel = new ServerListModel();
- dialog = new Window("Select Server");
- serverList = new gcn::ListBox(serverListModel);
- scrollArea = new gcn::ScrollArea(serverList);
- okButton = new Button("OK");
- cancelButton = new Button("Cancel");
-
- dialog->setDimension(gcn::Rectangle(300, 200, 200, 100));
- scrollArea->setDimension(gcn::Rectangle(4, 4, 192, 55));
- okButton->setPosition(120, 70);
- cancelButton->setPosition(146, 70);
-
- serverList->setEventId("ok");
- okButton->setEventId("ok");
- cancelButton->setEventId("cancel");
-
- ServerSelectListener *actionListener = new ServerSelectListener();
- serverList->addActionListener(actionListener);
- okButton->addActionListener(actionListener);
- cancelButton->addActionListener(actionListener);
-
- dialog->add(scrollArea);
- dialog->add(okButton);
- dialog->add(cancelButton);
+ ServerSelectDialog *dialog = new ServerSelectDialog();
guiTop->add(dialog);
state = LOGIN;
- if (n_server == 0) {
- // Disable Ok button
- //okButton->char_server_dialog[2].flags |= D_DISABLED;
- } else {
- // Select first server
- serverList->setSelected(1);
- }
-
showServerList = 1;
while (showServerList) {
clear_bitmap(buffer);
@@ -108,12 +113,6 @@ void char_server() {
}
delete dialog;
- delete serverList;
- delete serverListModel;
- delete scrollArea;
- delete okButton;
- delete cancelButton;
- delete actionListener;
}
void server_char_server(int serverIndex) {
diff --git a/src/gui/char_server.h b/src/gui/char_server.h
index 2d694ef4..6a11c589 100644
--- a/src/gui/char_server.h
+++ b/src/gui/char_server.h
@@ -26,31 +26,51 @@
#ifndef _CHAR_SEL_SERVER_H
#define _CHAR_SEL_SERVER_H
-#include <allegro.h>
-
#include "../main.h"
#include "../net/network.h"
#include "gui.h"
+#include "window.h"
+
+#include <allegro.h>
+
/**
- * The action listener for the server select dialog.
+ * The list model for the server list.
*
* \ingroup GUI
*/
-class ServerSelectListener : public gcn::ActionListener {
+class ServerListModel : public gcn::ListModel {
public:
- void action(const std::string& eventId);
+ int getNumberOfElements();
+ std::string getElementAt(int i);
};
/**
- * The list model for the server list.
+ * The server select dialog.
*
* \ingroup GUI
*/
-class ServerListModel : public gcn::ListModel {
+class ServerSelectDialog : public Window, public gcn::ActionListener {
public:
- int getNumberOfElements();
- std::string getElementAt(int i);
+ ServerSelectDialog();
+ ~ServerSelectDialog();
+
+ /**
+ * Initializes the dialog. Should be called after adding it to the GUI.
+ */
+ void init();
+
+ /**
+ * Called when receiving actions from the widgets.
+ */
+ void action(const std::string& eventId);
+
+ private:
+ ServerListModel *serverListModel;
+ gcn::ListBox *serverList;
+ gcn::Button *okButton;
+ gcn::Button *cancelButton;
+ gcn::ScrollArea *scrollArea;
};
void char_server();
diff --git a/src/gui/login.cpp b/src/gui/login.cpp
index 32039294..511b45b6 100644
--- a/src/gui/login.cpp
+++ b/src/gui/login.cpp
@@ -25,53 +25,12 @@
#include "gui.h"
#include "button.h"
#include "checkbox.h"
-#include "window.h"
#include "../graphic/graphic.h"
-// Dialog parts
-gcn::Container *dialog;
-gcn::Label *userLabel;
-gcn::Label *passLabel;
-gcn::TextField *userField;
-gcn::TextField *passField;
-gcn::CheckBox *keepCheck;
-gcn::Button *okButton;
-gcn::Button *cancelButton;
-
-void LoginActionListener::action(const std::string& eventId)
-{
- if (eventId == "ok") {
- const std::string user = userField->getText();
- log("Network", "Username is %s", user.c_str());
- // Store config settings
- set_config_int("login", "remember", keepCheck->isMarked());
- if (keepCheck->isMarked()) {
- set_config_string("login", "username", user.c_str());
- } else {
- set_config_string("login", "username", "");
- }
-
- // Check login
- if (user.length() == 0) {
- ok("Error", "Enter your username first");
- warning("Enter your username first");
- state = LOGIN;
- } else {
- server_login(user, passField->getText());
- close_session();
- }
- } else if (eventId == "cancel") {
- state = EXIT;
- }
-}
-
-/*
- * Display login GUI
- */
-void login() {
- // Create dialog
- dialog = new Window("Login");
+LoginDialog::LoginDialog():
+ Window("Login")
+{
userLabel = new gcn::Label("Name:");
passLabel = new gcn::Label("Password:");
userField = new gcn::TextField("player");
@@ -80,7 +39,7 @@ void login() {
okButton = new Button("OK");
cancelButton = new Button("Cancel");
- dialog->setDimension(gcn::Rectangle(300, 250, 200, 80));
+ setDimension(gcn::Rectangle(300, 250, 200, 80));
userLabel->setPosition(4, 11);
passLabel->setPosition(4, 31);
userField->setPosition(60, 10);
@@ -97,23 +56,34 @@ void login() {
okButton->setEventId("ok");
cancelButton->setEventId("cancel");
- LoginActionListener *loginActionListener = new LoginActionListener();
- userField->addActionListener(loginActionListener);
- passField->addActionListener(loginActionListener);
- keepCheck->addActionListener(loginActionListener);
- okButton->addActionListener(loginActionListener);
- cancelButton->addActionListener(loginActionListener);
-
- dialog->add(userLabel);
- dialog->add(passLabel);
- dialog->add(userField);
- dialog->add(passField);
- dialog->add(keepCheck);
- dialog->add(okButton);
- dialog->add(cancelButton);
+ userField->addActionListener(this);
+ passField->addActionListener(this);
+ keepCheck->addActionListener(this);
+ okButton->addActionListener(this);
+ cancelButton->addActionListener(this);
+
+ add(userLabel);
+ add(passLabel);
+ add(userField);
+ add(passField);
+ add(keepCheck);
+ add(okButton);
+ add(cancelButton);
+}
- guiTop->add(dialog);
+LoginDialog::~LoginDialog()
+{
+ delete userLabel;
+ delete passLabel;
+ delete userField;
+ delete passField;
+ delete keepCheck;
+ delete okButton;
+ delete cancelButton;
+}
+void LoginDialog::init()
+{
userField->requestFocus();
userField->setCaretPosition(userField->getText().length());
@@ -123,6 +93,43 @@ void login() {
passField->requestFocus();
}
}
+}
+
+void LoginDialog::action(const std::string& eventId)
+{
+ if (eventId == "ok") {
+ const std::string user = userField->getText();
+ log("Network", "Username is %s", user.c_str());
+
+ // Store config settings
+ set_config_int("login", "remember", keepCheck->isMarked());
+ if (keepCheck->isMarked()) {
+ set_config_string("login", "username", user.c_str());
+ } else {
+ set_config_string("login", "username", "");
+ }
+
+ // Check login
+ if (user.length() == 0) {
+ ok("Error", "Enter your username first");
+ warning("Enter your username first");
+ state = LOGIN;
+ } else {
+ server_login(user, passField->getText());
+ close_session();
+ }
+ } else if (eventId == "cancel") {
+ state = EXIT;
+ }
+}
+
+/**
+ * Display login dialog
+ */
+void login() {
+ LoginDialog *dialog = new LoginDialog();
+ guiTop->add(dialog);
+ dialog->init();
while (state == LOGIN) {
clear_bitmap(buffer);
@@ -135,17 +142,11 @@ void login() {
}
delete dialog;
- delete userLabel;
- delete passLabel;
- delete userField;
- delete passField;
- delete keepCheck;
- delete okButton;
- delete cancelButton;
- delete loginActionListener;
}
-/** Attempt to login to login server */
+/**
+ * Attempt to login to login server
+ */
void server_login(const std::string& user, const std::string& pass) {
strncpy(username, user.c_str(), LEN_USERNAME);
strncpy(password, pass.c_str(), LEN_PASSWORD);
diff --git a/src/gui/login.h b/src/gui/login.h
index 7cafb47f..725e578c 100644
--- a/src/gui/login.h
+++ b/src/gui/login.h
@@ -30,19 +30,40 @@
#include "../log.h"
#include "../net/network.h"
#include "gui.h"
+#include "window.h"
#include <allegro.h>
#ifdef WIN32
#include <winalleg.h>
#endif
/**
- * The action listener for the login dialog.
+ * The login dialog.
*
* \ingroup GUI
*/
-class LoginActionListener : public gcn::ActionListener {
+class LoginDialog : public Window, public gcn::ActionListener {
public:
+ LoginDialog();
+ ~LoginDialog();
+
+ /**
+ * Initializes the dialog. Should be called after adding it to the GUI.
+ */
+ void init();
+
+ /**
+ * Called when receiving actions from the widgets.
+ */
void action(const std::string& eventId);
+
+ private:
+ gcn::Label *userLabel;
+ gcn::Label *passLabel;
+ gcn::TextField *userField;
+ gcn::TextField *passField;
+ gcn::CheckBox *keepCheck;
+ gcn::Button *okButton;
+ gcn::Button *cancelButton;
};
void login();