diff --git a/Common/Options.cpp b/Common/Options.cpp index f5f78b2ca16252ae2bc66ff4684dba1334bc61a7..a4b009b57980cdf5f6548de33d0f9c2b8e0c3268 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.60 2001-11-13 13:22:21 geuzaine Exp $ +// $Id: Options.cpp,v 1.61 2001-11-14 14:39:39 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -2401,17 +2401,8 @@ double opt_print_gif_transparent(OPT_ARGS_NUM){ #ifdef _FLTK #if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) - -#define CCC(col,but) \ - if(WID && (action & GMSH_GUI)){ \ - Fl_Color c = fl_color_cube(UNPACK_RED(col)*FL_NUM_RED/256, \ - UNPACK_GREEN(col)*FL_NUM_GREEN/256, \ - UNPACK_BLUE(col)*FL_NUM_BLUE/256); \ - (but)->color(c); \ - (but)->redraw(); \ - } - -#else +#define contrast fl_contrast +#endif #define CCC(col,but) \ if(WID && (action & GMSH_GUI)){ \ @@ -2425,8 +2416,6 @@ double opt_print_gif_transparent(OPT_ARGS_NUM){ #endif -#endif - unsigned int opt_general_color_background(OPT_ARGS_COL){ if(action & GMSH_SET){ CTX.color.bg = val; diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 97c788a2a051c56443c6fe001265549c2dd241e8..41a5a19f2ad126aca7cd6368aac6f10cb6207709 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.92 2001-11-13 08:10:00 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.93 2001-11-14 14:39:39 geuzaine Exp $ #include <sys/types.h> #include <signal.h> @@ -487,7 +487,6 @@ void opt_statistics_histogram_cb(CALLBACK_ARGS) { int i, type=(int)data; Print_Histogram(M.Histogram[type]); - //WID->create_message_window(); double *x=(double*)Malloc(NB_HISTOGRAM*sizeof(double)); double *y=(double*)Malloc(NB_HISTOGRAM*sizeof(double)); diff --git a/Fltk/Colorbar_Window.cpp b/Fltk/Colorbar_Window.cpp index c41fad481ccae1409233eaed2755444768b14497..7da789c3d769b351d84e1828102edfec37814f8d 100644 --- a/Fltk/Colorbar_Window.cpp +++ b/Fltk/Colorbar_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Colorbar_Window.cpp,v 1.14 2001-11-13 13:22:21 geuzaine Exp $ +// $Id: Colorbar_Window.cpp,v 1.15 2001-11-14 14:39:39 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -13,6 +13,10 @@ extern Context_T CTX; #define UNDEFINED 0 #define EPS 1.e-10 +#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) +#define contrast fl_contrast +#endif + // This file defines the Colorbar_Window class (subclass of Fl_Window) // The constructor @@ -217,10 +221,7 @@ void Colorbar_Window::redraw_range(int a, int b){ x = index_to_x(i); y = intensity_to_y(UNPACK_ALPHA(ct->table[i])); if (i!=a){ -#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) -#else fl_color(contrast(FL_BLACK,color_bg)); -#endif fl_line(px,py,x,y); } px = x; py = y; @@ -241,10 +242,7 @@ void Colorbar_Window::redraw_range(int a, int b){ // print colortable mode and help fl_font(FL_HELVETICA, font_height); -#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) -#else fl_color(contrast(FL_BLACK,color_bg)); -#endif int xx0=10, xx1=13*font_height, yy0=10; if (help_flag){ i = 0; @@ -300,10 +298,7 @@ void Colorbar_Window::redraw_marker(){ // draw marker below color wedge x = index_to_x(marker_pos); -#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) -#else fl_color(contrast(FL_BLACK,color_bg)); -#endif fl_line(x, marker_y, x, marker_y+marker_height); fl_line(x, marker_y, x-3, marker_y+6); fl_line(x, marker_y, x+3, marker_y+6); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 1fa940c6746717238d2e12179204e5d76d3aa132..462d9148b393479f2d36016d590f526a322520f7 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,7 +1,7 @@ -// $Id: GUI.cpp,v 1.127 2001-11-13 08:09:59 geuzaine Exp $ +// $Id: GUI.cpp,v 1.128 2001-11-14 14:39:39 geuzaine Exp $ // To make the interface as visually consistent as possible, please: -// - use the BH, BW, WB, IW values for button heights/widths, window borders, etc. +// - use the IW, BB, BH, BW and WB values // - use CTX.fontsize for font sizes // - examine what's already done before adding something new... @@ -24,10 +24,21 @@ #include "OpenFile.h" #include "GetOptions.h" +#if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) +#define WINDOW_BOX FL_FLAT_BOX +#define TOGGLE_BOX FL_DOWN_BOX +#define TOGGLE_COLOR FL_BLACK +#define RADIO_BOX FL_ROUND_DOWN_BOX +#define RADIO_COLOR FL_BLACK +#else #define WINDOW_BOX FL_FLAT_BOX +#define TOGGLE_BOX FL_DOWN_BOX +#define TOGGLE_COLOR FL_YELLOW +#define RADIO_BOX FL_DIAMOND_DOWN_BOX +#define RADIO_COLOR FL_YELLOW +#endif #define IW (10*CTX.fontsize) // input field width -#define BW (3*IW/2) // width of a button with external label #define BB (5*CTX.fontsize-2) // width of a button with internal label #define BH (2*CTX.fontsize+1) // button height #define WB (5) // window border @@ -484,20 +495,20 @@ int GUI::global_shortcuts(int event){ GUI::GUI(int argc, char **argv) { - init_menu_window = 0; - init_graphic_window = 0; - init_general_options_window = 0; - init_geometry_options_window = 0; - init_mesh_options_window = 0; - init_solver_options_window = 0; - init_post_options_window = 0; - init_statistics_window = 0; - init_message_window = 0; - init_about_window = 0; - init_view_window = 0; - init_geometry_context_window = 0; - init_mesh_context_window = 0; - init_getdp_window = 0; + m_window = NULL; + g_window = NULL; + gen_window = NULL; + geo_window = NULL; + mesh_window = NULL; + solver_window = NULL; + post_window = NULL; + stat_window = NULL; + msg_window = NULL; + about_window = NULL; + view_window = NULL; + context_geometry_window = NULL; + context_mesh_window = NULL; + getdp_window = NULL; if(strlen(CTX.display)) Fl::display(CTX.display); @@ -581,99 +592,93 @@ void GUI::add_post_plugins (Fl_Menu_Button *button , int iView){ void GUI::create_menu_window(int argc, char **argv){ int i, y; - if(!init_menu_window){ - init_menu_window = 1 ; - - int width = 13*CTX.fontsize-CTX.fontsize/2-2 ; - MH = BH + BH+6 ; // this is the initial height: no dynamic button is shown! - - m_window = new Fl_Window(width,MH); - m_window->box(WINDOW_BOX); - m_window->label("Gmsh"); - m_window->callback(file_quit_cb); - - m_menu_bar = new Fl_Menu_Bar(0,0,width,BH); - m_menu_bar->menu(m_menubar_table); - m_menu_bar->textsize(CTX.fontsize); - m_menu_bar->box(FL_UP_BOX); - m_menu_bar->global(); - - Fl_Box *o = new Fl_Box(0,BH,width,BH+6); - o->box(FL_UP_BOX); - - y = BH + 3; - - m_navig_butt[0] = new Fl_Button(1,y,18,BH/2,"@<"); - m_navig_butt[0]->labeltype(FL_SYMBOL_LABEL); - m_navig_butt[0]->labelsize(11); - m_navig_butt[0]->box(FL_FLAT_BOX); - m_navig_butt[0]->selection_color(FL_WHITE); - m_navig_butt[0]->callback(mod_back_cb); - - m_navig_butt[1] = new Fl_Button(1,y+BH/2,18,BH/2,"@>"); - m_navig_butt[1]->labeltype(FL_SYMBOL_LABEL); - m_navig_butt[1]->labelsize(11); - m_navig_butt[1]->box(FL_FLAT_BOX); - m_navig_butt[1]->selection_color(FL_WHITE); - m_navig_butt[1]->callback(mod_forward_cb); - - m_module_butt = new Fl_Choice(19,y,width-24,BH); - m_module_butt->menu(m_module_table); - m_module_butt->textsize(CTX.fontsize); - m_module_butt->box(FL_THIN_DOWN_BOX); - - y = MH ; - - for(i=0; i<NB_BUTT_MAX; i++){ - m_push_butt[i] = new Fl_Button(0,y+i*BH,width,BH); - m_push_butt[i]->labelsize(CTX.fontsize); - m_push_butt[i]->hide(); - m_toggle_butt[i] = new Fl_Light_Button(0,y+i*BH,width,BH); - m_toggle_butt[i]->labelsize(CTX.fontsize); - m_toggle_butt[i]->callback(view_toggle_cb, (void*)i); - m_toggle_butt[i]->hide(); - m_popup_butt[i] = new Fl_Menu_Button(0,y+i*BH,width,BH); - m_popup_butt[i]->type(Fl_Menu_Button::POPUP3); - m_popup_butt[i]->add("Reload/View", 0, - (Fl_Callback *)view_reload_cb, (void*)i, 0); - m_popup_butt[i]->add("Reload/All views", 0, - (Fl_Callback *)view_reload_all_cb, (void*)i, 0); - m_popup_butt[i]->add("Reload/All visible views", 0, - (Fl_Callback *)view_reload_visible_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/View", 0, - (Fl_Callback *)view_remove_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/All views", 0, - (Fl_Callback *)view_remove_all_cb, (void*)i, 0); - m_popup_butt[i]->add("Remove/All visible views", 0, - (Fl_Callback *)view_remove_visible_cb, (void*)i, 0); - m_popup_butt[i]->add("Duplicate/View without options", 0, - (Fl_Callback *)view_duplicate_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Duplicate/View with options", 0, - (Fl_Callback *)view_duplicate_with_options_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Save as/ASCII view...", 0, - (Fl_Callback *)view_save_ascii_cb, (void*)i, 0) ; - m_popup_butt[i]->add("Save as/Binary view...", 0, - (Fl_Callback *)view_save_binary_cb, (void*)i, 0) ; - add_post_plugins ( m_popup_butt[i] , i); - m_popup_butt[i]->add("Apply as background mesh", 0, - (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER); - m_popup_butt[i]->add("Options...", 0, - (Fl_Callback *)view_options_cb, (void*)i, 0); - m_popup_butt[i]->textsize(CTX.fontsize); - m_popup_butt[i]->hide(); - } - - m_window->position(CTX.position[0],CTX.position[1]); - m_window->end(); + if(m_window){ + m_window->show(1, argv); + return; } - else{ - if(m_window->shown()) - m_window->redraw(); - else - m_window->show(1, argv); - + + int width = 13*CTX.fontsize-CTX.fontsize/2-2 ; + MH = BH + BH+6 ; // this is the initial height: no dynamic button is shown! + + m_window = new Fl_Window(width,MH); + m_window->box(WINDOW_BOX); + m_window->label("Gmsh"); + m_window->callback(file_quit_cb); + + m_menu_bar = new Fl_Menu_Bar(0,0,width,BH); + m_menu_bar->menu(m_menubar_table); + m_menu_bar->textsize(CTX.fontsize); + m_menu_bar->box(FL_UP_BOX); + m_menu_bar->global(); + + Fl_Box *o = new Fl_Box(0,BH,width,BH+6); + o->box(FL_UP_BOX); + + y = BH + 3; + + m_navig_butt[0] = new Fl_Button(1,y,18,BH/2,"@<"); + m_navig_butt[0]->labeltype(FL_SYMBOL_LABEL); + m_navig_butt[0]->labelsize(11); + m_navig_butt[0]->box(FL_FLAT_BOX); + m_navig_butt[0]->selection_color(FL_WHITE); + m_navig_butt[0]->callback(mod_back_cb); + + m_navig_butt[1] = new Fl_Button(1,y+BH/2,18,BH/2,"@>"); + m_navig_butt[1]->labeltype(FL_SYMBOL_LABEL); + m_navig_butt[1]->labelsize(11); + m_navig_butt[1]->box(FL_FLAT_BOX); + m_navig_butt[1]->selection_color(FL_WHITE); + m_navig_butt[1]->callback(mod_forward_cb); + + m_module_butt = new Fl_Choice(19,y,width-24,BH); + m_module_butt->menu(m_module_table); + m_module_butt->textsize(CTX.fontsize); + m_module_butt->box(FL_THIN_DOWN_BOX); + + y = MH ; + + for(i=0; i<NB_BUTT_MAX; i++){ + m_push_butt[i] = new Fl_Button(0,y+i*BH,width,BH); + m_push_butt[i]->labelsize(CTX.fontsize); + m_push_butt[i]->hide(); + m_toggle_butt[i] = new Fl_Light_Button(0,y+i*BH,width,BH); + m_toggle_butt[i]->labelsize(CTX.fontsize); + m_toggle_butt[i]->callback(view_toggle_cb, (void*)i); + m_toggle_butt[i]->hide(); + m_popup_butt[i] = new Fl_Menu_Button(0,y+i*BH,width,BH); + m_popup_butt[i]->type(Fl_Menu_Button::POPUP3); + m_popup_butt[i]->add("Reload/View", 0, + (Fl_Callback *)view_reload_cb, (void*)i, 0); + m_popup_butt[i]->add("Reload/All views", 0, + (Fl_Callback *)view_reload_all_cb, (void*)i, 0); + m_popup_butt[i]->add("Reload/All visible views", 0, + (Fl_Callback *)view_reload_visible_cb, (void*)i, 0); + m_popup_butt[i]->add("Remove/View", 0, + (Fl_Callback *)view_remove_cb, (void*)i, 0); + m_popup_butt[i]->add("Remove/All views", 0, + (Fl_Callback *)view_remove_all_cb, (void*)i, 0); + m_popup_butt[i]->add("Remove/All visible views", 0, + (Fl_Callback *)view_remove_visible_cb, (void*)i, 0); + m_popup_butt[i]->add("Duplicate/View without options", 0, + (Fl_Callback *)view_duplicate_cb, (void*)i, 0) ; + m_popup_butt[i]->add("Duplicate/View with options", 0, + (Fl_Callback *)view_duplicate_with_options_cb, (void*)i, 0) ; + m_popup_butt[i]->add("Save as/ASCII view...", 0, + (Fl_Callback *)view_save_ascii_cb, (void*)i, 0) ; + m_popup_butt[i]->add("Save as/Binary view...", 0, + (Fl_Callback *)view_save_binary_cb, (void*)i, 0) ; + add_post_plugins(m_popup_butt[i], i); + m_popup_butt[i]->add("Apply as background mesh", 0, + (Fl_Callback *)view_applybgmesh_cb, (void*)i, FL_MENU_DIVIDER); + m_popup_butt[i]->add("Options...", 0, + (Fl_Callback *)view_options_cb, (void*)i, 0); + m_popup_butt[i]->textsize(CTX.fontsize); + m_popup_butt[i]->hide(); } + m_window->position(CTX.position[0],CTX.position[1]); + m_window->end(); + } // Dynamically set the height of the menu window @@ -791,83 +796,77 @@ int GUI::get_context(){ void GUI::create_graphic_window(int argc, char **argv){ int i, x; - if(!init_graphic_window){ - init_graphic_window = 1 ; - - int sh = 2*CTX.fontsize-4; // status bar height - int sw = CTX.fontsize+4; //status button width - int width = CTX.viewport[2]-CTX.viewport[0]; - int glheight = CTX.viewport[3]-CTX.viewport[1]; - int height = glheight + sh; + if(g_window){ + g_window->show(1, argv); + return; + } + + int sh = 2*CTX.fontsize-4; // status bar height + int sw = CTX.fontsize+4; //status button width + int width = CTX.viewport[2]-CTX.viewport[0]; + int glheight = CTX.viewport[3]-CTX.viewport[1]; + int height = glheight + sh; + + g_window = new Fl_Window(width, height); + g_window->callback(file_quit_cb); + + g_opengl_window = new Opengl_Window(0,0,width,glheight); + if(!opt_general_double_buffer(0,GMSH_GET,0)){ + Msg(INFO, "Setting OpenGL visual to single buffered"); + g_opengl_window->mode(FL_RGB | FL_DEPTH | FL_SINGLE); + } + g_opengl_window->end(); + + { + Fl_Group *o = new Fl_Group(0,glheight,width,sh); + o->box(FL_THIN_UP_BOX); - g_window = new Fl_Window(width, height); - g_window->callback(file_quit_cb); + x = 2; - g_opengl_window = new Opengl_Window(0,0,width,glheight); - if(!opt_general_double_buffer(0,GMSH_GET,0)){ - Msg(INFO, "Setting OpenGL visual to single buffered"); - g_opengl_window->mode(FL_RGB | FL_DEPTH | FL_SINGLE); + g_status_butt[0] = new Fl_Button(x,glheight+2,sw,sh-4,"X"); x+=sw; + g_status_butt[0]->callback(status_xyz1p_cb, (void*)0); + //g_status_butt[0]->tooltip("Set X view"); + g_status_butt[1] = new Fl_Button(x,glheight+2,sw,sh-4,"Y"); x+=sw; + g_status_butt[1]->callback(status_xyz1p_cb, (void*)1); + g_status_butt[2] = new Fl_Button(x,glheight+2,sw,sh-4,"Z"); x+=sw; + g_status_butt[2]->callback(status_xyz1p_cb, (void*)2); + g_status_butt[3] = new Fl_Button(x,glheight+2,2*CTX.fontsize,sh-4,"1:1"); x+=2*CTX.fontsize; + g_status_butt[3]->callback(status_xyz1p_cb, (void*)3); + g_status_butt[4] = new Fl_Button(x,glheight+2,sw,sh-4,"?"); x+=sw; + g_status_butt[4]->callback(status_xyz1p_cb, (void*)4); + g_status_butt[5] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; + g_status_butt[5]->callback(status_play_cb); + start_bmp = new Fl_Bitmap(start_bits,start_width,start_height); + start_bmp->label(g_status_butt[5]); + stop_bmp = new Fl_Bitmap(stop_bits,stop_width,stop_height); + g_status_butt[5]->deactivate(); + g_status_butt[6] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; + g_status_butt[6]->callback(status_cancel_cb); + abort_bmp = new Fl_Bitmap(abort_bits,abort_width,abort_height); + abort_bmp->label(g_status_butt[6]); + g_status_butt[6]->deactivate(); + for(i = 0 ; i<7 ; i++){ + g_status_butt[i]->box(FL_FLAT_BOX); + g_status_butt[i]->selection_color(FL_WHITE); + g_status_butt[i]->labelsize(CTX.fontsize); + g_status_butt[i]->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); } - g_opengl_window->end(); - { - Fl_Group *o = new Fl_Group(0,glheight,width,sh); - o->box(FL_THIN_UP_BOX); - - x = 2; - - g_status_butt[0] = new Fl_Button(x,glheight+2,sw,sh-4,"X"); x+=sw; - g_status_butt[0]->callback(status_xyz1p_cb, (void*)0); - //g_status_butt[0]->tooltip("Set X view"); - g_status_butt[1] = new Fl_Button(x,glheight+2,sw,sh-4,"Y"); x+=sw; - g_status_butt[1]->callback(status_xyz1p_cb, (void*)1); - g_status_butt[2] = new Fl_Button(x,glheight+2,sw,sh-4,"Z"); x+=sw; - g_status_butt[2]->callback(status_xyz1p_cb, (void*)2); - g_status_butt[3] = new Fl_Button(x,glheight+2,2*CTX.fontsize,sh-4,"1:1"); x+=2*CTX.fontsize; - g_status_butt[3]->callback(status_xyz1p_cb, (void*)3); - g_status_butt[4] = new Fl_Button(x,glheight+2,sw,sh-4,"?"); x+=sw; - g_status_butt[4]->callback(status_xyz1p_cb, (void*)4); - g_status_butt[5] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; - g_status_butt[5]->callback(status_play_cb); - start_bmp = new Fl_Bitmap(start_bits,start_width,start_height); - start_bmp->label(g_status_butt[5]); - stop_bmp = new Fl_Bitmap(stop_bits,stop_width,stop_height); - g_status_butt[5]->deactivate(); - g_status_butt[6] = new Fl_Button(x,glheight+2,sw,sh-4); x+=sw; - g_status_butt[6]->callback(status_cancel_cb); - abort_bmp = new Fl_Bitmap(abort_bits,abort_width,abort_height); - abort_bmp->label(g_status_butt[6]); - g_status_butt[6]->deactivate(); - for(i = 0 ; i<7 ; i++){ - g_status_butt[i]->box(FL_FLAT_BOX); - g_status_butt[i]->selection_color(FL_WHITE); - g_status_butt[i]->labelsize(CTX.fontsize); - g_status_butt[i]->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); - } - - g_status_label[0] = new Fl_Box(x,glheight+2,(width-x)/3,sh-4); - g_status_label[1] = new Fl_Box(x+(width-x)/3,glheight+2,(width-x)/3,sh-4); - g_status_label[2] = new Fl_Box(x+2*(width-x)/3,glheight+2,(width-x)/3-2,sh-4); - for(i = 0 ; i<3 ; i++){ - g_status_label[i]->box(FL_FLAT_BOX); - g_status_label[i]->labelsize(CTX.fontsize); - g_status_label[i]->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); - } - - o->end(); + g_status_label[0] = new Fl_Box(x,glheight+2,(width-x)/3,sh-4); + g_status_label[1] = new Fl_Box(x+(width-x)/3,glheight+2,(width-x)/3,sh-4); + g_status_label[2] = new Fl_Box(x+2*(width-x)/3,glheight+2,(width-x)/3-2,sh-4); + for(i = 0 ; i<3 ; i++){ + g_status_label[i]->box(FL_FLAT_BOX); + g_status_label[i]->labelsize(CTX.fontsize); + g_status_label[i]->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP); } - g_window->resizable(g_opengl_window); - g_window->position(CTX.gl_position[0],CTX.gl_position[1]); - g_window->end(); - } - else{ - if(g_window->shown()) - g_window->redraw(); - else - g_window->show(1, argv); - + o->end(); } + + g_window->resizable(g_opengl_window); + g_window->position(CTX.gl_position[0],CTX.gl_position[1]); + g_window->end(); } // Set the size of the graphical window @@ -929,179 +928,175 @@ void GUI::redraw_overlay(){ void GUI::create_general_options_window(){ int i; - if(!init_general_options_window){ - init_general_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+11*BH ; + if(gen_window){ + gen_window->show(); + return; + } - gen_window = new Fl_Window(width,height); - gen_window->box(WINDOW_BOX); - gen_window->label("General options"); + int width = 25*CTX.fontsize; + int height = 5*WB+11*BH ; + int BW = width-4*WB; + + gen_window = new Fl_Window(width,height); + gen_window->box(WINDOW_BOX); + gen_window->label("General options"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Display"); - o->labelsize(CTX.fontsize); - gen_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show moving axes"); - gen_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Show small axes"); - gen_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Enable fast redraw"); - gen_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Enable double buffering"); - gen_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Use display lists"); - gen_butt[5] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Enable alpha blending"); - gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Use trackball rotation mode"); - for(i=0 ; i<7 ; i++){ - gen_butt[i]->type(FL_TOGGLE_BUTTON); - gen_butt[i]->down_box(FL_DOWN_BOX); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - o->end(); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Display"); + o->labelsize(CTX.fontsize); + gen_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Show moving axes"); + gen_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Show small axes"); + gen_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Enable fast redraw"); + gen_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Enable double buffering"); + gen_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Use display lists"); + gen_butt[5] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Enable alpha blending"); + gen_butt[6] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Use trackball rotation mode"); + for(i=0 ; i<7 ; i++){ + gen_butt[i]->type(FL_TOGGLE_BUTTON); + gen_butt[i]->down_box(TOGGLE_BOX); + gen_butt[i]->labelsize(CTX.fontsize); + gen_butt[i]->selection_color(TOGGLE_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Output"); - o->labelsize(CTX.fontsize); - gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Print messages on terminal"); - gen_butt[8] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Save session information on exit"); - gen_butt[9] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Save options on exit"); - for(i=7 ; i<10 ; i++){ - gen_butt[i]->type(FL_TOGGLE_BUTTON); - gen_butt[i]->down_box(FL_DOWN_BOX); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - gen_value[5] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Message verbosity"); - gen_value[5]->minimum(0); - gen_value[5]->maximum(10); - gen_value[5]->step(1); - gen_value[5]->labelsize(CTX.fontsize); - gen_value[5]->textsize(CTX.fontsize); - gen_value[5]->type(FL_HORIZONTAL); - gen_value[5]->align(FL_ALIGN_RIGHT); - gen_input[0] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Default file name"); - gen_input[1] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Temporary file"); - gen_input[2] = new Fl_Input(2*WB, 2*WB+7*BH, IW, BH, "Error file"); - gen_input[3] = new Fl_Input(2*WB, 2*WB+8*BH, IW, BH, "Option file"); - gen_input[4] = new Fl_Input(2*WB, 2*WB+9*BH, IW, BH, "Text editor command"); - for(i=0 ; i<5 ; i++){ - gen_input[i]->labelsize(CTX.fontsize); - gen_input[i]->textsize(CTX.fontsize); - gen_input[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + o->end(); + } + { + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Output"); + o->labelsize(CTX.fontsize); + gen_butt[7] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Print messages on terminal"); + gen_butt[8] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Save session information on exit"); + gen_butt[9] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Save options on exit"); + for(i=7 ; i<10 ; i++){ + gen_butt[i]->type(FL_TOGGLE_BUTTON); + gen_butt[i]->down_box(TOGGLE_BOX); + gen_butt[i]->labelsize(CTX.fontsize); + gen_butt[i]->selection_color(TOGGLE_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_butt[10] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic projection"); - gen_butt[11] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective projection"); - for(i=10 ; i<12 ; i++){ - gen_butt[i]->type(FL_RADIO_BUTTON); - gen_butt[i]->labelsize(CTX.fontsize); - gen_butt[i]->selection_color(FL_YELLOW); - } - gen_value[6] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Point size"); - gen_value[6]->minimum(1); - gen_value[6]->maximum(50); - gen_value[6]->step(1); - gen_value[7] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Line width"); - gen_value[7]->minimum(1); - gen_value[7]->maximum(50); - gen_value[7]->step(1); - for(i=6 ; i<= 7 ; i++){ - gen_value[i]->labelsize(CTX.fontsize); - gen_value[i]->textsize(CTX.fontsize); - gen_value[i]->type(FL_HORIZONTAL); - gen_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + gen_value[5] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Message verbosity"); + gen_value[5]->minimum(0); + gen_value[5]->maximum(10); + gen_value[5]->step(1); + gen_value[5]->labelsize(CTX.fontsize); + gen_value[5]->textsize(CTX.fontsize); + gen_value[5]->type(FL_HORIZONTAL); + gen_value[5]->align(FL_ALIGN_RIGHT); + gen_input[0] = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Default file name"); + gen_input[1] = new Fl_Input(2*WB, 2*WB+6*BH, IW, BH, "Temporary file"); + gen_input[2] = new Fl_Input(2*WB, 2*WB+7*BH, IW, BH, "Error file"); + gen_input[3] = new Fl_Input(2*WB, 2*WB+8*BH, IW, BH, "Option file"); + gen_input[4] = new Fl_Input(2*WB, 2*WB+9*BH, IW, BH, "Text editor command"); + for(i=0 ; i<5 ; i++){ + gen_input[i]->labelsize(CTX.fontsize); + gen_input[i]->textsize(CTX.fontsize); + gen_input[i]->align(FL_ALIGN_RIGHT); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); - gen_value[0]->minimum(0); - gen_value[0]->maximum(2); - gen_value[0]->step(1); - gen_value[0]->labelsize(CTX.fontsize); - gen_value[0]->textsize(CTX.fontsize); - gen_value[0]->type(FL_HORIZONTAL); - gen_value[0]->align(FL_ALIGN_RIGHT); - gen_value[0]->callback(opt_general_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); - i = 0; - while(GeneralOptions_Color[i].str){ - gen_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeneralOptions_Color[i].str); - gen_col[i]->callback(color_cb, (void*)GeneralOptions_Color[i].function) ; - gen_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); + o->end(); + } + { + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); + o->labelsize(CTX.fontsize); + o->hide(); + gen_butt[10] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Orthographic projection"); + gen_butt[11] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Perspective projection"); + for(i=10 ; i<12 ; i++){ + gen_butt[i]->type(FL_RADIO_BUTTON); + gen_butt[i]->down_box(RADIO_BOX); + gen_butt[i]->labelsize(CTX.fontsize); + gen_butt[i]->selection_color(RADIO_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light"); - o->labelsize(CTX.fontsize); - o->hide(); - gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Material shininess"); - gen_value[1]->minimum(0); - gen_value[1]->maximum(10); - gen_value[1]->step(0.1); - gen_butt[12] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Moving light"); - gen_butt[12]->type(FL_TOGGLE_BUTTON); - gen_butt[12]->down_box(FL_DOWN_BOX); - gen_butt[12]->labelsize(CTX.fontsize); - gen_butt[12]->selection_color(FL_YELLOW); - gen_value[2] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Light position X"); - gen_value[2]->minimum(-1); - gen_value[2]->maximum(1); - gen_value[2]->step(0.01); - gen_value[3] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Light position Y"); - gen_value[3]->minimum(-1); - gen_value[3]->maximum(1); - gen_value[3]->step(0.01); - gen_value[4] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Light position Z"); - gen_value[4]->minimum(-1); - gen_value[4]->maximum(1); - gen_value[4]->step(0.01); - for(i=1 ; i<5 ; i++){ - gen_value[i]->labelsize(CTX.fontsize); - gen_value[i]->textsize(CTX.fontsize); - gen_value[i]->type(FL_HORIZONTAL); - gen_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + gen_value[6] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Point size"); + gen_value[6]->minimum(1); + gen_value[6]->maximum(50); + gen_value[6]->step(1); + gen_value[7] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Line width"); + gen_value[7]->minimum(1); + gen_value[7]->maximum(50); + gen_value[7]->step(1); + for(i=6 ; i<= 7 ; i++){ + gen_value[i]->labelsize(CTX.fontsize); + gen_value[i]->textsize(CTX.fontsize); + gen_value[i]->type(FL_HORIZONTAL); + gen_value[i]->align(FL_ALIGN_RIGHT); } o->end(); } - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); o->labelsize(CTX.fontsize); - o->callback(opt_general_ok_cb); + o->hide(); + gen_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); + gen_value[0]->minimum(0); + gen_value[0]->maximum(2); + gen_value[0]->step(1); + gen_value[0]->labelsize(CTX.fontsize); + gen_value[0]->textsize(CTX.fontsize); + gen_value[0]->type(FL_HORIZONTAL); + gen_value[0]->align(FL_ALIGN_RIGHT); + gen_value[0]->callback(opt_general_color_scheme_cb); + + Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); + i = 0; + while(GeneralOptions_Color[i].str){ + gen_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeneralOptions_Color[i].str); + gen_col[i]->callback(color_cb, (void*)GeneralOptions_Color[i].function) ; + gen_col[i]->labelsize(CTX.fontsize); + i++; + } + s->end(); + o->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Light"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)gen_window); + o->hide(); + gen_value[1] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Material shininess"); + gen_value[1]->minimum(0); + gen_value[1]->maximum(10); + gen_value[1]->step(0.1); + gen_butt[12] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Moving light"); + gen_butt[12]->type(FL_TOGGLE_BUTTON); + gen_butt[12]->down_box(TOGGLE_BOX); + gen_butt[12]->labelsize(CTX.fontsize); + gen_butt[12]->selection_color(TOGGLE_COLOR); + gen_value[2] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Light position X"); + gen_value[2]->minimum(-1); + gen_value[2]->maximum(1); + gen_value[2]->step(0.01); + gen_value[3] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Light position Y"); + gen_value[3]->minimum(-1); + gen_value[3]->maximum(1); + gen_value[3]->step(0.01); + gen_value[4] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Light position Z"); + gen_value[4]->minimum(-1); + gen_value[4]->maximum(1); + gen_value[4]->step(0.01); + for(i=1 ; i<5 ; i++){ + gen_value[i]->labelsize(CTX.fontsize); + gen_value[i]->textsize(CTX.fontsize); + gen_value[i]->type(FL_HORIZONTAL); + gen_value[i]->align(FL_ALIGN_RIGHT); + } + o->end(); } - - if(CTX.center_windows) - gen_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - gen_window->end(); + o->end(); } - else{ - if(gen_window->shown()) - gen_window->redraw(); - else - gen_window->show(); - + + { + Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(opt_general_ok_cb); + } + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)gen_window); } + if(CTX.center_windows) + gen_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + gen_window->end(); + } //************************ Create the window for geometry options ********************** @@ -1109,141 +1104,136 @@ void GUI::create_general_options_window(){ void GUI::create_geometry_options_window(){ int i; - if(!init_geometry_options_window){ - init_geometry_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+9*BH ; + if(geo_window){ + geo_window->show(); + return; + } - geo_window = new Fl_Window(width,height); - geo_window->box(WINDOW_BOX); - geo_window->label("Geometry options"); + int width = 25*CTX.fontsize; + int height = 5*WB+9*BH ; + int BW = width-4*WB; + + geo_window = new Fl_Window(width,height); + geo_window->box(WINDOW_BOX); + geo_window->label("Geometry options"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Algorithm"); - o->labelsize(CTX.fontsize); - o->hide(); - geo_butt[8] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Auto coherence (suppress duplicates)"); - geo_butt[8]->type(FL_TOGGLE_BUTTON); - geo_butt[8]->down_box(FL_DOWN_BOX); - geo_butt[8]->labelsize(CTX.fontsize); - geo_butt[8]->selection_color(FL_YELLOW); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); - o->labelsize(CTX.fontsize); - geo_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points"); - geo_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Curves"); - geo_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - geo_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - geo_butt[4] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point numbers"); - geo_butt[5] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Curve numbers"); - geo_butt[6] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface numbers"); - geo_butt[7] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume numbers"); - for(i=0 ; i<8 ; i++){ - geo_butt[i]->type(FL_TOGGLE_BUTTON); - geo_butt[i]->down_box(FL_DOWN_BOX); - geo_butt[i]->labelsize(CTX.fontsize); - geo_butt[i]->selection_color(FL_YELLOW); - } - - geo_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity number"); - geo_input->labelsize(CTX.fontsize); - geo_input->textsize(CTX.fontsize); - geo_input->align(FL_ALIGN_RIGHT); - geo_input->callback(opt_geometry_show_by_entity_num_cb); - geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); - - geo_value[0] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Normals"); - geo_value[0]->minimum(0); - geo_value[0]->maximum(100); - geo_value[0]->step(0.1); - geo_value[1] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Tangents"); - geo_value[1]->minimum(0); - geo_value[1]->maximum(100); - geo_value[1]->step(0.1); - for(i=0 ; i<2 ; i++){ - geo_value[i]->labelsize(CTX.fontsize); - geo_value[i]->textsize(CTX.fontsize); - geo_value[i]->type(FL_HORIZONTAL); - geo_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); - o->labelsize(CTX.fontsize); - o->hide(); - geo_value[3] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Point size"); - geo_value[3]->minimum(1); - geo_value[3]->maximum(50); - geo_value[3]->step(1); - geo_value[4] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Line width"); - geo_value[4]->minimum(1); - geo_value[4]->maximum(50); - geo_value[4]->step(1); - for(i=3 ; i<= 4 ; i++){ - geo_value[i]->labelsize(CTX.fontsize); - geo_value[i]->textsize(CTX.fontsize); - geo_value[i]->type(FL_HORIZONTAL); - geo_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Algorithm"); + o->labelsize(CTX.fontsize); + o->hide(); + geo_butt[8] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Auto coherence (suppress duplicates)"); + geo_butt[8]->type(FL_TOGGLE_BUTTON); + geo_butt[8]->down_box(TOGGLE_BOX); + geo_butt[8]->labelsize(CTX.fontsize); + geo_butt[8]->selection_color(TOGGLE_COLOR); + o->end(); + } + { + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); + o->labelsize(CTX.fontsize); + geo_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW/2-WB, BH, "Points"); + geo_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Curves"); + geo_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Surfaces"); + geo_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Volumes"); + geo_butt[4] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Point numbers"); + geo_butt[5] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Curve numbers"); + geo_butt[6] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Surface numbers"); + geo_butt[7] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Volume numbers"); + for(i=0 ; i<8 ; i++){ + geo_butt[i]->type(FL_TOGGLE_BUTTON); + geo_butt[i]->down_box(TOGGLE_BOX); + geo_butt[i]->labelsize(CTX.fontsize); + geo_butt[i]->selection_color(TOGGLE_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - geo_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); - geo_value[2]->minimum(0); - geo_value[2]->maximum(2); - geo_value[2]->step(1); - geo_value[2]->labelsize(CTX.fontsize); - geo_value[2]->textsize(CTX.fontsize); - geo_value[2]->type(FL_HORIZONTAL); - geo_value[2]->align(FL_ALIGN_RIGHT); - geo_value[2]->callback(opt_geometry_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); - i = 0; - while(GeometryOptions_Color[i].str){ - geo_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeometryOptions_Color[i].str); - geo_col[i]->callback(color_cb, (void*)GeometryOptions_Color[i].function) ; - geo_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); + + geo_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity number"); + geo_input->labelsize(CTX.fontsize); + geo_input->textsize(CTX.fontsize); + geo_input->align(FL_ALIGN_RIGHT); + geo_input->callback(opt_geometry_show_by_entity_num_cb); + geo_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); + + geo_value[0] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Normals"); + geo_value[0]->minimum(0); + geo_value[0]->maximum(100); + geo_value[0]->step(0.1); + geo_value[1] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Tangents"); + geo_value[1]->minimum(0); + geo_value[1]->maximum(100); + geo_value[1]->step(0.1); + for(i=0 ; i<2 ; i++){ + geo_value[i]->labelsize(CTX.fontsize); + geo_value[i]->textsize(CTX.fontsize); + geo_value[i]->type(FL_HORIZONTAL); + geo_value[i]->align(FL_ALIGN_RIGHT); } o->end(); } - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); o->labelsize(CTX.fontsize); - o->callback(opt_geometry_ok_cb); + o->hide(); + geo_value[3] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Point size"); + geo_value[3]->minimum(1); + geo_value[3]->maximum(50); + geo_value[3]->step(1); + geo_value[4] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Line width"); + geo_value[4]->minimum(1); + geo_value[4]->maximum(50); + geo_value[4]->step(1); + for(i=3 ; i<= 4 ; i++){ + geo_value[i]->labelsize(CTX.fontsize); + geo_value[i]->textsize(CTX.fontsize); + geo_value[i]->type(FL_HORIZONTAL); + geo_value[i]->align(FL_ALIGN_RIGHT); + } + o->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)geo_window); + o->hide(); + geo_value[2] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Predefined color scheme"); + geo_value[2]->minimum(0); + geo_value[2]->maximum(2); + geo_value[2]->step(1); + geo_value[2]->labelsize(CTX.fontsize); + geo_value[2]->textsize(CTX.fontsize); + geo_value[2]->type(FL_HORIZONTAL); + geo_value[2]->align(FL_ALIGN_RIGHT); + geo_value[2]->callback(opt_geometry_color_scheme_cb); + + Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+2*BH, IW+20, height-3*WB-4*BH); + i = 0; + while(GeometryOptions_Color[i].str){ + geo_col[i] = new Fl_Button(2*WB, 3*WB+(2+i)*BH, IW, BH, GeometryOptions_Color[i].str); + geo_col[i]->callback(color_cb, (void*)GeometryOptions_Color[i].function) ; + geo_col[i]->labelsize(CTX.fontsize); + i++; + } + s->end(); + o->end(); } - - if(CTX.center_windows) - geo_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - geo_window->end(); + o->end(); } - else{ - if(geo_window->shown()) - geo_window->redraw(); - else - geo_window->show(); - + + { + Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(opt_geometry_ok_cb); + } + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)geo_window); } + if(CTX.center_windows) + geo_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + geo_window->end(); + } //****************************** Create the window for mesh options ******************** @@ -1251,257 +1241,248 @@ void GUI::create_geometry_options_window(){ void GUI::create_mesh_options_window(){ int i; - if(!init_mesh_options_window){ - init_mesh_options_window = 1 ; - - int width = 25*CTX.fontsize; - int height = 5*WB+12*BH ; + if(mesh_window){ + mesh_window->show(); + return; + } - mesh_window = new Fl_Window(width,height); - mesh_window->box(WINDOW_BOX); - mesh_window->label("Mesh options"); + int width = 25*CTX.fontsize; + int height = 5*WB+12*BH ; + int BW = width-4*WB; + + mesh_window = new Fl_Window(width,height); + mesh_window->box(WINDOW_BOX); + mesh_window->label("Mesh options"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Algorithm"); - o->labelsize(CTX.fontsize); - o->hide(); - - mesh_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Isotropic"); - mesh_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Isotropic (Triangle)"); - mesh_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Anisotropic"); - for(i=0 ; i<3 ; i++){ - mesh_butt[i]->type(FL_RADIO_BUTTON); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - - mesh_value[0] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Number of smoothing steps"); - mesh_value[0]->minimum(0); - mesh_value[0]->maximum(100); - mesh_value[0]->step(1); - mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Mesh scaling factor"); - mesh_value[1]->minimum(0.001); - mesh_value[1]->maximum(1000); - mesh_value[1]->step(0.001); - mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Characteristic length factor"); - mesh_value[2]->minimum(0.001); - mesh_value[2]->maximum(1000); - mesh_value[2]->step(0.001); - mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Random perturbation factor"); - mesh_value[3]->minimum(1.e-6); - mesh_value[3]->maximum(1.e-1); - mesh_value[3]->step(1.e-6); - for(i = 0 ; i<4 ; i++){ - mesh_value[i]->labelsize(CTX.fontsize); - mesh_value[i]->textsize(CTX.fontsize); - mesh_value[i]->type(FL_HORIZONTAL); - mesh_value[i]->align(FL_ALIGN_RIGHT); - } - - mesh_butt[3] = new Fl_Check_Button(2*WB, 2*WB+8*BH, BW, BH, "Second order elements"); - mesh_butt[3]->deactivate();//2nd order elements do not work. Disable the graphical option. - mesh_butt[4] = new Fl_Check_Button(2*WB, 2*WB+9*BH, BW, BH, "Interactive"); - mesh_butt[5] = new Fl_Check_Button(2*WB, 2*WB+10*BH, BW, BH, "Constrained background mesh"); - for(i=3 ; i<6 ; i++){ - mesh_butt[i]->type(FL_TOGGLE_BUTTON); - mesh_butt[i]->down_box(FL_DOWN_BOX); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - o->end(); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Algorithm"); + o->labelsize(CTX.fontsize); + o->hide(); + + mesh_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Isotropic"); + mesh_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Isotropic (Triangle)"); + mesh_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Anisotropic"); + for(i=0 ; i<3 ; i++){ + mesh_butt[i]->type(FL_RADIO_BUTTON); + mesh_butt[i]->down_box(RADIO_BOX); + mesh_butt[i]->labelsize(CTX.fontsize); + mesh_butt[i]->selection_color(RADIO_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); - o->labelsize(CTX.fontsize); - mesh_butt[6] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Points"); - mesh_butt[7] = new Fl_Check_Button(2*WB, 2*WB+2*BH, IW, BH, "Lines"); - mesh_butt[8] = new Fl_Check_Button(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - mesh_butt[9] = new Fl_Check_Button(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - mesh_butt[10] = new Fl_Check_Button(width/2, 2*WB+1*BH, IW, BH, "Point numbers"); - mesh_butt[11] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Line numbers"); - mesh_butt[12] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Surface numbers"); - mesh_butt[13] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Volume numbers"); - for(i=6 ; i<14 ; i++){ - mesh_butt[i]->type(FL_TOGGLE_BUTTON); - mesh_butt[i]->down_box(FL_DOWN_BOX); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - mesh_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity Number"); - mesh_input->labelsize(CTX.fontsize); - mesh_input->textsize(CTX.fontsize); - mesh_input->align(FL_ALIGN_RIGHT); - mesh_input->callback(opt_mesh_show_by_entity_num_cb); - mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); - - mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW/2, BH); - mesh_value[4]->minimum(0); - mesh_value[4]->maximum(1); - mesh_value[4]->step(0.001); - mesh_value[5] = new Fl_Value_Input(2*WB+IW/2, 2*WB+6*BH, IW/2, BH, "Quality range"); - mesh_value[5]->minimum(0); - mesh_value[5]->maximum(1); - mesh_value[5]->step(0.001); - - mesh_value[6] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW/2, BH); - mesh_value[7] = new Fl_Value_Input(2*WB+IW/2, 2*WB+7*BH, IW/2, BH, "Size range"); - - mesh_value[8] = new Fl_Value_Input(2*WB, 2*WB+8*BH, IW, BH, "Normals"); - mesh_value[8]->minimum(0); - mesh_value[8]->maximum(100); - mesh_value[8]->step(1); - for(i=4 ; i<9 ; i++){ - mesh_value[i]->labelsize(CTX.fontsize); - mesh_value[i]->textsize(CTX.fontsize); - mesh_value[i]->type(FL_HORIZONTAL); - mesh_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + + mesh_value[0] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Number of smoothing steps"); + mesh_value[0]->minimum(0); + mesh_value[0]->maximum(100); + mesh_value[0]->step(1); + mesh_value[1] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Mesh scaling factor"); + mesh_value[1]->minimum(0.001); + mesh_value[1]->maximum(1000); + mesh_value[1]->step(0.001); + mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Characteristic length factor"); + mesh_value[2]->minimum(0.001); + mesh_value[2]->maximum(1000); + mesh_value[2]->step(0.001); + mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW, BH, "Random perturbation factor"); + mesh_value[3]->minimum(1.e-6); + mesh_value[3]->maximum(1.e-1); + mesh_value[3]->step(1.e-6); + for(i = 0 ; i<4 ; i++){ + mesh_value[i]->labelsize(CTX.fontsize); + mesh_value[i]->textsize(CTX.fontsize); + mesh_value[i]->type(FL_HORIZONTAL); + mesh_value[i]->align(FL_ALIGN_RIGHT); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); - o->labelsize(CTX.fontsize); - o->hide(); - mesh_butt[14] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Wireframe"); - mesh_butt[15] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Hidden lines"); - mesh_butt[16] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Solid"); - for(i=14 ; i<17 ; i++){ - mesh_butt[i]->type(FL_RADIO_BUTTON); - mesh_butt[i]->labelsize(CTX.fontsize); - mesh_butt[i]->selection_color(FL_YELLOW); - } - mesh_value[9] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements"); - mesh_value[9]->minimum(0); - mesh_value[9]->maximum(1); - mesh_value[9]->step(0.01); - mesh_value[10] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Point size"); - mesh_value[10]->minimum(1); - mesh_value[10]->maximum(50); - mesh_value[10]->step(1); - mesh_value[11] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Line width"); - mesh_value[11]->minimum(1); - mesh_value[11]->maximum(50); - mesh_value[11]->step(1); - for(i=9 ; i<= 11 ; i++){ - mesh_value[i]->labelsize(CTX.fontsize); - mesh_value[i]->textsize(CTX.fontsize); - mesh_value[i]->type(FL_HORIZONTAL); - mesh_value[i]->align(FL_ALIGN_RIGHT); - } - o->end(); + + mesh_butt[3] = new Fl_Check_Button(2*WB, 2*WB+8*BH, BW, BH, "Second order elements"); + mesh_butt[3]->deactivate();//2nd order elements do not work. Disable the graphical option. + mesh_butt[4] = new Fl_Check_Button(2*WB, 2*WB+9*BH, BW, BH, "Interactive"); + mesh_butt[5] = new Fl_Check_Button(2*WB, 2*WB+10*BH, BW, BH, "Constrain background mesh"); + for(i=3 ; i<6 ; i++){ + mesh_butt[i]->type(FL_TOGGLE_BUTTON); + mesh_butt[i]->down_box(TOGGLE_BOX); + mesh_butt[i]->labelsize(CTX.fontsize); + mesh_butt[i]->selection_color(TOGGLE_COLOR); } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - mesh_butt[17] = new Fl_Check_Button(2*WB, 2*WB+1*BH, IW, BH, "Switch color by entity"); - mesh_butt[17]->type(FL_TOGGLE_BUTTON); - mesh_butt[17]->down_box(FL_DOWN_BOX); - mesh_butt[17]->labelsize(CTX.fontsize); - mesh_butt[17]->selection_color(FL_YELLOW); - - mesh_value[12] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Predefined color scheme"); - mesh_value[12]->minimum(0); - mesh_value[12]->maximum(2); - mesh_value[12]->step(1); - mesh_value[12]->labelsize(CTX.fontsize); - mesh_value[12]->textsize(CTX.fontsize); - mesh_value[12]->type(FL_HORIZONTAL); - mesh_value[12]->align(FL_ALIGN_RIGHT); - mesh_value[12]->callback(opt_mesh_color_scheme_cb); - - Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+3*BH, IW+20, height-3*WB-5*BH); - i = 0; - while(MeshOptions_Color[i].str){ - mesh_col[i] = new Fl_Button(2*WB, 3*WB+(3+i)*BH, IW, BH, MeshOptions_Color[i].str); - mesh_col[i]->callback(color_cb, (void*)MeshOptions_Color[i].function) ; - mesh_col[i]->labelsize(CTX.fontsize); - i++; - } - s->end(); - o->end(); + o->end(); + } + { + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Visibility"); + o->labelsize(CTX.fontsize); + mesh_butt[6] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW/2-WB, BH, "Points"); + mesh_butt[7] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Lines"); + mesh_butt[8] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Surfaces"); + mesh_butt[9] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Volumes"); + mesh_butt[10] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Point numbers"); + mesh_butt[11] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Line numbers"); + mesh_butt[12] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Surface numbers"); + mesh_butt[13] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Volume numbers"); + for(i=6 ; i<14 ; i++){ + mesh_butt[i]->type(FL_TOGGLE_BUTTON); + mesh_butt[i]->down_box(TOGGLE_BOX); + mesh_butt[i]->labelsize(CTX.fontsize); + mesh_butt[i]->selection_color(TOGGLE_COLOR); + } + mesh_input = new Fl_Input(2*WB, 2*WB+5*BH, IW, BH, "Show by entity Number"); + mesh_input->labelsize(CTX.fontsize); + mesh_input->textsize(CTX.fontsize); + mesh_input->align(FL_ALIGN_RIGHT); + mesh_input->callback(opt_mesh_show_by_entity_num_cb); + mesh_input->when(FL_WHEN_ENTER_KEY|FL_WHEN_NOT_CHANGED); + + mesh_value[4] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW/2, BH); + mesh_value[4]->minimum(0); + mesh_value[4]->maximum(1); + mesh_value[4]->step(0.001); + mesh_value[5] = new Fl_Value_Input(2*WB+IW/2, 2*WB+6*BH, IW/2, BH, "Quality range"); + mesh_value[5]->minimum(0); + mesh_value[5]->maximum(1); + mesh_value[5]->step(0.001); + + mesh_value[6] = new Fl_Value_Input(2*WB, 2*WB+7*BH, IW/2, BH); + mesh_value[7] = new Fl_Value_Input(2*WB+IW/2, 2*WB+7*BH, IW/2, BH, "Size range"); + + mesh_value[8] = new Fl_Value_Input(2*WB, 2*WB+8*BH, IW, BH, "Normals"); + mesh_value[8]->minimum(0); + mesh_value[8]->maximum(100); + mesh_value[8]->step(1); + for(i=4 ; i<9 ; i++){ + mesh_value[i]->labelsize(CTX.fontsize); + mesh_value[i]->textsize(CTX.fontsize); + mesh_value[i]->type(FL_HORIZONTAL); + mesh_value[i]->align(FL_ALIGN_RIGHT); } o->end(); } - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); o->labelsize(CTX.fontsize); - o->callback(opt_mesh_ok_cb); + o->hide(); + mesh_butt[14] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Wireframe"); + mesh_butt[15] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Hidden lines"); + mesh_butt[16] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Solid"); + for(i=14 ; i<17 ; i++){ + mesh_butt[i]->type(FL_RADIO_BUTTON); + mesh_butt[i]->down_box(RADIO_BOX); + mesh_butt[i]->labelsize(CTX.fontsize); + mesh_butt[i]->selection_color(RADIO_COLOR); + } + mesh_value[9] = new Fl_Value_Input(2*WB, 2*WB+4*BH, IW, BH, "Explode elements"); + mesh_value[9]->minimum(0); + mesh_value[9]->maximum(1); + mesh_value[9]->step(0.01); + mesh_value[10] = new Fl_Value_Input(2*WB, 2*WB+5*BH, IW, BH, "Point size"); + mesh_value[10]->minimum(1); + mesh_value[10]->maximum(50); + mesh_value[10]->step(1); + mesh_value[11] = new Fl_Value_Input(2*WB, 2*WB+6*BH, IW, BH, "Line width"); + mesh_value[11]->minimum(1); + mesh_value[11]->maximum(50); + mesh_value[11]->step(1); + for(i=9 ; i<= 11 ; i++){ + mesh_value[i]->labelsize(CTX.fontsize); + mesh_value[i]->textsize(CTX.fontsize); + mesh_value[i]->type(FL_HORIZONTAL); + mesh_value[i]->align(FL_ALIGN_RIGHT); + } + o->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)mesh_window); + o->hide(); + mesh_butt[17] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Switch color by entity"); + mesh_butt[17]->type(FL_TOGGLE_BUTTON); + mesh_butt[17]->down_box(TOGGLE_BOX); + mesh_butt[17]->labelsize(CTX.fontsize); + mesh_butt[17]->selection_color(TOGGLE_COLOR); + + mesh_value[12] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Predefined color scheme"); + mesh_value[12]->minimum(0); + mesh_value[12]->maximum(2); + mesh_value[12]->step(1); + mesh_value[12]->labelsize(CTX.fontsize); + mesh_value[12]->textsize(CTX.fontsize); + mesh_value[12]->type(FL_HORIZONTAL); + mesh_value[12]->align(FL_ALIGN_RIGHT); + mesh_value[12]->callback(opt_mesh_color_scheme_cb); + + Fl_Scroll* s = new Fl_Scroll(2*WB, 3*WB+3*BH, IW+20, height-3*WB-5*BH); + i = 0; + while(MeshOptions_Color[i].str){ + mesh_col[i] = new Fl_Button(2*WB, 3*WB+(3+i)*BH, IW, BH, MeshOptions_Color[i].str); + mesh_col[i]->callback(color_cb, (void*)MeshOptions_Color[i].function) ; + mesh_col[i]->labelsize(CTX.fontsize); + i++; + } + s->end(); + o->end(); } - - if(CTX.center_windows) - mesh_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - mesh_window->end(); + o->end(); } - else{ - if(mesh_window->shown()) - mesh_window->redraw(); - else - mesh_window->show(); - + + { + Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(opt_mesh_ok_cb); } - + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)mesh_window); + } + + if(CTX.center_windows) + mesh_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + mesh_window->end(); + } //******************** Create the window for solver options ******************* void GUI::create_solver_options_window(){ - if(!init_solver_options_window){ - init_solver_options_window = 1 ; - - int width = 20*CTX.fontsize; - int height = 5*WB+8*BH ; - - solver_window = new Fl_Window(width,height); - solver_window->box(WINDOW_BOX); - solver_window->label("Solver options"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Solvers"); - o->labelsize(CTX.fontsize); - Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+1*BH, width-4*WB, 2*BH, - "There are no global solver options available yet"); - text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); - text->labelsize(CTX.fontsize); - o->end(); - } - o->end(); - } + if(solver_window){ + solver_window->show(); + return; + } + int width = 20*CTX.fontsize; + int height = 5*WB+8*BH ; + + solver_window = new Fl_Window(width,height); + solver_window->box(WINDOW_BOX); + solver_window->label("Solver options"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(opt_solver_ok_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Solvers"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)solver_window); + Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+1*BH, width-4*WB, 2*BH, + "There are no global solver options available yet"); + text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); + text->labelsize(CTX.fontsize); + o->end(); } - - if(CTX.center_windows) - solver_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - solver_window->end(); + o->end(); } - else{ - if(solver_window->shown()) - solver_window->redraw(); - else - solver_window->show(); - + + { + Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(opt_solver_ok_cb); } - + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)solver_window); + } + + if(CTX.center_windows) + solver_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + solver_window->end(); + } @@ -1510,89 +1491,85 @@ void GUI::create_solver_options_window(){ void GUI::create_post_options_window(){ int i; - if(!init_post_options_window){ - init_post_options_window = 1 ; - - int width = 24*CTX.fontsize; - int height = 5*WB+10*BH ; + if(post_window){ + post_window->show(); + return; + } - post_window = new Fl_Window(width,height); - post_window->box(WINDOW_BOX); - post_window->label("Post-processing options"); + int width = 24*CTX.fontsize; + int height = 5*WB+10*BH ; + int BW = width-4*WB; + + post_window = new Fl_Window(width,height); + post_window->box(WINDOW_BOX); + post_window->label("Post-processing options"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Views"); - o->labelsize(CTX.fontsize); - post_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Independent views"); - post_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Apply next changes to all visible views"); - post_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Apply next changes to all views"); - post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Force same options for all visible views"); - post_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Force same options for all views"); - for(i=0 ; i<5 ; i++){ - post_butt[i]->type(FL_RADIO_BUTTON); - post_butt[i]->labelsize(CTX.fontsize); - post_butt[i]->selection_color(FL_YELLOW); - } - Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+6*BH, width-4*WB, 2*BH, - "Individual view options are available " - "by right-clicking on each view button " - "in the post-processing menu"); - text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); - text->labelsize(CTX.fontsize); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Smoothing"); - o->labelsize(CTX.fontsize); - post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Smooth views during merge"); - post_butt[3]->type(FL_TOGGLE_BUTTON); - post_butt[3]->down_box(FL_DOWN_BOX); - post_butt[3]->labelsize(CTX.fontsize); - post_butt[3]->selection_color(FL_YELLOW); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Animation"); - o->labelsize(CTX.fontsize); - o->hide(); - post_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Delay"); - post_value[0]->minimum(0); - post_value[0]->maximum(10); - post_value[0]->step(0.01); - post_value[0]->labelsize(CTX.fontsize); - post_value[0]->textsize(CTX.fontsize); - post_value[0]->type(FL_HORIZONTAL); - post_value[0]->align(FL_ALIGN_RIGHT); - o->end(); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Views"); + o->labelsize(CTX.fontsize); + post_butt[0] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Independent views"); + post_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Apply next changes to all visible views"); + post_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Apply next changes to all views"); + post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Force same options for all visible views"); + post_butt[4] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Force same options for all views"); + for(i=0 ; i<5 ; i++){ + post_butt[i]->type(FL_RADIO_BUTTON); + post_butt[i]->down_box(RADIO_BOX); + post_butt[i]->labelsize(CTX.fontsize); + post_butt[i]->selection_color(RADIO_COLOR); } + Fl_Box *text = new Fl_Box(FL_NO_BOX, 2*WB, 3*WB+6*BH, width-4*WB, 2*BH, + "Individual view options are available " + "by right-clicking on each view button " + "in the post-processing menu"); + text->align(FL_ALIGN_LEFT|FL_ALIGN_TOP|FL_ALIGN_INSIDE|FL_ALIGN_WRAP); + text->labelsize(CTX.fontsize); o->end(); } - { - Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Smoothing"); o->labelsize(CTX.fontsize); - o->callback(opt_post_ok_cb); + post_butt[3] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Smooth views during merge"); + post_butt[3]->type(FL_TOGGLE_BUTTON); + post_butt[3]->down_box(TOGGLE_BOX); + post_butt[3]->labelsize(CTX.fontsize); + post_butt[3]->selection_color(TOGGLE_COLOR); + o->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Animation"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)post_window); + o->hide(); + post_value[0] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Delay"); + post_value[0]->minimum(0); + post_value[0]->maximum(10); + post_value[0]->step(0.01); + post_value[0]->labelsize(CTX.fontsize); + post_value[0]->textsize(CTX.fontsize); + post_value[0]->type(FL_HORIZONTAL); + post_value[0]->align(FL_ALIGN_RIGHT); + o->end(); } - - if(CTX.center_windows) - post_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - post_window->end(); + o->end(); } - else{ - if(post_window->shown()) - post_window->redraw(); - else - post_window->show(); - + + { + Fl_Return_Button* o = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(opt_post_ok_cb); } - + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)post_window); + } + + if(CTX.center_windows) + post_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + post_window->end(); + } //*********************** Create the window for the statistics ************************* @@ -1600,109 +1577,103 @@ void GUI::create_post_options_window(){ void GUI::create_statistics_window(){ int i, num=0; - if(!init_statistics_window){ - init_statistics_window = 1 ; - - int width = 24*CTX.fontsize; - int height = 5*WB+17*BH ; + if(stat_window){ + if(!stat_window->shown()) set_statistics(); + stat_window->show(); + return; + } - stat_window = new Fl_Window(width,height); - stat_window->box(WINDOW_BOX); - stat_window->label("Statistics"); - { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Geometry"); - o->labelsize(CTX.fontsize); - o->hide(); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Points"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Curves"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Mesh"); - o->labelsize(CTX.fontsize); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Nodes on curves"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Nodes on surfaces"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Nodes in volumes"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Triangles"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Quadrangles"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+6*BH, IW, BH, "Tetrahedra"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+7*BH, IW, BH, "Hexahedra"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+8*BH, IW, BH, "Prisms"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+9*BH, IW, BH, "Pyramids"); - - stat_value[num++] = new Fl_Output(2*WB, 2*WB+10*BH, IW, BH, "Time for 1D mesh"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+11*BH, IW, BH, "Time for 2D mesh"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+12*BH, IW, BH, "Time for 3D mesh"); - - stat_value[num++] = new Fl_Output(2*WB, 2*WB+13*BH, IW, BH, "Gamma factor"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+14*BH, IW, BH, "Eta factor"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+15*BH, IW, BH, "Rho factor"); - - Fl_Button* b0 = new Fl_Button(width-BB-2*WB, 2*WB+13*BH, BB, BH, "Graph"); - b0->labelsize(CTX.fontsize); - b0->callback(opt_statistics_histogram_cb, (void*)0); - Fl_Button* b1 = new Fl_Button(width-BB-2*WB, 2*WB+14*BH, BB, BH, "Graph"); - b1->labelsize(CTX.fontsize); - b1->callback(opt_statistics_histogram_cb, (void*)1); - Fl_Button* b2 = new Fl_Button(width-BB-2*WB, 2*WB+15*BH, BB, BH, "Graph"); - b2->labelsize(CTX.fontsize); - b2->callback(opt_statistics_histogram_cb, (void*)2); - - o->end(); - } - { - Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Post-processing"); - o->labelsize(CTX.fontsize); - o->hide(); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Views"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Visible points"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Visible lines"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Visible triangles"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Visible tetrahedra"); - stat_value[num++] = new Fl_Output(2*WB, 2*WB+6*BH, IW, BH, "Visible strings"); - o->end(); - } + int width = 24*CTX.fontsize; + int height = 5*WB+17*BH ; + + stat_window = new Fl_Window(width,height); + stat_window->box(WINDOW_BOX); + stat_window->label("Statistics"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); + { + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Geometry"); + o->labelsize(CTX.fontsize); + o->hide(); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Points"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Curves"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Surfaces"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Volumes"); o->end(); } - - for(i=0 ; i<num ; i++){ - stat_value[i]->labelsize(CTX.fontsize); - stat_value[i]->textsize(CTX.fontsize); - stat_value[i]->type(FL_HORIZONTAL); - stat_value[i]->align(FL_ALIGN_RIGHT); - stat_value[i]->value(0); - } - { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Update"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Mesh"); o->labelsize(CTX.fontsize); - o->callback(opt_statistics_update_cb); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Nodes on curves"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Nodes on surfaces"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Nodes in volumes"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Triangles"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Quadrangles"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+6*BH, IW, BH, "Tetrahedra"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+7*BH, IW, BH, "Hexahedra"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+8*BH, IW, BH, "Prisms"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+9*BH, IW, BH, "Pyramids"); + + stat_value[num++] = new Fl_Output(2*WB, 2*WB+10*BH, IW, BH, "Time for 1D mesh"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+11*BH, IW, BH, "Time for 2D mesh"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+12*BH, IW, BH, "Time for 3D mesh"); + + stat_value[num++] = new Fl_Output(2*WB, 2*WB+13*BH, IW, BH, "Gamma factor"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+14*BH, IW, BH, "Eta factor"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+15*BH, IW, BH, "Rho factor"); + + Fl_Button* b0 = new Fl_Button(width-BB-2*WB, 2*WB+13*BH, BB, BH, "Graph"); + b0->labelsize(CTX.fontsize); + b0->callback(opt_statistics_histogram_cb, (void*)0); + Fl_Button* b1 = new Fl_Button(width-BB-2*WB, 2*WB+14*BH, BB, BH, "Graph"); + b1->labelsize(CTX.fontsize); + b1->callback(opt_statistics_histogram_cb, (void*)1); + Fl_Button* b2 = new Fl_Button(width-BB-2*WB, 2*WB+15*BH, BB, BH, "Graph"); + b2->labelsize(CTX.fontsize); + b2->callback(opt_statistics_histogram_cb, (void*)2); + + o->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group* o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Post-processing"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)stat_window); + o->hide(); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+1*BH, IW, BH, "Views"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+2*BH, IW, BH, "Visible points"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+3*BH, IW, BH, "Visible lines"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+4*BH, IW, BH, "Visible triangles"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+5*BH, IW, BH, "Visible tetrahedra"); + stat_value[num++] = new Fl_Output(2*WB, 2*WB+6*BH, IW, BH, "Visible strings"); + o->end(); } - - if(CTX.center_windows) - stat_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - stat_window->end(); - set_statistics(); - stat_window->show(); + o->end(); } - else{ - if(stat_window->shown()) - stat_window->redraw(); - else{ - set_statistics(); - stat_window->show(); - } + + for(i=0 ; i<num ; i++){ + stat_value[i]->labelsize(CTX.fontsize); + stat_value[i]->textsize(CTX.fontsize); + stat_value[i]->type(FL_HORIZONTAL); + stat_value[i]->align(FL_ALIGN_RIGHT); + stat_value[i]->value(0); + } + + { + Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Update"); + o->labelsize(CTX.fontsize); + o->callback(opt_statistics_update_cb); + } + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)stat_window); } + + if(CTX.center_windows) + stat_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + stat_window->end(); + set_statistics(); + stat_window->show(); } @@ -1885,48 +1856,46 @@ PluginDialogBox * GUI::create_plugin_window(GMSH_Plugin *p){ void GUI::create_message_window(){ - if(!init_message_window){ - init_message_window = 1 ; - - int width = CTX.msg_size[0]; - int height = CTX.msg_size[1]; - - msg_window = new Fl_Window(width,height); - msg_window->box(WINDOW_BOX); - msg_window->label("Messages"); - - msg_browser = new Fl_Browser(WB, WB, width-2*WB, height-3*WB-BH); - msg_browser->textfont(FL_COURIER); - msg_browser->textsize(CTX.fontsize); - - { - Fl_Return_Button* o = new Fl_Return_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Save"); - o->labelsize(CTX.fontsize); - o->callback(opt_message_save_cb); - } - { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Clear"); - o->labelsize(CTX.fontsize); - o->callback(opt_message_clear_cb); - } - { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)msg_window); - } - - msg_window->resizable(msg_browser); - - msg_window->position(CTX.msg_position[0], CTX.msg_position[1]); - msg_window->end(); - } - else{ + if(msg_window){ if(msg_window->shown()) msg_window->redraw(); else msg_window->show(); + return; } - + + int width = CTX.msg_size[0]; + int height = CTX.msg_size[1]; + + msg_window = new Fl_Window(width,height); + msg_window->box(WINDOW_BOX); + msg_window->label("Messages"); + + msg_browser = new Fl_Browser(WB, WB, width-2*WB, height-3*WB-BH); + msg_browser->textfont(FL_COURIER); + msg_browser->textsize(CTX.fontsize); + + { + Fl_Return_Button* o = new Fl_Return_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Save"); + o->labelsize(CTX.fontsize); + o->callback(opt_message_save_cb); + } + { + Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Clear"); + o->labelsize(CTX.fontsize); + o->callback(opt_message_clear_cb); + } + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)msg_window); + } + + msg_window->resizable(msg_browser); + + msg_window->position(CTX.msg_position[0], CTX.msg_position[1]); + msg_window->end(); + } void GUI::add_message(char *msg){ @@ -1962,69 +1931,64 @@ void GUI::fatal_error(char *filename){ void GUI::create_about_window(){ char buffer[1024]; - if(!init_about_window){ - init_about_window = 1 ; - - int width = 40*CTX.fontsize; - int height = 10*BH ; - - about_window = new Fl_Window(width,height); - about_window->box(WINDOW_BOX); - about_window->label("About Gmsh"); - - { - Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-3*WB-BH); - about_bmp = new Fl_Bitmap(about_bits,about_width,about_height); - about_bmp->label(o); - } + if(about_window){ + about_window->show(); + return; + } - { - Fl_Browser *o = new Fl_Browser(WB+80, WB, width-2*WB-80, height-3*WB-BH); - o->add(""); - o->add("@c@b@.Gmsh"); - o->add("@c@.A three-dimensional finite element mesh generator"); - o->add("@c@.with built-in pre- and post-processing facilities"); - o->add(""); - o->add("@c@.Copyright (c) 1997-2001"); - o->add("@c@.Christophe Geuzaine and Jean-Fran�ois Remacle"); - o->add(""); - o->add("@c@.Please send all questions and bug reports to"); + int width = 40*CTX.fontsize; + int height = 10*BH ; + + about_window = new Fl_Window(width,height); + about_window->box(WINDOW_BOX); + about_window->label("About Gmsh"); + + { + Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-3*WB-BH); + about_bmp = new Fl_Bitmap(about_bits,about_width,about_height); + about_bmp->label(o); + } + + { + Fl_Browser *o = new Fl_Browser(WB+80, WB, width-2*WB-80, height-3*WB-BH); + o->add(""); + o->add("@c@b@.Gmsh"); + o->add("@c@.A three-dimensional finite element mesh generator"); + o->add("@c@.with built-in pre- and post-processing facilities"); + o->add(""); + o->add("@c@.Copyright (c) 1997-2001"); + o->add("@c@.Christophe Geuzaine and Jean-Fran�ois Remacle"); + o->add(""); + o->add("@c@.Please send all questions and bug reports to"); #if (FL_MAJOR_VERSION == 1) && (FL_MINOR_VERSION == 1) - o->add("@c@b@.gmsh@@geuz.org"); + o->add("@c@b@.gmsh@@geuz.org"); #else - o->add("@c@b@.gmsh@geuz.org"); + o->add("@c@b@.gmsh@geuz.org"); #endif - o->add(""); - sprintf(buffer, "@c@.Version: %.2f", GMSH_VERSION); o->add(buffer); - sprintf(buffer, "@c@.Build date: %s", GMSH_DATE); o->add(buffer); - sprintf(buffer, "@c@.Build OS: %s", GMSH_OS); o->add(buffer); - sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d", - FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION); o->add(buffer); - sprintf(buffer, "@c@.Build host: %s", GMSH_HOST); o->add(buffer); - sprintf(buffer, "@c@.Packaged by: %s", GMSH_PACKAGER); o->add(buffer); - o->add(""); - o->add("@c@.Visit http://www.geuz.org/gmsh/ for more information"); - o->textsize(CTX.fontsize); - } - - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-WB, height-BH-WB, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)about_window); - } - - if(CTX.center_windows) - about_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - about_window->end(); + o->add(""); + sprintf(buffer, "@c@.Version: %.2f", GMSH_VERSION); o->add(buffer); + sprintf(buffer, "@c@.Build date: %s", GMSH_DATE); o->add(buffer); + sprintf(buffer, "@c@.Build OS: %s", GMSH_OS); o->add(buffer); + sprintf(buffer, "@c@.Graphical user interface toolkit: FLTK %d.%d.%d", + FL_MAJOR_VERSION, FL_MINOR_VERSION, FL_PATCH_VERSION); o->add(buffer); + sprintf(buffer, "@c@.Build host: %s", GMSH_HOST); o->add(buffer); + sprintf(buffer, "@c@.Packaged by: %s", GMSH_PACKAGER); o->add(buffer); + o->add(""); + o->add("@c@.Visit http://www.geuz.org/gmsh/ for more information"); + o->textsize(CTX.fontsize); } - else{ - if(about_window->shown()) - about_window->redraw(); - else - about_window->show(); + + { + Fl_Return_Button* o = new Fl_Return_Button(width-BB-WB, height-BH-WB, BB, BH, "OK"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)about_window); } - + + if(CTX.center_windows) + about_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + about_window->end(); + } //************************* Create the window for view options ************************* @@ -2034,362 +1998,363 @@ void GUI::create_about_window(){ void GUI::create_view_options_window(int num){ int i; - if(!init_view_window){ - init_view_window = 1 ; - - // initialise all buttons to NULL (see the clear_changed() in opt_view_options_bd) - for(i=0; i<VIEW_OPT_BUTT; i++){ - view_butt[i] = NULL; - view_value[i] = NULL; - view_input[i] = NULL; - } + if(view_window){ + update_view_window(num); + view_window->show(); + return; + } - int width = 34*CTX.fontsize; - int height = 5*WB+11*BH; - - view_window = new Fl_Window(width,height); - view_window->box(WINDOW_BOX); + int width = 34*CTX.fontsize; + int height = 5*WB+11*BH; + int BW = width-4*WB; + // initialise all buttons to NULL (see the clear_changed() in opt_view_options_bd) + for(i=0; i<VIEW_OPT_BUTT; i++){ + view_butt[i] = NULL; + view_value[i] = NULL; + view_input[i] = NULL; + } + + view_window = new Fl_Window(width,height); + view_window->box(WINDOW_BOX); + + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); + // General { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // General - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General"); - o->labelsize(CTX.fontsize); - - view_butt[1] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW, BH, "3D view"); - view_butt[2] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW, BH, "2D space table"); - view_butt[3] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW, BH, "2D time table"); - for(i=1 ; i<=3 ; i++){ + Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General"); + o->labelsize(CTX.fontsize); + + view_butt[1] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "3D view"); + view_butt[2] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "2D space table"); + view_butt[3] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "2D time table"); + for(i=1 ; i<=3 ; i++){ + view_butt[i]->type(FL_RADIO_BUTTON); + view_butt[i]->down_box(RADIO_BOX); + view_butt[i]->labelsize(CTX.fontsize); + view_butt[i]->selection_color(RADIO_COLOR); + view_butt[i]->callback(set_changed_cb, 0); + } + + view_input[0] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Name"); + view_input[1] = new Fl_Input(2*WB, 2*WB+2*BH, IW, BH, "Format"); + for(i=0 ; i<=1 ; i++){ + view_input[i]->labelsize(CTX.fontsize); + view_input[i]->textsize(CTX.fontsize); + view_input[i]->align(FL_ALIGN_RIGHT); + view_input[i]->callback(set_changed_cb, 0); + } + view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Show scale"); + view_butt[5] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Show annotations"); + view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Transparent scale"); + view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW/2-WB, BH, "Auto position"); + for(i=4 ; i<=7 ; i++){ + view_butt[i]->type(FL_TOGGLE_BUTTON); + view_butt[i]->down_box(TOGGLE_BOX); + view_butt[i]->labelsize(CTX.fontsize); + view_butt[i]->selection_color(TOGGLE_COLOR); + view_butt[i]->callback(set_changed_cb, 0); + } + + view_value[20] = new Fl_Value_Input(2*WB, 2*WB+ 6*BH, IW, BH, "X position"); + view_value[21] = new Fl_Value_Input(2*WB, 2*WB+ 7*BH, IW, BH, "Y position"); + view_value[22] = new Fl_Value_Input(2*WB, 2*WB+ 8*BH, IW, BH, "Width"); + view_value[23] = new Fl_Value_Input(2*WB, 2*WB+ 9*BH, IW, BH, "Height"); + for(i=20 ; i<=23 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); + } + + o->end(); + } + // 3D + { + view_3d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "3D"); + view_3d->labelsize(CTX.fontsize); + view_3d->hide(); + + view_butt[10] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Show elements"); + view_butt[11] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Enable Lighting"); + view_butt[12] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Smooth normals"); + for(i=10 ; i<=12 ; i++){ + view_butt[i]->type(FL_TOGGLE_BUTTON); + view_butt[i]->down_box(TOGGLE_BOX); + view_butt[i]->labelsize(CTX.fontsize); + view_butt[i]->selection_color(TOGGLE_COLOR); + view_butt[i]->callback(set_changed_cb, 0); + } + view_value[10] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Angle"); + view_value[10]->minimum(0.); + view_value[10]->step(1.); + view_value[10]->maximum(180.); + view_value[11] = new Fl_Value_Input(width/2, 2*WB+5*BH, IW, BH, "Boundary"); + view_value[11]->minimum(0); + view_value[11]->step(1); + view_value[11]->maximum(3); + view_value[12] = new Fl_Value_Input(width/2, 2*WB+6*BH, IW, BH, "Explode"); + view_value[12]->minimum(0.); + view_value[12]->step(0.01); + view_value[12]->maximum(1.); + for(i=10 ; i<=12 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); + } + + view_butt[13] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW/2-WB, BH, "Draw points"); + view_butt[14] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Draw lines"); + view_butt[15] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Draw triangles"); + view_butt[16] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Draw tetrahedra"); + view_butt[17] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW/2-WB, BH, "Draw scalar values"); + view_butt[18] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW/2-WB, BH, "Draw vector values"); + view_butt[19] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW/2-WB, BH, "Draw tensor values"); + for(i=13 ; i<=19 ; i++){ + view_butt[i]->type(FL_TOGGLE_BUTTON); + view_butt[i]->down_box(TOGGLE_BOX); + view_butt[i]->labelsize(CTX.fontsize); + view_butt[i]->selection_color(TOGGLE_COLOR); + view_butt[i]->callback(set_changed_cb, 0); + } + + view_3d->end(); + } + // 2D + { + view_2d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "2D"); + view_2d->labelsize(CTX.fontsize); + view_2d->hide(); + + view_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Abscissa name"); + view_input[2]->labelsize(CTX.fontsize); + view_input[2]->textsize(CTX.fontsize); + view_input[2]->align(FL_ALIGN_RIGHT); + view_input[2]->callback(set_changed_cb, 0); + + view_value[25] = new Fl_Value_Input(2*WB, 2*WB+ 2*BH, IW, BH, "Abscissa points"); + view_value[25]->minimum(0.); + view_value[25]->step(1); + view_value[25]->maximum(256); + view_value[26] = new Fl_Value_Input(2*WB, 2*WB+ 3*BH, IW, BH, "Grid mode"); + view_value[26]->minimum(0.); + view_value[26]->step(1); + view_value[26]->maximum(3); + for(i=25 ; i<=26 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); + } + + view_2d->end(); + } + // Range + { + view_range = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range"); + view_range->labelsize(CTX.fontsize); + view_range->hide(); + + view_value[30] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Intervals"); + view_value[30]->labelsize(CTX.fontsize); + view_value[30]->textsize(CTX.fontsize); + view_value[30]->type(FL_HORIZONTAL); + view_value[30]->align(FL_ALIGN_RIGHT); + view_value[30]->minimum(1); + view_value[30]->maximum(256); + view_value[30]->step(1); + view_value[30]->callback(set_changed_cb, 0); + + { + Fl_Group *o2 = new Fl_Group(2*WB, 2*WB+2*BH, width/2, 4*BH, 0); + view_butt[30] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Iso-values"); + view_butt[31] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW/2-WB, BH, "Filled iso-values"); + view_butt[32] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW/2-WB, BH, "Continuous map"); + view_butt[33] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW/2-WB, BH, "Numeric values"); + for(i=30 ; i<=33 ; i++){ view_butt[i]->type(FL_RADIO_BUTTON); + view_butt[i]->down_box(RADIO_BOX); view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); + view_butt[i]->selection_color(RADIO_COLOR); view_butt[i]->callback(set_changed_cb, 0); } - - view_input[0] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Name"); - view_input[1] = new Fl_Input(2*WB, 2*WB+2*BH, IW, BH, "Format"); - for(i=0 ; i<=1 ; i++){ - view_input[i]->labelsize(CTX.fontsize); - view_input[i]->textsize(CTX.fontsize); - view_input[i]->align(FL_ALIGN_RIGHT); - view_input[i]->callback(set_changed_cb, 0); - } - view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Show scale"); - view_butt[5] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW, BH, "Show annotations"); - view_butt[6] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Transparent scale"); - view_butt[7] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Auto position"); - for(i=4 ; i<=7 ; i++){ - view_butt[i]->type(FL_TOGGLE_BUTTON); - view_butt[i]->down_box(FL_DOWN_BOX); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - - view_value[20] = new Fl_Value_Input(2*WB, 2*WB+ 6*BH, IW, BH, "X position"); - view_value[21] = new Fl_Value_Input(2*WB, 2*WB+ 7*BH, IW, BH, "Y position"); - view_value[22] = new Fl_Value_Input(2*WB, 2*WB+ 8*BH, IW, BH, "Width"); - view_value[23] = new Fl_Value_Input(2*WB, 2*WB+ 9*BH, IW, BH, "Height"); - for(i=20 ; i<=23 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - - o->end(); + o2->end(); } - // 3D - { - view_3d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "3D"); - view_3d->labelsize(CTX.fontsize); - view_3d->hide(); - - view_butt[10] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW, BH, "Show elements"); - view_butt[11] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW, BH, "Enable Lighting"); - view_butt[12] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW, BH, "Smooth normals"); - for(i=10 ; i<=12 ; i++){ - view_butt[i]->type(FL_TOGGLE_BUTTON); - view_butt[i]->down_box(FL_DOWN_BOX); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - view_value[10] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Angle"); - view_value[10]->minimum(0.); - view_value[10]->step(1.); - view_value[10]->maximum(180.); - view_value[11] = new Fl_Value_Input(width/2, 2*WB+5*BH, IW, BH, "Boundary"); - view_value[11]->minimum(0); - view_value[11]->step(1); - view_value[11]->maximum(3); - view_value[12] = new Fl_Value_Input(width/2, 2*WB+6*BH, IW, BH, "Explode"); - view_value[12]->minimum(0.); - view_value[12]->step(0.01); - view_value[12]->maximum(1.); - for(i=10 ; i<=12 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - - view_butt[13] = new Fl_Check_Button(2*WB, 2*WB+1*BH, BW, BH, "Draw points"); - view_butt[14] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Draw lines"); - view_butt[15] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Draw triangles"); - view_butt[16] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Draw tetrahedra"); - view_butt[17] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Draw scalar values"); - view_butt[18] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Draw vector values"); - view_butt[19] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Draw tensor values"); - for(i=13 ; i<=19 ; i++){ - view_butt[i]->type(FL_TOGGLE_BUTTON); - view_butt[i]->down_box(FL_DOWN_BOX); + + view_butt[34] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW/2-WB, BH, "Custom range"); + view_butt[34]->type(FL_TOGGLE_BUTTON); + view_butt[34]->down_box(TOGGLE_BOX); + view_butt[34]->labelsize(CTX.fontsize); + view_butt[34]->selection_color(TOGGLE_COLOR); + //no set_changed since customrange has its own callback + + view_value[31] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Minimum"); + view_value[32] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Maximum"); + for(i=31 ; i<=32 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); + } + + { + Fl_Group *o2 = new Fl_Group(width/2, 2*WB+5*BH, width-4*WB, 3*BH, 0); + view_butt[35] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW/2-WB, BH, "Linear"); + view_butt[36] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW/2-WB, BH, "Logarithmic"); + view_butt[37] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW/2-WB, BH, "Double logarithmic"); + for(i=35 ; i<=37 ; i++){ + view_butt[i]->type(FL_RADIO_BUTTON); + view_butt[i]->down_box(RADIO_BOX); view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); + view_butt[i]->selection_color(RADIO_COLOR); view_butt[i]->callback(set_changed_cb, 0); } - - view_3d->end(); - } - // 2D - { - view_2d = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "2D"); - view_2d->labelsize(CTX.fontsize); - view_2d->hide(); - - view_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, IW, BH, "Abscissa name"); - view_input[2]->labelsize(CTX.fontsize); - view_input[2]->textsize(CTX.fontsize); - view_input[2]->align(FL_ALIGN_RIGHT); - view_input[2]->callback(set_changed_cb, 0); - - view_value[25] = new Fl_Value_Input(2*WB, 2*WB+ 2*BH, IW, BH, "Abscissa points"); - view_value[25]->minimum(0.); - view_value[25]->step(1); - view_value[25]->maximum(256); - view_value[26] = new Fl_Value_Input(2*WB, 2*WB+ 3*BH, IW, BH, "Grid mode"); - view_value[26]->minimum(0.); - view_value[26]->step(1); - view_value[26]->maximum(3); - for(i=25 ; i<=26 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - - view_2d->end(); + o2->end(); } - // Range - { - view_range = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Range"); - view_range->labelsize(CTX.fontsize); - view_range->hide(); - - view_value[30] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Intervals"); - view_value[30]->labelsize(CTX.fontsize); - view_value[30]->textsize(CTX.fontsize); - view_value[30]->type(FL_HORIZONTAL); - view_value[30]->align(FL_ALIGN_RIGHT); - view_value[30]->minimum(1); - view_value[30]->maximum(256); - view_value[30]->step(1); - view_value[30]->callback(set_changed_cb, 0); - - { - Fl_Group *o2 = new Fl_Group(2*WB, 2*WB+2*BH, width/2, 4*BH, 0); - view_butt[30] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Iso-values"); - view_butt[31] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Filled iso-values"); - view_butt[32] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Continuous map"); - view_butt[33] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Numeric values"); - for(i=30 ; i<=33 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - o2->end(); - } - - view_butt[34] = new Fl_Check_Button(width/2, 2*WB+1*BH, BW, BH, "Custom range"); - view_butt[34]->type(FL_TOGGLE_BUTTON); - view_butt[34]->down_box(FL_DOWN_BOX); - view_butt[34]->labelsize(CTX.fontsize); - view_butt[34]->selection_color(FL_YELLOW); - //no set_changed since customrange has its own callback - - view_value[31] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Minimum"); - view_value[32] = new Fl_Value_Input(width/2, 2*WB+4*BH, IW, BH, "Maximum"); - for(i=31 ; i<=32 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - + + view_butt[38] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Saturate values"); + view_butt[38]->type(FL_TOGGLE_BUTTON); + view_butt[38]->down_box(TOGGLE_BOX); + view_butt[38]->labelsize(CTX.fontsize); + view_butt[38]->selection_color(TOGGLE_COLOR); + view_butt[38]->callback(set_changed_cb, 0); + + view_range->end(); + } + // Offset and Raise + { + Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset"); + o->labelsize(CTX.fontsize); + o->hide(); + view_value[40] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "X offset"); + view_value[41] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Y offset"); + view_value[42] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Z offset"); + view_value[43] = new Fl_Value_Input(width/2, 2*WB+1*BH, IW, BH, "X raise"); + view_value[44] = new Fl_Value_Input(width/2, 2*WB+2*BH, IW, BH, "Y raise"); + view_value[45] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Z raise"); + for(i=40 ; i<=45 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); + } + o->end(); + } + // Time step + { + view_timestep = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Time step"); + view_timestep->labelsize(CTX.fontsize); + view_timestep->hide(); + + view_value[50] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Time step number"); + view_value[50]->labelsize(CTX.fontsize); + view_value[50]->textsize(CTX.fontsize); + view_value[50]->type(FL_HORIZONTAL); + view_value[50]->align(FL_ALIGN_RIGHT); + view_value[50]->minimum(0); + view_value[50]->maximum(0); + view_value[50]->step(1); + //no set_changed since timestep has its own callback + + view_butt[50] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW/2-WB, BH, "Display time"); + view_butt[50]->type(FL_TOGGLE_BUTTON); + view_butt[50]->down_box(TOGGLE_BOX); + view_butt[50]->labelsize(CTX.fontsize); + view_butt[50]->selection_color(TOGGLE_COLOR); + view_butt[50]->callback(set_changed_cb, 0); + + view_timestep->end(); + } + // Aspect + { + Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); + o->labelsize(CTX.fontsize); + o->hide(); + + { + view_vector = new Fl_Group(width/2, WB+BH, width-2*WB, height-3*WB-2*BH, 0); { - Fl_Group *o2 = new Fl_Group(width/2, 2*WB+5*BH, width-4*WB, 3*BH, 0); - view_butt[35] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW, BH, "Linear"); - view_butt[36] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW, BH, "Logarithmic"); - view_butt[37] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW, BH, "Double logarithmic"); - for(i=35 ; i<=37 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - o2->end(); + Fl_Group *o = new Fl_Group(width/2, 2*WB+2*BH, width-4*WB, 4*BH, 0); + view_butt[60] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW/2-WB, BH, "Line"); + view_butt[61] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW/2-WB, BH, "Arrow"); + view_butt[62] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW/2-WB, BH, "Cone"); + view_butt[63] = new Fl_Check_Button(width/2, 2*WB+5*BH, BW/2-WB, BH, "Displacement"); + o->end(); } - - view_butt[38] = new Fl_Check_Button(width/2, 2*WB+2*BH, BW, BH, "Saturate values"); - view_butt[38]->type(FL_TOGGLE_BUTTON); - view_butt[38]->down_box(FL_DOWN_BOX); - view_butt[38]->labelsize(CTX.fontsize); - view_butt[38]->selection_color(FL_YELLOW); - view_butt[38]->callback(set_changed_cb, 0); - - view_range->end(); - } - // Offset and Raise - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Offset"); - o->labelsize(CTX.fontsize); - o->hide(); - view_value[40] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "X offset"); - view_value[41] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Y offset"); - view_value[42] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Z offset"); - view_value[43] = new Fl_Value_Input(width/2, 2*WB+1*BH, IW, BH, "X raise"); - view_value[44] = new Fl_Value_Input(width/2, 2*WB+2*BH, IW, BH, "Y raise"); - view_value[45] = new Fl_Value_Input(width/2, 2*WB+3*BH, IW, BH, "Z raise"); - for(i=40 ; i<=45 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); - } - o->end(); - } - // Time step - { - view_timestep = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Time step"); - view_timestep->labelsize(CTX.fontsize); - view_timestep->hide(); - - view_value[50] = new Fl_Value_Input(2*WB, 2*WB+1*BH, IW, BH, "Time step number"); - view_value[50]->labelsize(CTX.fontsize); - view_value[50]->textsize(CTX.fontsize); - view_value[50]->type(FL_HORIZONTAL); - view_value[50]->align(FL_ALIGN_RIGHT); - view_value[50]->minimum(0); - view_value[50]->maximum(0); - view_value[50]->step(1); - //no set_changed since timestep has its own callback - - view_butt[50] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Display time"); - view_butt[50]->type(FL_TOGGLE_BUTTON); - view_butt[50]->down_box(FL_DOWN_BOX); - view_butt[50]->labelsize(CTX.fontsize); - view_butt[50]->selection_color(FL_YELLOW); - view_butt[50]->callback(set_changed_cb, 0); - - view_timestep->end(); - } - // Aspect - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Aspect"); - o->labelsize(CTX.fontsize); - o->hide(); - { - view_vector = new Fl_Group(width/2, WB+BH, width-2*WB, height-3*WB-2*BH, 0); - { - Fl_Group *o = new Fl_Group(width/2, 2*WB+2*BH, width-4*WB, 4*BH, 0); - view_butt[60] = new Fl_Check_Button(width/2, 2*WB+2*BH, IW, BH, "Line"); - view_butt[61] = new Fl_Check_Button(width/2, 2*WB+3*BH, IW, BH, "Arrow"); - view_butt[62] = new Fl_Check_Button(width/2, 2*WB+4*BH, IW, BH, "Cone"); - view_butt[63] = new Fl_Check_Button(width/2, 2*WB+5*BH, IW, BH, "Displacement"); - o->end(); - } - { - Fl_Group *o = new Fl_Group(width/2, 2*WB+6*BH, width-4*WB, 2*BH, 0); - view_butt[64] = new Fl_Check_Button(width/2, 2*WB+6*BH, IW, BH, "Cell centered"); - view_butt[65] = new Fl_Check_Button(width/2, 2*WB+7*BH, IW, BH, "Vertex centered"); - o->end(); - } - for(i=60 ; i<=65 ; i++){ - view_butt[i]->type(FL_RADIO_BUTTON); - view_butt[i]->labelsize(CTX.fontsize); - view_butt[i]->selection_color(FL_YELLOW); - view_butt[i]->callback(set_changed_cb, 0); - } - - view_value[60] = new Fl_Value_Input(width/2, 2*WB+ 1*BH, IW, BH, "Vector size"); - view_value[60]->minimum(0); - view_vector->end(); + Fl_Group *o = new Fl_Group(width/2, 2*WB+6*BH, width-4*WB, 2*BH, 0); + view_butt[64] = new Fl_Check_Button(width/2, 2*WB+6*BH, BW/2-WB, BH, "Cell centered"); + view_butt[65] = new Fl_Check_Button(width/2, 2*WB+7*BH, BW/2-WB, BH, "Vertex centered"); + o->end(); } - - view_value[61] = new Fl_Value_Input(2*WB, 2*WB+ 1*BH, IW, BH, "Point size"); - view_value[61]->minimum(1); - view_value[61]->maximum(50); - view_value[61]->step(1); - view_value[62] = new Fl_Value_Input(2*WB, 2*WB+ 2*BH, IW, BH, "Line width"); - view_value[62]->minimum(1); - view_value[62]->maximum(50); - view_value[62]->step(1); - for(i=60 ; i<=62 ; i++){ - view_value[i]->labelsize(CTX.fontsize); - view_value[i]->textsize(CTX.fontsize); - view_value[i]->type(FL_HORIZONTAL); - view_value[i]->align(FL_ALIGN_RIGHT); - view_value[i]->callback(set_changed_cb, 0); + for(i=60 ; i<=65 ; i++){ + view_butt[i]->type(FL_RADIO_BUTTON); + view_butt[i]->down_box(RADIO_BOX); + view_butt[i]->labelsize(CTX.fontsize); + view_butt[i]->selection_color(RADIO_COLOR); + view_butt[i]->callback(set_changed_cb, 0); } - - o->end(); + + view_value[60] = new Fl_Value_Input(width/2, 2*WB+ 1*BH, IW, BH, "Vector size"); + view_value[60]->minimum(0); + view_vector->end(); } - // Colors - { - Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); - o->labelsize(CTX.fontsize); - o->hide(); - view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH, - width-4*WB, height-5*WB-2*BH); - view_colorbar_window->end(); - //no set_changed since colorbarwindow has its own callbacks - o->end(); + + view_value[61] = new Fl_Value_Input(2*WB, 2*WB+ 1*BH, IW, BH, "Point size"); + view_value[61]->minimum(1); + view_value[61]->maximum(50); + view_value[61]->step(1); + view_value[62] = new Fl_Value_Input(2*WB, 2*WB+ 2*BH, IW, BH, "Line width"); + view_value[62]->minimum(1); + view_value[62]->maximum(50); + view_value[62]->step(1); + for(i=60 ; i<=62 ; i++){ + view_value[i]->labelsize(CTX.fontsize); + view_value[i]->textsize(CTX.fontsize); + view_value[i]->type(FL_HORIZONTAL); + view_value[i]->align(FL_ALIGN_RIGHT); + view_value[i]->callback(set_changed_cb, 0); } + o->end(); } - - { view_ok = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); - view_ok->labelsize(CTX.fontsize); - } + // Colors { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + Fl_Group *o = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Colors"); o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)view_window); + o->hide(); + view_colorbar_window = new Colorbar_Window(2*WB, 2*WB+1*BH, + width-4*WB, height-5*WB-2*BH); + view_colorbar_window->end(); + //no set_changed since colorbarwindow has its own callbacks + o->end(); } - - if(CTX.center_windows) - view_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - - //view_window->resizable(view_colorbar_window); - view_window->end(); + o->end(); } - else{ - update_view_window(num); - if(view_window->shown()) - view_window->redraw(); - else - view_window->show(); + + { + view_ok = new Fl_Return_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "OK"); + view_ok->labelsize(CTX.fontsize); } - + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)view_window); + } + + if(CTX.center_windows) + view_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + + //view_window->resizable(view_colorbar_window); + view_window->end(); + } void GUI::update_view_window(int num){ @@ -2518,168 +2483,159 @@ void GUI::create_geometry_context_window(int num){ static Fl_Group *g[10]; int i; - if(!init_geometry_context_window){ - init_geometry_context_window = 1 ; + if(context_geometry_window){ + for(i=0 ; i<6 ; i++) g[i]->hide(); + g[num]->show(); + context_geometry_window->show(); + return; + } - int width = 31*CTX.fontsize; - int height = 5*WB+9*BH ; - - context_geometry_window = new Fl_Window(width,height); - context_geometry_window->box(WINDOW_BOX); - context_geometry_window->label("Contextual geometry definitions"); + int width = 31*CTX.fontsize; + int height = 5*WB+9*BH ; + + context_geometry_window = new Fl_Window(width,height); + context_geometry_window->box(WINDOW_BOX); + context_geometry_window->label("Contextual geometry definitions"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); + // 0: Parameter { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // 0: Parameter - { - g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Parameter"); - g[0]->labelsize(CTX.fontsize); - context_geometry_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Name"); - context_geometry_input[1] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Value"); - for(i=0 ; i<2 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_parameter_cb); - } - g[0]->end(); + g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Parameter"); + g[0]->labelsize(CTX.fontsize); + context_geometry_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Name"); + context_geometry_input[1] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Value"); + for(i=0 ; i<2 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); } - // 1: Point { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Point"); - g[1]->labelsize(CTX.fontsize); - context_geometry_input[2] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate"); - context_geometry_input[3] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate"); - context_geometry_input[4] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate"); - context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Characteristic length"); - for(i=2 ; i<6 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_point_cb); - } - g[1]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_parameter_cb); + } + g[0]->end(); + } + // 1: Point + { + g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Point"); + g[1]->labelsize(CTX.fontsize); + context_geometry_input[2] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate"); + context_geometry_input[3] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate"); + context_geometry_input[4] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate"); + context_geometry_input[5] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Characteristic length"); + for(i=2 ; i<6 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); } - // 2: Translation { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Translation"); - g[2]->labelsize(CTX.fontsize); - context_geometry_input[6] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component"); - context_geometry_input[7] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component"); - context_geometry_input[8] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component"); - for(i=6 ; i<9 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_translation_cb); - } - g[2]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Add"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_point_cb); + } + g[1]->end(); + } + // 2: Translation + { + g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Translation"); + g[2]->labelsize(CTX.fontsize); + context_geometry_input[6] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component"); + context_geometry_input[7] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component"); + context_geometry_input[8] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component"); + for(i=6 ; i<9 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); } - // 3: Rotation { - g[3] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Rotation"); - g[3]->labelsize(CTX.fontsize); - context_geometry_input[9] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate of an axis point"); - context_geometry_input[10] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate of an axis point"); - context_geometry_input[11] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate of an axis point"); - context_geometry_input[12] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "X component of direction"); - context_geometry_input[13] = new Fl_Input (2*WB, 2*WB+5*BH, IW, BH, "Y component of direction"); - context_geometry_input[14] = new Fl_Input (2*WB, 2*WB+6*BH, IW, BH, "Z component of direction"); - context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, "Angle in radians"); - for(i=9 ; i<16 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_rotation_cb); - } - g[3]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_translation_cb); + } + g[2]->end(); + } + // 3: Rotation + { + g[3] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Rotation"); + g[3]->labelsize(CTX.fontsize); + context_geometry_input[9] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X coordinate of an axis point"); + context_geometry_input[10] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y coordinate of an axis point"); + context_geometry_input[11] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z coordinate of an axis point"); + context_geometry_input[12] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "X component of direction"); + context_geometry_input[13] = new Fl_Input (2*WB, 2*WB+5*BH, IW, BH, "Y component of direction"); + context_geometry_input[14] = new Fl_Input (2*WB, 2*WB+6*BH, IW, BH, "Z component of direction"); + context_geometry_input[15] = new Fl_Input (2*WB, 2*WB+7*BH, IW, BH, "Angle in radians"); + for(i=9 ; i<16 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); } - // 4: Scale { - g[4] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Scale"); - g[4]->labelsize(CTX.fontsize); - context_geometry_input[16] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component of direction"); - context_geometry_input[17] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component of direction"); - context_geometry_input[18] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component of direction"); - context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Factor"); - for(i=16 ; i<20 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_scale_cb); - } - g[4]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_rotation_cb); + } + g[3]->end(); + } + // 4: Scale + { + g[4] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Scale"); + g[4]->labelsize(CTX.fontsize); + context_geometry_input[16] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "X component of direction"); + context_geometry_input[17] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Y component of direction"); + context_geometry_input[18] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "Z component of direction"); + context_geometry_input[19] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "Factor"); + for(i=16 ; i<20 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); } - // 5: Symmetry { - g[5] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Symmetry"); - g[5]->labelsize(CTX.fontsize); - context_geometry_input[20] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "1st plane equation coefficient"); - context_geometry_input[21] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "2nd plane equation coefficient"); - context_geometry_input[22] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "3rd plane equation coefficient"); - context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "4th plane equation coefficient"); - for(i=20 ; i<24 ; i++){ - context_geometry_input[i]->labelsize(CTX.fontsize); - context_geometry_input[i]->textsize(CTX.fontsize); - context_geometry_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_geometry_define_symmetry_cb); - } - g[5]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_scale_cb); } - o->end(); + g[4]->end(); } - + // 5: Symmetry { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)context_geometry_window); + g[5] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Symmetry"); + g[5]->labelsize(CTX.fontsize); + context_geometry_input[20] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "1st plane equation coefficient"); + context_geometry_input[21] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "2nd plane equation coefficient"); + context_geometry_input[22] = new Fl_Input (2*WB, 2*WB+3*BH, IW, BH, "3rd plane equation coefficient"); + context_geometry_input[23] = new Fl_Input (2*WB, 2*WB+4*BH, IW, BH, "4th plane equation coefficient"); + for(i=20 ; i<24 ; i++){ + context_geometry_input[i]->labelsize(CTX.fontsize); + context_geometry_input[i]->textsize(CTX.fontsize); + context_geometry_input[i]->align(FL_ALIGN_RIGHT); + } + { + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_geometry_define_symmetry_cb); + } + g[5]->end(); } - - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - - if(CTX.center_windows) - context_geometry_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - context_geometry_window->end(); - context_geometry_window->show(); + o->end(); } - else{ - if(context_geometry_window->shown()){ - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - } - else{ - for(i=0 ; i<6 ; i++) g[i]->hide(); - g[num]->show(); - context_geometry_window->show(); - } - + + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)context_geometry_window); } - + + for(i=0 ; i<6 ; i++) g[i]->hide(); + g[num]->show(); + + if(CTX.center_windows) + context_geometry_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + context_geometry_window->end(); + context_geometry_window->show(); + } //************** Create the window for mesh context dependant definitions ************** @@ -2688,95 +2644,86 @@ void GUI::create_mesh_context_window(int num){ static Fl_Group *g[10]; int i; - if(!init_mesh_context_window){ - init_mesh_context_window = 1 ; + if(context_mesh_window){ + for(i=0 ; i<3 ; i++) g[i]->hide(); + g[num]->show(); + context_mesh_window->show(); + return; + } - int width = 31*CTX.fontsize; - int height = 5*WB+5*BH ; - - context_mesh_window = new Fl_Window(width,height); - context_mesh_window->box(WINDOW_BOX); - context_mesh_window->label("Contextual mesh definitions"); + int width = 31*CTX.fontsize; + int height = 5*WB+5*BH ; + + context_mesh_window = new Fl_Window(width,height); + context_mesh_window->box(WINDOW_BOX); + context_mesh_window->label("Contextual mesh definitions"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); + // 0: Characteristic length { - Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-BH); - // 0: Characteristic length + g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Characteristic length"); + g[0]->labelsize(CTX.fontsize); + context_mesh_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Value"); + context_mesh_input[0]->labelsize(CTX.fontsize); + context_mesh_input[0]->textsize(CTX.fontsize); + context_mesh_input[0]->align(FL_ALIGN_RIGHT); { - g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Characteristic length"); - g[0]->labelsize(CTX.fontsize); - context_mesh_input[0] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Value"); - context_mesh_input[0]->labelsize(CTX.fontsize); - context_mesh_input[0]->textsize(CTX.fontsize); - context_mesh_input[0]->align(FL_ALIGN_RIGHT); - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_length_cb); - } - g[0]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_mesh_define_length_cb); } - // 1: Transfinite line - { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite line"); - g[1]->labelsize(CTX.fontsize); - context_mesh_input[1] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Number of points"); - context_mesh_input[2] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Distribution"); - for(i=1 ; i<3 ; i++){ - context_mesh_input[i]->labelsize(CTX.fontsize); - context_mesh_input[i]->textsize(CTX.fontsize); - context_mesh_input[i]->align(FL_ALIGN_RIGHT); - } - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_transfinite_line_cb); - } - g[1]->end(); + g[0]->end(); + } + // 1: Transfinite line + { + g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite line"); + g[1]->labelsize(CTX.fontsize); + context_mesh_input[1] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Number of points"); + context_mesh_input[2] = new Fl_Input (2*WB, 2*WB+2*BH, IW, BH, "Distribution"); + for(i=1 ; i<3 ; i++){ + context_mesh_input[i]->labelsize(CTX.fontsize); + context_mesh_input[i]->textsize(CTX.fontsize); + context_mesh_input[i]->align(FL_ALIGN_RIGHT); } - // 2: Transfinite volume { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite volume"); - g[2]->labelsize(CTX.fontsize); - context_mesh_input[3] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Volume number"); - context_mesh_input[3]->labelsize(CTX.fontsize); - context_mesh_input[3]->textsize(CTX.fontsize); - context_mesh_input[3]->align(FL_ALIGN_RIGHT); - { - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); - o->labelsize(CTX.fontsize); - o->callback(con_mesh_define_transfinite_line_cb); - } - g[2]->end(); + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_mesh_define_transfinite_line_cb); } - o->end(); + g[1]->end(); } - + // 2: Transfinite volume { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)context_mesh_window); + g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Transfinite volume"); + g[2]->labelsize(CTX.fontsize); + context_mesh_input[3] = new Fl_Input (2*WB, 2*WB+1*BH, IW, BH, "Volume number"); + context_mesh_input[3]->labelsize(CTX.fontsize); + context_mesh_input[3]->textsize(CTX.fontsize); + context_mesh_input[3]->align(FL_ALIGN_RIGHT); + { + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+3*BH, BB, BH, "Set"); + o->labelsize(CTX.fontsize); + o->callback(con_mesh_define_transfinite_line_cb); + } + g[2]->end(); } - - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - - if(CTX.center_windows) - context_mesh_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - context_mesh_window->end(); - context_mesh_window->show(); + o->end(); } - else{ - if(context_mesh_window->shown()){ - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - } - else{ - for(i=0 ; i<3 ; i++) g[i]->hide(); - g[num]->show(); - context_mesh_window->show(); - } - + + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)context_mesh_window); } + + for(i=0 ; i<3 ; i++) g[i]->hide(); + g[num]->show(); + + if(CTX.center_windows) + context_mesh_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + context_mesh_window->end(); + context_mesh_window->show(); } @@ -2788,137 +2735,132 @@ void GUI::create_getdp_window(){ int LL = (int)(1.75*IW); - if(!init_getdp_window){ - init_getdp_window = 1 ; - - int width = 5*BB+6*WB; - int height = 10*WB+ 8*BH ; - - getdp_window = new Fl_Window(width,height); - getdp_window->box(WINDOW_BOX); - getdp_window->label("GetDP solver"); + if(getdp_window){ + getdp_window->show(); + return; + } + + int width = 5*BB+6*WB; + int height = 10*WB+ 8*BH ; + + getdp_window = new Fl_Window(width,height); + getdp_window->box(WINDOW_BOX); + getdp_window->label("GetDP solver"); + { + Fl_Tabs* o = new Fl_Tabs(WB, WB, width-2*WB, height-3*WB-1*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*WB-2*BH, "General"); - g[0]->labelsize(CTX.fontsize); - - getdp_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(getdp_file_open_cb); - b1->labelsize(CTX.fontsize); - Fl_Button *b2 = new Fl_Button(3*WB+BB, 3*WB+2*BH, BB, BH, "Edit"); - b2->callback(getdp_file_edit_cb); - b2->labelsize(CTX.fontsize); - - getdp_choice[0] = new Fl_Choice(2*WB, 4*WB+3*BH, LL, BH,"Resolution"); - getdp_choice[1] = new Fl_Choice(2*WB, 5*WB+4*BH, LL, BH,"Post operation"); - - getdp_input[1] = new Fl_Input(2*WB, 6*WB+5*BH, LL, BH, "Mesh"); - Fl_Button *b3 = new Fl_Button(2*WB, 7*WB+6*BH, BB, BH, "Choose"); - b3->callback(getdp_choose_mesh_cb); - b3->labelsize(CTX.fontsize); - - for(i=0 ; i<2 ; i++){ - getdp_input[i]->labelsize(CTX.fontsize); - getdp_input[i]->textsize(CTX.fontsize); - getdp_input[i]->align(FL_ALIGN_RIGHT); - } - for(i=0 ; i<2 ; i++){ - getdp_choice[i]->textsize(CTX.fontsize); - getdp_choice[i]->labelsize(CTX.fontsize); - getdp_choice[i]->align(FL_ALIGN_RIGHT); - } - - g[0]->end(); - } - { - g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Options"); - g[1]->labelsize(CTX.fontsize); - - getdp_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, LL, BH, "Command"); - Fl_Button *b = new Fl_Button(2*WB, 3*WB+2*BH, BB, BH, "Choose"); - b->callback(getdp_choose_command_cb); - b->labelsize(CTX.fontsize); - - getdp_butt[0] = new Fl_Check_Button(2*WB, 4*WB+3*BH, LL, BH, - "Automatic message display"); - getdp_butt[1] = new Fl_Check_Button(2*WB, 4*WB+4*BH, LL, BH, - "Automatic view merge"); - - getdp_input[2]->labelsize(CTX.fontsize); - getdp_input[2]->textsize(CTX.fontsize); - getdp_input[2]->align(FL_ALIGN_RIGHT); - for(i=0 ; i<2 ; i++){ - getdp_butt[i]->type(FL_TOGGLE_BUTTON); - getdp_butt[i]->down_box(FL_DOWN_BOX); - getdp_butt[i]->labelsize(CTX.fontsize); - getdp_butt[i]->selection_color(FL_YELLOW); - } - - Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "OK"); - o->labelsize(CTX.fontsize); - o->callback(getdp_ok_cb); - - g[1]->end(); + g[0] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "General"); + g[0]->labelsize(CTX.fontsize); + + getdp_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(getdp_file_open_cb); + b1->labelsize(CTX.fontsize); + Fl_Button *b2 = new Fl_Button(3*WB+BB, 3*WB+2*BH, BB, BH, "Edit"); + b2->callback(getdp_file_edit_cb); + b2->labelsize(CTX.fontsize); + + getdp_choice[0] = new Fl_Choice(2*WB, 4*WB+3*BH, LL, BH,"Resolution"); + getdp_choice[1] = new Fl_Choice(2*WB, 5*WB+4*BH, LL, BH,"Post operation"); + + getdp_input[1] = new Fl_Input(2*WB, 6*WB+5*BH, LL, BH, "Mesh"); + Fl_Button *b3 = new Fl_Button(2*WB, 7*WB+6*BH, BB, BH, "Choose"); + b3->callback(getdp_choose_mesh_cb); + b3->labelsize(CTX.fontsize); + + for(i=0 ; i<2 ; i++){ + getdp_input[i]->labelsize(CTX.fontsize); + getdp_input[i]->textsize(CTX.fontsize); + getdp_input[i]->align(FL_ALIGN_RIGHT); } - { - g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "About"); - g[2]->labelsize(CTX.fontsize); - - Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB, height-5*WB-2*BH); - o->add(""); - o->add("@c@b@.GetDP"); - o->add("@c@.A General environment for the treatment"); - o->add("@c@.of Discrete Problems"); - o->add(""); - o->add("@c@.Experimental solver plugin for Gmsh"); - o->add(""); - o->add("@c@.Visit http://www.geuz.org/getdp/ for more info"); - o->textsize(CTX.fontsize); - - g[2]->end(); + for(i=0 ; i<2 ; i++){ + getdp_choice[i]->textsize(CTX.fontsize); + getdp_choice[i]->labelsize(CTX.fontsize); + getdp_choice[i]->align(FL_ALIGN_RIGHT); } - o->end(); - } - - { - Fl_Button* o = new Fl_Button(width-5*BB-5*WB, height-BH-WB, BB, BH, "Pre"); - o->labelsize(CTX.fontsize); - o->callback(getdp_pre_cb); - } - { - Fl_Button* o = new Fl_Button(width-4*BB-4*WB, height-BH-WB, BB, BH, "Cal"); - o->labelsize(CTX.fontsize); - o->callback(getdp_cal_cb); - } - { - Fl_Button* o = new Fl_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Post"); - o->labelsize(CTX.fontsize); - o->callback(getdp_post_cb); + + g[0]->end(); } { - Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Kill"); + g[1] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "Options"); + g[1]->labelsize(CTX.fontsize); + + getdp_input[2] = new Fl_Input(2*WB, 2*WB+1*BH, LL, BH, "Command"); + Fl_Button *b = new Fl_Button(2*WB, 3*WB+2*BH, BB, BH, "Choose"); + b->callback(getdp_choose_command_cb); + b->labelsize(CTX.fontsize); + + getdp_butt[0] = new Fl_Check_Button(2*WB, 4*WB+3*BH, LL, BH, + "Automatic message display"); + getdp_butt[1] = new Fl_Check_Button(2*WB, 4*WB+4*BH, LL, BH, + "Automatic view merge"); + + getdp_input[2]->labelsize(CTX.fontsize); + getdp_input[2]->textsize(CTX.fontsize); + getdp_input[2]->align(FL_ALIGN_RIGHT); + for(i=0 ; i<2 ; i++){ + getdp_butt[i]->type(FL_TOGGLE_BUTTON); + getdp_butt[i]->down_box(TOGGLE_BOX); + getdp_butt[i]->labelsize(CTX.fontsize); + getdp_butt[i]->selection_color(TOGGLE_COLOR); + } + + Fl_Return_Button* o = new Fl_Return_Button(width-BB-2*WB, 2*WB+7*BH, BB, BH, "OK"); o->labelsize(CTX.fontsize); - o->callback(getdp_kill_cb); + o->callback(getdp_ok_cb); + + g[1]->end(); } { - Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); - o->labelsize(CTX.fontsize); - o->callback(cancel_cb, (void*)getdp_window); + g[2] = new Fl_Group(WB, WB+BH, width-2*WB, height-3*WB-2*BH, "About"); + g[2]->labelsize(CTX.fontsize); + + Fl_Browser *o = new Fl_Browser(2*WB, 2*WB+1*BH, width-4*WB, height-5*WB-2*BH); + o->add(""); + o->add("@c@b@.GetDP"); + o->add("@c@.A General environment for the treatment"); + o->add("@c@.of Discrete Problems"); + o->add(""); + o->add("@c@.Experimental solver plugin for Gmsh"); + o->add(""); + o->add("@c@.Visit http://www.geuz.org/getdp/ for more info"); + o->textsize(CTX.fontsize); + + g[2]->end(); } - - - if(CTX.center_windows) - getdp_window->position(m_window->x()+m_window->w()/2-width/2, - m_window->y()+9*BH-height/2); - getdp_window->end(); + o->end(); } - else{ - if(getdp_window->shown()) - getdp_window->redraw(); - else - getdp_window->show(); + + { + Fl_Button* o = new Fl_Button(width-5*BB-5*WB, height-BH-WB, BB, BH, "Pre"); + o->labelsize(CTX.fontsize); + o->callback(getdp_pre_cb); + } + { + Fl_Button* o = new Fl_Button(width-4*BB-4*WB, height-BH-WB, BB, BH, "Cal"); + o->labelsize(CTX.fontsize); + o->callback(getdp_cal_cb); + } + { + Fl_Button* o = new Fl_Button(width-3*BB-3*WB, height-BH-WB, BB, BH, "Post"); + o->labelsize(CTX.fontsize); + o->callback(getdp_post_cb); + } + { + Fl_Button* o = new Fl_Button(width-2*BB-2*WB, height-BH-WB, BB, BH, "Kill"); + o->labelsize(CTX.fontsize); + o->callback(getdp_kill_cb); } + { + Fl_Button* o = new Fl_Button(width-BB-WB, height-BH-WB, BB, BH, "Cancel"); + o->labelsize(CTX.fontsize); + o->callback(cancel_cb, (void*)getdp_window); + } + + + if(CTX.center_windows) + getdp_window->position(m_window->x()+m_window->w()/2-width/2, + m_window->y()+9*BH-height/2); + getdp_window->end(); } diff --git a/Fltk/GUI.h b/Fltk/GUI.h index 7a110f8f3fa49990c491fe2bf44d54679da51857..6b735671b2957c7aa8a8e883dc54a19f838976e8 100644 --- a/Fltk/GUI.h +++ b/Fltk/GUI.h @@ -90,7 +90,6 @@ class GUI{ public: // menu window - int init_menu_window; Fl_Window *m_window ; Fl_Menu_Bar *m_menu_bar ; Fl_Choice *m_module_butt ; @@ -100,14 +99,12 @@ public: Fl_Menu_Button *m_popup_butt [NB_BUTT_MAX] ; // graphic window - int init_graphic_window; Fl_Window *g_window ; Opengl_Window *g_opengl_window ; Fl_Button *g_status_butt[7] ; Fl_Box *g_status_label[3] ; // general options window - int init_general_options_window; Fl_Window *gen_window ; Fl_Check_Button *gen_butt[20] ; Fl_Value_Input *gen_value[10] ; @@ -115,7 +112,6 @@ public: Fl_Input *gen_input[10] ; // geometry options window - int init_geometry_options_window; Fl_Window *geo_window ; Fl_Check_Button *geo_butt[10] ; Fl_Input *geo_input ; @@ -123,7 +119,6 @@ public: Fl_Button *geo_col[50] ; // mesh options window - int init_mesh_options_window; Fl_Window *mesh_window ; Fl_Check_Button *mesh_butt[20] ; Fl_Input *mesh_input ; @@ -131,33 +126,28 @@ public: Fl_Button *mesh_col[50] ; // solver options window - int init_solver_options_window; Fl_Window *solver_window ; Fl_Check_Button *solver_butt[20] ; Fl_Value_Input *solver_value[20] ; // post-processing options window - int init_post_options_window; Fl_Window *post_window ; Fl_Check_Button *post_butt[20] ; Fl_Value_Input *post_value[20] ; // statistics window - int init_statistics_window; Fl_Window *stat_window ; Fl_Output *stat_value[50] ; // message window - int init_message_window; Fl_Window *msg_window ; Fl_Browser *msg_browser ; // about window - int init_about_window; Fl_Window *about_window ; // view options window - int init_view_window, view_number ; + int view_number ; Fl_Window *view_window ; Fl_Group *view_3d, *view_2d, *view_range, *view_timestep, *view_vector ; #define VIEW_OPT_BUTT 100 @@ -168,17 +158,14 @@ public: Fl_Return_Button *view_ok ; // geometry context window - int init_geometry_context_window; Fl_Window *context_geometry_window ; Fl_Input *context_geometry_input[30] ; // mesh context window - int init_mesh_context_window; Fl_Window *context_mesh_window ; Fl_Input *context_mesh_input[20] ; // solver windows - int init_getdp_window; Fl_Window *getdp_window ; Fl_Input *getdp_input[50] ; Fl_Choice *getdp_choice[10] ; diff --git a/Graphics/Graph2D.cpp b/Graphics/Graph2D.cpp index e42d09529e0ab314ab1c30d70756fc49e9cce72f..c06687be07d5a9395d9a525542274b7cb8402e0b 100644 --- a/Graphics/Graph2D.cpp +++ b/Graphics/Graph2D.cpp @@ -1,4 +1,4 @@ -// $Id: Graph2D.cpp,v 1.10 2001-11-05 09:27:28 geuzaine Exp $ +// $Id: Graph2D.cpp,v 1.11 2001-11-14 14:39:39 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -338,7 +338,7 @@ void Draw_Graph2D(void){ for(i=0;i<List_Nbr(CTX.post.list);i++){ v = (Post_View*)List_Pointer(CTX.post.list,i); if(v->Visible && v->NbSP && v->Type!=DRAW_POST_3D){ - tic = 4+v->LineWidth; + tic = 5; dx = dy = 0.; if(v->ShowScale){ gl_font(FL_HELVETICA,CTX.gl_fontsize); diff --git a/doc/VERSIONS b/doc/VERSIONS index 5b9bfec23850a1953d2357fcdf2894edf3015b9e..dd15d03b1e4369eed050703056e1d7743e93e1bb 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,4 +1,6 @@ -$Date: 2001-11-12 15:58:48 $ +$Date: 2001-11-14 14:39:39 $ + +New in 1.30: Interface polish; New in 1.29: Translations and rotations can now be combined in extrusions; fixed coherence bug in Extrude Line; various small