Changes between Initial Version and Version 1 of Docs/Prog/Manual/ApplicationLibraries/lib825ev/Form/EnableItem


Ignore:
Timestamp:
05/17/19 15:11:58 (6 years ago)
Author:
Don Wilson
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Docs/Prog/Manual/ApplicationLibraries/lib825ev/Form/EnableItem

    v1 v1  
     1= !EnableItem =
     2
     3{{{
     4CFormItem* CForm::EnableItem(const char* pszName, bool enable, bool show)
     5}}}
     6
     7== Parameters ==
     8
     9* pszName  =  The button title or input prompt text
     10* enable   =  true to enable the item, false to disable
     11* show     =  true to update the display, false do not update the display
     12
     13== Return Value ==
     14
     15The !EnableItem function returns a pointer to the CFormItem found based on the provided name; NULL is returned if no item is found with a matching name.
     16
     17== Remarks ==
     18
     19Allows conditionally showing items on a form.
     20
     21== Example ==
     22The conditional items are initialized with the FORM_FLAG_DISABLE flag to start out hidden. After the FORM_SHOW is called the !UpdateLocalRemoteForm function is called to show these items based on the data. When the mode or type selection is changed the event !ModeOrTypeChg is called and the event calls !UpdateLocalRemoteForm to update the conditional items appropriately.
     23
     24{{{
     25void UpdateLocalRemoteForm(CForm *pForm)
     26{
     27        int mode = 0;
     28        int type = 0;
     29        vector<const char*> hideItems;
     30        vector<const char*> showItems;
     31
     32        CFormInput *pMode = (CFormInput*)pForm->FindName(LANG(STR_LOCREM_MODE_PROMPT));
     33        if(pMode != NULL)
     34        {
     35                mode = pMode->GetSelItem();
     36        }
     37        CFormInput *pType = (CFormInput*)pForm->FindName(LANG(STR_LOCREM_COMMTYPE_PROMPT));
     38        if(pType != NULL)
     39        {
     40                type = pType->GetSelItem();
     41        }
     42
     43        if(mode == MODE_OFF)
     44        {
     45                hideItems.push_back(LANG(STR_LOCREM_COMMTYPE_PROMPT));
     46                hideItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
     47                hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
     48                hideItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
     49        }
     50        else
     51        {
     52                showItems.push_back(LANG(STR_LOCREM_COMMTYPE_PROMPT));
     53                if(type == SERIAL)
     54                {
     55                        showItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
     56
     57                        hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
     58                        hideItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
     59                }
     60                else
     61                {
     62                        hideItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
     63
     64                        showItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
     65                        if(mode == MODE_REMOTE)
     66                        {
     67                                showItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
     68                        }
     69                        else
     70                        {
     71                                hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
     72                        }
     73                }
     74        }
     75
     76        // Hide items first to allow for conditional items to be at the same place in the form
     77        // Otherwise we might show a condition item and then blank it out
     78        size_t n;
     79        for(n = 0; n < hideItems.size(); n++)
     80        {
     81                pForm->EnableItem(hideItems[n], false, true);
     82        }
     83        for(n = 0; n < showItems.size(); n++)
     84        {
     85                pForm->EnableItem(showItems[n], true, true);
     86        }
     87}
     88
     89int CLocalRemote::Config(void)
     90{
     91
     92        Shutdown();
     93
     94        uint8 byMode = (uint8) GetMode();
     95        commType = (uint8) GetCommType();
     96        commPort = (uint8) GetCommPort();
     97        FORM_INIT(CfgLR, EventLocalRemoteShow, NULL, NULL, NULL, nFormFlgShowHelp);
     98
     99        FORM_ADD_INPUT(CfgLR, Mode, FONT_WIDTH * 0, FONT_HEIGHT * 2, LANG(STR_LOCREM_MODE_PROMPT),     10, 0,     2, EventModeOrTypeChg, &byMode,    FORM_UINT8_SEL,                      LANG(STR_LOCREM_MODE_CHOICES),    LANG(STR_LOCREM_MODE_HELP));
     100        FORM_ADD_INPUT(CfgLR, Type, FONT_WIDTH * 0, FONT_HEIGHT * 4, LANG(STR_LOCREM_COMMTYPE_PROMPT), 10, 0,     1, EventModeOrTypeChg, &commType,  FORM_UINT8_SEL | FORM_FLAG_DISABLE,  LANG(STR_LOCREM_TYPE_CHOICES),    LANG(STR_LOCREM_COMMTYPE_HELP));
     101        FORM_ADD_INPUT(CfgLR, ComP, FONT_WIDTH * 0, FONT_HEIGHT * 6, LANG(STR_LOCREM_COMMPORT_PROMPT), 10, 0,     1, NULL,               &commPort,  FORM_UINT8_SEL | FORM_FLAG_DISABLE,  LANG(STR_LOCREM_COMPORT_CHOICES), LANG(STR_LOCREM_COMPORT_HELP) );
     102        FORM_ADD_INPUT(CfgLR, Port, FONT_WIDTH * 0, FONT_HEIGHT * 6, LANG(STR_LOCREM_PORT_PROMPT),      6, 0, 65535, NULL,               &GetPort(), FORM_UINT32 | FORM_FLAG_DISABLE,     NULL,                             LANG(STR_LOCREM_PORT_HELP));
     103        FORM_ADD_INPUT(CfgLR, IP,   FONT_WIDTH * 0, FONT_HEIGHT * 8, LANG(STR_LOCREM_IPADDR_PROMPT) ,  18, 0,     0, NULL,               GetIP(),    FORM_STR | FORM_FLAG_DISABLE,        NULL,                             LANG(STR_LOCREM_IP_HELP));
     104
     105        FORM_SHOW(CfgLR);
     106
     107        UpdateLocalRemoteForm(&formCfgLR);
     108
     109        int result = FORM_RUN(CfgLR);
     110        FORM_HIDE(CfgLR);
     111
     112        if (result != FORM_RESULT_ESC)
     113        {
     114                SetMode((LocalRemoteMode) byMode);
     115                SetComType((LocalRemoteComm) commType);
     116                SetComPort((LocalRemotePort) commPort);
     117
     118                appCfg.Write();
     119        }
     120
     121        Startup();
     122
     123        return result;
     124}
     125
     126EVENT(ModeOrTypeChg)
     127{
     128        UpdateLocalRemoteForm(pForm);
     129        return 0;
     130}
     131
     132EVENT(LocalRemoteShow)
     133{
     134        ClearLCD();
     135        SetCurColor(COLOR_ATTENTION);
     136        DisplayText(0, 0, LANG(STR_LOCREM_TITLE));
     137
     138        return 0;
     139}
     140
     141}}}
     142