From 8fe1e1fcc6be2de71ebe3ce2e252c2e8bd75931b Mon Sep 17 00:00:00 2001
From: Luis Ibanez <luis.ibanez@kitware.com>
Date: Thu, 21 Jun 2001 07:37:49 -0400
Subject: ENH: PropertyNameButton was removed. PropertyRow manages all the
 callbacks now

---
 Source/FLTKDialog/CMakeLists.txt                  |  2 -
 Source/FLTKDialog/CMakeSetupGUI.cxx               |  4 +-
 Source/FLTKDialog/CMakeSetupGUI.fl                |  8 +-
 Source/FLTKDialog/CMakeSetupGUI.h                 |  2 +-
 Source/FLTKDialog/CMakeSetupGUIImplementation.cxx | 21 ++----
 Source/FLTKDialog/FLTKPropertyItemRow.cxx         | 90 +++++++++++++++++------
 Source/FLTKDialog/FLTKPropertyItemRow.h           |  9 +--
 7 files changed, 84 insertions(+), 52 deletions(-)

diff --git a/Source/FLTKDialog/CMakeLists.txt b/Source/FLTKDialog/CMakeLists.txt
index 62bc6c9..cee4e77 100644
--- a/Source/FLTKDialog/CMakeLists.txt
+++ b/Source/FLTKDialog/CMakeLists.txt
@@ -4,10 +4,8 @@ CMakeSetupGUIImplementation.cxx
 FLTKDialog.cxx
 FLTKPropertyItemRow.cxx
 FLTKPropertyList.cxx
-FLTKPropertyNameButtonWithHelp.cxx
 )
 
-
 LINK_LIBRARIES(${FLTK_LIBRARY})
 IF(WIN32)
  IF(NOT UNIX)
