cawUi.cpp,cawUiDecl.h,caw.css,ui.cfg,main.cpp : Poly networks are now correctly displayed in UI.
Networks can be instantiated using the load button without restarting the program.
This commit is contained in:
parent
e3b30ad17a
commit
20b29c4cca
@ -28,19 +28,13 @@ namespace caw {
|
|||||||
|
|
||||||
namespace ui {
|
namespace ui {
|
||||||
|
|
||||||
|
|
||||||
typedef struct ui_var_str
|
|
||||||
{
|
|
||||||
|
|
||||||
} ui_var_t;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct ui_str
|
typedef struct ui_str
|
||||||
{
|
{
|
||||||
io::handle_t ioH;
|
io::handle_t ioH;
|
||||||
io_flow_ctl::handle_t ioFlowH;
|
io_flow_ctl::handle_t ioFlowH;
|
||||||
const flow::ui_net_t* ui_net;
|
const flow::ui_net_t* ui_net;
|
||||||
|
unsigned ui_net_idx;
|
||||||
|
|
||||||
} ui_t;
|
} ui_t;
|
||||||
|
|
||||||
@ -48,9 +42,20 @@ namespace caw {
|
|||||||
ui_t* _handleToPtr( handle_t h )
|
ui_t* _handleToPtr( handle_t h )
|
||||||
{ return handleToPtr<handle_t,ui_t>(h); }
|
{ return handleToPtr<handle_t,ui_t>(h); }
|
||||||
|
|
||||||
rc_t _destroy( ui_t* p )
|
rc_t _destroy( ui_t*& p )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
if( p != nullptr && p->ioH.isValid() )
|
||||||
|
{
|
||||||
|
unsigned netPanelUuId = io::uiFindElementUuId( p->ioH, kRootNetPanelId );
|
||||||
|
unsigned netListUuId = io::uiFindElementUuId( p->ioH, netPanelUuId, kNetListId, kInvalidId );
|
||||||
|
|
||||||
|
if( netListUuId != kInvalidId )
|
||||||
|
uiEmptyParent( p->ioH, netListUuId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
mem::release(p);
|
mem::release(p);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -118,6 +123,10 @@ namespace caw {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BUG: This currently does nothing because 'disp_str' elements do not change state when they are disabled.
|
||||||
|
if( (ui_var->desc_flags & flow::kInitVarDescFl) || ui_var->has_source_fl)
|
||||||
|
uiClearEnable(p->ioH, uuId );
|
||||||
|
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
return rc;
|
return rc;
|
||||||
@ -293,8 +302,9 @@ namespace caw {
|
|||||||
{
|
{
|
||||||
uiSetBlob(p->ioH,widget_uuId, &ui_var, sizeof(&ui_var));
|
uiSetBlob(p->ioH,widget_uuId, &ui_var, sizeof(&ui_var));
|
||||||
|
|
||||||
// if this is a 'init' variable then disable it
|
// if this is a 'init' variable or connected to a source variable then disable it
|
||||||
if( ui_var->desc_flags & flow::kInitVarDescFl )
|
// (The UI should not be able to change the value of a var. that is being set by a source in the network.)
|
||||||
|
if( (ui_var->desc_flags & flow::kInitVarDescFl) || ui_var->has_source_fl)
|
||||||
uiClearEnable(p->ioH, widget_uuId );
|
uiClearEnable(p->ioH, widget_uuId );
|
||||||
|
|
||||||
if((rc = set_variable_user_id( p->ioFlowH, ui_var, widget_uuId )) != kOkRC )
|
if((rc = set_variable_user_id( p->ioFlowH, ui_var, widget_uuId )) != kOkRC )
|
||||||
@ -322,32 +332,40 @@ namespace caw {
|
|||||||
|
|
||||||
return n==0 ? 1 : n;
|
return n==0 ? 1 : n;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc_t _create_proc_ui( ui_t* p, unsigned parentListUuId, const flow::ui_proc_t* ui_proc, unsigned proc_idx )
|
rc_t _load_proc_presets(ui_t* p, const flow::ui_proc_t* ui_proc, unsigned procPanelUuId)
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
|
unsigned selUuId = uiFindElementUuId( p->ioH, procPanelUuId, kProcPresetSelId, kInvalidId );
|
||||||
|
|
||||||
|
if( ui_proc->desc->presetN == 0 )
|
||||||
|
{
|
||||||
|
uiClearEnable(p->ioH, selUuId );
|
||||||
|
uiClearVisible(p->ioH, selUuId );
|
||||||
|
}
|
||||||
|
|
||||||
|
for(unsigned i=0; i<ui_proc->desc->presetN; ++i)
|
||||||
|
{
|
||||||
|
unsigned uuId;
|
||||||
|
if((rc = uiCreateOption(p->ioH, uuId, selUuId, nullptr, kProcPresetOptId, i, nullptr, ui_proc->desc->presetA[i].label )) != kOkRC )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_t _create_var_list( ui_t* p, unsigned chanListUuId, const flow::ui_proc_t* ui_proc )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
unsigned procPanelUuId = kInvalidId;
|
|
||||||
unsigned chanPanelUuId = kInvalidId;
|
|
||||||
unsigned chanListUuId = kInvalidId;
|
|
||||||
unsigned chN = _calc_max_chan_count(ui_proc);
|
unsigned chN = _calc_max_chan_count(ui_proc);
|
||||||
const unsigned label_buf_charN = 127;
|
const unsigned label_buf_charN = 127;
|
||||||
char label_buf[ label_buf_charN+1 ];
|
char label_buf[ label_buf_charN+1 ];
|
||||||
|
|
||||||
if((rc = uiCreateFromRsrc( p->ioH, "proc", parentListUuId, proc_idx )) != kOkRC )
|
|
||||||
{
|
|
||||||
goto errLabel;
|
|
||||||
}
|
|
||||||
|
|
||||||
procPanelUuId = uiFindElementUuId( p->ioH, parentListUuId, kProcPanelId, proc_idx );
|
|
||||||
chanPanelUuId = uiFindElementUuId( p->ioH, procPanelUuId, kChanPanelId, kInvalidId );
|
|
||||||
chanListUuId = uiFindElementUuId( p->ioH, chanPanelUuId, kChanListId, kInvalidId );
|
|
||||||
//printf("proc_idx: %i %i %i : chN:%i\n",proc_idx, parentListUuId, procPanelUuId,chN);
|
|
||||||
|
|
||||||
snprintf(label_buf,label_buf_charN,"%s:%i",ui_proc->label,ui_proc->label_sfx_id);
|
|
||||||
|
|
||||||
uiSendValue( p->ioH, uiFindElementUuId(p->ioH, procPanelUuId, kProcInstLabelId, kInvalidId), label_buf );
|
|
||||||
|
|
||||||
|
|
||||||
// for each channel (add one to the channel count to account for the leading 'label' column)
|
// for each channel (add one to the channel count to account for the leading 'label' column)
|
||||||
for(unsigned ui_ch_idx=0; ui_ch_idx<chN+1; ++ui_ch_idx)
|
for(unsigned ui_ch_idx=0; ui_ch_idx<chN+1; ++ui_ch_idx)
|
||||||
{
|
{
|
||||||
@ -370,7 +388,7 @@ namespace caw {
|
|||||||
if( !(ui_var->value_tid & (flow::kBoolTFl | flow::kIntTFl | flow::kUIntTFl | flow::kFloatTFl | flow::kDoubleTFl | flow::kStringTFl )))
|
if( !(ui_var->value_tid & (flow::kBoolTFl | flow::kIntTFl | flow::kUIntTFl | flow::kFloatTFl | flow::kDoubleTFl | flow::kStringTFl )))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// if ui_ch_idx == 0 then create the var label ....
|
||||||
if( ui_ch_idx == 0 )
|
if( ui_ch_idx == 0 )
|
||||||
{
|
{
|
||||||
if( ui_var->ch_idx == flow::kAnyChIdx )
|
if( ui_var->ch_idx == flow::kAnyChIdx )
|
||||||
@ -383,7 +401,7 @@ namespace caw {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else // ... otherwise create the actual var UI
|
||||||
{
|
{
|
||||||
|
|
||||||
// subtract one from ui_ch_idx to account for the leading label column with is associated with ui_ch_idx==0
|
// subtract one from ui_ch_idx to account for the leading label column with is associated with ui_ch_idx==0
|
||||||
@ -419,6 +437,52 @@ namespace caw {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
errLabel:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc_t _create_net_ui( ui_t* p, unsigned netParentUuId, const flow::ui_net_t* ui_net, const char* label_prefix );
|
||||||
|
|
||||||
|
rc_t _create_proc_ui( ui_t* p, unsigned netParentUuId, unsigned parentListUuId, const flow::ui_proc_t* ui_proc, unsigned proc_idx )
|
||||||
|
{
|
||||||
|
rc_t rc = kOkRC;
|
||||||
|
unsigned procPanelUuId = kInvalidId;
|
||||||
|
unsigned chanPanelUuId = kInvalidId;
|
||||||
|
unsigned chanListUuId = kInvalidId;
|
||||||
|
const unsigned label_buf_charN = 127;
|
||||||
|
char label_buf[ label_buf_charN+1 ];
|
||||||
|
|
||||||
|
if((rc = uiCreateFromRsrc( p->ioH, "proc", parentListUuId, proc_idx )) != kOkRC )
|
||||||
|
{
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
procPanelUuId = uiFindElementUuId( p->ioH, parentListUuId, kProcPanelId, proc_idx );
|
||||||
|
chanPanelUuId = uiFindElementUuId( p->ioH, procPanelUuId, kChanPanelId, kInvalidId );
|
||||||
|
chanListUuId = uiFindElementUuId( p->ioH, chanPanelUuId, kChanListId, kInvalidId );
|
||||||
|
//printf("proc_idx: %i %i %i : %i %i\n",proc_idx, parentListUuId, procPanelUuId,chanPanelUuId,chanListUuId);
|
||||||
|
|
||||||
|
// set the proc title
|
||||||
|
snprintf(label_buf,label_buf_charN,"%s:%i",ui_proc->label,ui_proc->label_sfx_id);
|
||||||
|
uiSendValue( p->ioH, uiFindElementUuId(p->ioH, procPanelUuId, kProcInstLabelId, kInvalidId), label_buf );
|
||||||
|
|
||||||
|
//if((rc = _load_proc_presets(p,ui_proc,procPanelUuId)) != kOkRC )
|
||||||
|
//{
|
||||||
|
//}
|
||||||
|
|
||||||
|
if((rc = _create_var_list(p, chanListUuId, ui_proc )) != kOkRC )
|
||||||
|
goto errLabel;
|
||||||
|
|
||||||
|
if( ui_proc->internal_net )
|
||||||
|
{
|
||||||
|
flow::ui_net_t* ui_net = ui_proc->internal_net;
|
||||||
|
for(; ui_net!=nullptr; ui_net=ui_net->poly_link)
|
||||||
|
if((rc = _create_net_ui(p,netParentUuId,ui_net,label_buf)) != kOkRC )
|
||||||
|
{
|
||||||
|
rc = cwLogError(rc,"Internal net UI create failed.");
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
if(rc != kOkRC )
|
if(rc != kOkRC )
|
||||||
@ -427,27 +491,40 @@ namespace caw {
|
|||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rc_t _create_net_ui( ui_t* p, unsigned parentUuId, const flow::ui_net_t* ui_net )
|
rc_t _create_net_ui( ui_t* p, unsigned netListUuId, const flow::ui_net_t* ui_net, const char* title=nullptr )
|
||||||
{
|
{
|
||||||
rc_t rc = kOkRC;
|
rc_t rc = kOkRC;
|
||||||
|
|
||||||
unsigned netPanelUuId = kInvalidId;
|
unsigned netPanelUuId = kInvalidId;
|
||||||
unsigned procListUuId = kInvalidId;
|
unsigned netTitleUuId = kInvalidId;
|
||||||
|
unsigned procListUuId = kInvalidId;
|
||||||
|
|
||||||
if((rc = uiCreateFromRsrc( p->ioH, "network", parentUuId, ui_net->poly_idx )) != kOkRC )
|
if((rc = uiCreateFromRsrc( p->ioH, "network", netListUuId, p->ui_net_idx )) != kOkRC )
|
||||||
{
|
{
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
netPanelUuId = uiFindElementUuId( p->ioH, parentUuId, kNetPanelId, ui_net->poly_idx );
|
netPanelUuId = uiFindElementUuId( p->ioH, netListUuId, kNetPanelId, p->ui_net_idx++ );
|
||||||
procListUuId = uiFindElementUuId( p->ioH, netPanelUuId, "procListId" );
|
netTitleUuId = uiFindElementUuId( p->ioH, netPanelUuId, kNetTitleId, kInvalidId );
|
||||||
|
procListUuId = uiFindElementUuId( p->ioH, netPanelUuId, kProcListId, kInvalidId );
|
||||||
|
|
||||||
//printf("net:%i %i plist:%i\n",parentUuId, netPanelUuId,procListUuId);
|
//printf("netlist:%i title:%i netpanel:%i proclist:%i : poly_idx:%i\n",netListUuId, netTitleUuId, netPanelUuId, procListUuId, ui_net->poly_idx);
|
||||||
|
|
||||||
|
|
||||||
|
if( title != nullptr )
|
||||||
|
{
|
||||||
|
|
||||||
|
const unsigned label_buf_charN = 127;
|
||||||
|
char label_buf[ label_buf_charN+1 ];
|
||||||
|
snprintf(label_buf,label_buf_charN,"Network: %s:%i",title,ui_net->poly_idx);
|
||||||
|
uiSendValue( p->ioH, netTitleUuId, label_buf);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
for(unsigned i=0; i<ui_net->procN; ++i)
|
for(unsigned i=0; i<ui_net->procN; ++i)
|
||||||
{
|
{
|
||||||
if((rc = _create_proc_ui( p, procListUuId, ui_net->procA+i, i )) != kOkRC )
|
if((rc = _create_proc_ui( p, netListUuId, procListUuId, ui_net->procA+i, i )) != kOkRC )
|
||||||
{
|
{
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
@ -478,13 +555,14 @@ cw::rc_t caw::ui::create( handle_t& hRef,
|
|||||||
{
|
{
|
||||||
|
|
||||||
ui_t* p = mem::allocZ<ui_t>();
|
ui_t* p = mem::allocZ<ui_t>();
|
||||||
p->ioH = ioH;
|
p->ioH = ioH;
|
||||||
p->ioFlowH = ioFlowH;
|
p->ioFlowH = ioFlowH;
|
||||||
p->ui_net = ui_net;
|
p->ui_net = ui_net;
|
||||||
|
|
||||||
unsigned netPanelUuId = io::uiFindElementUuId( ioH, kRootNetPanelId );
|
unsigned netPanelUuId = io::uiFindElementUuId( ioH, kRootNetPanelId );
|
||||||
|
unsigned netListUuId = io::uiFindElementUuId( ioH, netPanelUuId, kNetListId, kInvalidId );
|
||||||
|
|
||||||
if((rc = _create_net_ui( p, netPanelUuId, ui_net )) != kOkRC )
|
if((rc = _create_net_ui( p, netListUuId, ui_net )) != kOkRC )
|
||||||
{
|
{
|
||||||
rc = cwLogError(rc,"UI create failed.");
|
rc = cwLogError(rc,"UI create failed.");
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
|
@ -17,12 +17,16 @@ namespace caw {
|
|||||||
kRunCheckId,
|
kRunCheckId,
|
||||||
|
|
||||||
kRootNetPanelId,
|
kRootNetPanelId,
|
||||||
|
kNetListId,
|
||||||
|
|
||||||
kNetPanelId,
|
kNetPanelId,
|
||||||
|
kNetTitleId,
|
||||||
kProcListId,
|
kProcListId,
|
||||||
|
|
||||||
kProcPanelId,
|
kProcPanelId,
|
||||||
kProcInstLabelId,
|
kProcInstLabelId,
|
||||||
|
kProcPresetSelId,
|
||||||
|
kProcPresetOptId,
|
||||||
kChanListId,
|
kChanListId,
|
||||||
|
|
||||||
kChanPanelId,
|
kChanPanelId,
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
|
|
||||||
|
.netList {
|
||||||
|
border: 1px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
.netPanel {
|
.netPanel {
|
||||||
|
|
||||||
border: 1px solid Red;
|
border: 1px solid blue;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,8 +38,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.varPanel {
|
.varPanel {
|
||||||
border: 1px solid Green;
|
|
||||||
height: 20px;
|
height: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.uiList {
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
@ -26,7 +26,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
row: {
|
row: {
|
||||||
panel: { name: rootNetPanelId, title: "Network" }
|
panel: {
|
||||||
|
name: rootNetPanelId,
|
||||||
|
vlist: { name: netListId, addClassName: netList }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -36,6 +39,8 @@
|
|||||||
panel: {
|
panel: {
|
||||||
name: netPanelId,
|
name: netPanelId,
|
||||||
addClassName: netPanel
|
addClassName: netPanel
|
||||||
|
|
||||||
|
str_disp: { name: netTitleId, value:"" },
|
||||||
|
|
||||||
hlist: { name: procListId, addClassName: procList }
|
hlist: { name: procListId, addClassName: procList }
|
||||||
|
|
||||||
@ -50,7 +55,8 @@
|
|||||||
|
|
||||||
col: {
|
col: {
|
||||||
str_disp: { name: procInstLabel, value:"" },
|
str_disp: { name: procInstLabel, value:"" },
|
||||||
|
// select: { name: procPresetSelId, children:{} },
|
||||||
|
|
||||||
panel: {
|
panel: {
|
||||||
name: chanPanelId,
|
name: chanPanelId,
|
||||||
addClassName: chanPanel,
|
addClassName: chanPanel,
|
||||||
|
@ -75,13 +75,16 @@ ui::appIdMap_t appIdMapA[] = {
|
|||||||
{ kPanelDivId, kRunCheckId, "runCheckId" },
|
{ kPanelDivId, kRunCheckId, "runCheckId" },
|
||||||
|
|
||||||
{ kPanelDivId, kRootNetPanelId, "rootNetPanelId" },
|
{ kPanelDivId, kRootNetPanelId, "rootNetPanelId" },
|
||||||
|
{ kRootNetPanelId, kNetListId, "netListId" },
|
||||||
|
|
||||||
{ kRootNetPanelId, kNetPanelId, "netPanelId" },
|
{ kNetListId, kNetPanelId, "netPanelId" },
|
||||||
|
|
||||||
|
{ kNetPanelId, kNetTitleId, "netTitleId" },
|
||||||
{ kNetPanelId, kProcListId, "procListId" },
|
{ kNetPanelId, kProcListId, "procListId" },
|
||||||
{ kProcListId, kProcPanelId, "procPanelId" },
|
{ kProcListId, kProcPanelId, "procPanelId" },
|
||||||
|
|
||||||
{ kProcPanelId, kProcInstLabelId, "procInstLabel" },
|
{ kProcPanelId, kProcInstLabelId, "procInstLabel" },
|
||||||
|
{ kProcPanelId, kProcPresetSelId, "procPresetSelId" },
|
||||||
{ kProcPanelId, kChanPanelId, "chanPanelId" },
|
{ kProcPanelId, kChanPanelId, "chanPanelId" },
|
||||||
{ kChanPanelId, kChanListId, "chanListId" },
|
{ kChanPanelId, kChanListId, "chanListId" },
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user