Script UI dynamic resizing
hi,
i've written dialog user can choose beetwen 1 of 2 global options, or several standard options. when 1 of 2 global options selected, other standard options hidden.
when standard option panel hidden, dialog box stays @ same size , makes empty space. tried dynamicaly resize dialog line "mywindow.layout.layout(true);", wich works, i'm loosing orientation , alignment values of subpanels.
i'd know if there way layout() method not update whole hierarchy.
here code, can take , reuse yourself.
to check negative effects can uncomment 2 lines : // mywindow.layout.layout(true);
but should replace orientation values "stack" "row", , alignment values "fill" "left".
thanks,
romain
mywindow = new window("dialog", "option screen");
var mypanelglobal = mywindow.add("panel", undefined, "global options", {borderstyle: "sunken"});
mypanelglobal.orientation = "column";
mypanelglobal.alignment = "top";
var mygroupabc = mypanelglobal.add("panel");
mygroupabc.preferredsize = [260,-1];
mygroupabc.orientation = "stack";
mygroupabc.alignement = "fill";
var mygroup1abc = mygroupabc.add("group");
mygroup1abc.orientation = "row";
mygroup1abc.alignment = "left";
mygroup1abc.add("statictext", undefined, "project 1");
var mygroup2abc = mygroupabc.add("group");
mygroup2abc.orientation = "row";
mygroup2abc.alignment = "right";
var checkboxabc = mygroup2abc.add("checkbox");
checkboxabc.value = false;
var mygroupxyz = mypanelglobal.add("panel");
mygroupxyz.preferredsize = [260,-1];
mygroupxyz.orientation = "stack";
mygroupxyz.alignement = "fill";
var mygroup1xyz = mygroupxyz.add("group");
mygroup1xyz.orientation = "row";
mygroup1xyz.alignment = "left";
mygroup1xyz.add("statictext", undefined, "project 2");
var mygroup2xyz = mygroupxyz.add("group");
mygroup2xyz.orientation = "row";
mygroup2xyz.alignment = "right";
var checkboxxyz = mygroup2xyz.add("checkbox");
checkboxxyz.value = false;
var mypanelstandard = mywindow.add("panel", undefined, "standard options", {borderstyle: "sunken"});
mypanelstandard.orientation = "column";
mypanelstandard.alignment = "top";
var mygroupa = mypanelstandard.add("panel");
mygroupa.preferredsize = [260,-1];
mygroupa.orientation = "column";
mygroupa.alignment = "top";
var mysubgroupa1 = mygroupa.add("group");
mysubgroupa1.orientation = "row";
mysubgroupa1.alignment = "left";
mysubgroupa1.add("statictext", undefined, "option 1");
var mysubgroupa2 = mygroupa.add("group");
mysubgroupa2.orientation = "stack";
mysubgroupa2.alignment = "fill";
var radioa1 = mysubgroupa2.add("radiobutton", undefined, "yes");
radioa1.alignment = "left";
var radioa2 = mysubgroupa2.add("radiobutton", undefined, "no");
radioa2.alignment = "right";
radioa1.value = true;
var mygroupb = mypanelstandard.add("panel");
mygroupb.preferredsize = [260,-1];
mygroupb.orientation = "column";
mygroupb.alignment = "top";
var mysubgroupb1 = mygroupb.add("group");
mysubgroupb1.orientation = "row";
mysubgroupb1.alignment = "left";
mysubgroupb1.add("statictext", undefined, "option 2");
var mysubgroupb2 = mygroupb.add("group");
mysubgroupb2.orientation = "stack";
mysubgroupb2.alignment = "fill";
var radiob1 = mysubgroupb2.add("radiobutton", undefined, "yes");
radiob1.alignment = "left";
var radiob2 = mysubgroupb2.add("radiobutton", undefined, "no");
radiob2.alignment = "right";
radiob1.value = true;
var mygroupc = mypanelstandard.add("panel");
mygroupc.preferredsize = [260,-1];
mygroupc.orientation = "column";
mygroupc.alignment = "top";
var mysubgroupc1 = mygroupc.add("group");
mysubgroupc1.orientation = "row";
mysubgroupc1.alignment = "left";
mysubgroupc1.add("statictext", undefined, "options 3");
var mysubgroupc2 = mygroupc.add("group");
mysubgroupc2.orientation = "stack";
mysubgroupc2.alignment = "fill";
var radioc1 = mysubgroupc2.add("radiobutton", undefined, "yes");
radioc1.alignment = "left";
var radioc2 = mysubgroupc2.add("radiobutton", undefined, "no");
radioc2.alignment = "right";
radioc1.value = true;
var mybuttongroup = mywindow.add("group");
mybuttongroup.orientation = "row";
mybuttongroup.alignment = "top";
mybuttongroup.add ("button", undefined, "ok");
mybuttongroup.add ("button", undefined, "cancel");
checkboxabc.onclick = function()
{
if (checkboxabc.value == true) {
mygroupxyz.visible = false;
checkboxxyz.value = false;
mypanelstandard.visible = false;
} else {
mygroupxyz.visible = true;
mypanelstandard.visible = true;
}
if (mypanelstandard.visible == true) {
mypanelstandard.maximumsize = [10000,10000];
} else {
mypanelstandard.maximumsize = [0,0];
}
// mywindow.layout.layout(true);
};
checkboxxyz.onclick = function()
{
if (checkboxxyz.value == true) {
mygroupabc.visible = false;
checkboxabc.value = false;
mypanelstandard.visible = false;
} else {
mygroupabc.visible = true;
mypanelstandard.visible = true;
}
if (mypanelstandard.visible == true) {
mypanelstandard.maximumsize = [10000,10000];
} else {
mypanelstandard.maximumsize = [0,0];
}
// mywindow.layout.layout(true);
};
var myresultoptions = mywindow.show();
hi romain,
the problem preferredsize 'volatile' property of scriptui widgets, lost on first layout. think need play minimumsize instead. also, 'stack' orientation may create vairous layout issues. chance, doesn't seem need in ui.
here approach you:
var pn_settings = {borderstyle: "sunken"}, pn_minsize = [260,0], pn_spacing = 12, pn_glob_nb = 3, pn_std_nb = 4, null_size = [0,0], max_size = [1000,1000]; var u, w = new window('dialog', "option screen"), oncheckboxclick = function() { var v = this.value, idx = this.parent.parent.properties.idx, = pglobal.children.length, g; while( i-- ) { g = pglobal.children[i]; g.visible = v ? (idx===g.properties.idx) : true; g.maximumsize = g.visible ? max_size : null_size; pstandard.visible = !v; pstandard.maximumsize = v ? null_size : max_size; } this.window.layout.layout(1); }, pglobal = (function(p,i) { with( p ) { orientation = 'column'; alignment = 'top'; spacing = 0; // important } for( i=1 ; <= pn_glob_nb ; ++i ) with( p.add('group',u,{idx:i}).add('panel') ) { // emulate vertical spacing parent.margins = [0,pn_spacing,0,0]; minimumsize = pn_minsize; orientation = 'row'; alignment = ['fill','top']; with( add('statictext') ) { text = "project "+i; alignment = ['left','center']; } with( add('checkbox') ) { value = false; alignment = ['right','center']; } children[1].onclick = oncheckboxclick; } return p; })(w.add('panel', u, "global", pn_settings)), pstandard = (function(p,i) { with( p ) { orientation = 'column'; alignment = 'top'; spacing = pn_spacing; } for( i=1 ; <= pn_std_nb ; ++i ) with( p.add('panel') ) { minimumsize = pn_minsize; orientation = 'column'; alignment = ['fill','top']; with( add('group') ) { orientation = 'row'; alignment = ['fill','top']; alignchildren = ['right', 'center']; add('statictext', u, "option "+i).alignment = ['left','center']; add('radiobutton', u, "yes").value = true; add('radiobutton', u, "no").value = false; } } return p; })(w.add('panel', u, "standard", pn_settings)), gbuttons = (function(g) { with( g ) { orientation = 'row'; alignment = 'top'; add('button', u, "ok"); add('button', u, "cancel"); } })(w.add('group')); w.show();
@+
marc
More discussions in InDesign Scripting
adobe
Comments
Post a Comment