Persistent search window responds to user auth events
This commit is contained in:
parent
4b85d19217
commit
05024cc787
@ -34,7 +34,8 @@ SearchController::SearchController(ControllerCallback * callback):
|
||||
activePreview(NULL),
|
||||
HasExited(false),
|
||||
nextQueryTime(0.0f),
|
||||
nextQueryDone(true)
|
||||
nextQueryDone(true),
|
||||
searchModel(NULL)
|
||||
{
|
||||
searchModel = new SearchModel();
|
||||
searchView = new SearchView();
|
||||
|
@ -10,9 +10,12 @@
|
||||
SearchView::SearchView():
|
||||
ui::Window(ui::Point(0, 0), ui::Point(XRES+BARSIZE, YRES+MENUSIZE)),
|
||||
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");
|
||||
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...");
|
||||
@ -29,7 +32,8 @@ SearchView::SearchView():
|
||||
}
|
||||
};
|
||||
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));
|
||||
|
||||
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->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);
|
||||
|
||||
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->SetTogglable(true);
|
||||
ownButton->SetActionCallback(new MyOwnAction(this));
|
||||
if(!Client::Ref().GetAuthUser().ID)
|
||||
ownButton->Enabled = false;
|
||||
ownButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; ownButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
||||
ownButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
|
||||
ownButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
||||
AddComponent(ownButton);
|
||||
|
||||
class FavAction : public ui::ButtonAction
|
||||
@ -79,9 +83,8 @@ SearchView::SearchView():
|
||||
favButton->SetIcon(IconFavourite);
|
||||
favButton->SetTogglable(true);
|
||||
favButton->SetActionCallback(new FavAction(this));
|
||||
if(!Client::Ref().GetAuthUser().ID)
|
||||
favButton->Enabled = false;
|
||||
favButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre; favButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
||||
favButton->Appearance.HorizontalAlign = ui::Appearance::AlignCentre;
|
||||
favButton->Appearance.VerticalAlign = ui::Appearance::AlignMiddle;
|
||||
AddComponent(favButton);
|
||||
|
||||
class NextPageAction : public ui::ButtonAction
|
||||
@ -95,7 +98,8 @@ SearchView::SearchView():
|
||||
}
|
||||
};
|
||||
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
|
||||
{
|
||||
SearchView * v;
|
||||
@ -107,7 +111,8 @@ SearchView::SearchView():
|
||||
}
|
||||
};
|
||||
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(previousButton);
|
||||
AddComponent(searchField);
|
||||
@ -117,7 +122,8 @@ SearchView::SearchView():
|
||||
AddComponent(loadingSpinner);
|
||||
|
||||
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);
|
||||
|
||||
class RemoveSelectedAction : public ui::ButtonAction
|
||||
@ -184,24 +190,7 @@ SearchView::SearchView():
|
||||
clearSelection->SetActionCallback(new ClearSelectionAction(this));
|
||||
AddComponent(clearSelection);
|
||||
|
||||
if(Client::Ref().GetAuthUser().ID)
|
||||
{
|
||||
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;
|
||||
}
|
||||
CheckAccess();
|
||||
}
|
||||
|
||||
void SearchView::doSearch()
|
||||
@ -211,6 +200,7 @@ void SearchView::doSearch()
|
||||
|
||||
SearchView::~SearchView()
|
||||
{
|
||||
Client::Ref().RemoveListener(this);
|
||||
RemoveComponent(nextButton);
|
||||
RemoveComponent(previousButton);
|
||||
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)
|
||||
{
|
||||
int i = 0;
|
||||
|
@ -8,13 +8,14 @@
|
||||
#include "interface/Label.h"
|
||||
#include "interface/Spinner.h"
|
||||
#include "interface/Textbox.h"
|
||||
#include "client/ClientListener.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
class SearchModel;
|
||||
class SearchController;
|
||||
|
||||
class SearchView: public ui::Window
|
||||
class SearchView: public ui::Window, public ClientListener
|
||||
{
|
||||
private:
|
||||
SearchController * c;
|
||||
@ -43,6 +44,8 @@ public:
|
||||
void NotifySortChanged(SearchModel * sender);
|
||||
void NotifyShowOwnChanged(SearchModel * sender);
|
||||
void NotifyShowFavouriteChanged(SearchModel * sender);
|
||||
void NotifyAuthUserChanged(Client * sender);
|
||||
void CheckAccess();
|
||||
SearchView();
|
||||
virtual ~SearchView();
|
||||
void AttachController(SearchController * _c) { c = _c; }
|
||||
|
Reference in New Issue
Block a user