| Version 7 (modified by , 8 years ago) ( diff ) |
|---|
CForm
C++ class the provides form features. Most applications may use the helper macros FORM_INIT, FORM_ADD_INPUT, FORM_ADD_BUTTON, FORM_SHOW, FORM_RUN, FORM_HIDE, and EVENT to prevent having to work with CForm items directly.
Methods
EnableItem
CFormItem* EnableItem(const char* pszName, bool enable, bool show)
Parameters
pszName = The button title or input prompt text enable = true to enable the item, false to disable show = true to update the display, false do not update the display
Remarks
Allows conditionally showing items on a form.
Example
void UpdateLocalRemoteForm(CForm *pForm)
{
int mode = 0;
int type = 0;
vector<const char*> hideItems;
vector<const char*> showItems;
CFormInput *pMode = (CFormInput*)pForm->FindName(LANG(STR_LOCREM_MODE_PROMPT));
if(pMode != NULL)
{
mode = pMode->GetSelItem();
}
CFormInput *pType = (CFormInput*)pForm->FindName(LANG(STR_LOCREM_COMMTYPE_PROMPT));
if(pType != NULL)
{
type = pType->GetSelItem();
}
if(mode == MODE_OFF)
{
hideItems.push_back(LANG(STR_LOCREM_COMMTYPE_PROMPT));
hideItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
hideItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
}
else
{
showItems.push_back(LANG(STR_LOCREM_COMMTYPE_PROMPT));
if(type == SERIAL)
{
showItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
hideItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
}
else
{
hideItems.push_back(LANG(STR_LOCREM_COMMPORT_PROMPT));
showItems.push_back(LANG(STR_LOCREM_PORT_PROMPT));
if(mode == MODE_REMOTE)
{
showItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
}
else
{
hideItems.push_back(LANG(STR_LOCREM_IPADDR_PROMPT));
}
}
}
// Hide items first to allow for conditional items to be at the same place in the form
// Otherwise we might show a condition item and then blank it out
size_t n;
for(n = 0; n < hideItems.size(); n++)
{
pForm->EnableItem(hideItems[n], false, true);
}
for(n = 0; n < showItems.size(); n++)
{
pForm->EnableItem(showItems[n], true, true);
}
}
int CLocalRemote::Config(void)
{
Shutdown();
uint8 byMode = (uint8) GetMode();
commType = (uint8) GetCommType();
commPort = (uint8) GetCommPort();
FORM_INIT(CfgLR, EventLocalRemoteShow, NULL, NULL, NULL, nFormFlgShowHelp);
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));
FORM_ADD_INPUT(CfgLR, Comm, 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));
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) );
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));
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));
FORM_SHOW(CfgLR);
UpdateLocalRemoteForm(&formCfgLR);
int result = FORM_RUN(CfgLR);
FORM_HIDE(CfgLR);
if (result != FORM_RESULT_ESC)
{
SetMode((LocalRemoteMode) byMode);
SetComType((LocalRemoteComm) commType);
SetComPort((LocalRemotePort) commPort);
appCfg.Write();
}
Startup();
return result;
}
EVENT(ModeOrTypeChg)
{
UpdateLocalRemoteForm(pForm);
return 0;
}
EVENT(LocalRemoteShow)
{
ClearLCD();
SetCurColor(COLOR_ATTENTION);
DisplayText(0, 0, LANG(STR_LOCREM_TITLE));
return 0;
}
Note:
See TracWiki
for help on using the wiki.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/cardinal.gif)