summaryrefslogtreecommitdiff
path: root/src/gui/login.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/login.cpp')
-rw-r--r--src/gui/login.cpp139
1 files changed, 70 insertions, 69 deletions
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);