summaryrefslogtreecommitdiff
path: root/src/gui/login/LoginView.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-03-24 12:24:17 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-03-24 12:24:17 (GMT)
commit9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d (patch)
treeac7d040253b459ce102e476cb19ab59e3cfa90d7 /src/gui/login/LoginView.cpp
parent6bf98ccdca39936a3c51367862eed7c49f8786ec (diff)
parentbdc69f31c0be94191015838886bdcc2bc67f1acb (diff)
downloadpowder-9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d.zip
powder-9b5b85f9b01cbda7ef9a7ec2a15b2a35630a5b9d.tar.gz
Merge branch 'reorganisation' of github.com:FacialTurd/The-Powder-Toy
Diffstat (limited to 'src/gui/login/LoginView.cpp')
-rw-r--r--src/gui/login/LoginView.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/src/gui/login/LoginView.cpp b/src/gui/login/LoginView.cpp
new file mode 100644
index 0000000..8ebbeb5
--- /dev/null
+++ b/src/gui/login/LoginView.cpp
@@ -0,0 +1,148 @@
+#include "LoginView.h"
+
+#include "gui/interface/Button.h"
+#include "gui/interface/Label.h"
+#include "gui/interface/Textbox.h"
+#include "gui/interface/Keys.h"
+#include "gui/Style.h"
+
+class LoginView::LoginAction : public ui::ButtonAction
+{
+ LoginView * v;
+public:
+ LoginAction(LoginView * _v) { v = _v; }
+ void ActionCallback(ui::Button * sender)
+ {
+ v->c->Login(v->usernameField->GetText(), v->passwordField->GetText());
+ }
+};
+
+class LoginView::CancelAction : public ui::ButtonAction
+{
+ LoginView * v;
+public:
+ CancelAction(LoginView * _v) { v = _v; }
+ void ActionCallback(ui::Button * sender)
+ {
+ v->c->Exit();
+ }
+};
+
+LoginView::LoginView():
+ ui::Window(ui::Point(-1, -1), ui::Point(200, 87)),
+ loginButton(new ui::Button(ui::Point(200-100, 87-17), ui::Point(100, 17), "Sign in")),
+ cancelButton(new ui::Button(ui::Point(0, 87-17), ui::Point(101, 17), "Sign Out")),
+ titleLabel(new ui::Label(ui::Point(4, 5), ui::Point(200-16, 16), "Server login")),
+ usernameField(new ui::Textbox(ui::Point(8, 25), ui::Point(200-16, 17), Client::Ref().GetAuthUser().Username, "[username]")),
+ passwordField(new ui::Textbox(ui::Point(8, 46), ui::Point(200-16, 17), "", "[password]")),
+ infoLabel(new ui::Label(ui::Point(8, 67), ui::Point(200-16, 16), "")),
+ targetSize(0, 0)
+{
+ targetSize = Size;
+ FocusComponent(usernameField);
+
+ infoLabel->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; infoLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ infoLabel->Visible = false;
+ AddComponent(infoLabel);
+
+ AddComponent(loginButton);
+ SetOkayButton(loginButton);
+ loginButton->Appearance.HorizontalAlign = ui::Appearance::AlignRight;
+ loginButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ loginButton->Appearance.TextInactive = style::Colour::ConfirmButton;
+ loginButton->SetActionCallback(new LoginAction(this));
+ AddComponent(cancelButton);
+ cancelButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft;
+ cancelButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ cancelButton->SetActionCallback(new CancelAction(this));
+ AddComponent(titleLabel);
+ titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+
+ AddComponent(usernameField);
+ usernameField->Appearance.icon = IconUsername;
+ usernameField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; usernameField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ AddComponent(passwordField);
+ passwordField->Appearance.icon = IconPassword;
+ passwordField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; passwordField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
+ passwordField->SetHidden(true);
+}
+
+void LoginView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool alt)
+{
+ switch(key)
+ {
+ case KEY_TAB:
+ if(IsFocused(usernameField))
+ FocusComponent(passwordField);
+ else
+ FocusComponent(usernameField);
+ break;
+ }
+}
+
+void LoginView::OnTryExit(ExitMethod method)
+{
+ ui::Engine::Ref().CloseWindow();
+}
+
+void LoginView::NotifyStatusChanged(LoginModel * sender)
+{
+ if(!infoLabel->GetText().length() && sender->GetStatusText().length())
+ {
+ targetSize = Size+ui::Point(0, 18);
+ infoLabel->Visible = true;
+ }
+ infoLabel->SetText(sender->GetStatusText());
+ if(sender->GetStatus())
+ {
+ c->Exit();
+ }
+}
+
+void LoginView::OnTick(float dt)
+{
+ //if(targetSize != Size)
+ {
+ ui::Point difference = targetSize-Size;
+ if(difference.X!=0)
+ {
+ int xdiff = difference.X/5;
+ if(xdiff == 0)
+ xdiff = 1*isign(difference.X);
+ Size.X += xdiff;
+ }
+ if(difference.Y!=0)
+ {
+ int ydiff = difference.Y/5;
+ if(ydiff == 0)
+ ydiff = 1*isign(difference.Y);
+ Size.Y += ydiff;
+ }
+
+ loginButton->Position.Y = Size.Y-17;
+ cancelButton->Position.Y = Size.Y-17;
+ }
+}
+
+void LoginView::OnDraw()
+{
+ Graphics * g = ui::Engine::Ref().g;
+ g->clearrect(Position.X-2, Position.Y-2, Size.X+3, Size.Y+3);
+ g->drawrect(Position.X, Position.Y, Size.X, Size.Y, 255, 255, 255, 255);
+}
+
+LoginView::~LoginView() {
+ RemoveComponent(titleLabel);
+ RemoveComponent(loginButton);
+ RemoveComponent(cancelButton);
+ RemoveComponent(usernameField);
+ RemoveComponent(passwordField);
+ RemoveComponent(infoLabel);
+ delete cancelButton;
+ delete loginButton;
+ delete titleLabel;
+ delete usernameField;
+ delete passwordField;
+ delete infoLabel;
+}
+