STR#2466: Added copy_tooltip().
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7940 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
parent
3578d1d6f8
commit
a343f7555b
@ -92,8 +92,10 @@ public:
|
||||
// fabien: made it private with only a friend function access
|
||||
private:
|
||||
friend void Fl_Widget::tooltip(const char *);
|
||||
friend void Fl_Widget::copy_tooltip(const char *);
|
||||
static void enter_(Fl_Widget* w);
|
||||
static void exit_(Fl_Widget *w);
|
||||
static void set_enter_exit_once_();
|
||||
|
||||
private:
|
||||
static float delay_; //!< delay before a tooltip is shown
|
||||
|
@ -162,6 +162,7 @@ protected:
|
||||
MODAL = 1<<14, ///< a window blocking input to all other winows (Fl_Window)
|
||||
NO_OVERLAY = 1<<15, ///< window not using a hardware overlay plane (Fl_Menu_Window)
|
||||
GROUP_RELATIVE = 1<<16, ///< position this idget relative to the parent group, not to the window
|
||||
COPIED_TOOLTIP = 1<<17, ///< the widget tooltip is internally copied, its destruction is handled by the widget
|
||||
// (space for more flags)
|
||||
USERFLAG3 = 1<<29, ///< reserved for 3rd party extensions
|
||||
USERFLAG2 = 1<<30, ///< reserved for 3rd party extensions
|
||||
@ -533,22 +534,12 @@ public:
|
||||
|
||||
/** Gets the current tooltip text.
|
||||
\return a pointer to the tooltip text or NULL
|
||||
\see tooltip(const char*), copy_tooltip(const char*)
|
||||
*/
|
||||
const char *tooltip() const {return tooltip_;}
|
||||
|
||||
/** Sets the current tooltip text.
|
||||
Sets a string of text to display in a popup tooltip window when the user
|
||||
hovers the mouse over the widget. The string is <I>not</I> copied, so
|
||||
make sure any formatted string is stored in a static, global,
|
||||
or allocated buffer.
|
||||
|
||||
If no tooltip is set, the tooltip of the parent is inherited. Setting a
|
||||
tooltip for a group and setting no tooltip for a child will show the
|
||||
group's tooltip instead. To avoid this behavior, you can set the child's
|
||||
tooltip to an empty string ("").
|
||||
\param[in] t new tooltip
|
||||
*/
|
||||
void tooltip(const char *t);
|
||||
void tooltip(const char *text); // see Fl_Tooltip
|
||||
void copy_tooltip(const char *text); // see Fl_Tooltip
|
||||
|
||||
/** Gets the current callback function for the widget.
|
||||
Each widget has a single callback.
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include <FL/Fl_Menu_Window.H>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h> // strdup()
|
||||
|
||||
float Fl_Tooltip::delay_ = 1.0f;
|
||||
float Fl_Tooltip::hoverdelay_ = 0.2f;
|
||||
@ -275,14 +276,68 @@ void Fl_Tooltip::enter_area(Fl_Widget* wid, int x,int y,int w,int h, const char*
|
||||
#endif // DEBUG
|
||||
}
|
||||
|
||||
void Fl_Widget::tooltip(const char *tt) {
|
||||
void Fl_Tooltip::set_enter_exit_once_() {
|
||||
static char beenhere = 0;
|
||||
if (!beenhere) {
|
||||
beenhere = 1;
|
||||
Fl_Tooltip::enter = Fl_Tooltip::enter_;
|
||||
Fl_Tooltip::exit = Fl_Tooltip::exit_;
|
||||
}
|
||||
tooltip_ = tt;
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the current tooltip text.
|
||||
|
||||
Sets a string of text to display in a popup tooltip window when the user
|
||||
hovers the mouse over the widget. The string is <I>not</I> copied, so
|
||||
make sure any formatted string is stored in a static, global,
|
||||
or allocated buffer. If you want a copy made and managed for you,
|
||||
use the copy_tooltip() method, which will manage the tooltip string
|
||||
automatically.
|
||||
|
||||
If no tooltip is set, the tooltip of the parent is inherited. Setting a
|
||||
tooltip for a group and setting no tooltip for a child will show the
|
||||
group's tooltip instead. To avoid this behavior, you can set the child's
|
||||
tooltip to an empty string ("").
|
||||
\param[in] text New tooltip text (no copy is made)
|
||||
\see copy_tooltip(const char*), tooltip()
|
||||
*/
|
||||
void Fl_Widget::tooltip(const char *text) {
|
||||
Fl_Tooltip::set_enter_exit_once_();
|
||||
if (flags() & COPIED_TOOLTIP) {
|
||||
// reassigning a copied tooltip remains the same copied tooltip
|
||||
if (tooltip_ == text) return;
|
||||
free((void*)(tooltip_)); // free maintained copy
|
||||
clear_flag(COPIED_TOOLTIP); // disable copy flag (WE don't make copies)
|
||||
}
|
||||
tooltip_ = text;
|
||||
}
|
||||
|
||||
/**
|
||||
Sets the current tooltip text.
|
||||
Unlike tooltip(), this method allocates a copy of the tooltip
|
||||
string instead of using the original string pointer.
|
||||
|
||||
The internal copy will automatically be freed whenever you assign
|
||||
a new tooltip or when the widget is destroyed.
|
||||
|
||||
If no tooltip is set, the tooltip of the parent is inherited. Setting a
|
||||
tooltip for a group and setting no tooltip for a child will show the
|
||||
group's tooltip instead. To avoid this behavior, you can set the child's
|
||||
tooltip to an empty string ("").
|
||||
\param[in] text New tooltip text (an internal copy is made and managed)
|
||||
\see tooltip(const char*), tooltip()
|
||||
*/
|
||||
void Fl_Widget::copy_tooltip(const char *text) {
|
||||
Fl_Tooltip::set_enter_exit_once_();
|
||||
if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
|
||||
if (text) {
|
||||
set_flag(COPIED_TOOLTIP);
|
||||
tooltip_ = strdup(text);
|
||||
} else {
|
||||
clear_flag(COPIED_TOOLTIP);
|
||||
tooltip_ = (char *)0;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -168,6 +168,7 @@ extern void fl_throw_focus(Fl_Widget*); // in Fl_x.cxx
|
||||
Fl_Widget::~Fl_Widget() {
|
||||
Fl::clear_widget_pointer(this);
|
||||
if (flags() & COPIED_LABEL) free((void *)(label_.value));
|
||||
if (flags() & COPIED_TOOLTIP) free((void *)(tooltip_));
|
||||
// remove from parent group
|
||||
if (parent_) parent_->remove(this);
|
||||
#ifdef DEBUG_DELETE
|
||||
|
Loading…
Reference in New Issue
Block a user