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; } }
TextPrompt::TextPrompt(std::string title, std::string message, std::string text, std::string placeholder, bool multiline, TextDialogueCallback * callback_): ui::Window(ui::Point(-1, -1), ui::Point(200, 65)), callback(callback_) { if(multiline) Size.X += 100; ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 18), title); titleLabel->SetTextColour(style::Colour::WarningTitle); titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(titleLabel); ui::Label * messageLabel = new ui::Label(ui::Point(4, 25), ui::Point(Size.X-8, -1), message); messageLabel->SetMultiline(true); messageLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; messageLabel->Appearance.VerticalAlign = ui::Appearance::AlignTop; AddComponent(messageLabel); Size.Y += messageLabel->Size.Y+4; textField = new ui::Textbox(ui::Point(4, messageLabel->Position.Y + messageLabel->Size.Y + 7), ui::Point(Size.X-8, 16), text, placeholder); if(multiline) { textField->SetMultiline(true); textField->Size.Y = 60; Size.Y += 45; textField->Appearance.VerticalAlign = ui::Appearance::AlignTop; } else { textField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; } textField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(textField); FocusComponent(textField); ui::Button * cancelButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point((Size.X/2)+1, 16), "Cancel"); cancelButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; cancelButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; cancelButton->Appearance.BorderInactive = ui::Colour(200, 200, 200); cancelButton->SetActionCallback(new CloseAction(this, ResultCancel)); AddComponent(cancelButton); SetCancelButton(cancelButton); ui::Button * okayButton = new ui::Button(ui::Point(Size.X/2, Size.Y-16), ui::Point(Size.X/2, 16), "Okay"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignRight; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; okayButton->Appearance.TextInactive = style::Colour::WarningTitle; okayButton->SetActionCallback(new CloseAction(this, ResultOkay)); AddComponent(okayButton); SetOkayButton(okayButton); ui::Engine::Ref().ShowWindow(this); }
PropertyWindow::PropertyWindow(PropertyTool * tool_, Simulation *sim_): ui::Window(ui::Point(-1, -1), ui::Point(200, 87)), tool(tool_), sim(sim_) { properties = Particle::GetProperties(); ui::Label * messageLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 14), "Edit property"); messageLabel->SetTextColour(style::Colour::InformationTitle); messageLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; messageLabel->Appearance.VerticalAlign = ui::Appearance::AlignTop; AddComponent(messageLabel); ui::Button * okayButton = new ui::Button(ui::Point(0, Size.Y-17), ui::Point(Size.X, 17), "OK"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; okayButton->Appearance.BorderInactive = ui::Colour(200, 200, 200); okayButton->SetActionCallback(new OkayAction(this)); AddComponent(okayButton); SetOkayButton(okayButton); class PropertyChanged: public ui::DropDownAction { PropertyWindow * w; public: PropertyChanged(PropertyWindow * w): w(w) { } void OptionChanged(ui::DropDown * sender, std::pair<String, int> option) override { w->FocusComponent(w->textField); } }; property = new ui::DropDown(ui::Point(8, 25), ui::Point(Size.X-16, 17)); property->SetActionCallback(new PropertyChanged(this)); AddComponent(property); for (size_t i = 0; i < properties.size(); i++) { property->AddOption(std::pair<String, int>(properties[i].Name.FromAscii(), i)); } property->SetOption(Client::Ref().GetPrefInteger("Prop.Type", 0)); textField = new ui::Textbox(ui::Point(8, 46), ui::Point(Size.X-16, 16), "", "[value]"); textField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; textField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; textField->SetText(Client::Ref().GetPrefString("Prop.Value", "")); AddComponent(textField); FocusComponent(textField); MakeActiveWindow(); }
void PreviewView::submitComment() { if(addCommentBox) { std::string comment = std::string(addCommentBox->GetText()); submitCommentButton->Enabled = false; addCommentBox->SetText(""); addCommentBox->SetPlaceholder("Submitting comment"); FocusComponent(NULL); c->SubmitComment(comment); addCommentBox->SetPlaceholder("Add comment"); submitCommentButton->Enabled = true; } }
FileBrowserActivity::FileBrowserActivity(ByteString directory, FileSelectedCallback * callback): WindowActivity(ui::Point(-1, -1), ui::Point(450, 300)), callback(callback), directory(directory), totalFiles(0) { ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 18), "Save Browser"); titleLabel->SetTextColour(style::Colour::WarningTitle); titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(titleLabel); ui::Textbox * textField = new ui::Textbox(ui::Point(8, 25), ui::Point(Size.X-16, 16), "", "[search]"); textField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; textField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; textField->SetActionCallback(new SearchAction(this)); AddComponent(textField); FocusComponent(textField); itemList = new ui::ScrollPanel(ui::Point(4, 45), ui::Point(Size.X-8, Size.Y-53)); itemList->Visible = false; AddComponent(itemList); progressBar = new ui::ProgressBar(ui::Point((Size.X-200)/2, 45+(Size.Y-66)/2), ui::Point(200, 17)); AddComponent(progressBar); infoText = new ui::Label(ui::Point((Size.X-200)/2, 45+(Size.Y-66)/2), ui::Point(200, 17), "No saves found"); AddComponent(infoText); filesX = 4; filesY = 3; buttonPadding = 2; fileX = 0; fileY = 0; buttonXOffset = 0; buttonYOffset = 0; buttonAreaWidth = itemList->Size.X; buttonAreaHeight = itemList->Size.Y;// - buttonYOffset - 18; buttonWidth = (buttonAreaWidth/filesX) - buttonPadding*2; buttonHeight = (buttonAreaHeight/filesY) - buttonPadding*2; loadDirectory(directory, ""); }
void PreviewView::submitComment() { if(addCommentBox) { std::string comment = std::string(addCommentBox->GetText()); submitCommentButton->Enabled = false; addCommentBox->SetText(""); addCommentBox->SetPlaceholder("Submitting comment"); //This doesn't appear to ever show since no separate thread is created FocusComponent(NULL); if (!c->SubmitComment(comment)) addCommentBox->SetText(comment); addCommentBox->SetPlaceholder("Add comment"); submitCommentButton->Enabled = true; commentBoxAutoHeight(); } }
LocalSaveActivity::LocalSaveActivity(SaveFile save, FileSavedCallback * callback) : WindowActivity(ui::Point(-1, -1), ui::Point(220, 200)), save(save), thumbnailRenderer(nullptr), callback(callback) { ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 16), "Save to computer:"); titleLabel->SetTextColour(style::Colour::InformationTitle); titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(titleLabel); filenameField = new ui::Textbox(ui::Point(8, 25), ui::Point(Size.X-16, 16), save.GetDisplayName(), "[filename]"); filenameField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; filenameField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(filenameField); FocusComponent(filenameField); ui::Button * cancelButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(Size.X-75, 16), "Cancel"); cancelButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; cancelButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; cancelButton->Appearance.BorderInactive = ui::Colour(200, 200, 200); cancelButton->SetActionCallback(new CancelAction(this)); AddComponent(cancelButton); SetCancelButton(cancelButton); ui::Button * okayButton = new ui::Button(ui::Point(Size.X-76, Size.Y-16), ui::Point(76, 16), "Save"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; okayButton->Appearance.TextInactive = style::Colour::InformationTitle; okayButton->SetActionCallback(new SaveAction(this)); AddComponent(okayButton); SetOkayButton(okayButton); if(save.GetGameSave()) { thumbnailRenderer = new ThumbnailRendererTask(save.GetGameSave(), Size.X-16, -1, false, true, false); thumbnailRenderer->Start(); } }
ConsoleView::ConsoleView(): ui::Window(ui::Point(0, 0), ui::Point(WINDOWW, 150)), commandField(NULL) { class CommandHighlighter: public ui::TextboxAction { ConsoleView * v; public: CommandHighlighter(ConsoleView * v_) { v = v_; } virtual void TextChangedCallback(ui::Textbox * sender) { sender->SetDisplayText(v->c->FormatCommand(sender->GetText())); } }; commandField = new ui::Textbox(ui::Point(7, Size.Y-16), ui::Point(Size.X, 16), ""); commandField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; commandField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; commandField->SetActionCallback(new CommandHighlighter(this)); AddComponent(commandField); FocusComponent(commandField); commandField->SetBorder(false); }
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), "Cancel")), 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); SetCancelButton(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); }
ServerSaveActivity::ServerSaveActivity(SaveInfo save, ServerSaveActivity::SaveUploadedCallback * callback) : WindowActivity(ui::Point(-1, -1), ui::Point(440, 200)), thumbnail(NULL), save(save), callback(callback), saveUploadTask(NULL) { titleLabel = new ui::Label(ui::Point(4, 5), ui::Point((Size.X/2)-8, 16), ""); titleLabel->SetTextColour(style::Colour::InformationTitle); titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(titleLabel); CheckName(save.GetName()); //set titleLabel text ui::Label * previewLabel = new ui::Label(ui::Point((Size.X/2)+4, 5), ui::Point((Size.X/2)-8, 16), "Preview:"); previewLabel->SetTextColour(style::Colour::InformationTitle); previewLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; previewLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(previewLabel); nameField = new ui::Textbox(ui::Point(8, 25), ui::Point((Size.X/2)-16, 16), save.GetName(), "[save name]"); nameField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; nameField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; nameField->SetActionCallback(new NameChangedAction(this)); AddComponent(nameField); FocusComponent(nameField); descriptionField = new ui::Textbox(ui::Point(8, 65), ui::Point((Size.X/2)-16, Size.Y-(65+16+4)), save.GetDescription(), "[save description]"); descriptionField->SetMultiline(true); descriptionField->SetLimit(254); descriptionField->Appearance.VerticalAlign = ui::Appearance::AlignTop; descriptionField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(descriptionField); publishedCheckbox = new ui::Checkbox(ui::Point(8, 45), ui::Point((Size.X/2)-80, 16), "Publish", ""); if(Client::Ref().GetAuthUser().Username != save.GetUserName()) { //Save is not owned by the user, disable by default publishedCheckbox->SetChecked(false); } else { //Save belongs to the current user, use published state already set publishedCheckbox->SetChecked(save.GetPublished()); } AddComponent(publishedCheckbox); pausedCheckbox = new ui::Checkbox(ui::Point(160, 45), ui::Point(55, 16), "Paused", ""); pausedCheckbox->SetChecked(save.GetGameSave()->paused); AddComponent(pausedCheckbox); ui::Button * cancelButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point((Size.X/2)-75, 16), "Cancel"); cancelButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; cancelButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; cancelButton->Appearance.BorderInactive = ui::Colour(200, 200, 200); cancelButton->SetActionCallback(new CancelAction(this)); AddComponent(cancelButton); SetCancelButton(cancelButton); ui::Button * okayButton = new ui::Button(ui::Point((Size.X/2)-76, Size.Y-16), ui::Point(76, 16), "Save"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; okayButton->Appearance.TextInactive = style::Colour::InformationTitle; okayButton->SetActionCallback(new SaveAction(this)); AddComponent(okayButton); SetOkayButton(okayButton); ui::Button * PublishingInfoButton = new ui::Button(ui::Point((Size.X*3/4)-75, Size.Y-42), ui::Point(150, 16), "Publishing Info"); PublishingInfoButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; PublishingInfoButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; PublishingInfoButton->Appearance.TextInactive = style::Colour::InformationTitle; PublishingInfoButton->SetActionCallback(new PublishingAction(this)); AddComponent(PublishingInfoButton); ui::Button * RulesButton = new ui::Button(ui::Point((Size.X*3/4)-75, Size.Y-22), ui::Point(150, 16), "Save Uploading Rules"); RulesButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; RulesButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; RulesButton->Appearance.TextInactive = style::Colour::InformationTitle; RulesButton->SetActionCallback(new RulesAction(this)); AddComponent(RulesButton); if(save.GetGameSave()) RequestBroker::Ref().RenderThumbnail(save.GetGameSave(), false, true, (Size.X/2)-16, -1, this); }
ElementSearchActivity::ElementSearchActivity(GameController * gameController, std::vector<Tool*> tools) : WindowActivity(ui::Point(-1, -1), ui::Point(236, 302)), firstResult(NULL), gameController(gameController), tools(tools), exit(false) { ui::Label * title = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 15), "Element Search"); title->SetTextColour(style::Colour::InformationTitle); title->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(title); class SearchAction : public ui::TextboxAction { private: ElementSearchActivity * a; public: SearchAction(ElementSearchActivity * a) : a(a) {} virtual void TextChangedCallback(ui::Textbox * sender) { a->searchTools(sender->GetText()); } }; searchField = new ui::Textbox(ui::Point(8, 23), ui::Point(Size.X-16, 17), ""); searchField->SetActionCallback(new SearchAction(this)); searchField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; AddComponent(searchField); FocusComponent(searchField); class CloseAction: public ui::ButtonAction { ElementSearchActivity * a; public: CloseAction(ElementSearchActivity * a) : a(a) { } void ActionCallback(ui::Button * sender_) { a->exit = true; } }; class OKAction: public ui::ButtonAction { ElementSearchActivity * a; public: OKAction(ElementSearchActivity * a) : a(a) { } void ActionCallback(ui::Button * sender_) { if(a->GetFirstResult()) a->SetActiveTool(0, a->GetFirstResult()); } }; ui::Button * closeButton = new ui::Button(ui::Point(0, Size.Y-15), ui::Point((Size.X/2)+1, 15), "Close"); closeButton->SetActionCallback(new CloseAction(this)); ui::Button * okButton = new ui::Button(ui::Point(Size.X/2, Size.Y-15), ui::Point(Size.X/2, 15), "OK"); okButton->SetActionCallback(new OKAction(this)); AddComponent(okButton); AddComponent(closeButton); searchTools(""); }
SignWindow::SignWindow(SignTool * tool_, Simulation * sim_, int signID_, ui::Point position_): ui::Window(ui::Point(-1, -1), ui::Point(250, 87)), tool(tool_), movingSign(NULL), signMoving(false), sim(sim_), signID(signID_), signPosition(position_) { ui::Label * messageLabel = new ui::Label(ui::Point(4, 5), ui::Point(Size.X-8, 15), "New sign"); messageLabel->SetTextColour(style::Colour::InformationTitle); messageLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; messageLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(messageLabel); ui::Button * okayButton = new ui::Button(ui::Point(0, Size.Y-16), ui::Point(Size.X, 16), "OK"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; okayButton->Appearance.BorderInactive = (ui::Colour(200, 200, 200)); okayButton->SetActionCallback(new OkayAction(this)); AddComponent(okayButton); SetOkayButton(okayButton); ui::Label * tempLabel = new ui::Label(ui::Point(8, 48), ui::Point(40, 15), "Pointer:"); okayButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; okayButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; AddComponent(tempLabel); justification = new ui::DropDown(ui::Point(52, 48), ui::Point(50, 16)); AddComponent(justification); justification->AddOption(std::pair<String, int>(0xE020 + String(" Left"), (int)sign::Left)); justification->AddOption(std::pair<String, int>(0xE01E + String(" Middle"), (int)sign::Middle)); justification->AddOption(std::pair<String, int>(0xE01F + String(" Right"), (int)sign::Right)); justification->AddOption(std::pair<String, int>(0xE01D + String(" None"), (int)sign::None)); justification->SetOption(1); justification->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; textField = new ui::Textbox(ui::Point(8, 25), ui::Point(Size.X-16, 17), "", "[message]"); textField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; textField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; textField->SetLimit(45); textField->SetActionCallback(new SignTextAction(this)); AddComponent(textField); FocusComponent(textField); if(signID!=-1) { messageLabel->SetText("Edit sign"); textField->SetText(sim->signs[signID].text); justification->SetOption(sim->signs[signID].ju); ui::Point position = ui::Point(justification->Position.X+justification->Size.X+3, 48); ui::Button * moveButton = new ui::Button(position, ui::Point(((Size.X-position.X-8)/2)-2, 16), "Move"); moveButton->SetActionCallback(new MoveAction(this)); AddComponent(moveButton); position = ui::Point(justification->Position.X+justification->Size.X+3, 48)+ui::Point(moveButton->Size.X+3, 0); ui::Button * deleteButton = new ui::Button(position, ui::Point((Size.X-position.X-8)-1, 16), "Delete"); //deleteButton->SetIcon(IconDelete); deleteButton->SetActionCallback(new DeleteAction(this)); signPosition.X = sim->signs[signID].x; signPosition.Y = sim->signs[signID].y; AddComponent(deleteButton); } MakeActiveWindow(); }