GUI: Add method to know if a widget contains a given widget
This commit is contained in:
parent
47d339509f
commit
91125bcbcd
8 changed files with 41 additions and 0 deletions
|
@ -175,6 +175,15 @@ Widget *Widget::findWidgetInChain(Widget *w, const char *name) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Widget::containsWidgetInChain(Widget *w, Widget *search) {
|
||||||
|
while (w) {
|
||||||
|
if (w == search || w->containsWidget(search))
|
||||||
|
return true;
|
||||||
|
w = w->_next;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void Widget::setEnabled(bool e) {
|
void Widget::setEnabled(bool e) {
|
||||||
if ((_flags & WIDGET_ENABLED) != e) {
|
if ((_flags & WIDGET_ENABLED) != e) {
|
||||||
if (e)
|
if (e)
|
||||||
|
@ -837,6 +846,10 @@ ContainerWidget::~ContainerWidget() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ContainerWidget::containsWidget(Widget *w) const {
|
||||||
|
return containsWidgetInChain(_firstWidget, w);
|
||||||
|
}
|
||||||
|
|
||||||
Widget *ContainerWidget::findWidget(int x, int y) {
|
Widget *ContainerWidget::findWidget(int x, int y) {
|
||||||
return findWidgetInChain(_firstWidget, x, y);
|
return findWidgetInChain(_firstWidget, x, y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +107,7 @@ private:
|
||||||
public:
|
public:
|
||||||
static Widget *findWidgetInChain(Widget *start, int x, int y);
|
static Widget *findWidgetInChain(Widget *start, int x, int y);
|
||||||
static Widget *findWidgetInChain(Widget *start, const char *name);
|
static Widget *findWidgetInChain(Widget *start, const char *name);
|
||||||
|
static bool containsWidgetInChain(Widget *start, Widget *search);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Widget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip = 0);
|
Widget(GuiObject *boss, int x, int y, int w, int h, const char *tooltip = 0);
|
||||||
|
@ -158,6 +159,8 @@ public:
|
||||||
const Common::String &getTooltip() const { return _tooltip; }
|
const Common::String &getTooltip() const { return _tooltip; }
|
||||||
void setTooltip(const Common::String &tooltip) { _tooltip = tooltip; }
|
void setTooltip(const Common::String &tooltip) { _tooltip = tooltip; }
|
||||||
|
|
||||||
|
virtual bool containsWidget(Widget *) const { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void updateState(int oldFlags, int newFlags);
|
void updateState(int oldFlags, int newFlags);
|
||||||
|
|
||||||
|
@ -388,6 +391,7 @@ public:
|
||||||
ContainerWidget(GuiObject *boss, const Common::String &name);
|
ContainerWidget(GuiObject *boss, const Common::String &name);
|
||||||
~ContainerWidget();
|
~ContainerWidget();
|
||||||
|
|
||||||
|
virtual bool containsWidget(Widget *) const;
|
||||||
virtual Widget *findWidget(int x, int y);
|
virtual Widget *findWidget(int x, int y);
|
||||||
virtual void removeWidget(Widget *widget);
|
virtual void removeWidget(Widget *widget);
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -101,6 +101,12 @@ ListWidget::~ListWidget() {
|
||||||
delete[] _textWidth;
|
delete[] _textWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ListWidget::containsWidget(Widget *w) const {
|
||||||
|
if (w == _scrollBar || _scrollBar->containsWidget(w))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
Widget *ListWidget::findWidget(int x, int y) {
|
Widget *ListWidget::findWidget(int x, int y) {
|
||||||
if (x >= _w - _scrollBarWidth)
|
if (x >= _w - _scrollBarWidth)
|
||||||
return _scrollBar;
|
return _scrollBar;
|
||||||
|
|
|
@ -89,6 +89,7 @@ public:
|
||||||
ListWidget(Dialog *boss, int x, int y, int w, int h, const char *tooltip = 0, uint32 cmd = 0);
|
ListWidget(Dialog *boss, int x, int y, int w, int h, const char *tooltip = 0, uint32 cmd = 0);
|
||||||
virtual ~ListWidget();
|
virtual ~ListWidget();
|
||||||
|
|
||||||
|
virtual bool containsWidget(Widget *) const;
|
||||||
virtual Widget *findWidget(int x, int y);
|
virtual Widget *findWidget(int x, int y);
|
||||||
|
|
||||||
void setList(const StringArray &list, const ColorList *colors = 0);
|
void setList(const StringArray &list, const ColorList *colors = 0);
|
||||||
|
|
|
@ -144,6 +144,12 @@ void ScrollContainerWidget::drawWidget() {
|
||||||
g_gui.theme()->drawDialogBackgroundClip(Common::Rect(_x, _y, _x + _w, _y + getHeight() - 1), getBossClipRect(), ThemeEngine::kDialogBackgroundDefault);
|
g_gui.theme()->drawDialogBackgroundClip(Common::Rect(_x, _y, _x + _w, _y + getHeight() - 1), getBossClipRect(), ThemeEngine::kDialogBackgroundDefault);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ScrollContainerWidget::containsWidget(Widget *w) const {
|
||||||
|
if (w == _verticalScroll || _verticalScroll->containsWidget(w))
|
||||||
|
return true;
|
||||||
|
return containsWidgetInChain(_firstWidget, w);
|
||||||
|
}
|
||||||
|
|
||||||
Widget *ScrollContainerWidget::findWidget(int x, int y) {
|
Widget *ScrollContainerWidget::findWidget(int x, int y) {
|
||||||
if (_verticalScroll->isVisible() && x >= _w - _verticalScroll->getWidth())
|
if (_verticalScroll->isVisible() && x >= _w - _verticalScroll->getWidth())
|
||||||
return _verticalScroll;
|
return _verticalScroll;
|
||||||
|
|
|
@ -46,6 +46,8 @@ public:
|
||||||
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
|
virtual void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
|
||||||
virtual void reflowLayout();
|
virtual void reflowLayout();
|
||||||
|
|
||||||
|
virtual bool containsWidget(Widget *) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// We overload getChildY to make sure child widgets are positioned correctly.
|
// We overload getChildY to make sure child widgets are positioned correctly.
|
||||||
// Essentially this compensates for the space taken up by the tab title header.
|
// Essentially this compensates for the space taken up by the tab title header.
|
||||||
|
|
|
@ -334,6 +334,13 @@ void TabWidget::draw() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TabWidget::containsWidget(Widget *w) const {
|
||||||
|
if (w == _navLeft || w == _navRight || _navLeft->containsWidget(w) || _navRight->containsWidget(w))
|
||||||
|
return true;
|
||||||
|
return containsWidgetInChain(_firstWidget, w);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Widget *TabWidget::findWidget(int x, int y) {
|
Widget *TabWidget::findWidget(int x, int y) {
|
||||||
if (y < _tabHeight) {
|
if (y < _tabHeight) {
|
||||||
if (_navButtonsVisible) {
|
if (_navButtonsVisible) {
|
||||||
|
|
|
@ -107,6 +107,8 @@ public:
|
||||||
virtual int getFirstVisible() const;
|
virtual int getFirstVisible() const;
|
||||||
virtual void setFirstVisible(int tabID, bool adjustIfRoom = false);
|
virtual void setFirstVisible(int tabID, bool adjustIfRoom = false);
|
||||||
|
|
||||||
|
virtual bool containsWidget(Widget *) const;
|
||||||
|
|
||||||
virtual void reflowLayout();
|
virtual void reflowLayout();
|
||||||
|
|
||||||
virtual void draw();
|
virtual void draw();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue