mirror of
https://github.com/fltk/fltk.git
synced 2026-09-28 15:55:22 +08:00
Backported the fltk2.0 tooltips. This may be somewhat binary incompatable
as Fl_Widget::tooltip(x) is no longer an inline (though the previous version will work if there is at least one call to the new one). It may be better to just enable tooltips all the time. Also Fl_Tooltip::enable() is changed, but few programs call that. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@2210 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
+21
-38
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_Tooltip.H,v 1.16.2.7 2002/04/14 02:43:48 easysw Exp $"
|
||||
// "$Id: Fl_Tooltip.H,v 1.16.2.8 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Tooltip header file for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -23,59 +23,42 @@
|
||||
// Please report all bugs and problems to "fltk-bugs@fltk.org".
|
||||
//
|
||||
|
||||
#ifndef _Fl_Tooltip_H_
|
||||
#define _Fl_Tooltip_H_
|
||||
#ifndef Fl_Tooltip_H
|
||||
#define Fl_Tooltip_H
|
||||
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Widget.H>
|
||||
|
||||
|
||||
class Fl_Tooltip_Box;
|
||||
class Fl_Tooltip_Window;
|
||||
|
||||
class FL_EXPORT Fl_Tooltip {
|
||||
|
||||
friend class Fl_Tooltip_Box;
|
||||
friend class Fl_Tooltip_Window;
|
||||
friend class Fl_Widget;
|
||||
|
||||
static float delay_;
|
||||
static Fl_Tooltip_Box *box;
|
||||
static Fl_Tooltip_Window *window;
|
||||
static Fl_Widget *widget;
|
||||
static int shown;
|
||||
static unsigned color_;
|
||||
static int font_;
|
||||
static int size_;
|
||||
|
||||
static void tooltip_timeout(void *);
|
||||
static void tooltip_exit(Fl_Widget *);
|
||||
|
||||
static void (*tooltip_callback_)(void *);
|
||||
static void (*tooltip_exit_)(void *);
|
||||
|
||||
public:
|
||||
|
||||
// These functions are user-called functions
|
||||
static float delay() { return delay_; }
|
||||
static void delay(float f) { delay_ = (f < 0.1f) ? 0.1f : f; }
|
||||
static void delay(float f) { delay_ = f; }
|
||||
static int enabled() { return enabled_; }
|
||||
static void enable(int b = 1) { enabled_ = b;}
|
||||
static void disable() { enabled_ = 0; }
|
||||
static void (*enter)(Fl_Widget* w);
|
||||
static void enter_area(Fl_Widget* w, int X, int Y, int W, int H, const char* tip);
|
||||
static void (*exit)(Fl_Widget *w);
|
||||
|
||||
static int font() { return font_; }
|
||||
static int size() { return size_; }
|
||||
static void font(int i) { font_ = i; }
|
||||
static void size(int s) { size_ = s; }
|
||||
static void color(unsigned c) { color_ = c; }
|
||||
static Fl_Color color() { return (Fl_Color)color_; }
|
||||
|
||||
static void enter(Fl_Widget *w);
|
||||
static void exit(Fl_Widget *w);
|
||||
static int enabled() {return tooltip_callback_ != 0;}
|
||||
static void enable(int b = 1) {if (!b) enter(0); tooltip_callback_ = b ? tooltip_timeout : 0; tooltip_exit_ = b ? (void (*)(void *))tooltip_exit : 0;}
|
||||
static void disable() {enter(0); tooltip_callback_ = 0; tooltip_exit_ = 0;}
|
||||
static void textcolor(unsigned c) { textcolor_ = c; }
|
||||
static Fl_Color textcolor() { return (Fl_Color)textcolor_; }
|
||||
private:
|
||||
static float delay_;
|
||||
static int enabled_;
|
||||
static unsigned color_;
|
||||
static unsigned textcolor_;
|
||||
static int font_;
|
||||
static int size_;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_Tooltip.H,v 1.16.2.7 2002/04/14 02:43:48 easysw Exp $".
|
||||
// End of "$Id: Fl_Tooltip.H,v 1.16.2.8 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
+3
-3
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_Widget.H,v 1.6.2.4.2.13 2002/01/01 15:11:28 easysw Exp $"
|
||||
// "$Id: Fl_Widget.H,v 1.6.2.4.2.14 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Widget header file for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -143,7 +143,7 @@ public:
|
||||
void deimage(Fl_Image* a) {label_.deimage=a;}
|
||||
void deimage(Fl_Image& a) {label_.deimage=&a;}
|
||||
const char *tooltip() const {return tooltip_;}
|
||||
void tooltip(const char *t) {tooltip_=t;}
|
||||
FL_EXPORT void tooltip(const char *t);
|
||||
Fl_Callback_p callback() const {return callback_;}
|
||||
void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
|
||||
void callback(Fl_Callback* c) {callback_=c;}
|
||||
@@ -207,5 +207,5 @@ public:
|
||||
#endif
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_Widget.H,v 1.6.2.4.2.13 2002/01/01 15:11:28 easysw Exp $".
|
||||
// End of "$Id: Fl_Widget.H,v 1.6.2.4.2.14 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
+9
-7
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl.cxx,v 1.24.2.41.2.26 2002/04/13 22:17:46 easysw Exp $"
|
||||
// "$Id: Fl.cxx,v 1.24.2.41.2.27 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Main event handling code for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -423,8 +423,8 @@ void Fl::belowmouse(Fl_Widget *o) {
|
||||
if (grab()) return; // don't do anything while grab is on
|
||||
Fl_Widget *p = belowmouse_;
|
||||
if (o != p) {
|
||||
if (!dnd_flag) Fl_Tooltip::enter(o);
|
||||
belowmouse_ = o;
|
||||
if (!dnd_flag) Fl_Tooltip::enter(o);
|
||||
for (; p && !p->contains(o); p = p->parent()) {
|
||||
p->handle(dnd_flag ? FL_DND_LEAVE : FL_LEAVE);
|
||||
}
|
||||
@@ -440,6 +440,10 @@ Fl_Window *fl_xmousewin;// which window X thinks has FL_ENTER
|
||||
Fl_Window *Fl::grab_; // most recent Fl::grab()
|
||||
Fl_Window *Fl::modal_; // topmost modal() window
|
||||
|
||||
static void nothing(Fl_Widget *) {}
|
||||
void (*Fl_Tooltip::enter)(Fl_Widget *) = nothing;
|
||||
void (*Fl_Tooltip::exit)(Fl_Widget *) = nothing;
|
||||
|
||||
// Update modal(), focus() and other state according to system state,
|
||||
// and send FL_ENTER, FL_LEAVE, FL_FOCUS, and/or FL_UNFOCUS events.
|
||||
// This is the only function that produces these events in response
|
||||
@@ -550,7 +554,7 @@ int Fl::handle(int event, Fl_Window* window)
|
||||
return 1;
|
||||
|
||||
case FL_PUSH:
|
||||
if (!pushed()) Fl_Tooltip::enter(0);
|
||||
Fl_Tooltip::enter((Fl_Widget*)0);
|
||||
if (grab()) w = grab();
|
||||
else if (modal() && w != modal()) return 0;
|
||||
pushed_ = w;
|
||||
@@ -623,8 +627,6 @@ int Fl::handle(int event, Fl_Window* window)
|
||||
e_number = event = FL_SHORTCUT;
|
||||
|
||||
case FL_SHORTCUT:
|
||||
Fl_Tooltip::enter((Fl_Widget*)0);
|
||||
|
||||
if (grab()) {w = grab(); break;} // send it to grab window
|
||||
|
||||
// Try it as shortcut, sending to mouse widget and all parents:
|
||||
@@ -753,7 +755,7 @@ void Fl_Window::hide() {
|
||||
delete x;
|
||||
|
||||
// Hide any visible tooltips...
|
||||
Fl_Tooltip::enter(0);
|
||||
//Fl_Tooltip::enter(0);
|
||||
}
|
||||
|
||||
Fl_Window::~Fl_Window() {
|
||||
@@ -890,5 +892,5 @@ void Fl_Window::flush() {
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id: Fl.cxx,v 1.24.2.41.2.26 2002/04/13 22:17:46 easysw Exp $".
|
||||
// End of "$Id: Fl.cxx,v 1.24.2.41.2.27 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
+2
-11
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: Fl_Group.cxx,v 1.8.2.8.2.13 2002/05/10 00:18:37 easysw Exp $"
|
||||
// "$Id: Fl_Group.cxx,v 1.8.2.8.2.14 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Group widget for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -34,7 +34,6 @@
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/fl_draw.H>
|
||||
#include <stdlib.h>
|
||||
#include <FL/Fl_Tooltip.H> // tooltip
|
||||
|
||||
Fl_Group* Fl_Group::current_;
|
||||
|
||||
@@ -139,11 +138,9 @@ int Fl_Group::handle(int event) {
|
||||
return 0;
|
||||
|
||||
case FL_KEYBOARD:
|
||||
Fl_Tooltip::exit(this); // tooltip
|
||||
return navigation(navkey());
|
||||
|
||||
case FL_SHORTCUT:
|
||||
Fl_Tooltip::exit(this); // tooltip
|
||||
for (i = children(); i--;) {
|
||||
o = a[i];
|
||||
if (o->takesevents() && Fl::event_inside(o) && send(o,FL_SHORTCUT))
|
||||
@@ -158,8 +155,6 @@ int Fl_Group::handle(int event) {
|
||||
return 0;
|
||||
|
||||
case FL_ENTER:
|
||||
Fl_Tooltip::enter(this); // tooltip
|
||||
|
||||
case FL_MOVE:
|
||||
for (i = children(); i--;) {
|
||||
o = a[i];
|
||||
@@ -192,7 +187,6 @@ int Fl_Group::handle(int event) {
|
||||
return 0;
|
||||
|
||||
case FL_PUSH:
|
||||
Fl_Tooltip::exit(this); // tooltip
|
||||
for (i = children(); i--;) {
|
||||
o = a[i];
|
||||
if (o->takesevents() && Fl::event_inside(o)) {
|
||||
@@ -235,9 +229,6 @@ int Fl_Group::handle(int event) {
|
||||
}
|
||||
return 1;
|
||||
|
||||
case FL_LEAVE: // tooltip
|
||||
Fl_Tooltip::exit(this); // tooltip
|
||||
|
||||
default:
|
||||
// For all other events, try to give to each child, starting at focus:
|
||||
for (i = 0; i < children(); i ++)
|
||||
@@ -589,5 +580,5 @@ void Fl_Group::draw_outside_label(const Fl_Widget& w) const {
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id: Fl_Group.cxx,v 1.8.2.8.2.13 2002/05/10 00:18:37 easysw Exp $".
|
||||
// End of "$Id: Fl_Group.cxx,v 1.8.2.8.2.14 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
+132
-177
File diff suppressed because it is too large
Load Diff
+15
-2
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: input.cxx,v 1.5.2.4.2.2 2002/01/01 15:11:33 easysw Exp $"
|
||||
// "$Id: input.cxx,v 1.5.2.4.2.3 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Input field test program for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -77,13 +77,18 @@ int main(int argc, char **argv) {
|
||||
|
||||
int y = 10;
|
||||
input[0] = new Fl_Input(70,y,300,30,"Normal:"); y += 35;
|
||||
input[0]->tooltip("Normal input field");
|
||||
// input[0]->cursor_color(FL_SELECTION_COLOR);
|
||||
// input[0]->maximum_size(20);
|
||||
// input[0]->static_value("this is a testgarbage");
|
||||
input[1] = new Fl_Float_Input(70,y,300,30,"Float:"); y += 35;
|
||||
input[1]->tooltip("Input field for floating-point number");
|
||||
input[2] = new Fl_Int_Input(70,y,300,30,"Int:"); y += 35;
|
||||
input[2]->tooltip("Input field for integer number");
|
||||
input[3] = new Fl_Secret_Input(70,y,300,30,"Secret:"); y += 35;
|
||||
input[3]->tooltip("Input field for password");
|
||||
input[4] = new Fl_Multiline_Input(70,y,300,100,"Multiline:"); y += 105;
|
||||
input[4]->tooltip("Input field for short text with newlines");
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
input[i]->when(0); input[i]->callback(cb);
|
||||
@@ -93,24 +98,32 @@ int main(int argc, char **argv) {
|
||||
Fl_Button *b;
|
||||
b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_&CHANGED");
|
||||
b->callback(toggle_cb, FL_WHEN_CHANGED); y += 25;
|
||||
b->tooltip("Do callback each time the text changes");
|
||||
b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_&RELEASE");
|
||||
b->callback(toggle_cb, FL_WHEN_RELEASE); y += 25;
|
||||
b->tooltip("Do callback when widget loses focus");
|
||||
b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_&ENTER_KEY");
|
||||
b->callback(toggle_cb, FL_WHEN_ENTER_KEY); y += 25;
|
||||
b->tooltip("Do callback when user hits Enter key");
|
||||
b = new Fl_Toggle_Button(10,y,200,25,"FL_WHEN_&NOT_CHANGED");
|
||||
b->callback(toggle_cb, FL_WHEN_NOT_CHANGED); y += 25;
|
||||
b->tooltip("Do callback even if the text is not changed");
|
||||
y += 5;
|
||||
b = new Fl_Button(10,y,200,25,"&print changed()");
|
||||
b->callback(button_cb);
|
||||
b->tooltip("Print widgets that have changed() flag set");
|
||||
|
||||
b = new Fl_Button(220,y1,100,25,"color"); y1 += 25;
|
||||
b->color(input[0]->color()); b->callback(color_cb, (void*)0);
|
||||
b->tooltip("Color behind the text");
|
||||
b = new Fl_Button(220,y1,100,25,"selection_color"); y1 += 25;
|
||||
b->color(input[0]->selection_color()); b->callback(color_cb, (void*)1);
|
||||
b->labelcolor(fl_contrast(FL_BLACK,b->color()));
|
||||
b->tooltip("Color behind selected text");
|
||||
b = new Fl_Button(220,y1,100,25,"textcolor"); y1 += 25;
|
||||
b->color(input[0]->textcolor()); b->callback(color_cb, (void*)2);
|
||||
b->labelcolor(fl_contrast(FL_BLACK,b->color()));
|
||||
b->tooltip("Color of the text");
|
||||
|
||||
window->end();
|
||||
window->show(argc,argv);
|
||||
@@ -118,5 +131,5 @@ int main(int argc, char **argv) {
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id: input.cxx,v 1.5.2.4.2.2 2002/01/01 15:11:33 easysw Exp $".
|
||||
// End of "$Id: input.cxx,v 1.5.2.4.2.3 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
+45
-6
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// "$Id: symbols.cxx,v 1.4.2.3.2.2 2002/01/01 15:11:33 easysw Exp $"
|
||||
// "$Id: symbols.cxx,v 1.4.2.3.2.3 2002/05/13 05:05:11 spitzak Exp $"
|
||||
//
|
||||
// Symbol test program for the Fast Light Tool Kit (FLTK).
|
||||
//
|
||||
@@ -26,19 +26,46 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/Fl_Single_Window.H>
|
||||
#include <FL/Fl_Box.H>
|
||||
#include <FL/Fl_Value_Slider.H>
|
||||
#include <FL/fl_draw.H>
|
||||
|
||||
int N = 0;
|
||||
#define W 60
|
||||
#define H 60
|
||||
#define W 70
|
||||
#define H 70
|
||||
#define ROWS 5
|
||||
#define COLS 5
|
||||
|
||||
Fl_Window *window;
|
||||
|
||||
void slider_cb(Fl_Widget *w, void *data) {
|
||||
static char buf[80];
|
||||
int val = (int)(((Fl_Value_Slider*)w)->value());
|
||||
Fl_Window *win = (Fl_Window*)w->parent(); // get parent window
|
||||
for (int i = win->children(); i--; ) { // all window children
|
||||
Fl_Widget *wc = win->child(i);
|
||||
const char *l = wc->label();
|
||||
if ( *l == '@' ) { // all children with '@'
|
||||
if ( *(++l) == '@' ) { // ascii legend?
|
||||
l++;
|
||||
while (isdigit(*l)) { l++; }
|
||||
if (val == 0) { sprintf(buf, "@@%s", l); }
|
||||
else { sprintf(buf, "@@%d%s", val, l); }
|
||||
} else { // box with symbol
|
||||
while (isdigit(*l)) { l++; }
|
||||
if (val == 0) { sprintf(buf, "@%s", l); }
|
||||
else { sprintf(buf, "@%d%s", val, l); }
|
||||
}
|
||||
free((void*)(wc->label()));
|
||||
wc->label(strdup(buf));
|
||||
}
|
||||
}
|
||||
win->redraw();
|
||||
}
|
||||
|
||||
void bt(const char *name) {
|
||||
int x = N%COLS;
|
||||
int y = N/COLS;
|
||||
@@ -50,12 +77,12 @@ void bt(const char *name) {
|
||||
Fl_Box *a = new Fl_Box(FL_NO_BOX,x,y,W-20,H-20,strdup(buf));
|
||||
a->align(FL_ALIGN_BOTTOM);
|
||||
a->labelsize(11);
|
||||
Fl_Box *b = new Fl_Box(FL_UP_BOX,x,y,W-20,H-20,name);
|
||||
Fl_Box *b = new Fl_Box(FL_UP_BOX,x,y,W-20,H-20,strdup(name));
|
||||
b->labelcolor(FL_DARK3);
|
||||
}
|
||||
|
||||
int main(int argc, char ** argv) {
|
||||
window = new Fl_Single_Window(COLS*W,ROWS*H+20);
|
||||
window = new Fl_Single_Window(COLS*W,ROWS*H+60);
|
||||
bt("@->");
|
||||
bt("@>");
|
||||
bt("@>>");
|
||||
@@ -81,11 +108,23 @@ bt("@line");
|
||||
bt("@menu");
|
||||
bt("@UpArrow");
|
||||
bt("@DnArrow");
|
||||
|
||||
Fl_Value_Slider slider((int)(window->w()*.10+.5),
|
||||
window->h()-40,
|
||||
(int)(window->w()*.80+.5),
|
||||
16,
|
||||
"Orientation");
|
||||
slider.type(FL_HORIZONTAL);
|
||||
slider.range(0.0, 9.0);
|
||||
slider.value(0.0);
|
||||
slider.step(1);
|
||||
slider.callback(slider_cb, &slider);
|
||||
|
||||
window->resizable(window);
|
||||
window->show(argc,argv);
|
||||
return Fl::run();
|
||||
}
|
||||
|
||||
//
|
||||
// End of "$Id: symbols.cxx,v 1.4.2.3.2.2 2002/01/01 15:11:33 easysw Exp $".
|
||||
// End of "$Id: symbols.cxx,v 1.4.2.3.2.3 2002/05/13 05:05:11 spitzak Exp $".
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user