static void tabpage_show_hide(struct widget *self, int visible) { if (visible) { widget_base_set(self, PG_WP_SIDE, PG_S_ALL); } else { widget_base_set(self, PG_WP_SIDE, PG_S_TOP); widget_base_set(self, PG_WP_SIZE, 0); } }
g_error panel_set(struct widget *self,int property, glob data) { struct widget *w; g_error e; struct app_info **app; switch (property) { case PG_WP_SIZE: /* Alias 0 to our minimum rolled-up size */ e = rdhandle((void **) &w, PG_TYPE_WIDGET, self->owner, DATA->hbar); errorcheck; if (data==0) data = w->in->split; widget_base_set(self,property,data); break; case PG_WP_SIDE: e = rdhandle((void **) &w, PG_TYPE_WIDGET, self->owner, DATA->hbar); errorcheck; switch (data) { /* Invert the side for the panelbar */ case PG_S_TOP: widget_set(w,PG_WP_SIDE,PG_S_BOTTOM); break; case PG_S_BOTTOM: widget_set(w,PG_WP_SIDE,PG_S_TOP); break; case PG_S_LEFT: widget_set(w,PG_WP_SIDE,PG_S_RIGHT); break; case PG_S_RIGHT: widget_set(w,PG_WP_SIDE,PG_S_LEFT); break; } return mkerror(ERRT_PASS,0); case PG_WP_THOBJ: DATA->bg->state = data; resizewidget(self); self->in->flags |= DIVNODE_NEED_RECALC; self->dt->flags |= DIVTREE_NEED_RECALC; break; case PG_WP_TEXT: e = rdhandle((void **) &w, PG_TYPE_WIDGET, self->owner, DATA->hlabel); errorcheck; app = appmgr_findapp(self); if (app && *app) (*app)->name = data; return widget_set(w,property,data); case PG_WP_IMAGE: e = rdhandle((void **) &w, PG_TYPE_WIDGET, self->owner, DATA->hlabel); errorcheck; return widget_set(w,property,data); case PG_WP_MARGIN: DATA->margin = data; DATA->margin_override = data >= 0; resizewidget(self); break; default: return mkerror(ERRT_PASS,0); } return success; }
g_error widget_set(struct widget *w, int property, glob data) { g_error e; if (!(w && w->def->set)) return mkerror(PG_ERRT_BADPARAM,23); /* Bad widget in widget_set */ /* If the widget has a handler, go with that */ e = (*w->def->set)(w,property,data); if (errtype(e)!=ERRT_PASS) return e; return widget_base_set(w,property,data); }
g_error tabpage_install(struct widget *self) { g_error e; struct widget *tab; WIDGET_INSTALL_PARENT(PG_WIDGET_BOX); WIDGET_ALLOC_DATA(tabpagedata); /* Set custom defaults */ e = widget_base_set(self, PG_WP_THOBJ, PGTH_O_TAB_PAGE); errorcheck; e = widget_base_set(self, PG_WP_SIZE, 0); errorcheck; /* Go ahead and create the tab. We will attach the tab * later when we're attached ourselves, but create it early so the * properties can be set. */ e = widget_create(&tab, &DATA->htab, PG_WIDGET_BUTTON, self->dt, self->container, self->owner); errorcheck; e = widget_set(tab, PG_WP_EXTDEVENTS, PG_EXEV_TOGGLE | PG_EXEV_EXCLUSIVE); errorcheck; e = widget_set(tab, PG_WP_THOBJ_BUTTON, PGTH_O_TAB); errorcheck; e = widget_set(tab, PG_WP_THOBJ_BUTTON_HILIGHT, PGTH_O_TAB_HILIGHT); errorcheck; e = widget_set(tab, PG_WP_THOBJ_BUTTON_ON, PGTH_O_TAB_ON); errorcheck; e = widget_set(tab, PG_WP_THOBJ_BUTTON_ON_NOHILIGHT, PGTH_O_TAB_ON_NOHILIGHT); errorcheck; tab->callback = &tabpage_tab_callback; tab->callback_owner = self; return success; }