class UIElement
{
protected:
bool bVisible;
public:
UIElement() {}
UIElement(const UIElement &rhs):bVisible(rhs.bVisible) {}
virtual ~UIElement() {}
bool IsVisible() const { return bVisible; }
};
class StyleUIElement : public UIElement
{
protected:
Style *style;
public:
StyleUIElement():style(0) {}
StyleUIElement(const StyleUIElement &rhs):UIElement(rhs), style(rhs.style) {}
Style *GetStyle() { return style; }
virtual void SetStyle(Style *newStyle) {}
};
class UIButton : public StyleUIElement
{
public:
void SetStyle(Style *newStyle)
{
if (newStyle && newStyle->IsScalable())
style = newStyle;
else
style = 0;
}
};
class UICanvas
{
private:
std::vector<UIElement*> widgets;
public:
void SetStyleForVisibleButtons(Style *newStyle)
{
for(size_t = 0; i < widgets.size(); ++i)
if (dynamic_cast<UIButton*>(widgets[i]) && widgets[i]->IsVisible())
{
StyleUIElement *copiedElement = new StyleUIElement(dynamic_cast<const StyleUIElement&>(*widgets[i]));
copiedElement->SetStyle(newStyle);
if (copiedElement->GetStyle() != 0)
widgets[i]->SetStyle(newStyle);
delete copiedElement;
}
}
};