Textbox in the stamp browser also

This commit is contained in:
jacob1 2014-11-11 19:38:29 -05:00
parent efaa32363f
commit cd9fa0c85a
5 changed files with 83 additions and 10 deletions

View File

@ -131,6 +131,12 @@ void LocalBrowserController::PrevPage()
browserModel->UpdateSavesList(browserModel->GetPageNum()-1); browserModel->UpdateSavesList(browserModel->GetPageNum()-1);
} }
void LocalBrowserController::SetPage(int page)
{
if (page != browserModel->GetPageNum() && page > 0 && page <= browserModel->GetPageCount())
browserModel->UpdateSavesList(page);
}
void LocalBrowserController::Update() void LocalBrowserController::Update()
{ {
if(browserModel->GetSave()) if(browserModel->GetSave())

View File

@ -28,6 +28,7 @@ public:
void SetMoveToFront(bool move); void SetMoveToFront(bool move);
void NextPage(); void NextPage();
void PrevPage(); void PrevPage();
void SetPage(int page);
void Update(); void Update();
void Exit(); void Exit();
virtual ~LocalBrowserController(); virtual ~LocalBrowserController();

View File

@ -31,6 +31,7 @@ void LocalBrowserModel::notifySavesListChanged()
for(int i = 0; i < observers.size(); i++) for(int i = 0; i < observers.size(); i++)
{ {
observers[i]->NotifySavesListChanged(this); observers[i]->NotifySavesListChanged(this);
observers[i]->NotifyPageChanged(this);
} }
} }

View File

