From 7c1645bb1fae8a233fd2afe088e8d198f17b4831 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Sun, 4 Apr 2021 20:42:56 +0300 Subject: Widget: Added a debug utility Printing the list of parents. --- src/ui/widget.c | 87 ++++++++++++++++++++++++++++++++++++--------------------- src/ui/widget.h | 1 + 2 files changed, 56 insertions(+), 32 deletions(-) (limited to 'src/ui') diff --git a/src/ui/widget.c b/src/ui/widget.c index baabf673..cef36a00 100644 --- a/src/ui/widget.c +++ b/src/ui/widget.c @@ -1475,12 +1475,39 @@ void refresh_Widget(const iAnyObject *d) { postRefresh_App(); } -/* Debug utility for inspecting widget trees. */ -#include "labelwidget.h" -static void printTree_Widget_(const iWidget *d, int indent) { - for (int i = 0; i < indent; ++i) { - fwrite(" ", 4, 1, stdout); +void raise_Widget(iWidget *d) { + iPtrArray *onTop = onTop_RootData_(); + if (d->flags & keepOnTop_WidgetFlag) { + iAssert(indexOf_PtrArray(onTop, d) != iInvalidPos); + removeOne_PtrArray(onTop, d); + pushBack_PtrArray(onTop, d); } +} + +iBool hasVisibleChildOnTop_Widget(const iWidget *parent) { + iConstForEach(ObjectList, i, parent->children) { + const iWidget *child = i.object; + if (~child->flags & hidden_WidgetFlag && child->flags & keepOnTop_WidgetFlag) { + return iTrue; + } + if (hasVisibleChildOnTop_Widget(child)) { + return iTrue; + } + } + return iFalse; +} + +iBeginDefineClass(Widget) + .processEvent = processEvent_Widget, + .draw = draw_Widget, +iEndDefineClass(Widget) + +/*---------------------------------------------------------------------------------------------- + Debug utilities for inspecting widget trees. +*/ + +#include "labelwidget.h" +static void printInfo_Widget_(const iWidget *d) { printf("[%p] %s:\"%s\" ", d, class_Widget(d)->name, cstr_String(&d->id)); if (isInstance_Object(d, &Class_LabelWidget)) { printf("(%s|%s) ", @@ -1498,43 +1525,39 @@ static void printTree_Widget_(const iWidget *d, int indent) { d->flags & fixedWidth_WidgetFlag ? " fixW" : "", d->flags & fixedHeight_WidgetFlag ? " fixH" : "", d->flags & resizeToParentWidth_WidgetFlag ? " rsPrnW" : ""); - iConstForEach(ObjectList, i, d->children) { - printTree_Widget_(i.object, indent + 1); - } } -void raise_Widget(iWidget *d) { - iPtrArray *onTop = onTop_RootData_(); - if (d->flags & keepOnTop_WidgetFlag) { - iAssert(indexOf_PtrArray(onTop, d) != iInvalidPos); - removeOne_PtrArray(onTop, d); - pushBack_PtrArray(onTop, d); +static void printTree_Widget_(const iWidget *d, int indent) { + for (int i = 0; i < indent; ++i) { + fwrite(" ", 4, 1, stdout); } -} - -iBool hasVisibleChildOnTop_Widget(const iWidget *parent) { - iConstForEach(ObjectList, i, parent->children) { - const iWidget *child = i.object; - if (~child->flags & hidden_WidgetFlag && child->flags & keepOnTop_WidgetFlag) { - return iTrue; - } - if (hasVisibleChildOnTop_Widget(child)) { - return iTrue; - } + printInfo_Widget_(d); + iConstForEach(ObjectList, i, d->children) { + printTree_Widget_(i.object, indent + 1); } - return iFalse; } void printTree_Widget(const iWidget *d) { if (!d) { - printf("[NULL]\n"); + puts("[NULL]"); return; } printTree_Widget_(d, 0); } -iBeginDefineClass(Widget) - .processEvent = processEvent_Widget, - .draw = draw_Widget, -iEndDefineClass(Widget) - +void identify_Widget(const iWidget *d) { + if (!d) { + puts("[NULL}"); + return; + } + int indent = 0; + for (const iWidget *w = d; w; w = w->parent, indent++) { + if (indent > 0) { + for (int i = 0; i < indent; ++i) { + fwrite(" ", 2, 1, stdout); + } + } + printInfo_Widget_(w); + } + fflush(stdout); +} diff --git a/src/ui/widget.h b/src/ui/widget.h index 4c5b7d85..dc79a22c 100644 --- a/src/ui/widget.h +++ b/src/ui/widget.h @@ -259,3 +259,4 @@ void raise_Widget (iWidget *); iBool hasVisibleChildOnTop_Widget (const iWidget *parent); void printTree_Widget (const iWidget *); +void identify_Widget (const iWidget *); /* prints to stdout */ -- cgit v1.2.3