From 4ad7319fe35f761d518740b1e9b59e4315842ced Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Tue, 9 Jan 2001 08:59:11 +0000
Subject: [PATCH] *** empty log message ***

---
 {Motif => Common}/Bitmaps.h |   0
 {Motif => Common}/Help.h    |   0
 Fltk/Callbacks.cpp          | 544 ++++++++++++++++++++++++++--
 Fltk/Callbacks.h            | 156 ++++++--
 Fltk/GUI.cpp                | 692 +++++++++++++++++++++++++++++-------
 Fltk/GUI.h                  |  67 ++--
 Fltk/Main.cpp               |  12 +-
 Fltk/Opengl.cpp             |  14 +-
 jpeg/rawjpeg.tar            | Bin 139264 -> 0 bytes
 9 files changed, 1272 insertions(+), 213 deletions(-)
 rename {Motif => Common}/Bitmaps.h (100%)
 rename {Motif => Common}/Help.h (100%)
 delete mode 100644 jpeg/rawjpeg.tar

diff --git a/Motif/Bitmaps.h b/Common/Bitmaps.h
similarity index 100%
rename from Motif/Bitmaps.h
rename to Common/Bitmaps.h
diff --git a/Motif/Help.h b/Common/Help.h
similarity index 100%
rename from Motif/Help.h
rename to Common/Help.h
diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp
index 20628b02cc..8e55fb35ee 100644
--- a/Fltk/Callbacks.cpp
+++ b/Fltk/Callbacks.cpp
@@ -1,3 +1,4 @@
+// $Id: Callbacks.cpp,v 1.2 2001-01-09 08:58:37 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -5,19 +6,130 @@
 #include "Mesh.h"
 #include "Draw.h"
 #include "Views.h"
+#include "Timer.h"
 #include "OpenFile.h"
 #include "Context.h"
 #include "GUI.h"
+#include "Callbacks.h"
 
 #include <FL/fl_file_chooser.H>
 
-extern GUI *WID;
-extern Mesh M;
-extern Context_T CTX;
+extern GUI       *WID;
+extern Mesh       M;
+extern Context_T  CTX;
+extern List_T    *Post_ViewList;
+
+// Compatibility routines
+
+int AddViewInUI(int i, char *Name, int Num){
+  if(i > NB_BUTT_MAX -1) return 1;
+  if(WID->get_context() == 2)
+    WID->set_context(menu_post,0);
+  return 0;
+}
+
+void MarkAllViewsChanged(int action){
+  int i;
+  Post_View *v;
+
+  for(i = 0 ; i< List_Nbr(Post_ViewList) ; i++){
+    v = (Post_View*)List_Pointer(Post_ViewList, i);
+    switch(action){
+    case 1: // toggle drawing mode
+      if(v->IntervalsType == DRAW_POST_ISO) 
+        v->IntervalsType = DRAW_POST_DISCRETE ;
+      else if(v->IntervalsType == DRAW_POST_DISCRETE) 
+        v->IntervalsType = DRAW_POST_CONTINUOUS ;
+      else 
+        v->IntervalsType = DRAW_POST_ISO ;
+      break;
+    case 2: // time step++
+      if(v->TimeStep < v->NbTimeStep-1)
+        v->TimeStep++ ;
+      else
+        v->TimeStep = 0 ;
+      break;
+    case 3: // time step--
+      if(v->TimeStep > 0)
+        v->TimeStep-- ;
+      else
+        v->TimeStep = v->NbTimeStep-1 ;
+    }
+    v->Changed = 1 ;
+  }
+}
+
+void CancelMeshThread(void){
+  
+}
+
+// Graphical window 
+
+void status_xyz1p_cb(CALLBACK_ARGS){
+
+  extern void set_r(int i, double val);
+  extern void set_t(int i, double val);
+  extern void set_s(int i, double val);
+
+  switch((int)data){
+  case 0 : 
+    if(CTX.useTrackball)
+      CTX.setQuaternion(0.,-1./sqrt(2.),0.,1./sqrt(2.));
+    set_r(0,0.);  set_r(1,90.);set_r(2,0.); 
+    Init(); Draw(); 
+    break;
+  case 1 : 
+    if(CTX.useTrackball)
+      CTX.setQuaternion(1./sqrt(2.),0.,0.,1./sqrt(2.));
+    set_r(0,-90.);set_r(1,0.); set_r(2,0.); 
+    Init(); Draw(); 
+    break;
+  case 2 :
+    if(CTX.useTrackball)
+      CTX.setQuaternion(0.,0.,0.,1.);
+    set_r(0,0.);  set_r(1,0.); set_r(2,0.); 
+    Init(); Draw(); 
+    break;
+  case 3 : 
+    set_t(0,0.);  set_t(1,0.); set_t(2,0.); 
+    set_s(0,1.);  set_s(1,1.); set_s(2,1.); 
+    Init(); Draw(); 
+    break;
+  case 4 :
+    Print_Context(NULL);
+    break ;
+  }
+}
+
+static int stop_anim ;
+void status_play_cb(CALLBACK_ARGS){
+  static long anim_time ;
+  WID->set_anim(0);
+  stop_anim = 0 ;
+  anim_time = GetTime();
+  while(1){
+    if(stop_anim) break ;
+    WID->check();
+    if(GetTime() - anim_time > CTX.post.anim_delay){
+      anim_time = GetTime();
+      MarkAllViewsChanged(2);
+      Init(); Draw();
+    }
+  }
+}
+
+void status_pause_cb(CALLBACK_ARGS){
+  stop_anim = 1;
+  WID->set_anim(1);
+}
+
+void status_cancel_cb(CALLBACK_ARGS){
+  CancelMeshThread();
+}
 
 // File Menu
 
