diff --git a/src/gui/dialogues/SaveIDMessage.cpp b/src/gui/dialogues/SaveIDMessage.cpp new file mode 100644 index 000000000..efeda0f90 --- /dev/null +++ b/src/gui/dialogues/SaveIDMessage.cpp @@ -0,0 +1,124 @@ +#include "gui/Style.h" +#include "SaveIDMessage.h" +#include "gui/interface/Button.h" +#include "gui/interface/Label.h" +#include "PowderToy.h" + +class CopyTextButton : public ui::Button +{ + ui::Label *copyTextLabel; +public: + CopyTextButton(ui::Point position, ui::Point size, std::string buttonText, ui::Label *copyTextLabel_): + Button(position, size, buttonText) + { + copyTextLabel = copyTextLabel_; + } + + virtual void OnMouseClick(int x, int y, unsigned int button) + { + ui::Button::OnMouseClick(x, y, button); + ClipboardPush((char*)ButtonText.c_str()); + + int textWidth = Graphics::textwidth("Copied!"); + copyTextLabel->SetText("Copied!"); + copyTextLabel->Position = ui::Point(Position.X+(Size.X-textWidth)/2-4, copyTextLabel->Position.Y); + copyTextLabel->Size = ui::Point(textWidth+20, 16); + + Appearance.TextInactive = ui::Colour(180, 230, 180); + Appearance.TextHover = ui::Colour(180, 230, 180); + Appearance.BorderInactive = ui::Colour(180, 230, 180); + Appearance.BorderHover = ui::Colour(180, 230, 180); + + //Appearance.TextActive = ui::Colour(230, 255, 230); + //Appearance.BorderActive = ui::Colour(230, 255, 230); + } + + virtual void OnMouseEnter(int x, int y) + { + ui::Button::OnMouseEnter(x, y); + copyTextLabel->SetTextColour(ui::Colour(230, 230, 230)); + } + + virtual void OnMouseLeave(int x, int y) + { + ui::Button::OnMouseLeave(x, y); + copyTextLabel->SetTextColour(ui::Colour(150, 150, 150)); + } +}; + +SaveIDMessage::SaveIDMessage(int id): + ui::Window(ui::Point((XRES-244)/2, (YRES-90)/2), ui::Point(244, 90)) +{ + int textWidth = Graphics::textwidth("Save ID"); + ui::Label * titleLabel = new ui::Label(ui::Point(4, 5), ui::Point(textWidth+20, 16), "Save ID"); + titleLabel->SetTextColour(style::Colour::InformationTitle); + titleLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + titleLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; + AddComponent(titleLabel); + + textWidth = Graphics::textwidth("Saved Successfully!"); + ui::Label * messageLabel = new ui::Label(ui::Point(4, 24), ui::Point(textWidth+20, 16), "Saved Successfully!"); + messageLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + messageLabel->Appearance.VerticalAlign = ui::Appearance::AlignTop; + AddComponent(messageLabel); + + textWidth = Graphics::textwidth("Click the box below to copy the save ID"); + ui::Label * copyTextLabel = new ui::Label(ui::Point((Size.X-textWidth-20)/2, 35), ui::Point(textWidth+20, 16), "Click the box below to copy the save id"); + copyTextLabel->SetTextColour(ui::Colour(150, 150, 150)); + copyTextLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + copyTextLabel->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; + AddComponent(copyTextLabel); + + std::stringstream saveID; + saveID << id; + textWidth = Graphics::textwidth(saveID.str().c_str()); + CopyTextButton * copyTextButton = new CopyTextButton(ui::Point((Size.X-textWidth-10)/2, 50), ui::Point(textWidth+8, 18), saveID.str(), copyTextLabel); + copyTextButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; + copyTextButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; + copyTextButton->Appearance.TextInactive = ui::Colour(150, 150, 150); + copyTextButton->Appearance.TextActive = ui::Colour(230, 255, 230); + copyTextButton->Appearance.BorderActive = ui::Colour(230, 255, 230); + copyTextButton->Appearance.BackgroundActive = style::Colour::InactiveBackground; + AddComponent(copyTextButton); + + class DismissAction: public ui::ButtonAction + { + SaveIDMessage * message; + public: + DismissAction(SaveIDMessage * message_) { message = message_; } + void ActionCallback(ui::Button * sender) + { + ui::Engine::Ref().CloseWindow(); + message->SelfDestruct(); + } + }; + + 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->SetActionCallback(new DismissAction(this)); + AddComponent(okayButton); + SetCancelButton(okayButton); + + ui::Engine::Ref().ShowWindow(this); +} + +void SaveIDMessage::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, 200, 200, 200, 255); +} + +void SaveIDMessage::OnTryExit(ExitMethod method) +{ + ui::Engine::Ref().CloseWindow(); + SelfDestruct(); +} + +SaveIDMessage::~SaveIDMessage() +{ + +} + diff --git a/src/gui/dialogues/SaveIDMessage.h b/src/gui/dialogues/SaveIDMessage.h new file mode 100644 index 000000000..ce02a8e32 --- /dev/null +++ b/src/gui/dialogues/SaveIDMessage.h @@ -0,0 +1,14 @@ +#ifndef SAVEIDMESSAGE_H +#define SAVEIDMESSAGE_H + +#include "gui/interface/Window.h" + +class SaveIDMessage: public ui::Window { +public: + SaveIDMessage(int id); + virtual void OnDraw(); + virtual void OnTryExit(ExitMethod method); + virtual ~SaveIDMessage(); +}; + +#endif /* ERRORMESSAGE_H_ */ diff --git a/src/gui/save/ServerSaveActivity.cpp b/src/gui/save/ServerSaveActivity.cpp index 8b519b82b..1cc308071 100644 --- a/src/gui/save/ServerSaveActivity.cpp +++ b/src/gui/save/ServerSaveActivity.cpp @@ -5,6 +5,7 @@ #include "gui/interface/Checkbox.h" #include "client/requestbroker/RequestBroker.h" #include "gui/dialogues/ErrorMessage.h" +#include "gui/dialogues/SaveIDMessage.h" #include "gui/dialogues/ConfirmPrompt.h" #include "gui/dialogues/InformationMessage.h" #include "client/Client.h" @@ -255,6 +256,7 @@ void ServerSaveActivity::saveUpload() } else if(callback) { + new SaveIDMessage(save.GetID()); callback->SaveUploaded(save); } }