summaryrefslogtreecommitdiffstats
path: root/Source/FLTKDialog
diff options
context:
space:
mode:
authorLuis Ibanez <luis.ibanez@kitware.com>2001-06-12 22:43:19 (GMT)
committerLuis Ibanez <luis.ibanez@kitware.com>2001-06-12 22:43:19 (GMT)
commit302907efe8f9656ab9b20bccb8d5094dad749e72 (patch)
treed72f861b11a17bc0e43caa938b21f32843c09352 /Source/FLTKDialog
parent918c8c4f3ae8bde5b0dd0733b633c68b4e8b3b7e (diff)
downloadCMake-302907efe8f9656ab9b20bccb8d5094dad749e72.zip
CMake-302907efe8f9656ab9b20bccb8d5094dad749e72.tar.gz
CMake-302907efe8f9656ab9b20bccb8d5094dad749e72.tar.bz2
Class derived from Fl_Button with added help blobs
Diffstat (limited to 'Source/FLTKDialog')
-rw-r--r--Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.cxx160
-rw-r--r--Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.h51
2 files changed, 211 insertions, 0 deletions
diff --git a/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.cxx b/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.cxx
new file mode 100644
index 0000000..33c8f64
--- /dev/null
+++ b/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.cxx
@@ -0,0 +1,160 @@
+#include <FLTKPropertyNameButtonWithHelp.h>
+#include <Fl/Fl.H>
+
+namespace fltk {
+
+Fl_Window * PropertyNameButtonWithHelp::helpBlob = 0;
+Fl_Box * PropertyNameButtonWithHelp::helpText = 0;
+unsigned int PropertyNameButtonWithHelp::counter = 0;
+int PropertyNameButtonWithHelp::lastMousePositionX = 0;
+int PropertyNameButtonWithHelp::lastMousePositionY = 0;
+
+
+
+PropertyNameButtonWithHelp
+::PropertyNameButtonWithHelp(int x,int y, int w, int h, const char * l):
+Fl_Button(x,y,w,h,l)
+{
+ counter++; // one more object instantiated
+}
+
+
+
+
+PropertyNameButtonWithHelp::
+~PropertyNameButtonWithHelp( )
+{
+ counter--;
+ if( counter == 0 )
+ {
+ delete helpBlob;
+ delete helpText;
+ }
+}
+
+
+
+void
+PropertyNameButtonWithHelp
+::SetHelpText( const char * text )
+{
+ m_HelpText = text;
+}
+
+
+
+void
+PropertyNameButtonWithHelp
+::ShowHelp( void )
+{
+ if( helpBlob )
+ {
+ helpBlob->show();
+ }
+}
+
+
+void
+PropertyNameButtonWithHelp
+::HideHelp( void )
+{
+ if( helpBlob )
+ {
+ helpBlob->hide();
+ }
+}
+
+
+
+
+int
+PropertyNameButtonWithHelp::
+handle( int event )
+{
+
+ const float delayForShowingHelpBlob = 1.0; // seconds
+
+ const int maxWidth = 300;
+ const int lineHeight = 20;
+
+
+ // Create the help blob window if it doesn't exist
+ if( !helpBlob )
+ {
+ helpBlob = new Fl_Window(0,0,200,20,"");
+ helpBlob->border( 0 );
+ helpText = new Fl_Box(0,0,200,20,"");
+ helpBlob->end();
+ Fl_Color yellowHelp = FL_YELLOW;
+ helpBlob->color( yellowHelp );
+ helpText->color( yellowHelp );
+ helpText->align( FL_ALIGN_CENTER | FL_ALIGN_INSIDE | FL_ALIGN_WRAP );
+ }
+
+ int eventManaged = 0;
+
+ switch( event )
+ {
+ case FL_ENTER:
+ {
+ lastMousePositionX = Fl::event_x();
+ lastMousePositionY = Fl::event_y();
+ const float factor = helpText->labelsize() * 0.5;
+ int height = lineHeight;
+ int area = (int)( m_HelpText.size() * factor );
+ int width = area;
+ if( width > maxWidth )
+ {
+ width = maxWidth;
+ height = area / maxWidth * lineHeight;
+ if( area % maxWidth != 0 )
+ {
+ height += lineHeight;
+ }
+ }
+ helpText->size( width, height );
+ helpBlob->size( width, height );
+ helpText->label( m_HelpText.c_str() );
+ Fl_Widget * parent = this->parent();
+ Fl::add_timeout( delayForShowingHelpBlob, ShowHelpBlobCallback, (void *)parent );
+ eventManaged = 0;
+ break;
+ }
+ case FL_LEAVE:
+ helpBlob->hide();
+ eventManaged = 0;
+ break;
+ case FL_MOVE:
+ helpBlob->hide();
+ eventManaged = 0;
+ break;
+ default:
+ eventManaged = 0;
+ }
+
+
+ return eventManaged;
+
+}
+
+void
+PropertyNameButtonWithHelp::
+ShowHelpBlobCallback( void * data )
+{
+
+ Fl_Widget * thisWidget = Fl::belowmouse();
+ Fl_Widget * eventWidget = (Fl_Widget *)data;
+
+ if( thisWidget == eventWidget )
+ {
+
+ helpBlob->position( lastMousePositionX, lastMousePositionY );
+ helpBlob->show();
+ }
+
+}
+
+
+
+
+} // end namespace fltk
diff --git a/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.h b/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.h
new file mode 100644
index 0000000..040b2e9
--- /dev/null
+++ b/Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.h
@@ -0,0 +1,51 @@
+#ifndef FLTKPropertyNameButtonWithHelp_h
+#define FLTKPropertyNameButtonWithHelp_h
+
+#include <Fl/Fl_Tile.H>
+#include <Fl/Fl_Input.H>
+#include <Fl/Fl_Box.H>
+#include <Fl/Fl_Button.H>
+#include <Fl/Fl_Window.H>
+#include <string>
+
+namespace fltk {
+
+
+/**
+
+ Helper class for managing help blobs over the property name
+
+ */
+class PropertyNameButtonWithHelp : public Fl_Button
+{
+ public:
+ PropertyNameButtonWithHelp(int x,int y,int w, int h,const char *l);
+ virtual ~PropertyNameButtonWithHelp();
+ int handle(int event);
+ void SetHelpText( const char * helpText);
+ void ShowHelp(void);
+ void HideHelp(void);
+
+ static void ShowHelpBlobCallback( void * );
+
+ private:
+
+ string m_HelpText;
+
+ // Class variables
+ static Fl_Window * helpBlob;
+ static Fl_Box * helpText;
+ static unsigned int counter;
+ static int lastMousePositionX;
+ static int lastMousePositionY;
+
+};
+
+
+
+
+} // end namespace fltk
+
+#endif
+
+