cawUi.cpp,cawUiDecl.h : Added 'meter' implementation.

This commit is contained in:
kevin 2024-10-14 14:26:00 -04:00
parent d72e26caaf
commit 3ae48f3fc5
2 changed files with 118 additions and 18 deletions

View File

@ -60,7 +60,7 @@ namespace caw {
rc_t rc = kOkRC; rc_t rc = kOkRC;
if((rc = uiCreateCheck(p->ioH, uuid_ref, widgetListUuId, nullptr, kCheckWidgetId, kInvalidId, nullptr, nullptr )) != kOkRC ) if((rc = uiCreateCheck(p->ioH, uuid_ref, widgetListUuId, nullptr, kCheckWidgetId, kInvalidId, nullptr, nullptr )) != kOkRC )
{ {
rc = cwLogError(rc,"Check box widget create failed on '%s'.",cwStringNullGuard(ui_var->label)); rc = cwLogError(rc,"Check box widget create failed on '%s:%i'.",cwStringNullGuard(ui_var->label),ui_var->label_sfx_id);
} }
return rc; return rc;
@ -72,7 +72,7 @@ namespace caw {
if((rc = uiCreateNumb( p->ioH, uuid_ref, widgetListUuId, nullptr, appId, kInvalidId, nullptr, nullptr, min_val, max_val, step, dec_pl )) != kOkRC ) if((rc = uiCreateNumb( p->ioH, uuid_ref, widgetListUuId, nullptr, appId, kInvalidId, nullptr, nullptr, min_val, max_val, step, dec_pl )) != kOkRC )
{ {
rc = cwLogError(rc,"Integer widget create failed on '%s'.",cwStringNullGuard(ui_var->label)); rc = cwLogError(rc,"Integer widget create failed on '%s:%i'.",cwStringNullGuard(ui_var->label),ui_var->label_sfx_id);
goto errLabel; goto errLabel;
} }
@ -80,12 +80,12 @@ namespace caw {
return rc; return rc;
} }
rc_t _create_string_widgets( ui_t* p, unsigned widgetListUuId, const flow::ui_var_t* ui_var, unsigned& uuid_ref ) rc_t _create_string_widget( ui_t* p, unsigned widgetListUuId, const flow::ui_var_t* ui_var, unsigned& uuid_ref )
{ {
rc_t rc = kOkRC; rc_t rc = kOkRC;
if((rc = uiCreateStr( p->ioH, uuid_ref, widgetListUuId, nullptr, kStringWidgetId, kInvalidId, nullptr, nullptr )) != kOkRC ) if((rc = uiCreateStr( p->ioH, uuid_ref, widgetListUuId, nullptr, kStringWidgetId, kInvalidId, nullptr, nullptr )) != kOkRC )
{ {
rc = cwLogError(rc,"String widget create failed on '%s'.",cwStringNullGuard(ui_var->label)); rc = cwLogError(rc,"String widget create failed on '%s:%i'.",cwStringNullGuard(ui_var->label),ui_var->label_sfx_id);
goto errLabel; goto errLabel;
} }
@ -93,6 +93,20 @@ namespace caw {
return rc; return rc;
} }
rc_t _create_meter_widget( ui_t* p, unsigned widgetListUuId, const flow::ui_var_t* ui_var, unsigned& uuid_ref, double min_val, double max_val )
{
rc_t rc = kOkRC;
if((rc = uiCreateProg(p->ioH, uuid_ref, widgetListUuId, nullptr, kMeterWidgetId, kInvalidId, nullptr, nullptr, min_val, max_val )) != kOkRC )
{
rc = cwLogError(rc,"Meter widget create failed on '%s:%i'.",cwStringNullGuard(ui_var->label),ui_var->label_sfx_id);
goto errLabel;
}
errLabel:
return rc;
}
rc_t _create_var_label( ui_t* p, unsigned parentListUuId, const flow::ui_var_t* ui_var, const char* label, unsigned var_idx ) rc_t _create_var_label( ui_t* p, unsigned parentListUuId, const flow::ui_var_t* ui_var, const char* label, unsigned var_idx )
{ {
rc_t rc; rc_t rc;
@ -104,18 +118,87 @@ namespace caw {
} }
errLabel:
return rc;
}
rc_t _get_widget_type_id( const flow::ui_var_t* ui_var, unsigned& widget_type_id_ref )
{
rc_t rc = kOkRC;
unsigned value_type_flag = ui_var->value_tid & flow::kTypeMask;
const object_t* cfg = nullptr;
const object_t* ui_cfg = nullptr;
const char* widget_type_label = nullptr;
idLabelPair_t typeA[] = {
{ kMeterWidgetId, "meter" },
{ kInvalidId, nullptr }
};
widget_type_id_ref = kInvalidId;
switch( value_type_flag )
{
case flow::kBoolTFl: widget_type_id_ref = kCheckWidgetId; break;
case flow::kIntTFl: widget_type_id_ref = kIntWidgetId; break;
case flow::kUIntTFl: widget_type_id_ref = kUIntWidgetId; break;
case flow::kFloatTFl: widget_type_id_ref = kFloatWidgetId; break;
case flow::kDoubleTFl: widget_type_id_ref = kDoubleWidgetId; break;
case flow::kStringTFl: widget_type_id_ref = kStringWidgetId; break;
}
// get the proc desc 'vars' dict.
if((rc = ui_var->ui_proc->proc->class_desc->cfg->getv_opt("vars",cfg)) != kOkRC )
{
rc = cwLogError(rc,"Error parsing proc desc. 'vars'.");
goto errLabel;
}
// locate this 'var' in the var-list
if((cfg = cfg->find(ui_var->label)) == nullptr )
{
rc = cwLogError(rc,"Error locating 'var' '%s' on proc desc.",ui_var->label);
goto errLabel;
}
// get the 'ui' record for this var
if((rc = cfg->getv_opt("ui",ui_cfg)) != kOkRC )
{
rc = cwLogError(rc,"Error parsing variable 'ui' cfg.");
goto errLabel;
}
// if a 'ui' record was found
if( ui_cfg != nullptr )
{
// get the type of this 'ui' widget
if((rc = ui_cfg->getv("type",widget_type_label)) != kOkRC )
{
rc = cwLogError(rc,"Error parsing variable 'ui' type cfg.");
goto errLabel;
}
//
if((widget_type_id_ref = labelToId(typeA,widget_type_label,kInvalidId)) == kInvalidId )
{
rc = cwLogError(rc,"An unknown widget type '%s' was encountered.",widget_type_label);
goto errLabel;
}
}
errLabel: errLabel:
return rc; return rc;
} }
rc_t _create_var_ui( ui_t* p, unsigned parentListUuId, const flow::ui_var_t* ui_var, unsigned var_idx ) rc_t _create_var_ui( ui_t* p, unsigned parentListUuId, const flow::ui_var_t* ui_var, unsigned var_idx )
{ {
rc_t rc = kOkRC; rc_t rc = kOkRC;
unsigned widgetListUuId = kInvalidId; unsigned widgetListUuId = kInvalidId;
unsigned varUuId = kInvalidId; unsigned varUuId = kInvalidId;
unsigned value_type_flag = 0; unsigned widget_type_id = kInvalidId;
unsigned widget_uuId = kInvalidId; unsigned widget_uuId = kInvalidId;
// insert the var panel // insert the var panel
@ -127,21 +210,26 @@ namespace caw {
// if this is a blank panel // if this is a blank panel
if( ui_var == nullptr ) if( ui_var == nullptr )
goto errLabel; goto errLabel;
value_type_flag = ui_var->value_tid & flow::kTypeMask; // get the type of this widget
if((rc= _get_widget_type_id( ui_var, widget_type_id )) != kOkRC )
{
goto errLabel;
}
varUuId = uiFindElementUuId( p->ioH, parentListUuId, kVarPanelId, var_idx ); varUuId = uiFindElementUuId( p->ioH, parentListUuId, kVarPanelId, var_idx );
widgetListUuId = uiFindElementUuId( p->ioH, varUuId, kWidgetListId, kInvalidId ); widgetListUuId = uiFindElementUuId( p->ioH, varUuId, kWidgetListId, kInvalidId );
//printf("%i %i %i\n",var_idx, varUuId,widgetListUuId); //printf("%i %i %i\n",var_idx, varUuId,widgetListUuId);
switch( value_type_flag ) switch( widget_type_id )
{ {
case flow::kBoolTFl: case kCheckWidgetId:
rc = _create_bool_widgets(p,widgetListUuId,ui_var,widget_uuId); rc = _create_bool_widgets(p,widgetListUuId,ui_var,widget_uuId);
break; break;
case flow::kIntTFl: case kIntWidgetId:
{ {
int min_val = std::numeric_limits<int>::min(); int min_val = std::numeric_limits<int>::min();
int max_val = std::numeric_limits<int>::max(); int max_val = std::numeric_limits<int>::max();
@ -149,7 +237,7 @@ namespace caw {
} }
break; break;
case flow::kUIntTFl: case kUIntWidgetId:
{ {
unsigned min_val = 0; unsigned min_val = 0;
unsigned max_val = std::numeric_limits<unsigned>::max(); unsigned max_val = std::numeric_limits<unsigned>::max();
@ -157,7 +245,7 @@ namespace caw {
} }
break; break;
case flow::kFloatTFl: case kFloatWidgetId:
{ {
float min_val = std::numeric_limits<float>::min(); float min_val = std::numeric_limits<float>::min();
float max_val = std::numeric_limits<float>::max(); float max_val = std::numeric_limits<float>::max();
@ -165,7 +253,7 @@ namespace caw {
} }
break; break;
case flow::kDoubleTFl: case kDoubleWidgetId:
{ {
double min_val = std::numeric_limits<float>::min(); double min_val = std::numeric_limits<float>::min();
double max_val = std::numeric_limits<float>::max(); double max_val = std::numeric_limits<float>::max();
@ -173,12 +261,21 @@ namespace caw {
} }
break; break;
case flow::kStringTFl: case kStringWidgetId:
rc = _create_string_widgets(p,widgetListUuId,ui_var,widget_uuId); rc = _create_string_widget(p,widgetListUuId,ui_var,widget_uuId);
break;
case kMeterWidgetId:
{
double min_val = -100.0;
double max_val = 0;
rc = _create_meter_widget(p,widgetListUuId,ui_var,widget_uuId,min_val,max_val);
}
break; break;
default: default:
{ {
/*
const char* type_label; const char* type_label;
if((type_label = flow::value_type_flag_to_label(value_type_flag)) != nullptr ) if((type_label = flow::value_type_flag_to_label(value_type_flag)) != nullptr )
cwLogWarning("No UI widgets for type:%s",type_label); cwLogWarning("No UI widgets for type:%s",type_label);
@ -186,7 +283,7 @@ namespace caw {
{ {
cwLogError(kInvalidArgRC,"The value type flag: 0x%x is not known. No UI widget was created.",value_type_flag); cwLogError(kInvalidArgRC,"The value type flag: 0x%x is not known. No UI widget was created.",value_type_flag);
} }
*/
goto errLabel; goto errLabel;
} }
@ -200,6 +297,9 @@ namespace caw {
if( ui_var->desc_flags & flow::kInitVarDescFl ) if( ui_var->desc_flags & flow::kInitVarDescFl )
uiClearEnable(p->ioH, widget_uuId ); uiClearEnable(p->ioH, widget_uuId );
if((rc = set_variable_user_id( p->ioFlowH, ui_var, widget_uuId )) != kOkRC )
goto errLabel;
} }

View File

@ -37,7 +37,7 @@ namespace caw {
kFloatWidgetId, kFloatWidgetId,
kDoubleWidgetId, kDoubleWidgetId,
kStringWidgetId, kStringWidgetId,
kMeterWidgetId,
kPgmBaseSelId, kPgmBaseSelId,