Persistent search window responds to user auth events

This commit is contained in:
Simon Robertshaw 2012-08-05 13:08:51 +01:00
parent 4b85d19217
commit 05024cc787
3 changed files with 78 additions and 32 deletions

View File

@ -34,7 +34,8 @@ SearchController::SearchController(ControllerCallback * callback):
activePreview(NULL), activePreview(NULL),
HasExited(false), HasExited(false),
nextQueryTime(0.0f), nextQueryTime(0.0f),
nextQueryDone(true) nextQueryDone(true),
searchModel(NULL)
{ {
searchModel = new SearchModel(); searchModel = new SearchModel();
searchView = new SearchView(); searchView = new SearchView();

View File

@ -10,9 +10,12 @@
SearchView::SearchView(): SearchView::SearchView():
ui::Window(ui::Point(0, 0), ui::Point(XRES+BARSIZE, YRES+MENUSIZE)), ui::Window(ui::Point(0, 0), ui::Point(XRES+BARSIZE, YRES+MENUSIZE)),
saveButtons(vector<ui::SaveButton*>()), saveButtons(vector<ui::SaveButton*>()),
errorLabel(NULL) errorLabel(NULL),
c(NULL)
{ {
Client::Ref().AddListener(this);
nextButton = new ui::Button(ui::Point(XRES+BARSIZE-52, YRES+MENUSIZE-18), ui::Point(50, 16), "Next \x95"); nextButton = new ui::Button(ui::Point(XRES+BARSIZE-52, YRES+MENUSIZE-18), ui::Point(50, 16), "Next \x95");
previousButton = new ui::Button(ui::Point(1, YRES+MENUSIZE-18), ui::Point(50, 16), "\x96 Prev"); previousButton = new ui::Button(ui::Point(1, YRES+MENUSIZE-18), ui::Point(50, 16), "\x96 Prev");
infoLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), "Loading..."); infoLabel = new ui::Label(ui::Point(51, YRES+MENUSIZE-18), ui::Point(XRES+BARSIZE-102, 16), "Loading...");
@ -29,7 +32,8 @@ SearchView::SearchView():
} }
}; };
searchField = new ui::Textbox(ui::Point(60, 10), ui::Point((XRES+BARSIZE)-226, 16), ""); searchField = new ui::Textbox(ui::Point(60, 10), ui::Point((XRES+BARSIZE)-226, 16), "");
searchField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; searchField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; searchField->Appearance.HorizontalAlign = ui::Appearance::AlignLeft;
searchField->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
searchField->SetActionCallback(new SearchAction(this)); searchField->SetActionCallback(new SearchAction(this));
class SortAction : public ui::ButtonAction class SortAction : public ui::ButtonAction
@ -44,7 +48,8 @@ SearchView::SearchView():
}; };
sortButton = new ui::Button(ui::Point(XRES+BARSIZE-140, 10), ui::Point(60, 16), "Sort"); sortButton = new ui::Button(ui::Point(XRES+BARSIZE-140, 10), ui::Point(60, 16), "Sort");
sortButton->SetActionCallback(new SortAction(this)); sortButton->SetActionCallback(new SortAction(this));
sortButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; sortButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; sortButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
sortButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(sortButton); AddComponent(sortButton);
class MyOwnAction : public ui::ButtonAction class MyOwnAction : public ui::ButtonAction
@ -60,9 +65,8 @@ SearchView::SearchView():
ownButton = new ui::Button(ui::Point(XRES+BARSIZE-70, 10), ui::Point(60, 16), "My Own"); ownButton = new ui::Button(ui::Point(XRES+BARSIZE-70, 10), ui::Point(60, 16), "My Own");
ownButton->SetTogglable(true); ownButton->SetTogglable(true);
ownButton->SetActionCallback(new MyOwnAction(this)); ownButton->SetActionCallback(new MyOwnAction(this));
if(!Client::Ref().GetAuthUser().ID) ownButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
ownButton->Enabled = false; ownButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
ownButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; ownButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(ownButton); AddComponent(ownButton);
class FavAction : public ui::ButtonAction class FavAction : public ui::ButtonAction
@ -79,9 +83,8 @@ SearchView::SearchView():
favButton->SetIcon(IconFavourite); favButton->SetIcon(IconFavourite);
favButton->SetTogglable(true); favButton->SetTogglable(true);
favButton->SetActionCallback(new FavAction(this)); favButton->SetActionCallback(new FavAction(this));
if(!Client::Ref().GetAuthUser().ID) favButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
favButton->Enabled = false; favButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
favButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; favButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(favButton); AddComponent(favButton);
class NextPageAction : public ui::ButtonAction class NextPageAction : public ui::ButtonAction
@ -95,7 +98,8 @@ SearchView::SearchView():
} }
}; };
nextButton->SetActionCallback(new NextPageAction(this)); nextButton->SetActionCallback(new NextPageAction(this));
nextButton->Appearance.HorizontalAlign = ui::Appearance::AlignRight; nextButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; nextButton->Appearance.HorizontalAlign = ui::Appearance::AlignRight;
nextButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
class PrevPageAction : public ui::ButtonAction class PrevPageAction : public ui::ButtonAction
{ {
SearchView * v; SearchView * v;
@ -107,7 +111,8 @@ SearchView::SearchView():
} }
}; };
previousButton->SetActionCallback(new PrevPageAction(this)); previousButton->SetActionCallback(new PrevPageAction(this));
previousButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; previousButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; previousButton->Appearance.HorizontalAlign = ui::Appearance::AlignLeft;
previousButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(nextButton); AddComponent(nextButton);
AddComponent(previousButton); AddComponent(previousButton);
AddComponent(searchField); AddComponent(searchField);
@ -117,7 +122,8 @@ SearchView::SearchView():
AddComponent(loadingSpinner); AddComponent(loadingSpinner);
ui::Label * searchPrompt = new ui::Label(ui::Point(10, 10), ui::Point(50, 16), "Search:"); ui::Label * searchPrompt = new ui::Label(ui::Point(10, 10), ui::Point(50, 16), "Search:");
searchPrompt->Appearance.HorizontalAlign = ui::Appearance::AlignLeft; searchPrompt->Appearance.VerticalAlign = ui::Appearance::AlignMiddle; searchPrompt->Appearance.HorizontalAlign = ui::Appearance::AlignLeft;
searchPrompt->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
AddComponent(searchPrompt); AddComponent(searchPrompt);
class RemoveSelectedAction : public ui::ButtonAction class RemoveSelectedAction : public ui::ButtonAction
@ -184,24 +190,7 @@ SearchView::SearchView():
clearSelection->SetActionCallback(new ClearSelectionAction(this)); clearSelection->SetActionCallback(new ClearSelectionAction(this));
AddComponent(clearSelection); AddComponent(clearSelection);
if(Client::Ref().GetAuthUser().ID) CheckAccess();
{
favouriteSelected->Enabled = true;
if((Client::Ref().GetAuthUser().UserElevation == ElevationAdmin || Client::Ref().GetAuthUser().UserElevation == ElevationModerator))
{
unpublishSelected->Enabled = true;
removeSelected->Enabled = true;
}
else
{
unpublishSelected->Enabled = false;
removeSelected->Enabled = false;
}
}
else
{
favouriteSelected->Enabled = true;
}
} }
void SearchView::doSearch() void SearchView::doSearch()
@ -211,6 +200,7 @@ void SearchView::doSearch()
SearchView::~SearchView() SearchView::~SearchView()
{ {
Client::Ref().RemoveListener(this);
RemoveComponent(nextButton); RemoveComponent(nextButton);
RemoveComponent(previousButton); RemoveComponent(previousButton);
RemoveComponent(infoLabel); RemoveComponent(infoLabel);
@ -294,6 +284,58 @@ void SearchView::NotifyPageChanged(SearchModel * sender)
} }
} }
void SearchView::NotifyAuthUserChanged(Client * sender)
{
CheckAccess();
}
void SearchView::CheckAccess()
{
if(c)
{
c->ClearSelection();
if(ownButton->GetToggleState())
ownButton->DoAction();
if(favButton->GetToggleState())
favButton->DoAction();
}
if(Client::Ref().GetAuthUser().ID)
{
ownButton->Enabled = true;
favButton->Enabled = true;
favouriteSelected->Enabled = true;
if(Client::Ref().GetAuthUser().UserElevation == ElevationAdmin || Client::Ref().GetAuthUser().UserElevation == ElevationModerator)
{
unpublishSelected->Enabled = true;
removeSelected->Enabled = true;
for(int i = 0; i < saveButtons.size(); i++)
{
saveButtons[i]->SetSelectable(true);
}
}
}
else
{
ownButton->Enabled = false;
favButton->Enabled = false;
favouriteSelected->Enabled = false;
unpublishSelected->Enabled = false;
removeSelected->Enabled = false;
for(int i = 0; i < saveButtons.size(); i++)
{
saveButtons[i]->SetSelectable(false);
saveButtons[i]->SetSelected(false);
}
}
}
void SearchView::NotifySaveListChanged(SearchModel * sender) void SearchView::NotifySaveListChanged(SearchModel * sender)
{ {
int i = 0; int i = 0;

View File

@ -8,13 +8,14 @@
#include "interface/Label.h" #include "interface/Label.h"
#include "interface/Spinner.h" #include "interface/Spinner.h"
#include "interface/Textbox.h" #include "interface/Textbox.h"
#include "client/ClientListener.h"
using namespace std; using namespace std;
class SearchModel; class SearchModel;
class SearchController; class SearchController;
class SearchView: public ui::Window class SearchView: public ui::Window, public ClientListener
{ {
private: private:
SearchController * c; SearchController * c;
@ -43,6 +44,8 @@ public:
void NotifySortChanged(SearchModel * sender); void NotifySortChanged(SearchModel * sender);
void NotifyShowOwnChanged(SearchModel * sender); void NotifyShowOwnChanged(SearchModel * sender);
void NotifyShowFavouriteChanged(SearchModel * sender); void NotifyShowFavouriteChanged(SearchModel * sender);
void NotifyAuthUserChanged(Client * sender);
void CheckAccess();
SearchView(); SearchView();
virtual ~SearchView(); virtual ~SearchView();
void AttachController(SearchController * _c) { c = _c; } void AttachController(SearchController * _c) { c = _c; }