wiki:Docs/Prog/Manual/ApplicationLibraries/lib825ev/Form/CForm

Version 9 (modified by Don Wilson, 6 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

The 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.

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, 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));
	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.