From 32070a017e8310fa21c0893038b81c75cd3972b1 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 4 Aug 2001 00:37:57 +0000 Subject: [PATCH] Fixed wrong behaviour of Link (all/visible) views (one should modify only the items that have actually changed) --- Fltk/Callbacks.cpp | 203 +++++++++++++++++++++++++++++---------- Fltk/Callbacks.h | 1 + Fltk/Colorbar_Window.cpp | 6 +- Fltk/Colorbar_Window.h | 1 - Fltk/GUI.cpp | 33 ++++++- Fltk/GUI.h | 7 +- doc/VERSIONS | 3 +- 7 files changed, 195 insertions(+), 59 deletions(-) diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 10a81d7676..6144f59766 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.72 2001-08-03 21:27:20 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.73 2001-08-04 00:37:57 geuzaine Exp $ #include <sys/types.h> #include <signal.h> @@ -97,6 +97,10 @@ void color_cb(CALLBACK_ARGS){ Draw(); } +void set_changed_cb(CALLBACK_ARGS){ + w->set_changed(); +} + // Graphical window void status_xyz1p_cb(CALLBACK_ARGS){ @@ -1673,66 +1677,165 @@ void view_options_timestep_cb(CALLBACK_ARGS){ } void view_options_ok_cb(CALLBACK_ARGS){ - int links = (int)opt_post_link(0, GMSH_GET, 0); - for(int i=0 ; i<List_Nbr(Post_ViewList) ; i++){ + int i, links; + + links = (int)opt_post_link(0, GMSH_GET, 0); + + for(i=0 ; i<List_Nbr(Post_ViewList) ; i++){ if((links == 2) || (links == 1 && opt_view_visible(i, GMSH_GET, 0)) || (links == 0 && i == (int)data)){ + + // view_butts + + //not this one. if(WID->view_butt[0]->changed()) opt_view_range_type(i, GMSH_SET, WID->view_butt[0]->value()?DRAW_POST_CUSTOM: DRAW_POST_DEFAULT); - opt_view_scale_type(i, GMSH_SET, - WID->view_butt[1]->value()?DRAW_POST_LINEAR: - WID->view_butt[2]->value()?DRAW_POST_LOGARITHMIC: - DRAW_POST_DOUBLELOGARITHMIC); - opt_view_saturate_values(i, GMSH_SET, - WID->view_butt[25]->value()); + + if(WID->view_butt[1]->changed() || + WID->view_butt[2]->changed() || + WID->view_butt[3]->changed()) + opt_view_scale_type(i, GMSH_SET, + WID->view_butt[1]->value()?DRAW_POST_LINEAR: + WID->view_butt[2]->value()?DRAW_POST_LOGARITHMIC: + DRAW_POST_DOUBLELOGARITHMIC); + + if(WID->view_butt[25]->changed()) + opt_view_saturate_values(i, GMSH_SET, + WID->view_butt[25]->value()); - opt_view_intervals_type(i, GMSH_SET, - WID->view_butt[3]->value()?DRAW_POST_ISO: - WID->view_butt[4]->value()?DRAW_POST_DISCRETE: - WID->view_butt[5]->value()?DRAW_POST_CONTINUOUS: - DRAW_POST_NUMERIC); - opt_view_arrow_type(i, GMSH_SET, - WID->view_butt[7]->value()?DRAW_POST_SEGMENT: - WID->view_butt[8]->value()?DRAW_POST_ARROW: - WID->view_butt[9]->value()?DRAW_POST_CONE: - DRAW_POST_DISPLACEMENT); - opt_view_arrow_location(i, GMSH_SET, - WID->view_butt[11]->value()?DRAW_POST_LOCATE_COG: - DRAW_POST_LOCATE_VERTEX); - opt_view_show_element(i, GMSH_SET, WID->view_butt[13]->value()); - opt_view_show_scale(i, GMSH_SET, WID->view_butt[14]->value()); - opt_view_show_time(i, GMSH_SET, WID->view_butt[15]->value()); - opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[16]->value()); - opt_view_light(i,GMSH_SET,WID->view_butt[17]->value()); - opt_view_smooth_normals(i,GMSH_SET,WID->view_butt[27]->value()); - opt_view_draw_points(i, GMSH_SET, WID->view_butt[18]->value()); - opt_view_draw_lines(i, GMSH_SET, WID->view_butt[19]->value()); - opt_view_draw_triangles(i, GMSH_SET, WID->view_butt[20]->value()); - opt_view_draw_tetrahedra(i, GMSH_SET, WID->view_butt[21]->value()); - opt_view_draw_scalars(i, GMSH_SET, WID->view_butt[22]->value()); - opt_view_draw_vectors(i, GMSH_SET, WID->view_butt[23]->value()); - opt_view_draw_tensors(i, GMSH_SET, WID->view_butt[24]->value()); + if(WID->view_butt[3]->changed() || + WID->view_butt[4]->changed() || + WID->view_butt[5]->changed() || + WID->view_butt[6]->changed()) + opt_view_intervals_type(i, GMSH_SET, + WID->view_butt[3]->value()?DRAW_POST_ISO: + WID->view_butt[4]->value()?DRAW_POST_DISCRETE: + WID->view_butt[5]->value()?DRAW_POST_CONTINUOUS: + DRAW_POST_NUMERIC); + + if(WID->view_butt[7]->changed() || + WID->view_butt[8]->changed() || + WID->view_butt[9]->changed() || + WID->view_butt[10]->changed()) + opt_view_arrow_type(i, GMSH_SET, + WID->view_butt[7]->value()?DRAW_POST_SEGMENT: + WID->view_butt[8]->value()?DRAW_POST_ARROW: + WID->view_butt[9]->value()?DRAW_POST_CONE: + DRAW_POST_DISPLACEMENT); + + if(WID->view_butt[11]->changed() || + WID->view_butt[12]->changed()) + opt_view_arrow_location(i, GMSH_SET, + WID->view_butt[11]->value()?DRAW_POST_LOCATE_COG: + DRAW_POST_LOCATE_VERTEX); + + if(WID->view_butt[13]->changed()) + opt_view_show_element(i, GMSH_SET, WID->view_butt[13]->value()); + + if(WID->view_butt[14]->changed()) + opt_view_show_scale(i, GMSH_SET, WID->view_butt[14]->value()); + + if(WID->view_butt[15]->changed()) + opt_view_show_time(i, GMSH_SET, WID->view_butt[15]->value()); + + if(WID->view_butt[16]->changed()) + opt_view_transparent_scale(i, GMSH_SET, WID->view_butt[16]->value()); + + if(WID->view_butt[17]->changed()) + opt_view_light(i,GMSH_SET,WID->view_butt[17]->value()); + + if(WID->view_butt[27]->changed()) + opt_view_smooth_normals(i,GMSH_SET,WID->view_butt[27]->value()); - opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value()); - opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value()); - opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value()); - opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value()); - opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value()); - opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value()); - opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value()); - opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value()); - opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value()); - opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value()); - opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value()); - opt_view_boundary(i, GMSH_SET, WID->view_value[11]->value()); - opt_view_explode(i, GMSH_SET, WID->view_value[12]->value()); + if(WID->view_butt[18]->changed()) + opt_view_draw_points(i, GMSH_SET, WID->view_butt[18]->value()); + + if(WID->view_butt[19]->changed()) + opt_view_draw_lines(i, GMSH_SET, WID->view_butt[19]->value()); + + if(WID->view_butt[20]->changed()) + opt_view_draw_triangles(i, GMSH_SET, WID->view_butt[20]->value()); + + if(WID->view_butt[21]->changed()) + opt_view_draw_tetrahedra(i, GMSH_SET, WID->view_butt[21]->value()); + + if(WID->view_butt[22]->changed()) + opt_view_draw_scalars(i, GMSH_SET, WID->view_butt[22]->value()); + + if(WID->view_butt[23]->changed()) + opt_view_draw_vectors(i, GMSH_SET, WID->view_butt[23]->value()); + + if(WID->view_butt[24]->changed()) + opt_view_draw_tensors(i, GMSH_SET, WID->view_butt[24]->value()); + + // view_values + + if(WID->view_value[0]->changed()) + opt_view_custom_min(i, GMSH_SET, WID->view_value[0]->value()); - opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value()); - opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value()); + if(WID->view_value[1]->changed()) + opt_view_custom_max(i, GMSH_SET, WID->view_value[1]->value()); + + if(WID->view_value[2]->changed()) + opt_view_nb_iso(i, GMSH_SET, WID->view_value[2]->value()); + + if(WID->view_value[3]->changed()) + opt_view_offset0(i, GMSH_SET, WID->view_value[3]->value()); + + if(WID->view_value[4]->changed()) + opt_view_offset1(i, GMSH_SET, WID->view_value[4]->value()); + + if(WID->view_value[5]->changed()) + opt_view_offset2(i, GMSH_SET, WID->view_value[5]->value()); + + if(WID->view_value[6]->changed()) + opt_view_raise0(i, GMSH_SET, WID->view_value[6]->value()); + + if(WID->view_value[7]->changed()) + opt_view_raise1(i, GMSH_SET, WID->view_value[7]->value()); + + if(WID->view_value[8]->changed()) + opt_view_raise2(i, GMSH_SET, WID->view_value[8]->value()); + + if(WID->view_value[9]->changed()) + opt_view_timestep(i, GMSH_SET, WID->view_value[9]->value()); + + if(WID->view_value[10]->changed()) + opt_view_arrow_scale(i, GMSH_SET, WID->view_value[10]->value()); + + if(WID->view_value[11]->changed()) + opt_view_boundary(i, GMSH_SET, WID->view_value[11]->value()); + + if(WID->view_value[12]->changed()) + opt_view_explode(i, GMSH_SET, WID->view_value[12]->value()); + + // view_inputs + + if(WID->view_input[0]->changed()) + opt_view_name(i, GMSH_SET, (char*)WID->view_input[0]->value()); + + if(WID->view_input[1]->changed()) + opt_view_format(i, GMSH_SET, (char*)WID->view_input[1]->value()); + + // colorbar window + + if(WID->view_colorbar_window->changed() && i!=(int)data){ + ColorTable_Copy(&((Post_View*)List_Pointer(Post_ViewList,(int)data))->CT); + ColorTable_Paste(&((Post_View*)List_Pointer(Post_ViewList,i))->CT); + } } } + + // we clear all the flags + for(i=0; i<VIEW_OPT_BUTT; i++){ + if(WID->view_butt[i]) WID->view_butt[i]->clear_changed(); + if(WID->view_value[i]) WID->view_value[i]->clear_changed(); + if(WID->view_input[i]) WID->view_input[i]->clear_changed(); + WID->view_colorbar_window->clear_changed(); + } + Draw(); } diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index 60a6164f99..791493badd 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -9,6 +9,7 @@ int SetGlobalShortcut(int event); void cancel_cb(CALLBACK_ARGS) ; void color_cb(CALLBACK_ARGS) ; +void set_changed_cb(CALLBACK_ARGS); // Graphical window diff --git a/Fltk/Colorbar_Window.cpp b/Fltk/Colorbar_Window.cpp index 269067461b..a41004e870 100644 --- a/Fltk/Colorbar_Window.cpp +++ b/Fltk/Colorbar_Window.cpp @@ -1,4 +1,4 @@ -// $Id: Colorbar_Window.cpp,v 1.10 2001-05-01 18:58:24 geuzaine Exp $ +// $Id: Colorbar_Window.cpp,v 1.11 2001-08-04 00:37:57 geuzaine Exp $ #include "Gmsh.h" #include "GmshUI.h" @@ -465,6 +465,7 @@ int Colorbar_Window::handle(int event){ ColorTable_Recompute(ct, 1, 1); draw(); *viewchanged = 1; + set_changed(); } // discard the event for other uses return 1; @@ -536,7 +537,8 @@ int Colorbar_Window::handle(int event){ int a, b, value; *viewchanged = 1; - + set_changed(); + value = y_to_intensity(ypos); if (pentry<=entry) { diff --git a/Fltk/Colorbar_Window.h b/Fltk/Colorbar_Window.h index 5bcf210bdb..ce037d5d5a 100644 --- a/Fltk/Colorbar_Window.h +++ b/Fltk/Colorbar_Window.h @@ -27,7 +27,6 @@ class Colorbar_Window : public Fl_Window { ColorTable *ct; // pointer to the color table (allocated in Post_View) int *viewchanged;// pointer to changed bit in view - Fl_Color color_bg; public: diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index 79f9bc5aa8..ace46f4a44 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.101 2001-08-03 21:27:20 geuzaine Exp $ +// $Id: GUI.cpp,v 1.102 2001-08-04 00:37:57 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. @@ -1927,12 +1927,21 @@ void GUI::create_about_window(){ //************************* Create the window for view options ************************* +// WARNING! Don't forget to add the set_changed_cb() callback to any new widget! + 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; + } + int width = 32*CTX.fontsize; int height = 5*WB+11*BH; @@ -1953,6 +1962,7 @@ void GUI::create_view_options_window(int num){ 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[13] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Show elements"); @@ -1966,6 +1976,7 @@ void GUI::create_view_options_window(int num){ view_butt[27]->down_box(FL_DOWN_BOX); view_butt[27]->labelsize(CTX.fontsize); view_butt[27]->selection_color(FL_YELLOW); + view_butt[27]->callback(set_changed_cb, 0); view_value[11] = new Fl_Value_Input(width/2, 2*WB+ 1*BH, IW, BH, "Boundary"); view_value[11]->labelsize(CTX.fontsize); @@ -1975,6 +1986,7 @@ void GUI::create_view_options_window(int num){ view_value[11]->minimum(0); view_value[11]->step(1); view_value[11]->maximum(3); + view_value[11]->callback(set_changed_cb, 0); view_value[12] = new Fl_Value_Input(width/2, 2*WB+ 2*BH, IW, BH, "Explode"); view_value[12]->labelsize(CTX.fontsize); @@ -1984,6 +1996,7 @@ void GUI::create_view_options_window(int num){ view_value[12]->minimum(0.); view_value[12]->step(0.01); view_value[12]->maximum(1.); + view_value[12]->callback(set_changed_cb, 0); view_butt[18] = new Fl_Check_Button(width/2, 2*WB+3*BH, BW, BH, "Draw points"); view_butt[19] = new Fl_Check_Button(width/2, 2*WB+4*BH, BW, BH, "Draw lines"); @@ -1997,6 +2010,7 @@ void GUI::create_view_options_window(int num){ 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); } o->end(); @@ -2011,6 +2025,7 @@ void GUI::create_view_options_window(int num){ view_butt[0]->down_box(FL_DOWN_BOX); view_butt[0]->labelsize(CTX.fontsize); view_butt[0]->selection_color(FL_YELLOW); + //no set_changed since customrange has its own callback view_value[0] = new Fl_Value_Input(2*WB, 2*WB+2*BH, IW, BH, "Minimum"); view_value[1] = new Fl_Value_Input(2*WB, 2*WB+3*BH, IW, BH, "Maximum"); @@ -2019,25 +2034,30 @@ void GUI::create_view_options_window(int num){ 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[1] = new Fl_Check_Button(2*WB, 2*WB+4*BH, BW, BH, "Linear"); view_butt[2] = new Fl_Check_Button(2*WB, 2*WB+5*BH, BW, BH, "Logarithmic"); - for(i=1 ; i<3 ; 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_butt[26] = new Fl_Check_Button(2*WB, 2*WB+6*BH, BW, BH, "Double logarithmic"); view_butt[26]->type(FL_RADIO_BUTTON); view_butt[26]->labelsize(CTX.fontsize); view_butt[26]->selection_color(FL_YELLOW); + view_butt[26]->callback(set_changed_cb, 0); view_butt[25] = new Fl_Check_Button(2*WB, 2*WB+7*BH, BW, BH, "Saturate values"); view_butt[25]->type(FL_TOGGLE_BUTTON); view_butt[25]->down_box(FL_DOWN_BOX); view_butt[25]->labelsize(CTX.fontsize); view_butt[25]->selection_color(FL_YELLOW); + view_butt[25]->callback(set_changed_cb, 0); o->end(); } @@ -2054,6 +2074,7 @@ void GUI::create_view_options_window(int num){ view_value[2]->minimum(1); view_value[2]->maximum(256); view_value[2]->step(1); + view_value[2]->callback(set_changed_cb, 0); view_butt[3] = new Fl_Check_Button(2*WB, 2*WB+2*BH, BW, BH, "Iso-values"); view_butt[4] = new Fl_Check_Button(2*WB, 2*WB+3*BH, BW, BH, "Filled iso-values"); @@ -2063,6 +2084,7 @@ void GUI::create_view_options_window(int num){ 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); } o->end(); } @@ -2082,6 +2104,7 @@ void GUI::create_view_options_window(int num){ 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(); } @@ -2099,6 +2122,7 @@ void GUI::create_view_options_window(int num){ view_value[9]->maximum(0); view_value[9]->step(1); view_timestep->end(); + //no set_changed since timestep has its own callback } // Vector display { @@ -2116,6 +2140,7 @@ void GUI::create_view_options_window(int num){ 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); } o->end(); } @@ -2127,6 +2152,7 @@ void GUI::create_view_options_window(int num){ 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); } o->end(); } @@ -2136,6 +2162,7 @@ void GUI::create_view_options_window(int num){ view_value[10]->type(FL_HORIZONTAL); view_value[10]->align(FL_ALIGN_RIGHT); view_value[10]->minimum(0); + view_value[10]->callback(set_changed_cb, 0); view_vector->end(); } // Colors @@ -2146,6 +2173,7 @@ void GUI::create_view_options_window(int num){ 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(); } o->end(); @@ -2207,6 +2235,7 @@ void GUI::update_view_window(int num){ opt_view_range_type(num, GMSH_GUI, 0); view_butt[0]->callback(view_options_custom_cb, (void*)num); view_options_custom_cb(0,0); + view_butt[0]->clear_changed(); opt_view_custom_min(num, GMSH_GUI, 0); opt_view_custom_max(num, GMSH_GUI, 0); for(i=0 ; i<2 ; i++){ diff --git a/Fltk/GUI.h b/Fltk/GUI.h index 95a534549e..1f9079073d 100644 --- a/Fltk/GUI.h +++ b/Fltk/GUI.h @@ -159,9 +159,10 @@ public: int init_view_window, view_number ; Fl_Window *view_window ; Fl_Group *view_timestep, *view_vector ; - Fl_Check_Button *view_butt[50] ; - Fl_Value_Input *view_value[20] ; - Fl_Input *view_input[20] ; +#define VIEW_OPT_BUTT 50 + Fl_Check_Button *view_butt[VIEW_OPT_BUTT] ; + Fl_Value_Input *view_value[VIEW_OPT_BUTT] ; + Fl_Input *view_input[VIEW_OPT_BUTT] ; Colorbar_Window *view_colorbar_window ; Fl_Return_Button *view_ok ; diff --git a/doc/VERSIONS b/doc/VERSIONS index f35b640fde..f7780be275 100644 --- a/doc/VERSIONS +++ b/doc/VERSIONS @@ -1,7 +1,8 @@ -$Id: VERSIONS,v 1.47 2001-08-03 21:28:56 geuzaine Exp $ +$Id: VERSIONS,v 1.48 2001-08-04 00:37:57 geuzaine Exp $ New in 1.23: Better display of displacement maps; boundary operator generalization; new explode option for post-processing views; +corrected link view behaviour (to update only the changed items); New in 1.22: Fixed (yet another) bug for 2D mesh in the mean plane; fixed surface coherence bug in extruded meshes; new double logarithmic -- GitLab