Skip to content

Commit

Permalink
Fixed|UI|Client: Games dialog sort order should match Home Screen order
Browse files Browse the repository at this point in the history
The Ring Zero game selection menu hangs around in the background,
so its state must be manually saved so the Games dialog uses the
correct state.
  • Loading branch information
skyjake committed Apr 13, 2014
1 parent 22f26f1 commit c7c1ded
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 11 deletions.
8 changes: 7 additions & 1 deletion doomsday/client/include/ui/widgets/gamefilterwidget.h
Expand Up @@ -43,6 +43,12 @@ class GameFilterWidget : public de::GuiWidget, public de::IPersistent
};
Q_DECLARE_FLAGS(Filter, FilterFlag)

enum FilterMode
{
UserChangeable,
Permanent
};

enum SortOrder
{
SortByTitle,
Expand All @@ -53,7 +59,7 @@ class GameFilterWidget : public de::GuiWidget, public de::IPersistent
GameFilterWidget(de::String const &name = "gamefilter");

void useInvertedStyle();
void setFilter(Filter flt);
void setFilter(Filter flt, FilterMode mode = UserChangeable);

Filter filter() const;
SortOrder sortOrder() const;
Expand Down
4 changes: 4 additions & 0 deletions doomsday/client/src/ui/clientwindow.cpp
Expand Up @@ -288,12 +288,16 @@ DENG2_PIMPL(ClientWindow)
//game->hide();
background->show();
gameSelMenu->show();

gameSelMenu->restoreState();
}
else
{
//game->show();
background->hide();
gameSelMenu->hide();

gameSelMenu->saveState();
}

// Check with Style if blurring is allowed.
Expand Down
9 changes: 5 additions & 4 deletions doomsday/client/src/ui/dialogs/gamesdialog.cpp
Expand Up @@ -59,16 +59,17 @@ GamesDialog::GamesDialog(Mode mode, String const &name)
d->gameSel->filter().rule().setInput(Rule::Width, d->gameSel->rule().width());
layout << d->gameSel->filter();

d->gameSel->filter().setFilter(GameFilterWidget::AllGames);
// Disallow changing the filter.
d->gameSel->filter().setFilter(GameFilterWidget::AllGames, GameFilterWidget::Permanent);
}
else
{
// Select a suitable view as the user can't change the filter.
// Disallow changing the filter.
d->gameSel->filter().hide();
d->gameSel->filter().enableStateSerialization(false);
d->gameSel->filter().setFilter(d->mode == ShowSingleplayerOnly?
GameFilterWidget::Singleplayer :
GameFilterWidget::Multiplayer);
GameFilterWidget::Multiplayer,
GameFilterWidget::Permanent);

switch(d->mode)
{
Expand Down
25 changes: 19 additions & 6 deletions doomsday/client/src/ui/widgets/gamefilterwidget.cpp
Expand Up @@ -33,8 +33,11 @@ DENG2_PIMPL(GameFilterWidget)
LabelWidget *sortLabel;
ChoiceWidget *sortBy;
DialogContentStylist stylist;
FilterMode filterMode;

Instance(Public *i) : Base(i)
Instance(Public *i)
: Base(i)
, filterMode(UserChangeable)
{
stylist.setContainer(self);

Expand Down Expand Up @@ -86,13 +89,19 @@ void GameFilterWidget::useInvertedStyle()
d->sortBy->useInfoStyle();
}

void GameFilterWidget::setFilter(Filter flt)
void GameFilterWidget::setFilter(Filter flt, FilterMode mode)
{
ui::DataPos pos = d->tabs->items().findData(duint(flt));
if(pos != ui::Data::InvalidPos)
{
d->tabs->setCurrent(pos);
}
d->filterMode = mode;

if(d->filterMode == Permanent)
{
d->tabs->disable();
}
}

GameFilterWidget::Filter GameFilterWidget::filter() const
Expand All @@ -108,15 +117,19 @@ GameFilterWidget::SortOrder GameFilterWidget::sortOrder() const
void GameFilterWidget::operator >> (PersistentState &toState) const
{
Record &st = toState.names();

st.set(d->persistId("filter"), dint(filter()));
if(d->filterMode != Permanent)
{
st.set(d->persistId("filter"), dint(filter()));
}
st.set(d->persistId("order"), dint(sortOrder()));
}

void GameFilterWidget::operator << (PersistentState const &fromState)
{
Record const &st = fromState.names();

d->tabs->setCurrent (d->tabs->items() .findData(int(st[d->persistId("filter")])));
if(d->filterMode != Permanent)
{
d->tabs->setCurrent(d->tabs->items().findData(int(st[d->persistId("filter")])));
}
d->sortBy->setSelected(d->sortBy->items().findData(int(st[d->persistId("order" )])));
}

0 comments on commit c7c1ded

Please sign in to comment.