diff --git a/Source/FLTKDialog/CMakeSetupGUI.cxx b/Source/FLTKDialog/CMakeSetupGUI.cxx
index dac7f42..7855d36 100644
--- a/Source/FLTKDialog/CMakeSetupGUI.cxx
+++ b/Source/FLTKDialog/CMakeSetupGUI.cxx
@@ -127,7 +127,7 @@ void CMakeSetupGUI::Show(void) {
 }
 
 bool CMakeSetupGUI::SetBinaryPath(const char *) {
-return true;}
+}
 
 bool CMakeSetupGUI::SetSourcePath(const char *) {
-return true;}
+}
diff --git a/Source/FLTKDialog/CMakeSetupGUI.fl b/Source/FLTKDialog/CMakeSetupGUI.fl
index a62adbc..1c6dc1e 100644
--- a/Source/FLTKDialog/CMakeSetupGUI.fl
+++ b/Source/FLTKDialog/CMakeSetupGUI.fl
@@ -7,11 +7,11 @@ gridy 5
 snap 3
 class CMakeSetupGUI {open
 } {
-  Function {CMakeSetupGUI()} {open
+  Function {CMakeSetupGUI()} {open selected
   } {
     Fl_Window dialogWindow {
-      label CMakeSetupDialog open
-      xywh {401 125 563 363} resizable visible
+      label CMakeSetupDialog
+      xywh {190 106 563 363} resizable visible
     } {
       Fl_Input sourcePathTextInput {
         label {Where is the source code: }
@@ -25,7 +25,7 @@ class CMakeSetupGUI {open
       }
       Fl_Input binaryPathTextInput {
         label {Where do you want to build the binaries: }
-        callback {SetBinaryPath( binaryPathTextInput->value() );} selected
+        callback {SetBinaryPath( binaryPathTextInput->value() );}
         xywh {219 50 200 20} labelsize 11 when 8 textsize 11
       }
       Fl_Button {} {
diff --git a/Source/FLTKDialog/CMakeSetupGUI.h b/Source/FLTKDialog/CMakeSetupGUI.h
index 7524e3c..1a35110 100644
--- a/Source/FLTKDialog/CMakeSetupGUI.h
+++ b/Source/FLTKDialog/CMakeSetupGUI.h
@@ -14,7 +14,6 @@
 class CMakeSetupGUI {
 public:
   CMakeSetupGUI();
-  virtual ~CMakeSetupGUI();
   Fl_Window *dialogWindow;
   Fl_Input *sourcePathTextInput;
 private:
@@ -36,6 +35,7 @@ private:
 public:
   Fl_Scroll *cacheValuesScroll;
   Fl_Pack *propertyListPack;
+  ~CMakeSetupGUI();
   virtual void Close(void);
   virtual void BuildProjectFiles(void);
   virtual void BrowseForSourcePath(void);
diff --git a/Source/FLTKDialog/CMakeSetupGUIImplementation.cxx b/Source/FLTKDialog/CMakeSetupGUIImplementation.cxx
index 4206e57..5dca254 100644
--- a/Source/FLTKDialog/CMakeSetupGUIImplementation.cxx
+++ b/Source/FLTKDialog/CMakeSetupGUIImplementation.cxx
@@ -141,8 +141,6 @@ CMakeSetupGUIImplementation
   }
   *p = '\0';
   
-  std::cout << "absolutePath = " << absolutePath << std::endl;
-  
   m_PathToExecutable = absolutePath;
 
 #if defined(_WIN32)
@@ -150,7 +148,7 @@ CMakeSetupGUIImplementation
 #else
   m_PathToExecutable += "/cmake";
 #endif
-  std::cout << "Path to CMake executable = "  << m_PathToExecutable << std::endl;
+
 }
 
 
@@ -324,20 +322,15 @@ CMakeSetupGUIImplementation
   }
   
 
-  SaveCacheFromGUI();
-  
   // set the wait cursor
   fl_cursor(FL_CURSOR_WAIT,FL_BLACK,FL_WHITE);
-  // get all the info from the dialog
-  // this->UpdateData();
-  if(!m_BuildPathChanged)
-    {
-    // if the build path has not changed save the 
-    // current GUI values to the cache
-    this->SaveCacheFromGUI();
-    }
+
+  // save the current GUI values to the cache
+  this->SaveCacheFromGUI();
+
   // Make sure we are working from the cache on disk
   this->LoadCacheFromDiskToGUI();
+
   // create a cmake object
   cmake make;
   // create the arguments for the cmake object
@@ -394,12 +387,14 @@ void
 CMakeSetupGUIImplementation
 ::SaveCacheFromGUI( void )
 {
+  std::cout << "Saving cache from GUI ...";
   this->FillCacheManagerFromCacheGUI();
   if( m_WhereBuild != "" )
   {
     cmCacheManager::GetInstance()->SaveCache( 
                                   m_WhereBuild.c_str() );
   }
+  std::cout << "   Done ! " << std::endl;
 }
 
 
diff --git a/Source/FLTKDialog/FLTKPropertyItemRow.cxx b/Source/FLTKDialog/FLTKPropertyItemRow.cxx
index edafb4ed..2ce380a 100644
--- a/Source/FLTKDialog/FLTKPropertyItemRow.cxx
+++ b/Source/FLTKDialog/FLTKPropertyItemRow.cxx
@@ -8,6 +8,8 @@
 #include <FL/fl_ask.H>
 #include <FL/fl_file_chooser.H>
 #include <FL/Fl_Color_Chooser.H>
+#include <FL/Fl_Menu_Button.H>
+#include "../cmCacheManager.h"
 #include <cstdio>
 
 namespace fltk {
@@ -38,14 +40,14 @@ PropertyItemRow::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
   parent()->size( nameWidth + textWidth , rowHeight );
 
   m_NameButton = new 
-          PropertyNameButtonWithHelp( firstColumn, 0, nameWidth, rowHeight, 
+          Fl_Button( firstColumn, 0, nameWidth, rowHeight, 
                                     m_PropertyItem->m_propName.c_str() );
 
   m_NameButton->align( FL_ALIGN_CLIP | FL_ALIGN_LEFT | FL_ALIGN_INSIDE );
   m_NameButton->labelsize( fontsize );
   m_NameButton->box( FL_DOWN_BOX );
-  m_NameButton->SetHelpText( m_PropertyItem->m_HelpString.c_str() );
   m_NameButton->size( secondColumn, rowHeight );
+  m_NameButton->callback( NameButtonCallback, (void *)m_PropertyItem );
     
   switch( m_PropertyItem->m_nItemType )
   {
@@ -164,6 +166,68 @@ PropertyItemRow::~PropertyItemRow( )
   
 void 
 PropertyItemRow::
+NameButtonCallback( Fl_Widget * widget, void * data) 
+{
+  Fl_Button    * button = (Fl_Button *)widget;
+  PropertyItem * pItem  = (PropertyItem *)data;
+  
+  static Fl_Menu_Button * popupMenu = 0;
+  if( !popupMenu )
+  {
+    int lastMousePositionX = Fl::event_x_root();
+    int lastMousePositionY = Fl::event_y_root();
+    popupMenu = new Fl_Menu_Button(lastMousePositionX,
+                                   lastMousePositionY,100,200);
+  }
+  
+  popupMenu->type( Fl_Menu_Button::POPUP3 );
+  popupMenu->add("Help|Remove|Properties...");
+  popupMenu->popup();
+ 
+  typedef enum {
+    HELP=0,
+    REMOVE,
+    PROPERTIES
+  } MenuOptions;
+    
+  
+  switch( popupMenu->value() )
+  {
+    case HELP:
+      fl_message( pItem->m_HelpString.c_str() );
+      break;
+    case REMOVE: // Remove
+    {
+      const char * propertyName = pItem->m_propName.c_str();
+      int answer = fl_ask( "Do you want to remove property %s", propertyName );
+      if( answer == 1 )
+      {
+        // Remove the entry from the cache
+        cmCacheManager::GetInstance()->RemoveCacheEntry( propertyName );
+        // Get the parent: Fl_Tile that manages the whole row in the GUI
+        Fl_Group * parentGroup      = (Fl_Group *) (button->parent());
+        // Get the grandParent: Fl_Pack with the property list
+        Fl_Group * grandParentGroup = (Fl_Group *) parentGroup->parent();
+        // Remove the row from the list
+        grandParentGroup->remove( *parentGroup );
+        // Destroy the row
+        delete parentGroup;  // Patricide... ?
+        // Redraw the list
+        grandParentGroup->redraw();
+        return;
+      }
+      break;
+    }
+    case PROPERTIES: // Properties
+      break;
+  }
+}
+  
+
+
+
+void 
+PropertyItemRow::
 CheckButtonCallback( Fl_Widget * widget, void * data) 
 {
   Fl_Button    * button = (Fl_Button *)widget;
@@ -255,26 +319,4 @@ BrowsePathCallback(   Fl_Widget * widget, void * data)
 
 
 
-int 
-PropertyItemRow::
-handle(int event)
-{
-  
-  int status = Fl_Tile::handle( event );
-  switch( event ) 
-  {
-    case FL_LEAVE:
-      m_NameButton->HideHelp();
-      status = 1;
-      break;
-    case FL_MOVE:
-      m_NameButton->HideHelp();
-      status = 1;
-      break;
-  }
-  
-  return status;
-}
-
-
 } // end namespace fltk
diff --git a/Source/FLTKDialog/FLTKPropertyItemRow.h b/Source/FLTKDialog/FLTKPropertyItemRow.h
index 3934166..d7af02d 100644
--- a/Source/FLTKDialog/FLTKPropertyItemRow.h
+++ b/Source/FLTKDialog/FLTKPropertyItemRow.h
@@ -3,10 +3,10 @@
 #define  FLTKPropertyItemRow_h
 
 #include "FLTKPropertyList.h"
-#include "FLTKPropertyNameButtonWithHelp.h"
 
 #include <FL/Fl_Tile.H>
 #include <FL/Fl_Input.H>
+#include <FL/Fl_Button.H>
 
 
 namespace fltk {
@@ -32,19 +32,16 @@ class PropertyItemRow  : public Fl_Tile
 
     PropertyItemRow( PropertyItem * );
     ~PropertyItemRow();
-    int handle(int event);
     
   private:
     
     PropertyItem * m_PropertyItem;
     ItemValue    * m_ItemValue;
-
-    // Button that displays the property name and
-    // manages the popup help blob
-    PropertyNameButtonWithHelp * m_NameButton;
+    Fl_Button    * m_NameButton;
 
 
     static void CheckButtonCallback( Fl_Widget *, void *);
+    static void NameButtonCallback( Fl_Widget *, void *);
     static void InputTextCallback(   Fl_Widget *, void *);
     static void BrowsePathCallback(  Fl_Widget *, void *);
     static void ColorSelectionCallback(   Fl_Widget * widget, void * data);
-- 
cgit v0.12