Hi there

I'm trying to build a GUI. For simplicity on the forum, I've built a really simple example of what I'm trying to do. How can I make the "conditional" GUI output work and not have it inside the calc function? ... or, how would you do it? Thanks.

Best regards, Claus.

// GUI_EXAMPLE.SCE
//
// Demo of how to build a simple GUI in Scilab.
// Real simple, with two input variables and one output.
// The example uses the basic mechanical example of a mass and a spring as
// input parameters and calculates the resonance frequency of the mechanical
// system.

// Initialize variables
m  =  1;  // Moving mass 'm'(kilogram)
k  =  1;  // Stiffness, spring constant 'k'(Newton per meter)
fres  =  1;  // Resonance frequency (Hertz)
show_result  =  %f;

function  calc()
    m  =  evstr(get(ge_m,"string"));  // get content in uicontrol ge_m
    k  =  evstr(get(ge_k,"string"));  // get content in uicontrol ge_k
    fres  =  sqrt(m  *  k);
    // putting GUI updates inside the calculation routine is not pretty code.
    uicontrol("style","text","string","Result :","position",  ..
              [10  as(2)-110  80  20]);
    uicontrol("style","text","string",string(fres),  ..
              "position",[100  as(2)-110  80  20]);
    uicontrol("style","text","string","Hz ","position",  ..
              [200  as(2)-110  30  20]);
    show_result  =  %t;
    // update global variables
    [m,k,fres,show_result]=return(m,k,fres,show_result);
endfunction

function  goodbye()
    close(ge);  // Close GUI window
    printf("Resulting fres: %f Hertz\n",fres);
    abort  // Print result in console (e.g. for copy/paste), then kill the app
endfunction

ge  =  scf();  // GUI Example, Initialize and 'set current figure'
as  =  ge.axes_size;  // read size of window, as = [width height]
ge.figure_name  =  "GUI Example";  // Change window header

uicontrol("style","text","string","Moving mass :","position",  ..
          [10  as(2)-35  80  20],"background",[1  1  1]);  // white background
          // position properties has four parameters = x,y,width,height
          // y-position counts from lower left corner, so we subtract from 'as'
ge_m  =  uicontrol("style","edit","string",string(m),  ..
          "position",[100  as(2)-35  80  20]);
uicontrol("style","text","string","kg ","position",  ..
          [200  as(2)-35  30  20],"background",[1  1  1]);

uicontrol("style","text","string","Stiffness :","position",  ..
          [10  as(2)-60  80  20],"background",[1  1  1]);
ge_k  =  uicontrol("style","edit","string",string(k),  ..
          "position",[100  as(2)-60  80  20]);
uicontrol("style","text","string","N/m ","position",  ..
          [200  as(2)-60  30  20],"background",[1  1  1]);

uicontrol("style","pushbutton","string","Calculate",  ..
          "position",[10  as(2)-85  80  20],"callback","calc");

// How do I make this "conditional"output show up in my GUI?
if  show_result  then  // If "Calculate"button was pushed at least once ...
    uicontrol("style","text","string","Result :","position",  ..
              [10  as(2)-110  80  20]);
    uicontrol("style","text","string",string(fres),  ..
              "position",[100  as(2)-110  80  20]);
    uicontrol("style","text","string","Hz ","position",  ..
              [200  as(2)-110  30  20]);
end

uicontrol("style","pushbutton","string","Exit",  ..
          "position",[10  as(2)-135  80  20],"callback","goodbye");

_______________________________________________
users mailing list
users@lists.scilab.org
http://lists.scilab.org/mailman/listinfo/users

Reply via email to