Update common dialog test program - add "recursive" dialog test.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10805 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Albrecht Schlosser
2015-07-21 12:44:53 +00:00
parent 35704c82a3
commit 1763da6596
+55 -10
View File
@@ -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$".
//