From 8fe1e1fcc6be2de71ebe3ce2e252c2e8bd75931b Mon Sep 17 00:00:00 2001 From: Luis Ibanez Date: Thu, 21 Jun 2001 07:37:49 -0400 Subject: [PATCH] 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 +- .../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 62bc6c910..cee4e7704 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 dac7f42c2..7855d3634 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 a62adbc53..1c6dc1e13 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 7524e3c30..1a35110ec 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 4206e57df..5dca254ec 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 edafb4ed4..2ce380a18 100644 --- a/Source/FLTKDialog/FLTKPropertyItemRow.cxx +++ b/Source/FLTKDialog/FLTKPropertyItemRow.cxx @@ -8,6 +8,8 @@ #include #include #include +#include +#include "../cmCacheManager.h" #include 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 ) { @@ -162,6 +164,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) @@ -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 39341665e..d7af02d52 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 #include +#include 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);