static void FindWidgets(AG_Widget *wid, AG_Tlist *tl, int depth) { char text[AG_TLIST_LABEL_MAX]; AG_TlistItem *it; AG_Widget *widChld; Strlcpy(text, OBJECT(wid)->name, sizeof(text)); if (AG_OfClass(wid, "AG_Widget:AG_Window:*")) { AG_Window *win = (AG_Window *)wid; Strlcat(text, " (\"", sizeof(text)); Strlcat(text, win->caption, sizeof(text)); Strlcat(text, "\")", sizeof(text)); } it = AG_TlistAddPtr(tl, NULL, text, wid); it->depth = depth; it->cat = "widget"; if (!TAILQ_EMPTY(&OBJECT(wid)->children)) { it->flags |= AG_TLIST_HAS_CHILDREN; } if ((it->flags & AG_TLIST_HAS_CHILDREN) && AG_TlistVisibleChildren(tl, it)) { OBJECT_FOREACH_CHILD(widChld, wid, ag_widget) FindWidgets(widChld, tl, depth+1); } }
/* Load the given object's data from the database. */ int AG_DbObjectLoad(void *obj, AG_Db *db, const char *key) { AG_DbObject *dbo = obj; AG_DataSource *ds; AG_DbEntry dbe; #ifdef AG_DEBUG if (!AG_OfClass(dbo, "AG_DbObject:*")) { AG_SetError("Object is not an AG_DbObject"); return (-1); } #endif if (AG_DbLookup(db, &dbe, key) == -1) { return (-1); } if ((ds = AG_OpenCore(dbe.data, dbe.dataSize)) == NULL) { return (-1); } if (AG_ObjectUnserialize(dbo, ds) == -1) { AG_CloseCore(ds); return (-1); } AG_CloseCore(ds); return (0); }