@ -1,5 +1,6 @@
#include <sstream> #include <sstream>
#include "client/Client.h" #include "client/Client.h"
#include "Format.h"
#include "LocalBrowserView.h" #include "LocalBrowserView.h"
#include "gui/interface/Button.h" #include "gui/interface/Button.h"
@ -15,17 +16,39 @@
#include "LocalBrowserModelException.h" #include "LocalBrowserModelException.h"
LocalBrowserView::LocalBrowserView(): LocalBrowserView::LocalBrowserView():
ui::Window(ui::Point(0, 0), ui::Point(WINDOWW, WINDOWH)) ui::Window(ui::Point(0, 0), ui::Point(WINDOWW, WINDOWH)),
changed(false),
lastChanged(0),
pageCount(0)
{ {
nextButton = new ui::Button(ui::Point(WINDOWW-52, WINDOWH-18), ui::Point(50, 16), "Next \x95"); nextButton = new ui::Button(ui::Point(WINDOWW-52, WINDOWH-18), ui::Point(50, 16), "Next \x95");
previousButton = new ui::Button(ui::Point(1, WINDOWH-18), ui::Point(50, 16), "\x96 Prev"); previousButton = new ui::Button(ui::Point(1, WINDOWH-18), ui::Point(50, 16), "\x96 Prev");
undeleteButton = new ui::Button(ui::Point(WINDOWW-122, WINDOWH-18), ui::Point(60, 16), "Rescan"); undeleteButton = new ui::Button(ui::Point(WINDOWW-122, WINDOWH-18), ui::Point(60, 16), "Rescan");
infoLabel = new ui::Label(ui::Point(51, WINDOWH-18), ui::Point(WINDOWW-102, 16), "Loading...");
AddComponent(infoLabel);
AddComponent(nextButton); AddComponent(nextButton);
AddComponent(previousButton); AddComponent(previousButton);
AddComponent(undeleteButton); AddComponent(undeleteButton);
class PageNumAction : public ui::TextboxAction
{
LocalBrowserView * v;
public:
PageNumAction(LocalBrowserView * _v) { v = _v; }
void TextChangedCallback(ui::Textbox * sender)
{
v->textChanged();
}
};
pageTextbox = new ui::Textbox(ui::Point(283, WINDOWH-18), ui::Point(41, 16), "");
pageTextbox->SetActionCallback(new PageNumAction(this));
pageTextbox->SetInputType(ui::Textbox::Number);
pageLabel = new ui::Label(ui::Point(0, WINDOWH-18), ui::Point(30, 16), "Page"); //page [TEXTBOX] of y
pageLabel->Appearance.HorizontalAlign = ui::Appearance::AlignRight;
pageCountLabel = new ui::Label(ui::Point(WINDOWW/2+6, WINDOWH-18), ui::Point(50, 16), "");
pageCountLabel->Appearance.HorizontalAlign = ui::Appearance::AlignLeft;
AddComponent(pageLabel);
AddComponent(pageCountLabel);
AddComponent(pageTextbox);
class NextPageAction : public ui::ButtonAction class NextPageAction : public ui::ButtonAction
{ {
LocalBrowserView * v; LocalBrowserView * v;
@ -83,16 +106,52 @@ LocalBrowserView::LocalBrowserView():
AddComponent(removeSelected); AddComponent(removeSelected);
} }
void LocalBrowserView::textChanged()
{
int num = format::StringToNumber<int>(pageTextbox->GetText());
if (num < 0) //0 is allowed so that you can backspace the 1
pageTextbox->SetText("1");
else if (num > pageCount)
pageTextbox->SetText(format::NumberToString(pageCount));
changed = true;
lastChanged = SDL_GetTicks()+600;
}
void LocalBrowserView::OnTick(float dt) void LocalBrowserView::OnTick(float dt)
{ {
c->Update(); c->Update();
if (changed && lastChanged < SDL_GetTicks())
{
changed = false;
c->SetPage(std::max(format::StringToNumber<int>(pageTextbox->GetText()), 0));
}
} }
void LocalBrowserView::NotifyPageChanged(LocalBrowserModel * sender) void LocalBrowserView::NotifyPageChanged(LocalBrowserModel * sender)
{ {
std::stringstream pageInfo; pageCount = sender->GetPageCount();
pageInfo << "Page " << sender->GetPageNum() << " of " << sender->GetPageCount(); if (!sender->GetSavesList().size()) //no saves
infoLabel->SetText(pageInfo.str()); {
pageLabel->Visible = pageCountLabel->Visible = pageTextbox->Visible = false;
}
else
{
std::stringstream pageInfo;
pageInfo << "of " << pageCount;
pageCountLabel->SetText(pageInfo.str());
int width = Graphics::textwidth(pageInfo.str().c_str());
pageLabel->Position.X = WINDOWW/2-width-20;
pageTextbox->Position.X = WINDOWW/2-width+11;
pageTextbox->Size.X = width-4;
//pageCountLabel->Position.X = WINDOWW/2+6;
pageLabel->Visible = pageCountLabel->Visible = pageTextbox->Visible = true;
pageInfo.str("");
pageInfo << sender->GetPageNum();
pageTextbox->SetText(pageInfo.str());
}
if(sender->GetPageNum() == 1) if(sender->GetPageNum() == 1)
{ {
previousButton->Visible = false; previousButton->Visible = false;
@ -216,6 +275,4 @@ void LocalBrowserView::OnKeyRelease(int key, Uint16 character, bool shift, bool
c->SetMoveToFront(true); c->SetMoveToFront(true);
} }
LocalBrowserView::~LocalBrowserView() { LocalBrowserView::~LocalBrowserView() { }
}

View File

@ -7,6 +7,7 @@
namespace ui namespace ui
{ {
class Label; class Label;
class Textbox;
class Button; class Button;
class SaveButton; class SaveButton;
} }
@ -19,8 +20,15 @@ class LocalBrowserView: public ui::Window {
ui::Button * undeleteButton; ui::Button * undeleteButton;
ui::Button * previousButton; ui::Button * previousButton;
ui::Button * nextButton; ui::Button * nextButton;
ui::Label * infoLabel; ui::Label * pageLabel;
ui::Label * pageCountLabel;
ui::Textbox * pageTextbox;
ui::Button * removeSelected; ui::Button * removeSelected;
void textChanged();
bool changed;
int lastChanged;
int pageCount;
public: public:
LocalBrowserView(); LocalBrowserView();
//virtual void OnDraw(); //virtual void OnDraw();