예제 #1
0
파일: parse.c 프로젝트: Nehamkin/jwm
/** 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;
      }
   }

}
예제 #2
0
파일: parse.c 프로젝트: technosaurus/jwm
/** 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;
      }
   }

}