-void file_open_cb(void) {
+void file_open_cb(CALLBACK_ARGS) {
   char *newfile;
   newfile = fl_file_chooser("Open File", "*.geo", NULL);
   if (newfile != NULL) {
@@ -27,7 +139,7 @@ void file_open_cb(void) {
   }
 }
 
-void file_merge_cb(void) {
+void file_merge_cb(CALLBACK_ARGS) {
   char *newfile;
   newfile = fl_file_chooser("Merge File", "*.{geo,pos,msh}", NULL);
   if (newfile != NULL) {
@@ -37,76 +149,442 @@ void file_merge_cb(void) {
   }
 }
 
-void file_save_cb(void) {
+void file_save_cb(CALLBACK_ARGS) {
+  Print_Mesh(&M, NULL, CTX.mesh.format);
 }
 
-void file_save_as_cb(void) {
+void file_save_as_cb(CALLBACK_ARGS) {
+  char *newfile;
+  newfile = fl_file_chooser("Save File", "*.{geo,pos,msh}", NULL);
+  void CreateFile (char *name, int format) ;
+  if (newfile != NULL)
+    CreateFile(newfile, FORMAT_AUTO); 
 }
 
-void file_reload_all_views_cb(void) {
+static int RELOAD_ALL_VIEWS = 0 ;
+
+void file_reload_all_views_cb(CALLBACK_ARGS) {
+  if(!Post_ViewList) return;
+  RELOAD_ALL_VIEWS = 1;
+  for(int i = 1 ; i<=List_Nbr(Post_ViewList) ; i++)
+    view_reload_cb(NULL, (void *)i);
+  RELOAD_ALL_VIEWS = 0;
+  Init();
+  Draw();
 }
 
-void file_remove_all_views_cb(void) {
+static int REMOVE_ALL_VIEWS = 0 ;
+
+void file_remove_all_views_cb(CALLBACK_ARGS) {
+  if(!Post_ViewList) return;
+  REMOVE_ALL_VIEWS = 1;
+  while(List_Nbr(Post_ViewList))
+    view_remove_cb(NULL, (void*)1);
+  REMOVE_ALL_VIEWS = 0;
+  Init();
+  Draw();
 }
 
-void file_quit_cb(void) {
+void file_quit_cb(CALLBACK_ARGS) {
   exit(0);
 }
 
 // Option Menu
 
-void opt_general_cb(void) {
+void opt_general_cb(CALLBACK_ARGS) {
   WID->opt_general();
 }
-
-void opt_geometry_cb(void) {
+void opt_geometry_cb(CALLBACK_ARGS) {
+  WID->opt_geometry();
 }
-void opt_mesh_cb(void) {
+void opt_mesh_cb(CALLBACK_ARGS) {
+  WID->opt_mesh();
 }
-void opt_post_cb(void) {
+void opt_post_cb(CALLBACK_ARGS) {
+  WID->opt_post();
 }
-void opt_stat_cb(void) {
+void opt_stat_cb(CALLBACK_ARGS) {
+  WID->opt_stat();
 }
 
 // Help Menu
 
-void help_short_cb(void){
+void help_short_cb(CALLBACK_ARGS){
+  WID->help_short();
 }
-void help_about_cb(void){
+void help_about_cb(CALLBACK_ARGS){
+  WID->help_about();
 }
 
 // Module Menu
 
-void mod_geometry_cb(void){
+void mod_geometry_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry, 0);
+}
+void mod_mesh_cb(CALLBACK_ARGS){
+  WID->set_context(menu_mesh, 0);
 }
-void mod_mesh_cb(void){
+void mod_post_cb(CALLBACK_ARGS){
+  WID->set_context(menu_post, 0);
 }
-void mod_post_cb(void){
+void mod_back_cb(CALLBACK_ARGS){
+  WID->set_context(NULL, -1);
+}
+void mod_forward_cb(CALLBACK_ARGS){
+  WID->set_context(NULL, 1);
 }
 
-// View Menus
+// Dynamic Menus
 
-void view_reload_cb(Fl_Widget* w, void* data){
-  printf("Reload view %d \n", (int)data);
+void geometry_elementary_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary, 0);
+}
+void geometry_physical_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_physical, 0);
+}
+void geometry_reload_cb(CALLBACK_ARGS){
+  printf("reload geometry\n");
+} 
+void geometry_elementary_add_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add, 0);
+}
+void geometry_elementary_translate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_translate, 0);
+}
+void geometry_elementary_rotate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_rotate, 0);
+}
+void geometry_elementary_dilate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_dilate, 0);
+}
+void geometry_elementary_symmetry_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_symmetry, 0);
+}
+void geometry_elementary_extrude_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_extrude, 0);
+}
+void geometry_elementary_delete_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_delete, 0);
+}
+void geometry_elementary_add_new_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add_new, 0);
+}
+void geometry_elementary_add_translate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add_translate, 0);
+}
+void geometry_elementary_add_rotate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add_rotate, 0);
+}
+void geometry_elementary_add_dilate_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add_dilate, 0);
+}
+void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_elementary_add_symmetry, 0);
+}
+void geometry_elementary_add_new_parameter_cb(CALLBACK_ARGS){
+  printf("new param\n");
+}
+void geometry_elementary_add_new_point_cb(CALLBACK_ARGS){
+  printf("new point\n");
+}
+void geometry_elementary_add_new_line_cb(CALLBACK_ARGS){
+  printf("new line\n");
+}
+void geometry_elementary_add_new_spline_cb(CALLBACK_ARGS){
+  printf("new spline\n");
+}
+void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS){
+  printf("new circle\n");
+}
+void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS){
+  printf("new ellipsis\n");
+}
+void geometry_elementary_add_new_planesurface_cb(CALLBACK_ARGS){
+  printf("new plane surf\n");
+}
+void geometry_elementary_add_new_ruledsurface_cb(CALLBACK_ARGS){
+  printf("new rules surf\n");
+}
+void geometry_elementary_add_new_volume_cb(CALLBACK_ARGS){
+  printf("new vol\n");
+}
+void geometry_elementary_add_translate_point_cb(CALLBACK_ARGS){
+  printf("translate point\n");
+}
+void geometry_elementary_add_translate_curve_cb(CALLBACK_ARGS){
+  printf("translate curve\n");
+}
+void geometry_elementary_add_translate_surface_cb(CALLBACK_ARGS){
+  printf("translate surface\n");
+}
+void geometry_elementary_add_rotate_point_cb(CALLBACK_ARGS){
+  printf("rotate point\n");
+}
+void geometry_elementary_add_rotate_curve_cb(CALLBACK_ARGS){
+  printf("rotate curve\n");
+}
+void geometry_elementary_add_rotate_surface_cb(CALLBACK_ARGS){
+  printf("rotate surf\n");
+}
+void geometry_elementary_add_dilate_point_cb(CALLBACK_ARGS){
+  printf("dilate point\n");
+}
+void geometry_elementary_add_dilate_curve_cb(CALLBACK_ARGS){
+  printf("dilate curve\n");
+}
+void geometry_elementary_add_dilate_surface_cb(CALLBACK_ARGS){
+  printf("dilate surface\n");
+}
+void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS){
+  printf("symm point\n");
+}
+void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS){
+  printf("symm curve\n");
+}
+void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS){
+  printf("symm surf\n");
+}
+void geometry_elementary_translate_point_cb(CALLBACK_ARGS){
+  printf("translate point\n");
+}
+void geometry_elementary_translate_curve_cb(CALLBACK_ARGS){
+  printf("translate curve\n");
+}
+void geometry_elementary_translate_surface_cb(CALLBACK_ARGS){
+  printf("translate surf\n");
 }
