/** Parse tray. */ void ParseTray(const TokenNode *tp) { static const StringMappingType mapping[] = { { "bottom", THIDE_BOTTOM }, { "left", THIDE_LEFT }, { "off", THIDE_OFF }, { "right", THIDE_RIGHT }, { "top", THIDE_TOP } }; const TokenNode *np; const char *attr; TrayType *tray; TrayAutoHideType autohide; Assert(tp); tray = CreateTray(); autohide = ParseAttribute(mapping, ARRAY_LENGTH(mapping), tp, "autohide", THIDE_OFF); SetAutoHideTray(tray, autohide); attr = FindAttribute(tp->attributes, X_ATTRIBUTE); if(attr) { SetTrayX(tray, attr); } attr = FindAttribute(tp->attributes, Y_ATTRIBUTE); if(attr) { SetTrayY(tray, attr); } attr = FindAttribute(tp->attributes, WIDTH_ATTRIBUTE); if(attr) { SetTrayWidth(tray, attr); } attr = FindAttribute(tp->attributes, HEIGHT_ATTRIBUTE); if(attr) { SetTrayHeight(tray, attr); } attr = FindAttribute(tp->attributes, "valign"); SetTrayVerticalAlignment(tray, attr); attr = FindAttribute(tp->attributes, "halign"); SetTrayHorizontalAlignment(tray, attr); attr = FindAttribute(tp->attributes, "layout"); SetTrayLayout(tray, attr); attr = FindAttribute(tp->attributes, "layer"); if(attr) { SetTrayLayer(tray, ParseLayer(tp, attr)); } for(np = tp->subnodeHead; np; np = np->next) { switch(np->type) { case TOK_PAGER: ParsePager(np, tray); break; case TOK_TASKLIST: ParseTaskList(np, tray); break; case TOK_SWALLOW: ParseSwallow(np, tray); break; case TOK_TRAYBUTTON: ParseTrayButton(np, tray); break; case TOK_CLOCK: ParseClock(np, tray); break; case TOK_DOCK: ParseDock(np, tray); break; case TOK_SPACER: ParseSpacer(np, tray); break; default: InvalidTag(np, TOK_TRAY); break; } } }
/** Parse tray. */ void ParseTray(const TokenNode *tp) { const TokenNode *np; const char *attr; TrayType *tray; Assert(tp); tray = CreateTray(); attr = FindAttribute(tp->attributes, AUTOHIDE_ATTRIBUTE); if(attr && !strcmp(attr, TRUE_VALUE)) { SetAutoHideTray(tray, 1); } else { SetAutoHideTray(tray, 0); } attr = FindAttribute(tp->attributes, X_ATTRIBUTE); if(attr) { SetTrayX(tray, attr); } attr = FindAttribute(tp->attributes, Y_ATTRIBUTE); if(attr) { SetTrayY(tray, attr); } attr = FindAttribute(tp->attributes, WIDTH_ATTRIBUTE); if(attr) { SetTrayWidth(tray, attr); } attr = FindAttribute(tp->attributes, HEIGHT_ATTRIBUTE); if(attr) { SetTrayHeight(tray, attr); } attr = FindAttribute(tp->attributes, VALIGN_ATTRIBUTE); SetTrayVerticalAlignment(tray, attr); attr = FindAttribute(tp->attributes, HALIGN_ATTRIBUTE); SetTrayHorizontalAlignment(tray, attr); attr = FindAttribute(tp->attributes, LAYOUT_ATTRIBUTE); SetTrayLayout(tray, attr); attr = FindAttribute(tp->attributes, LAYER_ATTRIBUTE); if(attr) { const WinLayerType layer = ParseLayer(tp, attr); SetTrayLayer(tray, layer); } attr = FindAttribute(tp->attributes, BORDER_ATTRIBUTE); if(attr) { tray->border = ParseUnsigned(tp, attr); } for(np = tp->subnodeHead; np; np = np->next) { switch(np->type) { case TOK_PAGER: ParsePager(np, tray); break; case TOK_TASKLIST: ParseTaskList(np, tray); break; case TOK_SWALLOW: ParseSwallow(np, tray); break; case TOK_TRAYBUTTON: ParseTrayButton(np, tray); break; case TOK_CLOCK: ParseClock(np, tray); break; case TOK_DOCK: ParseDock(np, tray); break; case TOK_SPACER: ParseSpacer(np, tray); break; default: InvalidTag(np, TOK_TRAY); break; } } }