//
// Xodus 1 draws and pixes had a different pix selection mechanism from
// Xodus 2. Here we create this functionality to make porting to Xodus 2
// easier.
//
// Here are some functions used as actions for button clicks on pixes.
function X1click(action, widget)
// call . {action} -parent // call the builtin click action
pushe {widget}
setfield .. pixchoose {getpath {el .} -tail}
setfield .. value {getfield value}
call .. {action} // call the click action in the draw
pope
return 1
end
function x1draw_updatepixselection
str child
str sel_value
sel_value = {getfield . value}
foreach child ({el ./##[CLASS=gadget]})
if ({exists {child} value})
if (sel_value == {getfield {child} value})
setfield {child} pixflags ~is_sel pixflags is_sel
else
setfield {child} pixflags is_sel pixflags ~is_sel
end
end
end
end
function x1drawSET(action, field, value)
/*
if (field == "refresh_flag")
str char
char = {substring {value} 0 0}
if (char == "1" || char == "T")
setfield ./##[CLASS=gadget] pixflags
else
end
end
*/
if (field == "value")
setfield value {value}
x1draw_updatepixselection
return 1
end
return 0
end
// These functions set up emulation of the X1 highlighting
function x1highlightSET(action, field, value)
if (field == "hldispmode")
if (value == "invert")
setfield pixflags ~hlt1 pixflags ~hlt2
else // This always does the old star option
setfield pixflags hlt1 pixflags hlt2
end
end
if (field == "hlhistmode")
if (value == "none")
setfield pixflags clickable_not // not clickable
else
setfield pixflags ~clickable_not // clickable
end
end
if (field == "value")
setfield value {value}
call .. UPDATEPIXSELECTION
return 1
end
return 0
end
function x1setuphighlight(pix, doSetAction)
int doSetAction
addfield {pix} hldispmode
setfield {pix} hldispmode invert
addfield {pix} hlhistmode
setfield {pix} hlhistmode lastone
if (doSetAction)
addaction {pix} SET x1highlightSET
end
end
// Here's a generic CREATE action to make sure all CREATE options get handled
function x1pixCREATE(action, createargs)
int arg
for (arg = 5; arg < {argc}; arg = arg+1)
str argname = {argv {arg}}
if ({substring x{argname} 0 1} == "x-")
str argval = {argv {arg+1}}
argname = {strsub x{argname} x- ""}
setfield {argname} {argval}
arg = arg + 1
end
end
return 1
end
create xdraw xdrawcompat
addfield xdrawcompat value -description "Pix value set on button click"
addfield xdrawcompat pixchoose -description "Path of last pix clicked"
addfield xdrawcompat refresh_flag \
-description "FALSE inhibits redraws during heavy pix updates"
// these are field name aliases for widget width and height. This
// isn't a complete solution since the old width and height do not
// include widget and edge references while wgeom and hgeom do. What
// we do here will work so long as the caller doesn't need to preserve
// widget and edge refs.
addfield xdrawcompat width -indirect . wgeom
addfield xdrawcompat height -indirect . hgeom
setfield xdrawcompat refresh_flag 1
setfield xdrawcompat wx 1000 wy 1000 cx 0 cy 0 cz 0 vx 4 vy -20 vz 3
setfield xdrawcompat value / pixchoose pix
addaction xdrawcompat UPDATEPIXSELECTION x1draw_updatepixselection
addaction xdrawcompat SET x1drawSET
pushe xdrawcompat > /dev/null
include X1shape
include X1cell
include X1view
pope > /dev/null
addobject x1draw xdrawcompat