-void view_remove_cb(Fl_Widget* w, void* data){
-  printf("Remove view %d \n", (int)data);
+void geometry_elementary_rotate_point_cb(CALLBACK_ARGS){
+  printf("rot point\n");
 }
-void view_duplicate_cb(Fl_Widget* w, void* data){
-  printf("Duplicate view %d \n", (int)data);
+void geometry_elementary_rotate_curve_cb(CALLBACK_ARGS){
+  printf("rot curve\n");
 }
-void view_lighting_cb(Fl_Widget* w, void* data){
+void geometry_elementary_rotate_surface_cb(CALLBACK_ARGS){
+  printf("rot surf\n");
+}
+void geometry_elementary_dilate_point_cb(CALLBACK_ARGS){
+  printf("dilate point\n");
+}
+void geometry_elementary_dilate_curve_cb(CALLBACK_ARGS){
+  printf("dilate curve\n");
+}
+void geometry_elementary_dilate_surface_cb(CALLBACK_ARGS){
+  printf("dilate surf\n");
+}
+void geometry_elementary_symmetry_point_cb(CALLBACK_ARGS){
+  printf("symm point\n");
+}
+void geometry_elementary_symmetry_curve_cb(CALLBACK_ARGS){
+  printf("symm curve\n");
+}
+void geometry_elementary_symmetry_surface_cb(CALLBACK_ARGS){
+  printf("symm surf\n");
+}
+void geometry_elementary_extrude_point_cb(CALLBACK_ARGS){
+  printf("extr point\n");
+}
+void geometry_elementary_extrude_curve_cb(CALLBACK_ARGS){
+  printf("extr curve\n");
+}
+void geometry_elementary_extrude_surface_cb(CALLBACK_ARGS){
+  printf("extr surf\n");
+}
+void geometry_elementary_delete_point_cb(CALLBACK_ARGS){
+  printf("del point\n");
+}
+void geometry_elementary_delete_curve_cb(CALLBACK_ARGS){
+  printf("del curve\n");
+}
+void geometry_elementary_delete_surface_cb(CALLBACK_ARGS){
+  printf("del surf\n");
+}
+void geometry_physical_add_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_physical_add, 0);
+}
+void geometry_physical_delete_cb(CALLBACK_ARGS){
+  WID->set_context(menu_geometry_physical_delete, 0);
+}
+void geometry_physical_add_point_cb (CALLBACK_ARGS){
+  printf("phys add point\n");
+}
+void geometry_physical_add_curve_cb (CALLBACK_ARGS){
+  printf("phys add curve\n");
+}
+void geometry_physical_add_surface_cb (CALLBACK_ARGS){
+  printf("phys add surf\n");
+}
+void geometry_physical_add_volume_cb (CALLBACK_ARGS){
+  printf("phys add vol\n");
+}
+void geometry_physical_delete_point_cb(CALLBACK_ARGS){
+  printf("phys delpoint\n");
+}
+void geometry_physical_delete_curve_cb(CALLBACK_ARGS){
+  printf("phys del curve\n");
+}
+void geometry_physical_delete_surface_cb(CALLBACK_ARGS){
+  printf("phys adel surf\n");
+}
+void geometry_physical_delete_volume_cb(CALLBACK_ARGS){
+  printf("phys del vol\n");
+}
+void mesh_define_cb(CALLBACK_ARGS){
+  WID->set_context(menu_mesh_define, 0);
+}
+void mesh_1d_cb(CALLBACK_ARGS){
+  printf("mesh 1d\n");
+}
+void mesh_2d_cb(CALLBACK_ARGS){
+  printf("mesh 2d\n");
+} 
+void mesh_3d_cb(CALLBACK_ARGS){
+  printf("mesh 3d\n");
+} 
+void mesh_define_length_cb (CALLBACK_ARGS){
+  printf("mesh define length\n");
+}
+void mesh_define_recombine_cb (CALLBACK_ARGS){
+  printf("mesh define reco\n");
+}
+void mesh_define_transfinite_cb (CALLBACK_ARGS){
+  WID->set_context(menu_mesh_define_transfinite, 0);
+} 
+void mesh_define_transfinite_line_cb(CALLBACK_ARGS){
+  printf("mesh define tr line\n");
+}
+void mesh_define_transfinite_surface_cb(CALLBACK_ARGS){
+  printf("mesh define tr su\n");
+}
+void mesh_define_transfinite_volume_cb(CALLBACK_ARGS){
+  printf("mesh define tr vol\n");
+} 
+
+void view_toggle_cb(CALLBACK_ARGS){
+  if(!Post_ViewList) return;
+
+  Post_View  *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+
+  Msg(DEBUG,    "View %d\n"
+      DEBUG_NIL "  -> Name '%s'\n"
+      DEBUG_NIL "  -> FileName '%s'\n"
+      DEBUG_NIL "  -> DuplicateOf %d\n"
+      DEBUG_NIL "  -> Links %d",
+      v->Num, v->Name, v->FileName, v->DuplicateOf, v->Links);
+
+  v->Visible = !v->Visible;
+
+  Init();
+  Draw();
+}
+
+void view_reload_cb(CALLBACK_ARGS){
+  Post_View tmp ;
+  char filename[NAME_STR_L];
+  extern int Force_ViewNumber;
+
+  if(!Post_ViewList) return;
+
+  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  strcpy(filename, v->FileName);
+  CopyViewOptions(v, &tmp);
+
+  Force_ViewNumber = v->Num ;
+  FreeView(v);
+  MergeProblem(filename);
+  Force_ViewNumber = 0 ;
+  
+  v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  CopyViewOptions(&tmp, v);
+
+  if(!RELOAD_ALL_VIEWS){
+    Init();
+    Draw();
+  }
+}
+
+void view_remove_cb(CALLBACK_ARGS){
+  Post_View *v = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+  FreeView(v);
+
+  if(!List_Suppress(Post_ViewList, v, fcmpPostViewNum))
+    Msg(ERROR, "Could Not Suppress View from List");
+
+  CTX.post.nb_views = List_Nbr(Post_ViewList);
+
+  if(WID->get_context() == 2)
+    WID->set_context(menu_post, 0);  
+
+  if(!REMOVE_ALL_VIEWS){
+    Init();
+    Draw();
+  }
+}
+
+void view_duplicate_cb(CALLBACK_ARGS){
+  Post_View  v, *v1, *v2, *v3 ;
+
+  if(!Post_ViewList) return;
+
+  v1 = (Post_View*)List_Pointer(Post_ViewList,(int)data);
+
+  BeginView(0);
+  EndView(0, 0, v1->FileName, v1->Name, 0., 0., 0.);
+
+  v2 = (Post_View*)List_Pointer(Post_ViewList,List_Nbr(Post_ViewList)-1);
+
+  if(!v1->DuplicateOf){
+    v2->DuplicateOf = v1->Num ;
+    v1->Links++ ;
+  }
+  else{
+    v.Num = v1->DuplicateOf ;
+    if(!(v3 = (Post_View*)List_PQuery(Post_ViewList, &v, fcmpPostViewNum))){
+      v2->DuplicateOf = v1->Num ;
+      v1->Links++ ;
+    }
+    else{
+      v2->DuplicateOf = v3->Num;
+      v3->Links++ ;
+    }
+  }
+
+  v2->Time = v1->Time;
+  v2->NbSP = v1->NbSP; v2->SP = v1->SP; 
+  v2->NbVP = v1->NbVP; v2->VP = v1->VP; 
+  v2->NbTP = v1->NbTP; v2->TP = v1->TP;
+  v2->NbSL = v1->NbSL; v2->SL = v1->SL; 
+  v2->NbVL = v1->NbVL; v2->VL = v1->VL; 
+  v2->NbTL = v1->NbTL; v2->TL = v1->TL;
+  v2->NbST = v1->NbST; v2->ST = v1->ST; 
+  v2->NbVT = v1->NbVT; v2->VT = v1->VT; 
+  v2->NbTT = v1->NbTT; v2->TT = v1->TT;
+  v2->NbSS = v1->NbSS; v2->SS = v1->SS; 
+  v2->NbVS = v1->NbVS; v2->VS = v1->VS; 
+  v2->NbTS = v1->NbTS; v2->TS = v1->TS;
+  v2->ScalarOnly  = v1->ScalarOnly;
+  v2->Min         = v1->Min;       
+  v2->Max         = v1->Max;      
+  v2->NbTimeStep  = v1->NbTimeStep;
+
+  CopyViewOptions(v1, v2);
+
+  AddViewInUI(List_Nbr(Post_ViewList), v2->Name, v2->Num);
+  Init();
+  Draw();
+}
+
+void view_lighting_cb(CALLBACK_ARGS){
   printf("Light view %d \n", (int)data);
 }
-void view_elements_cb(Fl_Widget* w, void* data){
+void view_elements_cb(CALLBACK_ARGS){
   printf("Show Elements view %d \n", (int)data);
 }
-void view_applybgmesh_cb(Fl_Widget* w, void* data){
+void view_applybgmesh_cb(CALLBACK_ARGS){
   printf("Apply bgmesh view %d \n", (int)data);
 }
-void view_timestep_cb(Fl_Widget* w, void* data){
+void view_timestep_cb(CALLBACK_ARGS){
   printf("Timestep view %d \n", (int)data);
 }
-void view_options_cb(Fl_Widget* w, void* data){
+void view_options_cb(CALLBACK_ARGS){
   printf("Options view %d \n", (int)data);
 }
diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h
index f04535f8cd..dab7872741 100644
--- a/Fltk/Callbacks.h
+++ b/Fltk/Callbacks.h
@@ -1,34 +1,132 @@
 #ifndef _CALLBACKS_H_
 #define _CALLBACKS_H_
 
-void file_open_cb(void) ;
-void file_merge_cb(void) ;
-void file_save_cb(void) ;
-void file_save_as_cb(void) ;
-void file_reload_all_views_cb(void) ;
-void file_remove_all_views_cb(void) ;
-void file_quit_cb(void) ;
-
-void opt_general_cb(void) ;
-void opt_geometry_cb(void) ;
-void opt_mesh_cb(void) ;
-void opt_post_cb(void) ;
-void opt_stat_cb(void) ;
-
-void help_short_cb(void) ;
-void help_about_cb(void) ;
-
-void mod_geometry_cb(void) ;
-void mod_mesh_cb(void) ;
-void mod_post_cb(void) ;
-
-void view_reload_cb(Fl_Widget* w, void*) ;
-void view_remove_cb(Fl_Widget* w, void*) ;
-void view_duplicate_cb(Fl_Widget* w, void*) ;
-void view_lighting_cb(Fl_Widget* w, void*) ;
-void view_elements_cb(Fl_Widget* w, void*) ;
-void view_timestep_cb(Fl_Widget* w, void*) ;
-void view_options_cb(Fl_Widget* w, void*) ;
-void view_applybgmesh_cb(Fl_Widget* w, void*) ;
+#define CALLBACK_ARGS   Fl_Widget* w, void* data
+
+// Graphical window
+
+void status_xyz1p_cb(CALLBACK_ARGS) ;
+void status_play_cb(CALLBACK_ARGS) ;
+void status_pause_cb(CALLBACK_ARGS) ;
+void status_cancel_cb(CALLBACK_ARGS) ;
+
+// File Menu
+
+void file_open_cb(CALLBACK_ARGS) ;
+void file_merge_cb(CALLBACK_ARGS) ;
+void file_save_cb(CALLBACK_ARGS) ;
+void file_save_as_cb(CALLBACK_ARGS) ;
+void file_reload_all_views_cb(CALLBACK_ARGS) ;
+void file_remove_all_views_cb(CALLBACK_ARGS) ;
+void file_quit_cb(CALLBACK_ARGS) ;
+
+// Option Menu
+
+void opt_general_cb(CALLBACK_ARGS) ;
+void opt_geometry_cb(CALLBACK_ARGS) ;
+void opt_mesh_cb(CALLBACK_ARGS) ;
+void opt_post_cb(CALLBACK_ARGS) ;
+void opt_stat_cb(CALLBACK_ARGS) ;
+
+// Help Menu
+
+void help_short_cb(CALLBACK_ARGS) ;
+void help_about_cb(CALLBACK_ARGS) ;
+
+// Module Menu
+
+void mod_geometry_cb(CALLBACK_ARGS) ;
+void mod_mesh_cb(CALLBACK_ARGS) ;
+void mod_post_cb(CALLBACK_ARGS) ;
+void mod_back_cb(CALLBACK_ARGS) ;
+void mod_forward_cb(CALLBACK_ARGS) ;
+
+// Dynamic Menus
+
+void geometry_elementary_cb(CALLBACK_ARGS) ;
+void geometry_physical_cb(CALLBACK_ARGS) ;
+void geometry_reload_cb(CALLBACK_ARGS) ; 
+void geometry_elementary_add_cb(CALLBACK_ARGS) ;
+void geometry_elementary_translate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_rotate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_dilate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_symmetry_cb(CALLBACK_ARGS) ;
+void geometry_elementary_extrude_cb(CALLBACK_ARGS) ;
+void geometry_elementary_delete_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_translate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_rotate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_dilate_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_symmetry_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_parameter_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_line_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_spline_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_circle_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_ellipsis_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_planesurface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_ruledsurface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_new_volume_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_translate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_translate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_translate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_rotate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_rotate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_rotate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_dilate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_dilate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_dilate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_symmetry_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_symmetry_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_add_symmetry_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_translate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_translate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_translate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_rotate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_rotate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_rotate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_dilate_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_dilate_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_dilate_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_symmetry_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_symmetry_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_symmetry_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_extrude_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_extrude_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_extrude_surface_cb(CALLBACK_ARGS) ;
+void geometry_elementary_delete_point_cb(CALLBACK_ARGS) ;
+void geometry_elementary_delete_curve_cb(CALLBACK_ARGS) ;
+void geometry_elementary_delete_surface_cb(CALLBACK_ARGS) ;
+void geometry_physical_add_cb(CALLBACK_ARGS) ;
+void geometry_physical_delete_cb(CALLBACK_ARGS) ;
+void geometry_physical_add_point_cb (CALLBACK_ARGS) ;
+void geometry_physical_add_curve_cb (CALLBACK_ARGS) ;
+void geometry_physical_add_surface_cb (CALLBACK_ARGS) ;
+void geometry_physical_add_volume_cb (CALLBACK_ARGS) ;
+void geometry_physical_delete_point_cb(CALLBACK_ARGS) ;
+void geometry_physical_delete_curve_cb(CALLBACK_ARGS) ;
+void geometry_physical_delete_surface_cb(CALLBACK_ARGS) ;
+void geometry_physical_delete_volume_cb(CALLBACK_ARGS) ;
+void mesh_define_cb(CALLBACK_ARGS) ;
+void mesh_1d_cb(CALLBACK_ARGS) ;
+void mesh_2d_cb(CALLBACK_ARGS) ; 
+void mesh_3d_cb(CALLBACK_ARGS) ; 
+void mesh_define_length_cb (CALLBACK_ARGS) ;
+void mesh_define_recombine_cb (CALLBACK_ARGS) ;
+void mesh_define_transfinite_cb (CALLBACK_ARGS) ; 
+void mesh_define_transfinite_line_cb(CALLBACK_ARGS) ;
+void mesh_define_transfinite_surface_cb(CALLBACK_ARGS) ;
+void mesh_define_transfinite_volume_cb(CALLBACK_ARGS) ; 
+void view_reload_cb(CALLBACK_ARGS) ;
+void view_toggle_cb(CALLBACK_ARGS) ;
+void view_remove_cb(CALLBACK_ARGS) ;
+void view_duplicate_cb(CALLBACK_ARGS) ;
+void view_lighting_cb(CALLBACK_ARGS) ;
+void view_elements_cb(CALLBACK_ARGS) ;
+void view_applybgmesh_cb(CALLBACK_ARGS) ;
+void view_timestep_cb(CALLBACK_ARGS) ;
+void view_options_cb(CALLBACK_ARGS) ;
+
+
 
 #endif
diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp
index 112e7d24c2..b39dd7671d 100644
--- a/Fltk/GUI.cpp
+++ b/Fltk/GUI.cpp
@@ -14,8 +14,7 @@
 #include "Version.h"
 #include "GUI.h"
 #include "Callbacks.h"
-
-//int strtok_r(char *, char const *, char **){return 0;}
+#include "Bitmaps.h"
 
 extern Context_T  CTX;
 extern List_T    *Post_ViewList;
@@ -55,159 +54,159 @@ Fl_Menu_Item m_module_table[] = {
 
 // Definition of the dynamic contexts
 
-Context_Item menu_geom[] = 
+Context_Item menu_geometry[] = 
 { { "0", NULL } ,
-  { "Elementary", NULL } ,
-  { "Physical", NULL } ,
-  { "Reload", NULL } , 
+  { "Elementary", (Fl_Callback *)geometry_elementary_cb } ,
+  { "Physical",   (Fl_Callback *)geometry_physical_cb } ,
+  { "Reload",     (Fl_Callback *)geometry_reload_cb } , 
   { NULL }
 };  
-    Context_Item menu_geom_elementary[] = 
+    Context_Item menu_geometry_elementary[] = 
     { { "0", NULL } ,
-      { "Add", NULL } ,
-      { "Translate", NULL } ,
-      { "Rotate", NULL } ,
-      { "Dilate", NULL } ,
-      { "Symmetry", NULL } ,
-      { "Extrude", NULL } ,
-      { "Delete", NULL } ,
+      { "Add",       (Fl_Callback *)geometry_elementary_add_cb } ,
+      { "Translate", (Fl_Callback *)geometry_elementary_translate_cb } ,
+      { "Rotate",    (Fl_Callback *)geometry_elementary_rotate_cb } ,
+      { "Dilate",    (Fl_Callback *)geometry_elementary_dilate_cb } ,
+      { "Symmetry",  (Fl_Callback *)geometry_elementary_symmetry_cb } ,
+      { "Extrude",   (Fl_Callback *)geometry_elementary_extrude_cb } ,
+      { "Delete",    (Fl_Callback *)geometry_elementary_delete_cb } ,
       { NULL } 
     };  
-        Context_Item menu_geom_elementary_add[] = 
+        Context_Item menu_geometry_elementary_add[] = 
 	{ { "0", NULL } ,
-          { "New", NULL } ,
-	  { "Translate", NULL } ,
-	  { "Rotate", NULL } ,
-	  { "Dilate", NULL } ,
-	  { "Symmetry", NULL } ,
+          { "New",       (Fl_Callback *)geometry_elementary_add_new_cb } ,
+	  { "Translate", (Fl_Callback *)geometry_elementary_add_translate_cb } ,
+	  { "Rotate",    (Fl_Callback *)geometry_elementary_add_rotate_cb } ,
+	  { "Dilate",    (Fl_Callback *)geometry_elementary_add_dilate_cb } ,
+	  { "Symmetry",  (Fl_Callback *)geometry_elementary_add_symmetry_cb } ,
 	  { NULL } 
 	};  
-            Context_Item menu_geom_elementary_add_new[] = 
+            Context_Item menu_geometry_elementary_add_new[] = 
 	    { { "0", NULL } ,
-              { "Parameter", NULL } ,
-	      { "Point", NULL } ,
-	      { "Line", NULL } ,
-	      { "Spline", NULL } ,
-	      { "Circle", NULL } ,
-	      { "Ellipsis", NULL } ,
-	      { "Plane Surface", NULL } ,
-	      { "Ruled Surface", NULL } ,
-	      { "Volume", NULL } ,
+              { "Parameter",     (Fl_Callback *)geometry_elementary_add_new_parameter_cb } ,
+	      { "Point",         (Fl_Callback *)geometry_elementary_add_new_point_cb } ,
+	      { "Line",          (Fl_Callback *)geometry_elementary_add_new_line_cb } ,
+	      { "Spline",        (Fl_Callback *)geometry_elementary_add_new_spline_cb } ,
+	      { "Circle",        (Fl_Callback *)geometry_elementary_add_new_circle_cb } ,
+	      { "Ellipsis",      (Fl_Callback *)geometry_elementary_add_new_ellipsis_cb } ,
+	      { "Plane Surface", (Fl_Callback *)geometry_elementary_add_new_planesurface_cb } ,
+	      { "Ruled Surface", (Fl_Callback *)geometry_elementary_add_new_ruledsurface_cb } ,
+	      { "Volume",        (Fl_Callback *)geometry_elementary_add_new_volume_cb } ,
 	      { NULL } 
 	    };  
-            Context_Item menu_geom_elementary_add_translate[] = 
+            Context_Item menu_geometry_elementary_add_translate[] = 
 	    { { "0", NULL } ,
-              { "Point", NULL } ,
-	      { "Curve", NULL } ,
-	      { "Surface", NULL } ,
+              { "Point",   (Fl_Callback *)geometry_elementary_add_translate_point_cb } ,
+	      { "Curve",   (Fl_Callback *)geometry_elementary_add_translate_curve_cb } ,
+	      { "Surface", (Fl_Callback *)geometry_elementary_add_translate_surface_cb } ,
 	      { NULL } 
 	    };  
-            Context_Item menu_geom_elementary_add_rotate[] = 
+            Context_Item menu_geometry_elementary_add_rotate[] = 
 	    { { "0", NULL } ,
-              { "Point", NULL } ,
-	      { "Curve", NULL } ,
-	      { "Surface", NULL } ,
+              { "Point",   (Fl_Callback *)geometry_elementary_add_rotate_point_cb } ,
+	      { "Curve",   (Fl_Callback *)geometry_elementary_add_rotate_curve_cb } ,
+	      { "Surface", (Fl_Callback *)geometry_elementary_add_rotate_surface_cb } ,
 	      { NULL } 
 	    };  
-            Context_Item menu_geom_elementary_add_dilate[] = 
+            Context_Item menu_geometry_elementary_add_dilate[] = 
 	    { { "0", NULL } ,
-	      { "Point", NULL } ,
-	      { "Curve", NULL } ,
-	      { "Surface", NULL } ,
+	      { "Point",   (Fl_Callback *)geometry_elementary_add_dilate_point_cb } ,
+	      { "Curve",   (Fl_Callback *)geometry_elementary_add_dilate_curve_cb } ,
+	      { "Surface", (Fl_Callback *)geometry_elementary_add_dilate_surface_cb } ,
 	      { NULL } 
 	    };  
-            Context_Item menu_geom_elementary_add_symmetry[] = 
+            Context_Item menu_geometry_elementary_add_symmetry[] = 
 	    { { "0", NULL } ,
-	      { "Point", NULL } ,
-	      { "Curve", NULL } ,
-	      { "Surface", NULL } ,
+	      { "Point",   (Fl_Callback *)geometry_elementary_add_symmetry_point_cb } ,
+	      { "Curve",   (Fl_Callback *)geometry_elementary_add_symmetry_curve_cb } ,
+	      { "Surface", (Fl_Callback *)geometry_elementary_add_symmetry_surface_cb } ,
 	      { NULL } 
 	    };  
-        Context_Item menu_geom_elementary_translate[] = 
+        Context_Item menu_geometry_elementary_translate[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_translate_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_translate_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_translate_surface_cb } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_elementary_rotate[] = 
+        Context_Item menu_geometry_elementary_rotate[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_rotate_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_rotate_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_rotate_surface_cb } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_elementary_dilate[] = 
+        Context_Item menu_geometry_elementary_dilate[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_dilate_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_dilate_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_dilate_surface_cb } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_elementary_symmetry[] = 
+        Context_Item menu_geometry_elementary_symmetry[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_symmetry_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_symmetry_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_symmetry_surface_cb } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_elementary_extrude[] = 
+        Context_Item menu_geometry_elementary_extrude[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_extrude_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_extrude_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_extrude_surface_cb } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_elementary_delete[] = 
+        Context_Item menu_geometry_elementary_delete[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Curve", NULL } ,
-	  { "Surface", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_elementary_delete_point_cb } ,
+	  { "Curve",   (Fl_Callback *)geometry_elementary_delete_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_elementary_delete_surface_cb } ,
 	  { NULL } 
 	};  
-    Context_Item menu_geom_physical[] = 
+    Context_Item menu_geometry_physical[] = 
     { { "0", NULL } ,
-      { "Add", NULL } ,
-      { "Delete", NULL } ,
+      { "Add",    (Fl_Callback *)geometry_physical_add_cb } ,
+      { "Delete", (Fl_Callback *)geometry_physical_delete_cb } ,
       { NULL } 
     };  
-        Context_Item menu_geom_physical_add[] = 
+        Context_Item menu_geometry_physical_add[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Line", NULL } ,
-	  { "Surface", NULL } ,
-	  { "Volume", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_physical_add_point_cb  } ,
+	  { "Curve",   (Fl_Callback *)geometry_physical_add_curve_cb  } ,
+	  { "Surface", (Fl_Callback *)geometry_physical_add_surface_cb  } ,
+	  { "Volume",  (Fl_Callback *)geometry_physical_add_volume_cb  } ,
 	  { NULL } 
 	};  
-        Context_Item menu_geom_physical_delete[] = 
+        Context_Item menu_geometry_physical_delete[] = 
 	{ { "0", NULL } ,
-	  { "Point", NULL } ,
-	  { "Line", NULL } ,
-	  { "Surface", NULL } ,
-	  { "Volume", NULL } ,
+	  { "Point",   (Fl_Callback *)geometry_physical_delete_point_cb } ,
+	  { "Line",    (Fl_Callback *)geometry_physical_delete_curve_cb } ,
+	  { "Surface", (Fl_Callback *)geometry_physical_delete_surface_cb } ,
+	  { "Volume",  (Fl_Callback *)geometry_physical_delete_volume_cb } ,
 	  { NULL } 
 	};  
 
 Context_Item menu_mesh[] = 
 { { "1", NULL } ,
-  { "Define", NULL } ,
-  { "1D", NULL } ,
-  { "2D", NULL } , 
-  { "3D", NULL } , 
+  { "Define", (Fl_Callback *)mesh_define_cb } ,
+  { "1D",     (Fl_Callback *)mesh_1d_cb } ,
+  { "2D",     (Fl_Callback *)mesh_2d_cb } , 
+  { "3D",     (Fl_Callback *)mesh_3d_cb } , 
   { NULL } 
 };  
     Context_Item menu_mesh_define[] = 
     { { "1", NULL } ,
-      { "Length", NULL } ,
-      { "Recombine", NULL } ,
-      { "Transfinite", NULL } , 
+      { "Length",      (Fl_Callback *)mesh_define_length_cb  } ,
+      { "Recombine",   (Fl_Callback *)mesh_define_recombine_cb  } ,
+      { "Transfinite", (Fl_Callback *)mesh_define_transfinite_cb  } , 
       { NULL } 
     };  
         Context_Item menu_mesh_define_transfinite[] = 
 	{ { "1", NULL } ,
-	  { "Line", NULL } ,
-	  { "Surface", NULL } ,
-	  { "Volume", NULL } , 
+	  { "Line",    (Fl_Callback *)mesh_define_transfinite_line_cb } ,
+	  { "Surface", (Fl_Callback *)mesh_define_transfinite_surface_cb } ,
+	  { "Volume",  (Fl_Callback *)mesh_define_transfinite_volume_cb } , 
 	  { NULL } 
 	};  
 
@@ -228,6 +227,12 @@ GUI::GUI() {
 
   if(strlen(CTX.display)) Fl::display(CTX.display);
 
+  // Icons
+
+  icon1_bmp = new Fl_Bitmap(g1_bits,g1_width,g1_height);
+  icon2_bmp = new Fl_Bitmap(g2_bits,g2_width,g2_height);
+  icon3_bmp = new Fl_Bitmap(g3_bits,g3_width,g3_height);
+
   // Menu Window
 
   {
@@ -240,6 +245,7 @@ GUI::GUI() {
     {
       Fl_Menu_Bar *o = new Fl_Menu_Bar(0,0,width,BH); 
       o->menu(m_menubar_table);
+      o->global();
       o->textsize(CTX.fontsize);
       o->box(FL_UP_BOX);
     }
@@ -253,12 +259,14 @@ GUI::GUI() {
     m_navig_butt[0]->labeltype(FL_SYMBOL_LABEL);
     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(2,y+BH/2,20,BH/2,"@>");
     m_navig_butt[1]->labeltype(FL_SYMBOL_LABEL);
     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(22,y,width-29,BH);
+    m_module_butt = new Fl_Choice(22,y,width-28,BH);
     m_module_butt->menu(m_module_table);
     m_module_butt->textsize(CTX.fontsize);
     m_module_butt->box(FL_THIN_DOWN_BOX);
@@ -271,7 +279,8 @@ GUI::GUI() {
       m_push_butt[i]->hide();
       m_toggle_butt[i] = new Fl_Light_Button(0,y+i*BH,width,BH,"test"); 
       m_toggle_butt[i]->labelsize(CTX.fontsize); 
-      if(i>5)m_toggle_butt[i]->hide();
+      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", 0, 
@@ -291,7 +300,7 @@ GUI::GUI() {
       m_popup_butt[i]->add("Options...", 0,
 			   (Fl_Callback *)view_options_cb, (void*)i, 0);
       m_popup_butt[i]->textsize(CTX.fontsize);
-      if(i>5)m_popup_butt[i]->hide();
+      m_popup_butt[i]->hide();
     }
     
     m_window->position(800,50);
@@ -304,7 +313,6 @@ GUI::GUI() {
 
   {
     g_window = new Fl_Window(700,520);
-
     g_opengl_window = new Opengl_Window(0,0,700,500);
     
     {
@@ -312,14 +320,31 @@ GUI::GUI() {
       o->box(FL_THIN_UP_BOX);
 
       x = 2;
+      
       g_status_butt[0] = new Fl_Button(x,502,15,16,"X"); x+=15;
+      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,502,15,16,"Y"); x+=15;
+      g_status_butt[1]->callback(status_xyz1p_cb, (void*)1);
       g_status_butt[2] = new Fl_Button(x,502,15,16,"Z"); x+=15;
-      g_status_butt[3] = new Fl_Button(x,502,16,16,"1:1"); x+=16;
+      g_status_butt[2]->callback(status_xyz1p_cb, (void*)2);
+      g_status_butt[3] = new Fl_Button(x,502,20,16,"1:1"); x+=20;
+      g_status_butt[3]->callback(status_xyz1p_cb, (void*)3);
       g_status_butt[4] = new Fl_Button(x,502,15,16,"?"); x+=15;
+      g_status_butt[4]->callback(status_xyz1p_cb, (void*)4);
+
       g_status_butt[5] = new Fl_Button(x,502,15,16,">>"); x+=15;
+      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[6] = new Fl_Button(x,502,15,16,"0"); x+=15;
+      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);
@@ -327,13 +352,13 @@ GUI::GUI() {
 	g_status_butt[i]->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
       }
 
-      g_status_box[0] = new Fl_Box(x,502,(700-x)/3,16);
-      g_status_box[1] = new Fl_Box(x+(700-x)/3,5022,(700-x)/3,16);
-      g_status_box[2] = new Fl_Box(x+2*(700-x)/3,5022,(700-x)/3-2,16);
+      g_status_label[0] = new Fl_Box(x,502,(700-x)/3,16);
+      g_status_label[1] = new Fl_Box(x+(700-x)/3,5022,(700-x)/3,16);
+      g_status_label[2] = new Fl_Box(x+2*(700-x)/3,5022,(700-x)/3-2,16);
       for(i = 0 ; i<3 ; i++){
-	g_status_box[i]->box(FL_FLAT_BOX);
-	g_status_box[i]->labelsize(CTX.fontsize);
-	g_status_box[i]->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE|FL_ALIGN_CLIP);
+	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();
@@ -352,6 +377,19 @@ GUI::GUI() {
 
 }
 
+// Set animation button
+
+void GUI::set_anim(int mode){
+  if(mode){
+    g_status_butt[5]->callback(status_play_cb);
+    start_bmp->label(g_status_butt[5]);
+  }
+  else{
+    g_status_butt[5]->callback(status_pause_cb);
+    stop_bmp->label(g_status_butt[5]);
+  }
+}
+
 // Draw the opengl window
 
 void GUI::draw_gl(){
@@ -378,27 +416,17 @@ void GUI::check(){
 
 // Set the size of the graphical window
 
-void GUI::set_size(int w, int h){
-  static int initw, inith, init=0;
-  if(!init){
-    init = 1;
-    initw = w;
-    inith = h;
-  }
-  if(w == initw && h == inith) return;
-  initw = w;
-  inith = h;
-  int hh = g_window->h()-g_opengl_window->h();
-  g_window->size(w,h+hh);
+void GUI::set_gl_size(int new_w, int new_h){
+  g_window->size(new_w,new_h+g_window->h()-g_opengl_window->h());
 }
 
-// Dymanically set the height of the menu window
+// Dynamically set the height of the menu window
 
 void GUI::set_menu_size(int nb_butt){
   m_window->size(m_window->w(), MH + nb_butt*BH);
 }
 
-// Dymanically set the context
+// Dynamically set the context
 
 void GUI::set_context(Context_Item *menu_asked, int flag){
   static int nb_back = 0, nb_forward = 0, init_context=0;
@@ -414,6 +442,8 @@ void GUI::set_context(Context_Item *menu_asked, int flag){
     }
   }
 
+  if(nb_back > NB_HISTORY_MAX-2) nb_back = 1; // we should do a circular list
+
   if(flag == -1){
     if(nb_back > 1){
       nb_back--;
@@ -466,7 +496,8 @@ void GUI::set_context(Context_Item *menu_asked, int flag){
       m_popup_butt[i]->hide();
       if(menu[i+1].label){
 	m_push_butt[i]->label(menu[i+1].label);
-	//m_push_butt[i]->callback(menu[i+1].callback);
+	m_push_butt[i]->callback(menu[i+1].callback);
+	m_push_butt[i]->redraw();
 	m_push_butt[i]->show();
 	nb++;
       }
@@ -484,6 +515,10 @@ void GUI::set_context(Context_Item *menu_asked, int flag){
 
 }
 
+int GUI::get_context(){
+  return m_module_butt->value();
+}
+
 // Create the window for general options
 
 void GUI::opt_general(){
@@ -575,3 +610,422 @@ void GUI::opt_general(){
   }
 
 }
+
+// Create the window for geometry options
+
+void GUI::opt_geometry(){
+  static int init_opt_geometry = 0;
+
+  if(!init_opt_geometry){
+    init_opt_geometry = 1 ;
+
+    int width = 280;
+    int height = 5*WB+9*BH ;
+    
+    geo_window = new Fl_Window(width,height);
+    geo_window->box(FL_THIN_UP_BOX);
+    { 
+      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, "Visibility");
+	o->labelsize(CTX.fontsize);
+        geo_butt[0] = new Fl_Check_Button(2*WB, 2*WB+BH, 100, BH, "Points");
+        geo_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, 100, BH, "Curves");
+        geo_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, 100, BH, "Surfaces");
+        geo_butt[3] = new Fl_Check_Button(2*WB, 2*WB+4*BH, 100, BH, "Volumes");
+        geo_butt[4] = new Fl_Check_Button(2*WB+120, 2*WB+BH, 100, BH, "Point Numbers");
+        geo_butt[5] = new Fl_Check_Button(2*WB+120, 2*WB+2*BH, 100, BH, "Curve Numbers");
+        geo_butt[6] = new Fl_Check_Button(2*WB+120, 2*WB+3*BH, 100, BH, "Surface Numbers");
+        geo_butt[7] = new Fl_Check_Button(2*WB+120, 2*WB+4*BH, 100, BH, "Volume Numbers");
+	for(int 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_value[0] = new Fl_Value_Input(2*WB, 2*WB+5*BH, 100, BH, "Entity Number");
+	geo_value[0]->minimum(0); geo_value[0]->maximum(1000); geo_value[0]->step(1);
+	geo_value[1] = new Fl_Value_Input(2*WB, 2*WB+6*BH, 100, BH, "Normals");
+	geo_value[1]->minimum(0); geo_value[1]->maximum(100); geo_value[1]->step(1);
+        geo_value[2] = new Fl_Value_Input(2*WB, 2*WB+7*BH, 100, BH, "Tangents");
+	geo_value[2]->minimum(0); geo_value[2]->maximum(100); geo_value[2]->step(1);
+	for(int i=0 ; i<3 ; i++){
+	  geo_value[i]->labelsize(CTX.fontsize);
+	  geo_value[i]->type(FL_HORIZONTAL);
+	  geo_value[i]->align(FL_ALIGN_RIGHT);
+	}
+        o->end();
+      }
+      o->end();
+    }
+
+    { 
+      Fl_Button* o = new Fl_Button(width-2*60-2*WB, height-BH-WB, 60, BH, "cancel");
+      o->labelsize(CTX.fontsize);
+    }
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-60-WB, height-BH-WB, 60, BH, "OK");
+      o->labelsize(CTX.fontsize);
+    }
+
+    geo_window->end();
+    geo_window->show();
+  }
+  else{
+    if(geo_window->shown())
+      geo_window->hide();
+    else
+      geo_window->show();
+    
+  }
+
+}
+
+// Create the window for mesh options
+
+void GUI::opt_mesh(){
+  static int init_opt_mesh = 0;
+
+  if(!init_opt_mesh){
+    init_opt_mesh = 1 ;
+
+    int width = 280;
+    int height = 5*WB+9*BH ;
+    
+    mesh_window = new Fl_Window(width,height);
+    mesh_window->box(FL_THIN_UP_BOX);
+    { 
+      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+BH, 100, BH, "Second Order");
+        mesh_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, 100, BH, "Interactive");
+        mesh_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, 100, BH, "Anisotropic");
+	for(int i=0 ; i<3 ; 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_value[0] = new Fl_Value_Input(2*WB, 2*WB+4*BH, 40, BH, "Smoothing Steps");
+	mesh_value[0]->minimum(0); mesh_value[0]->maximum(1000); mesh_value[0]->step(1);
+	for(int i=0 ; i<1 ; i++){
+	  mesh_value[i]->labelsize(CTX.fontsize);
+	  mesh_value[i]->type(FL_HORIZONTAL);
+	  mesh_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, "Visibility");
+	o->labelsize(CTX.fontsize);
+        mesh_butt[3] = new Fl_Check_Button(2*WB, 2*WB+BH, 100, BH, "Points");
+        mesh_butt[4] = new Fl_Check_Button(2*WB, 2*WB+2*BH, 100, BH, "Curves");
+        mesh_butt[5] = new Fl_Check_Button(2*WB, 2*WB+3*BH, 100, BH, "Surfaces");
+        mesh_butt[6] = new Fl_Check_Button(2*WB, 2*WB+4*BH, 100, BH, "Volumes");
+        mesh_butt[7] = new Fl_Check_Button(2*WB+120, 2*WB+BH, 100, BH, "Point Numebers");
+        mesh_butt[8] = new Fl_Check_Button(2*WB+120, 2*WB+2*BH, 100, BH, "Curve Numbers");
+        mesh_butt[9] = new Fl_Check_Button(2*WB+120, 2*WB+3*BH, 100, BH, "Surface Numbers");
+        mesh_butt[10] = new Fl_Check_Button(2*WB+120, 2*WB+4*BH, 100, BH, "Volume Numbers");
+	for(int i=3 ; i<11 ; 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_value[1] = new Fl_Value_Input(2*WB, 2*WB+5*BH, 100, BH, "Entity Number");
+	mesh_value[1]->minimum(0); mesh_value[1]->maximum(1000); mesh_value[1]->step(1);
+        mesh_value[2] = new Fl_Value_Input(2*WB, 2*WB+6*BH, 100, BH, "Element Quality");
+	mesh_value[2]->minimum(0); mesh_value[2]->maximum(1000); mesh_value[2]->step(1);
+	mesh_value[3] = new Fl_Value_Input(2*WB, 2*WB+7*BH, 100, BH, "Normals");
+	mesh_value[3]->minimum(0); mesh_value[3]->maximum(100); mesh_value[3]->step(1);
+	for(int i=1 ; i<4 ; i++){
+	  mesh_value[i]->labelsize(CTX.fontsize);
+	  mesh_value[i]->type(FL_HORIZONTAL);
+	  mesh_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();
+        mesh_butt[11] = new Fl_Check_Button(2*WB, 2*WB+BH, 100, BH, "Wireframe");
+        mesh_butt[12] = new Fl_Check_Button(2*WB, 2*WB+2*BH, 100, BH, "Hidden lines");
+        mesh_butt[13] = new Fl_Check_Button(2*WB, 2*WB+3*BH, 100, BH, "Solid");
+	for(int i=11 ; 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_value[4] = new Fl_Value_Input(2*WB, 2*WB+4*BH, 40, BH, "Explode");
+	mesh_value[4]->minimum(0); mesh_value[4]->maximum(100); mesh_value[4]->step(1);
+        o->end();
+	for(int i=4 ; i<5 ; i++){
+	  mesh_value[i]->labelsize(CTX.fontsize);
+	  mesh_value[i]->type(FL_HORIZONTAL);
+	  mesh_value[i]->align(FL_ALIGN_RIGHT);
+	}
+      }
+      o->end();
+    }
+
+    { 
+      Fl_Button* o = new Fl_Button(width-2*60-2*WB, height-BH-WB, 60, BH, "cancel");
+      o->labelsize(CTX.fontsize);
+    }
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-60-WB, height-BH-WB, 60, BH, "OK");
+      o->labelsize(CTX.fontsize);
+    }
+
+    mesh_window->end();
+    mesh_window->show();
+  }
+  else{
+    if(mesh_window->shown())
+      mesh_window->hide();
+    else
+      mesh_window->show();
+    
+  }
+
+}
+
+
+// Create the window for post-processing options
+
+void GUI::opt_post(){
+  static int init_opt_post = 0;
+
+  if(!init_opt_post){
+    init_opt_post = 1 ;
+
+    int width = 200;
+    int height = 5*WB+5*BH ;
+    
+    post_window = new Fl_Window(width,height);
+    post_window->box(FL_THIN_UP_BOX);
+    { 
+      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, "Links");
+	o->labelsize(CTX.fontsize);
+        post_butt[0] = new Fl_Check_Button(2*WB, 2*WB+BH, 150, BH, "No link between views");
+        post_butt[1] = new Fl_Check_Button(2*WB, 2*WB+2*BH, 150, BH, "Link all views");
+        post_butt[2] = new Fl_Check_Button(2*WB, 2*WB+3*BH, 150, BH, "Link visible views");
+	for(int i=0 ; i<3 ; i++){
+	  post_butt[i]->type(FL_RADIO_BUTTON);
+	  post_butt[i]->labelsize(CTX.fontsize);
+	  post_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, "Animation");
+	o->labelsize(CTX.fontsize);
+	o->hide();
+        post_value[0] = new Fl_Value_Input(2*WB, 2*WB+BH, 40, BH, "Animation delay");
+	post_value[0]->minimum(0); post_value[0]->maximum(10); post_value[0]->step(0.1);
+	for(int i=0 ; i<1 ; i++){
+	  post_value[i]->labelsize(CTX.fontsize);
+	  post_value[i]->type(FL_HORIZONTAL);
+	  post_value[i]->align(FL_ALIGN_RIGHT);
+	}
+	o->end();
+      }
+      o->end();
+    }
+
+    { 
+      Fl_Button* o = new Fl_Button(width-2*60-2*WB, height-BH-WB, 60, BH, "cancel");
+      o->labelsize(CTX.fontsize);
+    }
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-60-WB, height-BH-WB, 60, BH, "OK");
+      o->labelsize(CTX.fontsize);
+    }
+
+    post_window->end();
+    post_window->show();
+  }
+  else{
+    if(post_window->shown())
+      post_window->hide();
+    else
+      post_window->show();
+    
+  }
+
+}
+
+// Create the window for the statistics
+
+void GUI::opt_stat(){
+  static int init_opt_stat = 0;
+
+  if(!init_opt_stat){
+    init_opt_stat = 1 ;
+
+    int width = 234;
+    int height = 5*WB+16*BH ;
+    
+    stat_window = new Fl_Window(width,height);
+    stat_window->box(FL_THIN_UP_BOX);
+    {
+      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[0] = new Fl_Value_Output(110+2*WB, 2*WB+BH, 100, BH, "Number of points");
+        stat_value[1] = new Fl_Value_Output(110+2*WB, 2*WB+2*BH, 100, BH, "Number of curves");
+        stat_value[2] = new Fl_Value_Output(110+2*WB, 2*WB+3*BH, 100, BH, "Number of surfaces");
+        stat_value[3] = new Fl_Value_Output(110+2*WB, 2*WB+4*BH, 100, BH, "Number of 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[4] = new Fl_Value_Output(110+2*WB, 2*WB+BH, 100, BH, "Nodes on curves");
+        stat_value[5] = new Fl_Value_Output(110+2*WB, 2*WB+2*BH, 100, BH, "Nodes on surfaces");
+        stat_value[6] = new Fl_Value_Output(110+2*WB, 2*WB+3*BH, 100, BH, "Nodes in Volumes");
+        stat_value[7] = new Fl_Value_Output(110+2*WB, 2*WB+4*BH, 100, BH, "Triangles");
+        stat_value[8] = new Fl_Value_Output(110+2*WB, 2*WB+5*BH, 100, BH, "Quadrangles");
+        stat_value[9] = new Fl_Value_Output(110+2*WB, 2*WB+6*BH, 100, BH, "Tetrahedra");
+        stat_value[10] = new Fl_Value_Output(110+2*WB, 2*WB+7*BH, 100, BH, "Hexahedra");
+        stat_value[11] = new Fl_Value_Output(110+2*WB, 2*WB+8*BH, 100, BH, "Prisms");
+        stat_value[12] = new Fl_Value_Output(110+2*WB, 2*WB+9*BH, 100, BH, "Time for 1D mesh");
+        stat_value[13] = new Fl_Value_Output(110+2*WB, 2*WB+10*BH, 100, BH, "Time for 2D mesh");
+        stat_value[14] = new Fl_Value_Output(110+2*WB, 2*WB+11*BH, 100, BH, "Time for 3D mesh");
+        stat_value[15] = new Fl_Value_Output(110+2*WB, 2*WB+12*BH, 100, BH, "Gamma factor");
+        stat_value[16] = new Fl_Value_Output(110+2*WB, 2*WB+13*BH, 100, BH, "Eta factor");
+        stat_value[17] = new Fl_Value_Output(110+2*WB, 2*WB+14*BH, 100, BH, "Rho factor");
+        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[18] = new Fl_Value_Output(110+2*WB, 2*WB+BH, 100, BH, "Views loaded");
+        stat_value[19] = new Fl_Value_Output(110+2*WB, 2*WB+2*BH, 100, BH, "Visible Points");
+        stat_value[20] = new Fl_Value_Output(110+2*WB, 2*WB+3*BH, 100, BH, "Visible Lines");
+        stat_value[21] = new Fl_Value_Output(110+2*WB, 2*WB+4*BH, 100, BH, "Visible Triangles");
+        stat_value[22] = new Fl_Value_Output(110+2*WB, 2*WB+5*BH, 100, BH, "Visible Tetrahedra");
+        o->end();
+      }
+      o->end();
+    }
+
+    for(int i=0 ; i<23 ; i++){
+      stat_value[i]->labelsize(CTX.fontsize);
+      stat_value[i]->type(FL_HORIZONTAL);
+      stat_value[i]->align(FL_ALIGN_LEFT);
+    }
+
+    { 
+      Fl_Button* o = new Fl_Button(width-2*60-2*WB, height-BH-WB, 60, BH, "cancel");
+      o->labelsize(CTX.fontsize);
+    }
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-60-WB, height-BH-WB, 60, BH, "OK");
+      o->labelsize(CTX.fontsize);
+    }
+
+    stat_window->end();
+    stat_window->show();
+  }
+  else{
+    if(stat_window->shown())
+      stat_window->hide();
+    else
+      stat_window->show();
+    
+  }
+
+}
+
+// Create the short help window
+
+#include "Help.h"
+
+void GUI::help_short(){
+  static int init_help_short = 0;
+
+  if(!init_help_short){
+    init_help_short = 1 ;
+
+    int width = 450;
+    int height = 400 ;
+    
+    help_window = new Fl_Window(width,height);
+    help_window->box(FL_THIN_UP_BOX);
+
+    Fl_Scroll*o = new Fl_Scroll(WB, WB, width-2*WB, height-3*WB-BH);
+    {
+      Fl_Multiline_Output* o = new Fl_Multiline_Output(WB, WB, 600, 1200);
+      o->value(txt_help);
+      o->textfont(FL_COURIER);
+      o->textsize(CTX.fontsize);
+    }
+    o->end();
+    
+    { 
+      Fl_Return_Button* o = new Fl_Return_Button(width-60-WB, height-BH-WB, 60, BH, "OK");
+      o->labelsize(CTX.fontsize);
+    }
+
+    help_window->resizable(o);
+    help_window->end();
+    help_window->show();
+  }
+  else{
+    if(help_window->shown())
+      help_window->hide();
+    else
+      help_window->show();
+    
+  }
+
+}
+
+// Create the about window
+
+void GUI::help_about(){
+  static int init_help_about = 0;
+  extern char  TextAbout[1024];
+
+  if(!init_help_about){
+    init_help_about = 1 ;
+
+    int width = 470;
+    int height = 220;
+    
+    about_window = new Fl_Window(width,height);
+    about_window->box(FL_THIN_UP_BOX);
+
+    Fl_Box *o = new Fl_Box(2*WB, WB, about_width, height-2*WB);
+    about_bmp = new Fl_Bitmap(about_bits,about_width,about_height);
+    about_bmp->label(o);
+
+    Fl_Button *o2 = new Fl_Button(WB+80, WB, width-2*WB-80, height-2*WB);
+    o2->label(TextAbout);
+    o2->box(FL_FLAT_BOX);
+    o2->labelsize(CTX.fontsize);
+    o2->labelfont(FL_COURIER);
+    o2->align(FL_ALIGN_LEFT|FL_ALIGN_INSIDE);
+
+    about_window->end();
+    about_window->show();
+  }
+  else{
+    if(about_window->shown())
+      about_window->hide();
+    else
+      about_window->show();
+  }
+
+}
diff --git a/Fltk/GUI.h b/Fltk/GUI.h
index 785fe6bd7c..ea4605f3e6 100644
--- a/Fltk/GUI.h
+++ b/Fltk/GUI.h
@@ -18,34 +18,38 @@
 #include <FL/Fl_Menu_Button.H>
 #include <FL/Fl_Check_Button.H>
 #include <FL/Fl_Value_Input.H>
+#include <FL/Fl_Value_Output.H>
+#include <FL/Fl_Multiline_Output.H>
+#include <FL/Fl_Browser.H>
+#include <FL/Fl_Bitmap.H>
 
 #define NB_BUTT_MAX    100
 #define NB_HISTORY_MAX 1000
 
-// The dynamic menus
+// The dynamic contexts
 
 typedef struct{
   char *label;
-  void (*callback)(Fl_Widget* w, void* data);
+  Fl_Callback* callback;
 } Context_Item;
 
-extern Context_Item menu_geom[]; 
-extern    Context_Item menu_geom_elementary[]; 
-extern        Context_Item menu_geom_elementary_add[]; 
-extern            Context_Item menu_geom_elementary_add_new[]; 
-extern            Context_Item menu_geom_elementary_add_translate[]; 
-extern            Context_Item menu_geom_elementary_add_rotate[]; 
-extern            Context_Item menu_geom_elementary_add_dilate[]; 
-extern            Context_Item menu_geom_elementary_add_symmetry[]; 
-extern        Context_Item menu_geom_elementary_translate[]; 
-extern        Context_Item menu_geom_elementary_rotate[]; 
-extern        Context_Item menu_geom_elementary_dilate[]; 
-extern        Context_Item menu_geom_elementary_symmetry[]; 
-extern        Context_Item menu_geom_elementary_extrude[]; 
-extern        Context_Item menu_geom_elementary_delete[]; 
-extern    Context_Item menu_geom_physical[]; 
-extern        Context_Item menu_geom_physical_add[]; 
-extern        Context_Item menu_geom_physical_delete[]; 
+extern Context_Item menu_geometry[]; 
+extern    Context_Item menu_geometry_elementary[]; 
+extern        Context_Item menu_geometry_elementary_add[]; 
+extern            Context_Item menu_geometry_elementary_add_new[]; 
+extern            Context_Item menu_geometry_elementary_add_translate[]; 
+extern            Context_Item menu_geometry_elementary_add_rotate[]; 
+extern            Context_Item menu_geometry_elementary_add_dilate[]; 
+extern            Context_Item menu_geometry_elementary_add_symmetry[]; 
+extern        Context_Item menu_geometry_elementary_translate[]; 
+extern        Context_Item menu_geometry_elementary_rotate[]; 
+extern        Context_Item menu_geometry_elementary_dilate[]; 
+extern        Context_Item menu_geometry_elementary_symmetry[]; 
+extern        Context_Item menu_geometry_elementary_extrude[]; 
+extern        Context_Item menu_geometry_elementary_delete[]; 
+extern    Context_Item menu_geometry_physical[]; 
+extern        Context_Item menu_geometry_physical_add[]; 
+extern        Context_Item menu_geometry_physical_delete[]; 
 extern Context_Item menu_mesh[]; 
 extern    Context_Item menu_mesh_define[]; 
 extern        Context_Item menu_mesh_define_transfinite[]; 
@@ -81,9 +85,13 @@ class GUI{
   // Windows
   Fl_Window  *m_window, *g_window, *gen_window, *geo_window ;
   Fl_Window  *mesh_window, *post_window, *stat_window ;
-  Fl_Window  *view_window ;
+  Fl_Window  *help_window, *about_window, *view_window ;
   Opengl_Window *g_opengl_window ;
   
+  // Bitmaps
+  Fl_Bitmap  *icon1_bmp, *icon2_bmp, *icon3_bmp;
+  Fl_Bitmap  *abort_bmp, *start_bmp, *stop_bmp, *about_bmp ;
+
   // We keep the following widgets for easy further reference
 
   // menu window
@@ -95,19 +103,26 @@ class GUI{
 
   // graphic window
   Fl_Button        *g_status_butt[7] ;
-  Fl_Box           *g_status_box[3] ;
+  Fl_Box           *g_status_label[3] ;
 
   // general options window
   Fl_Check_Button  *gen_butt[10] ;
   Fl_Value_Input   *gen_value[10] ;
 
   // geometry options window
+  Fl_Check_Button  *geo_butt[10] ;
+  Fl_Value_Input   *geo_value[10] ;
   
   // mesh options window
+  Fl_Check_Button  *mesh_butt[20] ;
+  Fl_Value_Input   *mesh_value[20] ;
 
   // post-processing options window
+  Fl_Check_Button  *post_butt[20] ;
+  Fl_Value_Input   *post_value[20] ;
 
   // statistics window
+  Fl_Value_Output  *stat_value[40] ;
 
   // view options window
 
@@ -118,16 +133,24 @@ public:
   void check();
   void draw_gl();
   void draw_gl_overlay();
-  void set_size(int w, int h);
+  void set_gl_size(int w, int h);
   void set_menu_size(int nb_butt);
   void set_context(Context_Item menu[], int flag);
+  int  get_context();
+  void set_anim(int mode);
+  void set_status(char *msg, int num);
 
+  // create option windows
   void opt_general();
   void opt_geometry();
   void opt_mesh();
   void opt_post();
   void opt_stat();
 
+  // create help windows
+  void help_short();
+  void help_about();
+
 };
 
 
diff --git a/Fltk/Main.cpp b/Fltk/Main.cpp
index b4eb9f58e5..c2d4391707 100644
--- a/Fltk/Main.cpp
+++ b/Fltk/Main.cpp
@@ -1,4 +1,4 @@
-// $Id: Main.cpp,v 1.2 2001-01-08 14:51:30 geuzaine Exp $
+// $Id: Main.cpp,v 1.3 2001-01-09 08:58:38 geuzaine Exp $
 
 #include <signal.h>
 
@@ -21,8 +21,6 @@
 extern List_T *Post_ViewList;
 int            SHOW_ALL_ENTITIES ;
 
-void AddViewInUI(int, char *, int){}
-
 GUI *WID ;
 
 int main(int argc, char *argv[]){
@@ -94,8 +92,8 @@ int main(int argc, char *argv[]){
 
   // Text for about window
 
-  sprintf(TextAbout, "%s\n \n%s%.2f\n%s\n%s\n%s\n%s\n%s\n%s\n \n%s\n \n"
-          "Type 'gmsh -help' for command line options",
+  sprintf(TextAbout, " %s\n \n %s%.2f\n %s\n %s\n %s\n %s\n %s\n %s\n \n %s"
+	  "\n \n Type 'gmsh -help' for command line options",
           gmsh_progname, gmsh_version, GMSH_VERSION, 
           gmsh_os, gmsh_date, gmsh_host, gmsh_packager, 
           gmsh_url, gmsh_email, gmsh_copyright);
@@ -125,10 +123,10 @@ int main(int argc, char *argv[]){
 
   if(nbf > 1){
     for(i=1;i<nbf;i++) MergeProblem(TheFileNameTab[i]);
-    WID->set_context(menu_post,0);
+    WID->set_context(menu_post, 0);
   }
   else {
-    WID->set_context(menu_geom,0); 
+    WID->set_context(menu_geometry, 0); 
   }
 
   // Read background mesh on disk
diff --git a/Fltk/Opengl.cpp b/Fltk/Opengl.cpp
index 01c0ae2db8..bdda3d0907 100644
--- a/Fltk/Opengl.cpp
+++ b/Fltk/Opengl.cpp
@@ -1,4 +1,4 @@
-// $Id: Opengl.cpp,v 1.1 2001-01-08 08:16:27 geuzaine Exp $
+// $Id: Opengl.cpp,v 1.2 2001-01-09 08:58:38 geuzaine Exp $
 
 #include "Gmsh.h"
 #include "GmshUI.h"
@@ -30,8 +30,6 @@ void InitOverlay(void){
 }
 
 void Draw(void){
-  WID->set_size(CTX.viewport[2]-CTX.viewport[0],
-	       CTX.viewport[3]-CTX.viewport[1]);
   WID->draw_gl();
 }
 
@@ -125,6 +123,16 @@ void Opengl_Window::draw() {
 	       CTX.viewport[2],
 	       CTX.viewport[3]);
   }
+  if((w() != CTX.viewport[2]-CTX.viewport[0]) ||
+     (h() != CTX.viewport[3]-CTX.viewport[1])){
+    WID->set_gl_size(CTX.viewport[2]-CTX.viewport[0],
+		     CTX.viewport[3]-CTX.viewport[1]);
+    glViewport(CTX.viewport[0],
+	       CTX.viewport[1],
+	       CTX.viewport[2],
+	       CTX.viewport[3]);
+  }
+
   Orthogonalize(0,0);
   glClearColor(UNPACK_RED(CTX.color.bg)/255.,
                UNPACK_GREEN(CTX.color.bg)/255.,
diff --git a/jpeg/rawjpeg.tar b/jpeg/rawjpeg.tar
deleted file mode 100644
index 73ef5fa55bb8aff017373302849c4f472060a7c2..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 139264
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

-- 
GitLab