Index: trunk/doc/user/06_features/scripting/examples/divider/divider.fawk =================================================================== --- trunk/doc/user/06_features/scripting/examples/divider/divider.fawk (revision 5680) +++ trunk/doc/user/06_features/scripting/examples/divider/divider.fawk (revision 5681) @@ -32,6 +32,34 @@ outv = voltage[2] + (voltage[1] - voltage[2]) * value[2] / (value[1] + value[2]); } +function divider_recalc_outv() +{ + value[1] = dad("divdlg", "get", w_val[1]); + value[2] = dad("divdlg", "get", w_val[2]); + voltage[1] = dad("divdlg", "get", w_vol[1]); + voltage[2] = dad("divdlg", "get", w_vol[2]); + + calc_outv(); + + dad("divdlg", "set", w_outv, outv+0); +} + +function divider_recalc_lock(dst, src ,val) +{ + val = dad("divdlg", "get", w_lock[src+0]); + dad("divdlg", "set", w_lock[dst+0], (!val) + 0); +} + +function divider_recalc_resistor( ,idx,tmp) +{ + outv = val = dad("divdlg", "get", w_outv); + tmp = (outv - voltage[2]) / (voltage[1] - voltage[2]); + if (dad("divdlg", "get", w_lock[1]) == 0) + dad("divdlg", "set", w_val[1], value[2] * (1-tmp) / tmp); + else + dad("divdlg", "set", w_val[2], value[1] *tmp / (1-tmp)); +} + function divider( list,obj,R1,R2,refdes) { list = idplist("alloc"); @@ -65,34 +93,46 @@ dad("divdlg", "new"); dad("divdlg", "begin_vbox"); dad("divdlg", "label", "Calculate resistor divider"); - dad("divdlg", "begin_table", 3); + dad("divdlg", "begin_table", 4); dad("divdlg", "label", "resistor"); + dad("divdlg", "label", "locked"); dad("divdlg", "label", "resistance"); dad("divdlg", "label", "voltage"); dad("divdlg", "label", refdes[1]); - dad("divdlg", "real", 0, 10000000); + w_lock[1] = dad("divdlg", "bool"); + dad("divdlg", "default", 1); + dad("divdlg", "onchange", "divider_recalc_lock(2, 1)"); + w_val[1] = dad("divdlg", "real", 0, 10000000); dad("divdlg", "default", value[1]+0); - dad("divdlg", "real", 0, 10000000); ; + dad("divdlg", "onchange", "divider_recalc_outv()"); + w_vol[1] = dad("divdlg", "real", 0, 10000000); ; dad("divdlg", "default", voltage[1]); + dad("divdlg", "onchange", "divider_recalc_outv()"); dad("divdlg", "label", refdes[2]); - dad("divdlg", "real", 0, 10000000); + w_lock[2] = dad("divdlg", "bool"); + dad("divdlg", "default", 0); + dad("divdlg", "onchange", "divider_recalc_lock(1, 2)"); + w_val[2] = dad("divdlg", "real", 0, 10000000); dad("divdlg", "default", value[2]+0); - dad("divdlg", "real", 0, 10000000); + dad("divdlg", "onchange", "divider_recalc_outv()"); + w_vol[2] = dad("divdlg", "real", 0, 10000000); dad("divdlg", "default", voltage[2]); + dad("divdlg", "onchange", "divider_recalc_outv()"); dad("divdlg", "end"); dad("divdlg", "begin_hbox"); dad("divdlg", "label", "output voltage:"); - dad("divdlg", "real", 0, 10000000); + w_outv = dad("divdlg", "real", 0, 10000000); dad("divdlg", "default", outv); + dad("divdlg", "onchange", "divider_recalc_resistor()"); dad("divdlg", "end"); dad("divdlg", "button_closes", "cancel", -1, "set & close", 0); dad("divdlg", "end"); - dad("divdlg", "run_modal", "Resistor divider", ""); + } # Runs once when the script is ran @@ -100,8 +140,12 @@ voltage[1] = 3.3; voltage[2] = 0; + fgw_func_reg(divider); + fgw_func_reg(divider_recalc_outv); + fgw_func_reg(divider_recalc_lock); + fgw_func_reg(divider_recalc_resistor); + divider(); -# fgw_func_reg(divider); # create a menu with the hotkey {a t} # cookie = scriptcookie();