diff options
author | Luis Ibanez <luis.ibanez@kitware.com> | 2001-06-12 22:43:19 (GMT) |
---|---|---|
committer | Luis Ibanez <luis.ibanez@kitware.com> | 2001-06-12 22:43:19 (GMT) |
commit | 302907efe8f9656ab9b20bccb8d5094dad749e72 (patch) | |
tree | d72f861b11a17bc0e43caa938b21f32843c09352 /Source/FLTKDialog | |
parent | 918c8c4f3ae8bde5b0dd0733b633c68b4e8b3b7e (diff) | |
download | CMake-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.cxx | 160 | ||||
-rw-r--r-- | Source/FLTKDialog/FLTKPropertyNameButtonWithHelp.h | 51 |
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 + + |