Skip to content

Commit

Permalink
libappfw: Inverted "info style" for MessageDialog and ButtonWidget
Browse files Browse the repository at this point in the history
DialogContentStylist was also made somewhat more intelligent.
  • Loading branch information
skyjake committed Mar 10, 2014
1 parent 9a6277b commit e4ce3fe
Show file tree
Hide file tree
Showing 13 changed files with 234 additions and 51 deletions.
2 changes: 2 additions & 0 deletions doomsday/libappfw/include/de/dialogs/messagedialog.h
Expand Up @@ -31,6 +31,8 @@ class LIBAPPFW_PUBLIC MessageDialog : public DialogWidget
public:
MessageDialog(String const &name = "");

void useInfoStyle();

LabelWidget &title();
LabelWidget &message();

Expand Down
18 changes: 15 additions & 3 deletions doomsday/libappfw/include/de/framework/dialogcontentstylist.h
Expand Up @@ -22,12 +22,11 @@
#include "../libappfw.h"
#include "../ui/Stylist"

#include <de/Widget>
#include <de/GuiWidget>

namespace de {

class DialogWidget;
class GuiWidget;

/**
* Sets the style for widgets in a dialog.
Expand All @@ -43,15 +42,28 @@ class LIBAPPFW_PUBLIC DialogContentStylist

~DialogContentStylist();

void clear();

void setContainer(GuiWidget &container);

/**
* Adds a new container without detaching from the existing one(s).
*
* @param container New container to style.
*/
void addContainer(GuiWidget &container);

void setInfoStyle(bool useInfoStyle);

void setAdjustMargins(bool yes);

void applyStyle(GuiWidget &widget);

// Observes when new children are added.
void widgetChildAdded(Widget &child);

private:
GuiWidget *_container;
DENG2_PRIVATE(d)
};

} // namespace de
Expand Down
3 changes: 3 additions & 0 deletions doomsday/libappfw/include/de/widgets/auxbuttonwidget.h
Expand Up @@ -36,6 +36,9 @@ class LIBAPPFW_PUBLIC AuxButtonWidget : public ButtonWidget
void useNormalStyle();
void useInvertedStyle();

protected:
void updateStyle();

private:
DENG2_PRIVATE(d)
};
Expand Down
6 changes: 5 additions & 1 deletion doomsday/libappfw/include/de/widgets/buttonwidget.h
Expand Up @@ -66,6 +66,10 @@ class LIBAPPFW_PUBLIC ButtonWidget : public LabelWidget
ModulateColor
};

void useInfoStyle();

bool isUsingInfoStyle() const;

/**
* Text color to use in the Hover state. The default is to use the normal text
* color of the button (label).
Expand Down Expand Up @@ -97,9 +101,9 @@ class LIBAPPFW_PUBLIC ButtonWidget : public LabelWidget
void update();
bool handleEvent(Event const &event);


protected:
void updateModelViewProjection(GLUniform &uMvp);
void updateStyle();

private:
DENG2_PRIVATE(d)
Expand Down
3 changes: 2 additions & 1 deletion doomsday/libappfw/include/de/widgets/dialogwidget.h
Expand Up @@ -26,6 +26,7 @@
namespace de {

class GuiRootWidget;
class DialogContentStylist;

/**
* Popup dialog.
Expand Down Expand Up @@ -151,7 +152,7 @@ class LIBAPPFW_PUBLIC DialogWidget : public PopupWidget
*
* @return Widget for dialog's extra buttons.
*/
//MenuWidget &extraButtons();
MenuWidget &extraButtonsMenu();

ui::Data &buttons();

Expand Down
4 changes: 4 additions & 0 deletions doomsday/libappfw/include/de/widgets/popupwidget.h
Expand Up @@ -84,6 +84,10 @@ class LIBAPPFW_PUBLIC PopupWidget : public PanelWidget
*/
void useInfoStyle();

bool isUsingInfoStyle();

Background infoStyleBackground() const;

// Events.
bool handleEvent(Event const &event);

Expand Down
70 changes: 56 additions & 14 deletions doomsday/libappfw/src/dialogcontentstylist.cpp
Expand Up @@ -22,39 +22,69 @@
#include "de/LabelWidget"
#include "de/LineEditWidget"
#include "de/AuxButtonWidget"
#include <de/Zeroed>

