cmUi.h/c and cmUiDrvr.h/c: Many changes and additions.

This commit is contained in:
kevin 2013-04-08 23:06:44 -07:00
parent 7859bd0a8c
commit cb693a1c8e
4 changed files with 817 additions and 480 deletions

1030
cmUi.c

File diff suppressed because it is too large Load Diff

196
cmUi.h
View File

@ -61,8 +61,13 @@ extern "C" {
and all callbacks from the cmUi to the master app. and all callbacks from the cmUi to the master app.
use the cmUiDriverArg_t structure use the cmUiDriverArg_t structure
3) The panel tabs act like radio buttons. When a tab is
selected the clicked tab generates one event for each
tab (cId=kPanelUiCId usrId=panelId) w/ ival=1 for the
selected tab and ival=0 for all other tabs.
TODO: TODO:
0) Remove the 'cbArg' from the cmUiDriverArg_t record and 0) [DONE] Remove the 'cbArg' from the cmUiDriverArg_t record and
pass it as a separate paramenter in the cmUiDriverFunc_t calls. pass it as a separate paramenter in the cmUiDriverFunc_t calls.
1) The controls should be based on a multilevel tree model 1) The controls should be based on a multilevel tree model
@ -93,9 +98,9 @@ extern "C" {
Many of the fields are not use for event callbacks. Many of the fields are not use for event callbacks.
Which fields are used under which circumstances should Which fields are used under which circumstances should
be documented. This would allow decreasing the size be documented. This would allow decreasing the size
of the record during serialization.7 of the record during serialization.
6) Write a serialization/deserialization routines for cmUiDriverArg_t. 6) [DONE] Write a serialization/deserialization routines for cmUiDriverArg_t.
unsigned cmUiDriverArgSerialBufByteCount(const cmUiDriverArg_t* a); unsigned cmUiDriverArgSerialBufByteCount(const cmUiDriverArg_t* a);
cmUiRC_t cmUiDriverArgSerialize( const cmUiDriverArg_t* a, char* buf, bufByteCnt ); cmUiRC_t cmUiDriverArgSerialize( const cmUiDriverArg_t* a, char* buf, bufByteCnt );
cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, const char* buf, bufByteCnt ); cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, const char* buf, bufByteCnt );
@ -153,7 +158,11 @@ extern "C" {
// Automatically sets and restores the ambient appId. // Automatically sets and restores the ambient appId.
// In a plug-in context this function is generally called // In a plug-in context this function is generally called
// just prior a instantiating a plug-in object. // just prior a instantiating a plug-in object.
cmUiRC_t cmUiCreateApp( cmUiH_t uiH, unsigned appId ); cmUiRC_t cmUiCreateApp( cmUiH_t uiH, unsigned appId, unsigned asSubIdx );
// Return true if 'appId' is active.
bool cmUiAppIsActive( cmUiH_t uiH, unsigned appId );
// Notify the cmUi manager that the resources associated // Notify the cmUi manager that the resources associated
// with a client application can be released. // with a client application can be released.
@ -170,7 +179,10 @@ extern "C" {
// 'appId' an ambient parameter the User API calls are slightly // 'appId' an ambient parameter the User API calls are slightly
// simplified because they do not have to include it in each of the // simplified because they do not have to include it in each of the
// function calls. // function calls.
cmUiRC_t cmUiSetAppId( cmUiH_t uiH, unsigned appId ); //cmUiRC_t cmUiSetAppId( cmUiH_t uiH, unsigned appId );
//unsigned cmUiAppId( cmUiH_t uiH );
unsigned cmUiAppIdToAsSubIndex( cmUiH_t uiH, unsigned appId );
// Return the count of app's. // Return the count of app's.
unsigned cmUiAppCount( cmUiH_t uiH ); unsigned cmUiAppCount( cmUiH_t uiH );
@ -185,46 +197,59 @@ extern "C" {
// Client Application API // Client Application API
// //
// See above note on panel tabs acting like radio buttons.
cmUiRC_t cmUiCreatePanel( cmUiH_t uiH, unsigned appId, unsigned newPanelId, const cmChar_t* label, unsigned flags );
cmUiRC_t cmUiCreatePanel( cmUiH_t uiH, unsigned newPanelId, const cmChar_t* label ); cmUiRC_t cmUiCreateBtn( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags );
cmUiRC_t cmUiCreateCheck( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, bool dflt );
cmUiRC_t cmUiCreateBtn( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags ); cmUiRC_t cmUiCreateLabel( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags );
cmUiRC_t cmUiCreateCheck( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, bool dflt ); cmUiRC_t cmUiCreateString( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* text );
cmUiRC_t cmUiCreateLabel( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags ); cmUiRC_t cmUiCreateConsole( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* text );
cmUiRC_t cmUiCreateText( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* text ); cmUiRC_t cmUiCreateNumber( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt );
cmUiRC_t cmUiCreateNumber( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt ); cmUiRC_t cmUiCreateHSlider( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt );
cmUiRC_t cmUiCreateHSlider( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt ); cmUiRC_t cmUiCreateVSlider( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt );
cmUiRC_t cmUiCreateVSlider( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, double min, double max, double incr, double dflt ); cmUiRC_t cmUiCreateProgress( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt );
cmUiRC_t cmUiCreateProgress( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt ); cmUiRC_t cmUiCreateHMeter( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt );
cmUiRC_t cmUiCreateHMeter( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt ); cmUiRC_t cmUiCreateVMeter( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt );
cmUiRC_t cmUiCreateVMeter( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, int min, int max, int dflt ); cmUiRC_t cmUiCreateFileBtn( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* dfltDir, const cmChar_t* patStr );
cmUiRC_t cmUiCreateFileBtn( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* dfltDir, const cmChar_t* patStr ); cmUiRC_t cmUiCreateDirBtn( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* dfltDir );
cmUiRC_t cmUiCreateDirBtn( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, const cmChar_t* dfltDir ); cmUiRC_t cmUiCreateMenuBtn( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags );
cmUiRC_t cmUiCreateMenuBtn( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags ); cmUiRC_t cmUiCreateMenuBtnV( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmChar_t* label0, unsigned id0, va_list vl );
cmUiRC_t cmUiCreateMenuBtnV( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmChar_t* label0, unsigned id0, va_list vl ); cmUiRC_t cmUiCreateMenuBtnA( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmChar_t* label0, unsigned id0, ... );
cmUiRC_t cmUiCreateMenuBtnA( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmChar_t* label0, unsigned id0, ... ); cmUiRC_t cmUiCreateMenuBtnJson( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmJsonNode_t* root, const cmChar_t* memberLabel );
cmUiRC_t cmUiCreateMenuBtnJson( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* lavel, unsigned flags, const cmJsonNode_t* root, const cmChar_t* memberLabel ); cmUiRC_t cmUiCreateList( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt );
cmUiRC_t cmUiCreateList( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt ); cmUiRC_t cmUiCreateListV( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmChar_t* label0, unsigned id0, va_list vl );
cmUiRC_t cmUiCreateListV( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmChar_t* label0, unsigned id0, va_list vl ); cmUiRC_t cmUiCreateListA( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmChar_t* label0, unsigned id0, ... );
cmUiRC_t cmUiCreateListA( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmChar_t* label0, unsigned id0, ... ); cmUiRC_t cmUiCreateListJson( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmJsonNode_t* root, const cmChar_t* memberLabel );
cmUiRC_t cmUiCreateListJson( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* label, unsigned flags, unsigned visibleRowCnt, const cmJsonNode_t* root, const cmChar_t* memberLabel );
// If 'id' identifies a 'list' control use tabs as column separators. // If 'id' identifies a 'list' control use tabs as column separators.
cmUiRC_t cmUiAppendListEle( cmUiH_t uiH, unsigned panelId, unsigned id, const cmChar_t* text, unsigned eleId ); cmUiRC_t cmUiAppendListEle( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, const cmChar_t* text, unsigned eleId );
// Remove all the elements of a list control.
cmUiRC_t cmUiClearList( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id );
// Enable/Disable a control
cmUiRC_t cmUiEnableCtl( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id, bool enableFl );
// Enable/disable all controls on a panel except those included in the var args list.
// Terminate the var args list with cmInvalidId.
cmUiRC_t cmUiEnableAllExceptV( cmUiH_t uiH, unsigned appId, unsigned panelId, bool enableFl, va_list vl );
cmUiRC_t cmUiEnableAllExcept( cmUiH_t uiH, unsigned appId, unsigned panelId, bool enableFl, ... );
// If 'id' identifies a panel then all control belonging to the panel // If 'id' identifies a panel then all control belonging to the panel
// will also be destroyed. // will also be destroyed.
cmUiRC_t cmUiDestroyCtl( cmUiH_t uiH, unsigned id ); cmUiRC_t cmUiDestroyCtl( cmUiH_t uiH, unsigned appId, unsigned id );
// Returns true if the control exists. // Returns true if the control exists.
// For panels set id=panelId. // For panels set id=panelId.
bool cmUiCtlExists( cmUiH_t uiH, unsigned panelId, unsigned id ); //bool cmUiCtlExists( cmUiH_t uiH, unsigned appId, unsigned panelId, unsigned id );
// Destroy all the controls in a panel. // Destroy all the controls in a panel.
cmUiRC_t cmUiClearPanel( cmUiH_t uiH, unsigned panelId ); cmUiRC_t cmUiClearPanel( cmUiH_t uiH, unsigned appId, unsigned panelId );
//------------------------------------------------------------------------------------------
// Location: // Location:
// 1) If a 'next rect' is set the control will be placed according to it. // 1) If a 'next rect' is set the control will be placed according to it.
// 2) If cmUiSetBaseCol() was set then the control will be placed at the // 2) If cmUiSetBaseCol() was set then the control will be placed at the
// base col and base row. // base col and base row.
@ -242,29 +267,29 @@ extern "C" {
// Get/Set the fill directions. If the 'fill columns' flag is enabled // Get/Set the fill directions. If the 'fill columns' flag is enabled
// then the next control is placed below the previous control otherwise // then the next control is placed below the previous control otherwise
// the next control is placed to the right of the next control. // the next control is placed to the right of the next control.
bool cmUiFillRows( cmUiH_t uiH, unsigned panelId ); bool cmUiFillRows( cmUiH_t uiH, unsigned appId, unsigned panelId );
bool cmUiSetFillRows( cmUiH_t uiH, unsigned panelId, bool enableFl ); bool cmUiSetFillRows( cmUiH_t uiH, unsigned appId, unsigned panelId, bool enableFl );
// Place the next control to the right/below of the previous ctl. // Place the next control to the right/below of the previous ctl.
// These flags override the current fill row/col setting. // These flags override the current fill row/col setting.
// Note that 'place right' and 'place below' are mutually // Note that 'place right' and 'place below' are mutually
// exclusive. Enabling one disables the other. // exclusive. Enabling one disables the other.
void cmUiPlaceRight( cmUiH_t uiH, unsigned panelId ); void cmUiPlaceRight( cmUiH_t uiH, unsigned appId, unsigned panelId );
void cmUiPlaceBelow( cmUiH_t uiH, unsigned panelId ); void cmUiPlaceBelow( cmUiH_t uiH, unsigned appId, unsigned panelId );
// Place the next control at the base column below the previous ctl. // Place the next control at the base column below the previous ctl.
void cmUiNewLine( cmUiH_t uiH, unsigned panelId ); void cmUiNewLine( cmUiH_t uiH, unsigned appId, unsigned panelId );
// Set/Get current base col and return previous value. Place the next // Set/Get current base col and return previous value. Place the next
// control on the base row. // control on the base row.
int cmUiBaseCol( cmUiH_t uiH, unsigned panelId ); int cmUiBaseCol( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiSetBaseCol( cmUiH_t uiH, unsigned panelId, int x ); int cmUiSetBaseCol( cmUiH_t uiH, unsigned appId, unsigned panelId, int x );
// Set/Get current base row and return previous value. // Set/Get current base row and return previous value.
int cmUiBaseRow( cmUiH_t uiH, unsigned panelId ); int cmUiBaseRow( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiSetBaseRow( cmUiH_t uiH, unsigned panelId, int y ); int cmUiSetBaseRow( cmUiH_t uiH, unsigned appId, unsigned panelId, int y );
// Size: // Size:
// 1) If a 'next rect' is set the control will be placed according // 1) If a 'next rect' is set the control will be placed according
@ -277,81 +302,80 @@ extern "C" {
// Get/Set the default control width and height. // Get/Set the default control width and height.
// Set returns previous value. // Set returns previous value.
int cmUiW( cmUiH_t uiH, unsigned panelId ); int cmUiW( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiH( cmUiH_t uiH, unsigned panelId ); int cmUiH( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiSetW( cmUiH_t uiH, unsigned panelId, int w ); int cmUiSetW( cmUiH_t uiH, unsigned appId, unsigned panelId, int w );
int cmUiSetH( cmUiH_t uiH, unsigned panelId, int h ); int cmUiSetH( cmUiH_t uiH, unsigned appId, unsigned panelId, int h );
void cmUiSetWH( cmUiH_t uiH, unsigned panelId, int w, int h ); void cmUiSetWH( cmUiH_t uiH, unsigned appId, unsigned panelId, int w, int h );
// Get/Set the control width and height for only the next control. // Get/Set the control width and height for only the next control.
// Set returns previous value. // Set returns previous value.
int cmUiNextW( cmUiH_t uiH, unsigned panelId ); int cmUiNextW( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiNextH( cmUiH_t uiH, unsigned panelId ); int cmUiNextH( cmUiH_t uiH, unsigned appId, unsigned panelId );
void cmUiSetNextW( cmUiH_t uiH, unsigned panelId, int w ); void cmUiSetNextW( cmUiH_t uiH, unsigned appId, unsigned panelId, int w );
void cmUiSetNextH( cmUiH_t uiH, unsigned panelId, int h ); void cmUiSetNextH( cmUiH_t uiH, unsigned appId, unsigned panelId, int h );
void cmUiSetNextWH( cmUiH_t uiH, unsigned panelId, int w, int h ); void cmUiSetNextWH( cmUiH_t uiH, unsigned appId, unsigned panelId, int w, int h );
// Get/Set the default inter-control borders // Get/Set the default inter-control borders
// Set returns previous value. // Set returns previous value.
int cmUiHBorder( cmUiH_t uiH, unsigned panelId ); int cmUiHBorder( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiVBorder( cmUiH_t uiH, unsigned panelId ); int cmUiVBorder( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiSetHBorder( cmUiH_t uiH, unsigned panelId, int w ); int cmUiSetHBorder( cmUiH_t uiH, unsigned appId, unsigned panelId, int w );
int cmUiSetVBorder( cmUiH_t uiH, unsigned panelId, int h ); int cmUiSetVBorder( cmUiH_t uiH, unsigned appId, unsigned panelId, int h );
// Get/Set the 'next' inter-control borders // Get/Set the 'next' inter-control borders
// Set returns previous value. // Set returns previous value.
int cmUiNextHBorder( cmUiH_t uiH, unsigned panelId ); int cmUiNextHBorder( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiNextVBorder( cmUiH_t uiH, unsigned panelId ); int cmUiNextVBorder( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiSetNextHBorder( cmUiH_t uiH, unsigned panelId, int w ); int cmUiSetNextHBorder( cmUiH_t uiH, unsigned appId, unsigned panelId, int w );
int cmUiSetNextVBorder( cmUiH_t uiH, unsigned panelId, int h ); int cmUiSetNextVBorder( cmUiH_t uiH, unsigned appId, unsigned panelId, int h );
// Place the next control at the following coordinates. The // Place the next control at the following coordinates. The
// specified coordinates are only active during the next // specified coordinates are only active during the next
// cmUiCreateXXX() call. Setting the 'next rect' overrides all // cmUiCreateXXX() call. Setting the 'next rect' overrides all
// other layout directives. // other layout directives.
cmUiRC_t cmUiNextRect( cmUiH_t uiH, unsigned panelId, int x, int y, int w, int h ); cmUiRC_t cmUiNextRect( cmUiH_t uiH, unsigned appId, unsigned panelId, int x, int y, int w, int h );
// Get the location/size of the previously created control. // Get the location/size of the previously created control.
// All ref. args are optional. // All ref. args are optional.
cmUiRC_t cmUiPrevRect( cmUiH_t uiH, unsigned panelId, int* xRef, int* yRef, int* wRef, int* hRef ); cmUiRC_t cmUiPrevRect( cmUiH_t uiH, unsigned appId, unsigned panelId, int* xRef, int* yRef, int* wRef, int* hRef );
int cmUiPrevL( cmUiH_t uiH, unsigned panelId ); int cmUiPrevL( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiPrevT( cmUiH_t uiH, unsigned panelId ); int cmUiPrevT( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiPrevR( cmUiH_t uiH, unsigned panelId ); int cmUiPrevR( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiPrevB( cmUiH_t uiH, unsigned panelId ); int cmUiPrevB( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiPrevW( cmUiH_t uiH, unsigned panelId ); int cmUiPrevW( cmUiH_t uiH, unsigned appId, unsigned panelId );
int cmUiPrevH( cmUiH_t uiH, unsigned panelId ); int cmUiPrevH( cmUiH_t uiH, unsigned appId, unsigned panelId );
//------------------------------------------------------------------------------------------
// //
// Get/set the value of UI control. // Get/set the value of UI control.
// //
// TODO: // TODO:
// 1) Still need functions for setting auxilliary values like // + Need functions for setting auxilliary values like
// min,max,etc.. // min,max,etc..
// 2) A coherent model needs to be selected for determining
// how local values get set. As it is local values are
// only set via callbacs from the UI driver.
// Set the value associated with a control. // Set the value associated with a control.
// These functions would be better named 'cmUiSendXXX()' since // Set the local value of the specified control and then
// they don't actually set the local value but rather call the // send the value to the UI driver so that the UI reflects this value.
// driver to set the UI value. The driver may then respond with cmUiRC_t cmUiSetInt( cmUiH_t uiH, unsigned appId, unsigned id, int v );
// a callback which will set the local value. One advantage of cmUiRC_t cmUiSetUInt( cmUiH_t uiH, unsigned appId, unsigned id, unsigned v );
// this is that the value will be filtered according to the cmUiRC_t cmUiSetDouble( cmUiH_t uiH, unsigned appId, unsigned id, double v );
// ui's rules (e.g. min, max .... ) cmUiRC_t cmUiSetString( cmUiH_t uiH, unsigned appId, unsigned id, const cmChar_t* v );
cmUiRC_t cmUiSetInt( cmUiH_t uiH, unsigned id, int v ); cmUiRC_t cmUiSetVPrintf(cmUiH_t uiH, unsigned appId, unsigned id, const cmChar_t* fmt, va_list vl );
cmUiRC_t cmUiSetUInt( cmUiH_t uiH, unsigned id, unsigned v ); cmUiRC_t cmUiSetPrintf( cmUiH_t uiH, unsigned appId, unsigned id, const cmChar_t* fmt, ... );
cmUiRC_t cmUiSetDouble( cmUiH_t uiH, unsigned id, double v );
cmUiRC_t cmUiSetString( cmUiH_t uiH, unsigned id, const cmChar_t* v );
// Get the value associated with a control. These functions return // Get the value associated with a control. These functions return
// the control value cached in the local control, they do not need // the control value cached in the local control, they do not need
// to call the driver and are therefore very fast. // to call the driver and are therefore very fast.
int cmUiInt( cmUiH_t uiH, unsigned id ); int cmUiInt( cmUiH_t uiH, unsigned appId, unsigned id );
unsigned cmUiUInt( cmUiH_t uiH, unsigned id ); unsigned cmUiUInt( cmUiH_t uiH, unsigned appId, unsigned id );
double cmUiDouble( cmUiH_t uiH, unsigned id ); double cmUiDouble( cmUiH_t uiH, unsigned appId, unsigned id );
const cmChar_t* cmUiString( cmUiH_t uiH, unsigned id ); const cmChar_t* cmUiString( cmUiH_t uiH, unsigned appId, unsigned id );
unsigned cmUiListEleCount( cmUiH_t uiH, unsigned appId, unsigned id );
unsigned cmUiListEleId( cmUiH_t uiH, unsigned appId, unsigned id, unsigned index );
const cmChar_t* cmUiListEleLabel( cmUiH_t uiH, unsigned appId, unsigned id, unsigned index );
// Query/set the current error state. // Query/set the current error state.
cmUiRC_t cmUiLastRC( cmUiH_t uiH ); cmUiRC_t cmUiLastRC( cmUiH_t uiH );

View File

@ -1,7 +1,10 @@
#include "cmGlobal.h" #include "cmGlobal.h"
#include "cmRtSysMsg.h"
#include "cmUiDrvr.h" #include "cmUiDrvr.h"
void cmUiDriverArgSetup( cmUiDriverArg_t* a, void cmUiDriverArgSetup( cmUiDriverArg_t* a,
unsigned rtSubIdx,
unsigned selId,
cmUiDId_t dId, cmUiDId_t dId,
unsigned appId, unsigned appId,
unsigned usrId, unsigned usrId,
@ -19,7 +22,8 @@ void cmUiDriverArgSetup( cmUiDriverArg_t* a,
{ {
flags = cmEnaFlag(flags,kSvalUiFl,sval!=NULL); flags = cmEnaFlag(flags,kSvalUiFl,sval!=NULL);
a->hdr.rtSubIdx= rtSubIdx;
a->hdr.selId = selId;
a->dId = dId; a->dId = dId;
a->appId = appId; a->appId = appId;
a->usrId = usrId; a->usrId = usrId;
@ -56,7 +60,7 @@ cmUiRC_t cmUiDriverArgSerialize( const cmUiDriverArg_t* a, void* buf, unsigned b
return kOkUiRC; return kOkUiRC;
} }
cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, void* buf, unsigned bufByteCnt ) cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, const void* buf, unsigned bufByteCnt )
{ {
bool fl = bufByteCnt >= sizeof(*a); bool fl = bufByteCnt >= sizeof(*a);
assert( fl ); assert( fl );

View File

@ -14,6 +14,7 @@ extern "C" {
kAppNotFoundUiRC, kAppNotFoundUiRC,
kCtlNotFoundUiRC, kCtlNotFoundUiRC,
kPanelNotFoundUiRC, kPanelNotFoundUiRC,
kInvalidAppIdUiRC,
kPanelFullUiRC, kPanelFullUiRC,
kDrvrErrUiRC, kDrvrErrUiRC,
kInvalidCtlOpUiRC, kInvalidCtlOpUiRC,
@ -21,7 +22,8 @@ extern "C" {
kInvalidIdUiRC, kInvalidIdUiRC,
kSubSysFailUiRC, kSubSysFailUiRC,
kBufTooSmallUiRC, kBufTooSmallUiRC,
kBufCorruptUiRC kBufCorruptUiRC,
kNotImplementedUiRC
}; };
// Built-in control types. // Built-in control types.
@ -34,7 +36,8 @@ extern "C" {
kMenuBtnUiCId, kMenuBtnUiCId,
kListUiCId, kListUiCId,
kLabelUiCId, kLabelUiCId,
kTextUiCId, kStringUiCId,
kConsoleUiCId,
kNumberUiCId, kNumberUiCId,
kSliderUiCId, kSliderUiCId,
kProgressUiCId, kProgressUiCId,
@ -51,7 +54,7 @@ extern "C" {
kCreateCtlDId, kCreateCtlDId,
kDestroyCtlDId, kDestroyCtlDId,
kSetValDId, kSetValDId,
kDestroyAllDId, kEnableDId, // ival holds new enable state
kMaxDId kMaxDId
} cmUiDId_t; } cmUiDId_t;
@ -59,38 +62,43 @@ extern "C" {
enum enum
{ {
// All controls recognize kValUiFl and kLblUiFl // All controls recognize kValUiFl and kLblUiFl
kValUiFl = 0x0000001, kValUiFl = 0x00000001,
kLblUiFl = 0x0000002, kLblUiFl = 0x00000002,
// Flags for Number,Progress,Meter // Flags for Number,Progress,Meter
kMinUiFl = 0x000004, kMinUiFl = 0x00000004,
kMaxUiFl = 0x000010, kMaxUiFl = 0x00000010,
kIncUiFl = 0x000020, kIncUiFl = 0x00000020,
kNumMask = kValUiFl | kMinUiFl | kMaxUiFl | kIncUiFl, kNumMask = kValUiFl | kMinUiFl | kMaxUiFl | kIncUiFl,
kHorzUiFl = 0x000040,
kVertUiFl = 0x000080, kHorzUiFl = 0x00000040,
kVertUiFl = 0x00000080,
// Flags for Filename and Dir // Flags for Filename and Dir
kFnPatUiFl = 0x000100, // file pattern string kFnPatUiFl = 0x00000100, // file pattern string
kFnDirUiFl = 0x000200, // toggle file btn type kFnDirUiFl = 0x00000200, // toggle file btn type
kFnMask = kFnPatUiFl | kFnDirUiFl, kFnMask = kFnPatUiFl | kFnDirUiFl,
// Append list or menu element. // Append list or menu element.
kAppendUiFl = 0x000400, kAppendUiFl = 0x00000400,
kPrependUiFl = 0x00000800,
kClearUiFl = 0x00001000, // clear all ele' from a list or menu
kLeftUiFl = 0x001000, kLeftUiFl = 0x00002000,
kTopUiFl = 0x002000, kTopUiFl = 0x00004000,
kRightUiFl = 0x004000, kRightUiFl = 0x00008000,
kBottomUiFl = 0x008000, kBottomUiFl = 0x00010000,
kHCtrUiFl = 0x010000, kHCtrUiFl = 0x00020000,
kVCtrUiFl = 0x020000, kVCtrUiFl = 0x00040000,
kInsideUiFl = 0x040000, kInsideUiFl = 0x00080000,
// Value flags indicate which value fields are valid // Value flags indicate which value fields are valid
kIvalUiFl = 0x100000, kIvalUiFl = 0x00100000,
kFvalUiFl = 0x200000, kFvalUiFl = 0x00200000,
kSvalUiFl = 0x400000 kSvalUiFl = 0x00400000,
kNoReflectUiFl = 0x01000000, // do not reflect event to the client
}; };
@ -101,6 +109,7 @@ extern "C" {
// because they are used internally as indexes. // because they are used internally as indexes.
typedef struct typedef struct
{ {
cmRtSysMsgHdr_t hdr;
cmUiDId_t dId; // function selector id cmUiDId_t dId; // function selector id
unsigned appId; // app id (plug-in instance id) unsigned appId; // app id (plug-in instance id)
unsigned usrId; // ctl id unsigned usrId; // ctl id
@ -119,6 +128,8 @@ extern "C" {
typedef cmUiRC_t (*cmUiDriverFunc_t)( void* arg, const cmUiDriverArg_t* a ); typedef cmUiRC_t (*cmUiDriverFunc_t)( void* arg, const cmUiDriverArg_t* a );
void cmUiDriverArgSetup( cmUiDriverArg_t* a, void cmUiDriverArgSetup( cmUiDriverArg_t* a,
unsigned rtSubIdx,
unsigned selId,
cmUiDId_t dId, cmUiDId_t dId,
unsigned appId, unsigned appId,
unsigned usrId, unsigned usrId,
@ -144,7 +155,7 @@ extern "C" {
// Return kBufTooSmallUiRC or kBufCorruptUiRC if buffer corruption is detected // Return kBufTooSmallUiRC or kBufCorruptUiRC if buffer corruption is detected
// otherwise returns kOkUiRC. This function does not call cmErrMsg() on error // otherwise returns kOkUiRC. This function does not call cmErrMsg() on error
// the caller is therefore responsible for generating errors. // the caller is therefore responsible for generating errors.
cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, void* buf, unsigned bufByteCnt ); cmUiRC_t cmUiDriverArgDeserialize( cmUiDriverArg_t* a, const void* buf, unsigned bufByteCnt );
// Return an arg. value converted to the requiested type. // Return an arg. value converted to the requiested type.
// Note that numeric values will be automatically converted but // Note that numeric values will be automatically converted but