diff options
| -rw-r--r-- | test/ask.cxx | 65 |
1 files changed, 55 insertions, 10 deletions
diff --git a/test/ask.cxx b/test/ask.cxx index 644dbcabd..ef42aad05 100644 --- a/test/ask.cxx +++ b/test/ask.cxx @@ -3,14 +3,10 @@ // // Standard dialog test program for the Fast Light Tool Kit (FLTK). // -// Demonstrates how to use readqueue to see if a button has been -// pushed, and to see if a window has been closed, thus avoiding -// the need to define callbacks. -// // This also demonstrates how to trap attempts by the user to // close the last window by overriding Fl::exit // -// Copyright 1998-2010 by Bill Spitzak and others. +// Copyright 1998-2015 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this @@ -30,6 +26,7 @@ #include <FL/Fl_Input.H> #include <FL/Fl_Button.H> #include <FL/Fl_Return_Button.H> +#include <FL/Fl_Box.H> #include <FL/fl_ask.H> #include <stdlib.h> @@ -55,15 +52,60 @@ void window_callback(Fl_Widget*, void*) { int hotspot = fl_message_hotspot(); fl_message_hotspot(0); fl_message_title("note: no hotspot set for this dialog"); - int rep = fl_choice("Are you sure you want to quit?", + int rep = fl_choice("Are you sure you want to quit?", "Cancel", "Quit", "Dunno"); fl_message_hotspot(hotspot); - if (rep==1) + if (rep==1) exit(0); else if (rep==2) fl_message("Well, maybe you should know before we quit."); } +/* + This timer callback shows a message dialog (fl_choice) window + every 5 seconds to test "recursive" common dialogs. + + The timer can be stopped by clicking the button "Stop these funny popups" + or pressing the Enter key. As it is currently implemented, clicking the + "Close" button will reactivate the popups (only possible if "recursive" + dialogs are enabled, see below). + + Note 1: This dialog box is blocked in FLTK 1.3.x if another common dialog + is already open because the window used is a static (i.e. permanently + allocated) Fl_Window instance. This should be fixed in FLTK 1.4.0. + See STR #334 (sic !) and also STR #2751 ("Limit input field characters"). + + Note 2: Chances are that this /might/ be fixed in FLTK 1.3.4, but + this is not decided yet. AlbrechtS - July 21, 2015. +*/ +void timer_cb(void *) { + + static int stop = 0; + double delta = 5.0; + + Fl_Box *message_icon = (Fl_Box *)fl_message_icon(); + + Fl::repeat_timeout(delta, timer_cb); + + if (stop == 1) { + message_icon->color(FL_WHITE); + return; + } + + // Change the icon box color: + Fl_Color c = message_icon->color(); + c = (c+1) % 32; + if (c == message_icon->labelcolor()) c++; + message_icon->color((Fl_Color)c); + + // pop up a message: + stop = fl_choice("Timeout. Click the 'Close' button.\n" + "Note: this message is blocked in FLTK 1.3\n" + "if another message window is open.\n" + "This message should pop up every 5 seconds.", + "Close","Stop these funny popups",NULL); +} + int main(int argc, char **argv) { char buffer[128] = "Test text"; char buffer2[128] = "MyPassword"; @@ -79,15 +121,18 @@ int main(int argc, char **argv) { window.resizable(&b); window.show(argc, argv); -// Also we test to see if the exit callback works: + // Also we test to see if the exit callback works: window.callback(window_callback); -// set default message window title + // Test: set default message window title: // fl_message_title_default("Default Window Title"); + // Test: multiple (nested, aka "recursive") popups + Fl::add_timeout(5.0, timer_cb); + return Fl::run(); } - + // // End of "$Id$". // |