namespace de {

DialogContentStylist::DialogContentStylist() : _container(0)
DENG2_PIMPL_NOREF(DialogContentStylist)
{
QList<GuiWidget *> containers;
bool useInfoStyle;
bool adjustMargins;

Instance()
: useInfoStyle(false)
, adjustMargins(true)
{}
};

DialogContentStylist::DialogContentStylist() : d(new Instance)
{}

DialogContentStylist::DialogContentStylist(DialogWidget &dialog) : _container(0)
DialogContentStylist::DialogContentStylist(DialogWidget &dialog) : d(new Instance)
{
setContainer(dialog.area());
}

DialogContentStylist::DialogContentStylist(GuiWidget &container) : _container(0)
DialogContentStylist::DialogContentStylist(GuiWidget &container) : d(new Instance)
{
setContainer(container);
}

DialogContentStylist::~DialogContentStylist()
{
if(_container)
clear();
}

void DialogContentStylist::clear()
{
foreach(GuiWidget *w, d->containers)
{
_container->audienceForChildAddition() -= this;
w->audienceForChildAddition() -= this;
}
d->containers.clear();
}

void DialogContentStylist::setContainer(GuiWidget &container)
{
if(_container)
{
_container->audienceForChildAddition() -= this;
}
clear();
addContainer(container);
}

_container = &container;
_container->audienceForChildAddition() += this;
void DialogContentStylist::addContainer(GuiWidget &container)
{
d->containers << &container;
container.audienceForChildAddition() += this;
}

void DialogContentStylist::setInfoStyle(bool useInfoStyle)
{
d->useInfoStyle = useInfoStyle;
}

void DialogContentStylist::setAdjustMargins(bool yes)
{
d->adjustMargins = yes;
}

void DialogContentStylist::widgetChildAdded(Widget &child)
Expand All @@ -64,9 +94,12 @@ void DialogContentStylist::widgetChildAdded(Widget &child)

void DialogContentStylist::applyStyle(GuiWidget &w)
{
if(!w.is<AuxButtonWidget>())
if(d->adjustMargins)
{
w.margins().set("dialog.gap");
if(!w.is<AuxButtonWidget>())
{
w.margins().set("dialog.gap");
}
}

// All label-based widgets should expand on their own.
Expand All @@ -75,6 +108,15 @@ void DialogContentStylist::applyStyle(GuiWidget &w)
lab->setSizePolicy(ui::Expand, ui::Expand);
}

// Button background override?
if(ButtonWidget *but = w.maybeAs<ButtonWidget>())
{
if(d->useInfoStyle)
{
but->useInfoStyle();
}
}

// Toggles should have no background.
if(ToggleWidget *tog = w.maybeAs<ToggleWidget>())
{
Expand All @@ -83,7 +125,7 @@ void DialogContentStylist::applyStyle(GuiWidget &w)

if(LineEditWidget *ed = w.maybeAs<LineEditWidget>())
{
ed->rule().setInput(Rule::Width, _container->style().rules().rule("editor.width"));
ed->rule().setInput(Rule::Width, d->containers.first()->style().rules().rule("editor.width"));
}
}

Expand Down
15 changes: 15 additions & 0 deletions doomsday/libappfw/src/dialogs/messagedialog.cpp
Expand Up @@ -18,6 +18,7 @@

#include "de/MessageDialog"
#include "de/SequentialLayout"
#include "de/DialogContentStylist"

namespace de {

Expand All @@ -27,6 +28,7 @@ DENG_GUI_PIMPL(MessageDialog)
{
LabelWidget *title;
LabelWidget *message;
DialogContentStylist buttonStylist;

Instance(Public *i) : Base(i)
{
Expand Down Expand Up @@ -73,6 +75,19 @@ MessageDialog::MessageDialog(String const &name)
, d(new Instance(this))
{}

void MessageDialog::useInfoStyle()
{
DialogWidget::useInfoStyle();

title().setTextColor("inverted.accent");
message().setTextColor("inverted.text");

d->buttonStylist.addContainer(buttonsMenu());
d->buttonStylist.addContainer(extraButtonsMenu());
d->buttonStylist.setAdjustMargins(false);
d->buttonStylist.setInfoStyle(true);
}

LabelWidget &MessageDialog::title()
{
return *d->title;
Expand Down

0 comments on commit e4ce3fe

Please sign in to comment.