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),
|
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();
|
||||||
|
@ -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;
|
||||||
|
@ -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; }
|
||||||
|
Reference in New Issue
Block a user