diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 2c26e9587d09256605e3e025dd507d83e731d435..1961685c0c31008a30aa032d89b970302006dd4d 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.630 2007-08-22 12:36:04 geuzaine Exp $ +// $Id: GUI.cpp,v 1.631 2007-08-22 20:53:13 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -4775,124 +4775,100 @@ void GUI::create_mesh_context_window(int num) void GUI::create_solver_window(int num) { - int i, nbbutts = 0, newrow = 0; - static Fl_Group *g[10]; - - int LL = (int)(1.75 * IW); - int BBS = (5 * fontsize + 1); // smaller width of a button with internal label - if(solver[num].window) { solver[num].window->show(); return; } - for(i = 0; i < MAXSOLVERS; i++) + for(int i = 0; i < MAXSOLVERS; i++) if(strlen(SINFO[num].option_name[i])) SINFO[num].nboptions = i + 1; - for(i = 0; i < MAXSOLVERS; i++) - if(strlen(SINFO[num].button_name[i])) - nbbutts++; - if(nbbutts > 3) - newrow = 1; - - int width = 5 * BBS + 6 * WB; - int height = (8 + SINFO[num].nboptions + newrow) * WB + (6 + SINFO[num].nboptions + newrow) * BH; - if(height < 8 * WB + 8 * BH) - height = 8 * WB + 8 * BH; //minimum height required by Options tab - + int LL = 2 * IW; + int width = LL + BB + BB / 3 + 4 * WB; + int height = (8 + SINFO[num].nboptions) * BH + 6 * WB; + int BBS = (width - 8 * WB) / 5; + solver[num].window = new Dialog_Window(width, height); solver[num].window->box(GMSH_WINDOW_BOX); { - Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - (3 + newrow) * WB - (1 + newrow) * BH); + Fl_Tabs *o = new Fl_Tabs(WB, WB, width - 2 * WB, height - 3 * WB - 1 * BH); { - g[0] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "General"); + Fl_Group *g = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "Controls"); - solver[num].input[0] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Problem"); - Fl_Button *b1 = new Fl_Button(2 * WB, 3 * WB + 2 * BH, BB, BH, "Choose"); - b1->callback(solver_file_open_cb, (void *)num); - Fl_Button *b2 = new Fl_Button(3 * WB + BB, 3 * WB + 2 * BH, BB, BH, "Edit"); - b2->callback(solver_file_edit_cb, (void *)num); + solver[num].input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Solver"); + solver[num].input[2]->callback(solver_ok_cb, (void *)num); - solver[num].input[1] = new Fl_Input(2 * WB, 4 * WB + 3 * BH, LL, BH, "Mesh"); - Fl_Button *b3 = new Fl_Button(2 * WB, 5 * WB + 4 * BH, BB, BH, "Choose"); - b3->callback(solver_choose_mesh_cb, (void *)num); + Fl_Button *b1 = new Fl_Button(width - 2 * WB - BBS, 2 * WB + 1 * BH, BBS, BH, "Choose"); + b1->callback(solver_choose_executable_cb, (void *)num); + Fl_Button *b2 = new Fl_Button(width - 2 * WB - BBS, 2 * WB + 2 * BH, BBS, BH, "Save"); + b2->callback(options_save_cb); - for(i = 0; i < 2; i++) { - solver[num].input[i]->align(FL_ALIGN_RIGHT); + int ww = (LL - WB) / 2; + solver[num].butt[2] = new Fl_Check_Button(2 * WB, 2 * WB + 2 * BH, ww, BH, "Client/server"); + solver[num].butt[0] = new Fl_Check_Button(2 * WB, 2 * WB + 3 * BH, ww, BH, "Pop-up messages"); + solver[num].butt[1] = new Fl_Check_Button(3 * WB + ww, 2 * WB + 2 * BH, ww, BH, "Auto-load results"); + + for(int i = 0; i < 3; i++){ + solver[num].butt[i]->type(FL_TOGGLE_BUTTON); + solver[num].butt[i]->callback(solver_ok_cb, (void *)num); } - for(i = 0; i < SINFO[num].nboptions; i++) { - solver[num].choice[i] = new Fl_Choice(2 * WB, (6 + i) * WB + (5 + i) * BH, LL, BH, SINFO[num].option_name[i]); - solver[num].choice[i]->align(FL_ALIGN_RIGHT); - } + solver[num].input[0] = new Fl_Input(2 * WB + BB / 2, 2 * WB + 4 * BH, LL - BB / 2, BH, "Input"); + Fl_Button *b3 = new Fl_Button(width - 2 * WB - BBS, 2 * WB + 4 * BH, BBS, BH, "Choose"); + b3->callback(solver_file_open_cb, (void *)num); - g[0]->end(); - } - { - g[1] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "Options"); + Fl_Button *b4 = new Fl_Button(2 * WB, 2 * WB + 4 * BH, BB / 2, BH, "Edit"); + b4->callback(solver_file_edit_cb, (void *)num); - solver[num].input[2] = new Fl_Input(2 * WB, 2 * WB + 1 * BH, LL, BH, "Executable"); - solver[num].input[2]->align(FL_ALIGN_RIGHT); - solver[num].input[2]->callback(solver_ok_cb, (void *)num); + solver[num].input[1] = new Fl_Input(2 * WB, 2 * WB + 5 * BH, LL, BH, "Mesh"); + Fl_Button *b5 = new Fl_Button(width - 2 * WB - BBS, 2 * WB + 5 * BH, BBS, BH, "Choose"); + b5->callback(solver_choose_mesh_cb, (void *)num); - Fl_Button *b = new Fl_Button(2 * WB, 3 * WB + 2 * BH, BB, BH, "Choose"); - b->callback(solver_choose_executable_cb, (void *)num); + for(int i = 0; i < 3; i++) { + solver[num].input[i]->align(FL_ALIGN_RIGHT); + } - solver[num].butt[2] = new Fl_Check_Button(2 * WB, 4 * WB + 3 * BH, LL, BH, "Enable client-server connection"); - solver[num].butt[2]->type(FL_TOGGLE_BUTTON); - solver[num].butt[2]->callback(solver_ok_cb, (void *)num); - solver[num].butt[0] = new Fl_Check_Button(2 * WB, 4 * WB + 4 * BH, LL, BH, "Display client messages"); - solver[num].butt[0]->type(FL_TOGGLE_BUTTON); - solver[num].butt[0]->callback(solver_ok_cb, (void *)num); - solver[num].butt[1] = new Fl_Check_Button(2 * WB, 4 * WB + 5 * BH, LL, BH, "Merge views automatically"); - solver[num].butt[1]->type(FL_TOGGLE_BUTTON); - solver[num].butt[1]->callback(solver_ok_cb, (void *)num); + for(int i = 0; i < SINFO[num].nboptions; i++) { + solver[num].choice[i] = new Fl_Choice(2 * WB, 2 * WB + (6 + i) * BH, LL, BH, + SINFO[num].option_name[i]); + solver[num].choice[i]->align(FL_ALIGN_RIGHT); + } - { - Fl_Button *o = new Fl_Button(width - BB - 2 * WB, - height - (3 + newrow) * WB - (2 + newrow) * BH, - BB, BH, "Save"); - o->callback(options_save_cb); + static int arg[MAXSOLVERS][5][2]; + for(int i = 0; i < 5; i++) { + if(strlen(SINFO[num].button_name[i])) { + arg[num][i][0] = num; + arg[num][i][1] = i; + solver[num].command[i] = new Fl_Button((2 + i) * WB + i * BBS, + 3 * WB + (6 + SINFO[num].nboptions) * BH, + BBS, BH, SINFO[num].button_name[i]); + solver[num].command[i]->callback(solver_command_cb, (void *)arg[num][i]); + } } - g[1]->end(); + + g->end(); } { - g[2] = new Fl_Group(WB, WB + BH, width - 2 * WB, height - (3 + newrow) * WB - (2 + newrow) * BH, "About"); + Fl_Group *g = new Fl_Group(WB, WB + BH, width - 2 * WB, height - 3 * WB - 2 * BH, "About"); Fl_Browser *o = new Fl_Browser(2 * WB, 2 * WB + 1 * BH, width - 4 * WB, - height - (5 + newrow) * WB - (2 + newrow) * BH); + height - 5 * WB - 2 * BH); o->add(" "); add_multiline_in_browser(o, "@c@b@.", SINFO[num].name); o->add(" "); add_multiline_in_browser(o, "@c@. ", SINFO[num].help); - g[2]->end(); + g->end(); } o->end(); } - static int arg[MAXSOLVERS][5][2]; - int nb = 0; - for(i = 4; i >= 0; i--) { - if(strlen(SINFO[num].button_name[i])) { - arg[num][i][0] = num; - arg[num][i][1] = i; - solver[num].command[nb] = new Fl_Button(width - (1 + nb + 2 * !newrow) * BBS - (1 + nb + 2 * !newrow) * WB, - height - (1 + newrow) * BH - (1 + newrow) * WB, BBS, BH, - SINFO[num].button_name[i]); - solver[num].command[nb]->callback(solver_command_cb, (void *)arg[num][i]); - nb++; - } - } - - { - Fl_Button *o = new Fl_Button(width - 2 * BBS - 2 * WB, height - BH - WB, BBS, BH, "Kill"); - o->callback(solver_kill_cb, (void *)num); - } { - Fl_Button *o = new Fl_Button(width - BBS - WB, height - BH - WB, BBS, BH, "Cancel"); - o->callback(cancel_cb, (void *)solver[num].window); + Fl_Button *b1 = new Fl_Button(width - 2 * BB - 2 * WB, height - BH - WB, BB, BH, "Kill solver"); + b1->callback(solver_kill_cb, (void *)num); + Fl_Button *b2 = new Fl_Button(width - BB - WB, height - BH - WB, BB, BH, "Cancel"); + b2->callback(cancel_cb, (void *)solver[num].window); } solver[num].window->position(CTX.solver_position[0], CTX.solver_position[1]);