summaryrefslogtreecommitdiffstats
path: root/Source/FLTKDialog/FLTKPropertyItemRow.cxx
diff options
context:
space:
mode:
authorBill Hoffman <bill.hoffman@kitware.com>2005-09-23 21:47:46 (GMT)
committerBill Hoffman <bill.hoffman@kitware.com>2005-09-23 21:47:46 (GMT)
commit46521aef8cf2523990dfbf90dbdf435a94f8e5c4 (patch)
tree7da33dc6434184423e86b635357cfda4632e5d38 /Source/FLTKDialog/FLTKPropertyItemRow.cxx
parentf7d926d072a6582237282ef9a3302c8a1e8e94b1 (diff)
downloadCMake-46521aef8cf2523990dfbf90dbdf435a94f8e5c4.zip
CMake-46521aef8cf2523990dfbf90dbdf435a94f8e5c4.tar.gz
CMake-46521aef8cf2523990dfbf90dbdf435a94f8e5c4.tar.bz2
ENH: try to find a gui for the Mac
Diffstat (limited to 'Source/FLTKDialog/FLTKPropertyItemRow.cxx')
-rw-r--r--Source/FLTKDialog/FLTKPropertyItemRow.cxx387
1 files changed, 387 insertions, 0 deletions
diff --git a/Source/FLTKDialog/FLTKPropertyItemRow.cxx b/Source/FLTKDialog/FLTKPropertyItemRow.cxx
new file mode 100644
index 0000000..5c12637
--- /dev/null
+++ b/Source/FLTKDialog/FLTKPropertyItemRow.cxx
@@ -0,0 +1,387 @@
+/*=========================================================================
+
+ Program: Insight Segmentation & Registration Toolkit
+ Module: $RCSfile$
+ Language: C++
+ Date: $Date$
+ Version: $Revision$
+
+ Copyright (c) 2002 Insight Consortium. All rights reserved.
+ See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even
+ the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the above copyright notices for more information.
+
+=========================================================================*/
+#include "FLTKPropertyItemRow.h"
+#include <FL/Fl.H>
+#include <FL/Fl_Window.H>
+#include <FL/Fl_Button.H>
+#include <FL/Fl_Box.H>
+#include <FL/Fl_Input.H>
+#include <FL/Fl_Tile.H>
+#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 "FLTKPropertyList.h"
+#include "CMakeSetupGUIImplementation.h"
+#include <stdio.h>
+#include "../cmake.h"
+#include "../cmCacheManager.h"
+
+namespace fltk {
+
+
+
+CMakeSetupGUIImplementation * PropertyItemRow::m_CMakeSetup = 0;
+
+
+
+
+PropertyItemRow
+::PropertyItemRow( PropertyItem * pItem ):Fl_Tile(0,0,10,10,"")
+{
+
+ m_PropertyItem = pItem;
+ m_ItemValue = new ItemValue;
+
+ const unsigned int fontsize = 11;
+ const unsigned int nameWidth = 200;
+ const unsigned int textWidth = 1400;
+ const unsigned int checkWidth = textWidth;
+ const unsigned int browseWidth = 20;
+ const unsigned int firstColumn = 0;
+
+ const unsigned int secondColumn = nameWidth;
+
+ const unsigned int rowHeight = 20;
+
+ size( nameWidth + textWidth , rowHeight );
+
+ // Make the parent Fl_Pack widget at least a row wide.
+ parent()->size( nameWidth + textWidth , rowHeight );
+
+ m_NameButton = new
+ 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->size( secondColumn, rowHeight );
+ m_NameButton->callback( NameButtonCallback, (void *)m_PropertyItem );
+ if( m_PropertyItem->m_NewValue )
+ {
+ m_NameButton->color(FL_RED);
+ }
+
+ switch( m_PropertyItem->m_nItemType )
+ {
+ case PropertyList::COMBO:
+ {
+ break;
+ }
+ case PropertyList::EDIT:
+ {
+
+ Fl_Input * input = new
+ Fl_Input( secondColumn, 0, textWidth ,rowHeight ,"");
+ input->value( m_PropertyItem->m_curValue.c_str() );
+ input->textsize( fontsize );
+ input->callback( InputTextCallback, (void *)m_PropertyItem );
+ input->when( FL_WHEN_CHANGED );
+
+ break;
+ }
+ case PropertyList::COLOR:
+ {
+ Fl_Button * colorButton = new
+ Fl_Button( secondColumn, 0, textWidth ,rowHeight ,"");
+ colorButton->labelsize( fontsize );
+ //colorButton->color();
+ colorButton->callback( ColorSelectionCallback, (void *)m_PropertyItem );
+
+ break;
+ }
+ case PropertyList::FILE:
+ {
+
+ Fl_Button * browseButton = new
+ Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
+ browseButton->labelsize( fontsize );
+
+ Fl_Input * input = new
+ Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
+ input->value( m_PropertyItem->m_curValue.c_str() );
+ input->textsize( fontsize );
+
+ m_ItemValue->m_InputText = input;
+ m_ItemValue->m_PropertyItem = m_PropertyItem;
+
+ browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
+ input->callback( InputTextCallback, m_PropertyItem );
+ input->when( FL_WHEN_CHANGED );
+
+ break;
+ }
+ case PropertyList::CHECKBOX:
+ {
+ Fl_Button * button = new
+ Fl_Button( secondColumn, 0, checkWidth ,rowHeight ,"");
+ button->align( FL_ALIGN_INSIDE | FL_ALIGN_LEFT );
+ button->callback( CheckButtonCallback, (void *)m_PropertyItem );
+
+ if( m_PropertyItem->m_curValue == "ON" )
+ {
+ button->label(" ON ");
+ button->value(1);
+ }
+ else if( m_PropertyItem->m_curValue == "OFF" )
+ {
+ button->label(" OFF ");
+ button->value(0);
+ }
+ button->type( FL_TOGGLE_BUTTON );
+ button->labelsize( fontsize );
+ break;
+ }
+ case PropertyList::PATH:
+ {
+
+ Fl_Button * browseButton = new
+ Fl_Button( secondColumn, 0, browseWidth ,rowHeight ,"...");
+ browseButton->labelsize( fontsize );
+
+ Fl_Input * input = new
+ Fl_Input( secondColumn+browseWidth, 0, textWidth ,rowHeight ,"");
+ input->value( m_PropertyItem->m_curValue.c_str() );
+ input->textsize( fontsize );
+
+ m_ItemValue->m_InputText = input;
+ m_ItemValue->m_PropertyItem = m_PropertyItem;
+
+ browseButton->callback( BrowsePathCallback, (void *)m_ItemValue );
+ input->callback( InputTextCallback, (void *)m_PropertyItem );
+ input->when( FL_WHEN_CHANGED );
+
+ break;
+ }
+ break;
+ default:
+ fl_alert("Unkown item type %d",m_PropertyItem->m_nItemType);
+ break;
+ }
+
+
+ end(); // Close the inclusion of widgets in the Tile object
+
+}
+
+
+
+
+
+PropertyItemRow::~PropertyItemRow( )
+{
+ delete m_ItemValue;
+}
+
+
+
+void PropertyItemRow
+::SetCMakeSetupGUI( CMakeSetupGUIImplementation * cmakeSetup )
+{
+ m_CMakeSetup = cmakeSetup;
+}
+
+
+
+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();
+ int lastMousePositionY = Fl::event_y();
+ 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
+ m_CMakeSetup->GetCMakeInstance()->GetCacheManager()->RemoveCacheEntry(propertyName);
+ // Get the parent: Fl_Tile that manages the whole row in the GUI
+ Fl_Group * parentGroup = dynamic_cast<Fl_Group *>(button->parent());
+ // Get the grandParent: Fl_Pack with the property list
+ Fl_Group * grandParentGroup = dynamic_cast<Fl_Group *>( parentGroup->parent() );
+ // Remove the row from the list
+ grandParentGroup->remove( *parentGroup );
+ // Destroy the row
+ delete parentGroup; // Patricide... ?
+ // Redraw the list
+ grandParentGroup->redraw();
+ FillCacheManagerFromCacheGUI();
+ return;
+ }
+ break;
+ }
+ case PROPERTIES: // Properties
+ break;
+ }
+}
+
+
+
+void
+PropertyItemRow::
+FillCacheManagerFromCacheGUI( void )
+{
+ if( m_CMakeSetup )
+ {
+ m_CMakeSetup->FillCacheManagerFromCacheGUI();
+ }
+}
+
+
+
+void
+PropertyItemRow::
+CheckButtonCallback( Fl_Widget * widget, void * data)
+{
+ Fl_Button * button = (Fl_Button *)widget;
+ PropertyItem * pItem = (PropertyItem *)data;
+
+ int value = button->value();
+
+ if( value )
+ {
+ button->label(" ON ");
+ pItem->m_curValue = "ON";
+ }
+ else
+ {
+ button->label(" OFF ");
+ pItem->m_curValue = "OFF";
+ }
+
+ pItem->m_Dirty = true;
+
+ button->redraw();
+
+ FillCacheManagerFromCacheGUI();
+
+}
+
+
+
+void
+PropertyItemRow::
+InputTextCallback( Fl_Widget * widget, void * data)
+{
+ Fl_Input * input = (Fl_Input *)widget;
+ PropertyItem * item = (PropertyItem *)data;
+
+ item->m_curValue = input->value();
+
+ item->m_Dirty = true;
+
+ FillCacheManagerFromCacheGUI();
+
+}
+
+
+
+void
+PropertyItemRow::
+ColorSelectionCallback( Fl_Widget * widget, void * data)
+{
+ Fl_Button * colorButton = (Fl_Button *)widget;
+ PropertyItem * propertyItem = (PropertyItem *)data;
+
+ static Fl_Color colorIndex = FL_FREE_COLOR;
+
+ unsigned char red = 0;
+ unsigned char blue = 0;
+ unsigned char green = 0;
+ fl_color_chooser("Please pick a color",red,green,blue);
+ char buffer[300];
+ sprintf( buffer,"RGB(%d,%d,%d)", red, green, blue );
+ propertyItem->m_curValue = buffer;
+ Fl::set_color( colorIndex, red, green, blue );
+ colorButton->color( colorIndex );
+ colorIndex = (Fl_Color)( colorIndex + 1 );
+ if( colorIndex == FL_FREE_COLOR + FL_NUM_FREE_COLOR )
+ {
+ fl_alert("Maximum number of free colors used, recycling...");
+ colorIndex = FL_FREE_COLOR;
+ }
+
+ propertyItem->m_Dirty = true;
+
+ colorButton->redraw();
+
+ FillCacheManagerFromCacheGUI();
+
+}
+
+
+
+
+
+
+void
+PropertyItemRow::
+BrowsePathCallback( Fl_Widget * widget, void * data)
+{
+ ItemValue * itemValue = (ItemValue *)data;
+ Fl_Input * inputText = itemValue->m_InputText;
+ PropertyItem * propertyItem = itemValue->m_PropertyItem;
+
+ const char * newpath =
+ fl_file_chooser("Select a path","*", inputText->value() );
+
+ if( newpath )
+ {
+ propertyItem->m_curValue = newpath;
+ inputText->value( newpath );
+ }
+
+ propertyItem->m_Dirty = true;
+
+ FillCacheManagerFromCacheGUI();
+
+}
+
+
+
+
+} // end namespace fltk