Homepage Demos Overview Downloads Tutorials Reference
Credits
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages | Search

HelpControl.cc

Go to the documentation of this file.
00001 #include "HelpControl.h"
00002 
00003 ControlBase * HelpControl::activate(MotionManager::MC_ID disp_id, Socket * gui) {
00004   char * fmt="  * ";
00005   if(config->main.use_VT100) {
00006     fmt="\33[1m  * \33[0m";
00007     sout->printf("%s","\33[1m* Global commands\33[0m: type these anytime, interpreted directly by Controller\n");
00008   } else
00009     sout->printf("%s","* Global commands: type these anytime, interpreted directly by Controller\n");
00010   sout->printf("%s%s",fmt,"'!refresh' - redisplays the current control (handy on first connecting, or when other output has scrolled it off the screen)\n");
00011   sout->printf("%s%s",fmt,"'!reset' - return to the root control\n");
00012   sout->printf("%s%s",fmt,"'!next' - calls doNextItem() of the current control\n");
00013   sout->printf("%s%s",fmt,"'!prev' - calls doPrevItem() of the current control\n");
00014   sout->printf("%s%s",fmt,"'!select' - calls doSelect() of the current control\n");
00015   sout->printf("%s%s",fmt,"'!cancel' - calls doCancel() of the current control\n");
00016   sout->printf("%s%s",fmt,"'!msg text' - broadcasts text as a TextMsgEvent\n");
00017   sout->printf("%s%s",fmt,"'!hilight [n1 [n2 [...]]]' - hilights zero, one, or more items in the menu\n");
00018   sout->printf("%s%s",fmt,"'!input text' - calls takeInput(text) on the currently hilighted control(s)\n");
00019   sout->printf("%s%s",fmt,"any text not beginning with ! - sent to takeInput() of the current control\n");
00020   report(root,"");
00021   return NullControl::activate(disp_id,gui);
00022 }
00023 
00024 //! displays the menu items of @a r and their descriptions, recursing on submenus
00025 /*! @a prefix is what should be displayed before each menu item (like a bullet point)
00026  *  this is itself prefixed by 2 spaces for each level of recursion.  Word wrapping
00027  *  is performed to maintain the clean indenting */
00028 void HelpControl::report(ControlBase* r, const std::string& prefix) {
00029   if(r==NULL)
00030     return;
00031   const std::vector<ControlBase*>& slots=r->getSlots();
00032   const std::string pre="  "+prefix;
00033   unsigned int numlen=1;
00034   if(slots.size()>1)
00035     numlen=(int)(log(slots.size()-1)/log(10))+1;
00036   for(unsigned int i=0; i<slots.size(); i++) {
00037     if(slots[i]==NULL)
00038       continue;
00039     char * fmt;
00040     std::string nm=slots[i]->getName();
00041     std::string desc=slots[i]->getDescription();
00042     unsigned int len=term_width-(prefix.size()+nm.size()+4+numlen);
00043     if((int)len<0)
00044       len=0;
00045     if(len>desc.size())
00046       len=desc.size();
00047     else
00048       while(len>0 && !isspace(desc[len-1])) len--;
00049     if(config->main.use_VT100)
00050       fmt="\33[1m%s%*d. %s\33[0m: %s\n";
00051     else
00052       fmt="%s%*d. %s: %s\n";
00053     sout->printf(fmt,prefix.c_str(),numlen,i,nm.c_str(),desc.substr(0,len).c_str());
00054     while(len<desc.size() && isspace(desc[len])) len++;
00055     desc=desc.substr(len);
00056     while(desc.size()>0) {
00057       len=term_width-prefix.size();
00058       if((int)len<0)
00059         len=0;
00060       if(len>desc.size())
00061         len=desc.size();
00062       else {
00063         while(len>0 && !isspace(desc[len-1])) len--;
00064         if(len==0)
00065           len=term_width-prefix.size();
00066         if(len>desc.size())
00067           len=desc.size();
00068       }
00069       sout->printf("%s%s\n",std::string(prefix.size(),' ').c_str(),desc.substr(0,len).c_str());
00070       while(len<desc.size() && isspace(desc[len])) len++;
00071       desc=desc.substr(len);
00072     }
00073     report(slots[i],pre);
00074   }
00075 }
00076 
00077 /*! @file
00078  * @brief Implements HelpControl, which recurses through the menu system and outputs the name and description of each item
00079  * @author ejt (Creator)
00080  *
00081  * $Author: ejt $
00082  * $Name: tekkotsu-1_4_1 $
00083  * $Revision: 1.3 $
00084  * $State: Exp $
00085  * $Date: 2003/07/09 00:10:57 $
00086  */
00087 

Tekkotsu v1.4
Generated Sat Jul 19 00:06:30 2003 by Doxygen 1.3.2