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