summaryrefslogtreecommitdiff
path: root/test/preferences.fl
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2010-12-12 19:52:26 +0000
committerMatthias Melcher <fltk@matthiasm.com>2010-12-12 19:52:26 +0000
commit318b3dea5750dfce5103a8fbce6eea38f7fcd613 (patch)
tree69532eb4658057f41e1c07f80314aaa68c046e28 /test/preferences.fl
parent495b3b5af5051dd69f595aa05989f679ed992fef (diff)
Added an 'Options' dialog (replacing test/preferences) that can be used to set system wide or user real options like Visible Focus.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8018 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'test/preferences.fl')
-rw-r--r--test/preferences.fl424
1 files changed, 169 insertions, 255 deletions
diff --git a/test/preferences.fl b/test/preferences.fl
index 0190f6651..a6d8692a8 100644
--- a/test/preferences.fl
+++ b/test/preferences.fl
@@ -17,312 +17,226 @@ decl {\#include <FL/filename.H>} {private local
decl {\#include <FL/fl_ask.H>} {private local
}
-decl {void readPrefs();} {public local
+decl {int opt[10][2];} {
+ comment {Copy of all options in user and system mode} private local
}
-decl {void writePrefs();} {public local
+Function {refreshUI()} {
+ comment {Update the UI using the values in the opt array} return_type void
+} {
+ code {int mode = wUserOrSystem->value();
+wVisibleFocus->value(opt[Fl::OPTION_VISIBLE_FOCUS][mode]);
+wArrowFocus->value(opt[Fl::OPTION_ARROW_FOCUS][mode]);
+wShowTooltips->value(opt[Fl::OPTION_SHOW_TOOLTIPS][mode]);
+wDNDText->value(opt[Fl::OPTION_DND_TEXT][mode]);} {}
}
-Function {closeWindowCB( Fl_Widget*, void* )} {open private return_type void
+Function {readPrefs()} {
+ comment {read all preferences and refresh the GUI} return_type void
} {
- code {Fl::delete_widget(myWindow);} {}
+ code {// read all preferences and refresh the GUI
+{
+ Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
+ Fl_Preferences opt_prefs(prefs, "options");
+ opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1], 2);
+ opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1], 2);
+ opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][1], 2);
+ opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1], 2);
+}
+{
+ Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
+ Fl_Preferences opt_prefs(prefs, "options");
+ opt_prefs.get("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0], 2);
+ opt_prefs.get("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0], 2);
+ opt_prefs.get("DNDText", opt[Fl::OPTION_DND_TEXT][0], 2);
+ opt_prefs.get("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0], 2);
+}
+refreshUI();} {}
}
-Function {saveAndCloseWindowCB( Fl_Widget*, void* )} {open private return_type void
+Function {writePrefs()} {
+ comment {write all preferences using the array} return_type void
} {
- code {writePrefs();
-Fl::delete_widget(myWindow);} {}
+ code {// write all preferences using the array
+{
+ Fl_Preferences prefs(Fl_Preferences::SYSTEM, "fltk.org", "fltk");
+ Fl_Preferences opt_prefs(prefs, "options");
+ if (opt[Fl::OPTION_ARROW_FOCUS][1]==2) opt_prefs.deleteEntry("ArrowFocus");
+ else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][1]);
+ if (opt[Fl::OPTION_VISIBLE_FOCUS][1]==2) opt_prefs.deleteEntry("VisibleFocus");
+ else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][1]);
+ if (opt[Fl::OPTION_DND_TEXT][1]==2) opt_prefs.deleteEntry("DNDText");
+ else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][1]);
+ if (opt[Fl::OPTION_SHOW_TOOLTIPS][1]==2) opt_prefs.deleteEntry("ShowTooltips");
+ else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][1]);
+}
+{
+ Fl_Preferences prefs(Fl_Preferences::USER, "fltk.org", "fltk");
+ Fl_Preferences opt_prefs(prefs, "options");
+ if (opt[Fl::OPTION_ARROW_FOCUS][0]==2) opt_prefs.deleteEntry("ArrowFocus");
+ else opt_prefs.set("ArrowFocus", opt[Fl::OPTION_ARROW_FOCUS][0]);
+ if (opt[Fl::OPTION_VISIBLE_FOCUS][0]==2) opt_prefs.deleteEntry("VisibleFocus");
+ else opt_prefs.set("VisibleFocus", opt[Fl::OPTION_VISIBLE_FOCUS][0]);
+ if (opt[Fl::OPTION_DND_TEXT][0]==2) opt_prefs.deleteEntry("DNDText");
+ else opt_prefs.set("DNDText", opt[Fl::OPTION_DND_TEXT][0]);
+ if (opt[Fl::OPTION_SHOW_TOOLTIPS][0]==2) opt_prefs.deleteEntry("ShowTooltips");
+ else opt_prefs.set("ShowTooltips", opt[Fl::OPTION_SHOW_TOOLTIPS][0]);
+}} {}
}
-Function {} {open return_type int
+Function {} {
+ comment {create the user interface and launch} selected return_type int
} {
Fl_Window myWindow {
- label {My Preferences}
- callback closeWindowCB open
- xywh {394 64 298 311} type Double visible
+ label {FLTK Preferences}
+ callback {Fl::delete_widget(myWindow);} open
+ xywh {424 200 403 317} type Double color 50 visible
} {
- Fl_Button {} {
- label Cancel
- callback closeWindowCB
- xywh {210 275 75 25}
- }
- Fl_Button {} {
- label OK
- callback saveAndCloseWindowCB
- xywh {125 275 75 25}
- }
Fl_Group {} {
- label {Get Up:} open
- xywh {20 30 115 225} box ENGRAVED_FRAME align 5
+ label {Keyboard Focus Options} open
+ xywh {10 10 380 100} box GTK_DOWN_BOX labelfont 2 align 21
} {
- Fl_Input wAlarm {
- label {Alarm at:}
- xywh {25 55 45 20} align 5
- }
- Fl_Choice wAmPm {open
- xywh {75 55 55 20} down_box BORDER_BOX
+ Fl_Choice wVisibleFocus {
+ label {Visible Keyboard Focus:}
+ callback {int mode = wUserOrSystem->value();
+opt[Fl::OPTION_VISIBLE_FOCUS][mode] = wVisibleFocus->value();} open
+ tooltip {OPTION_VISIBLE_FOCUS
+
+If visible focus is switched on, FLTK will draw a dotted rectangle inside the widget that will receive the next keystroke. If switched off, no such indicator will be drawn and keyboard navigation is disabled.
+
+On by default.} xywh {245 40 100 25} down_box BORDER_BOX
} {
MenuItem {} {
- label {a.m.}
- xywh {0 0 100 20}
+ label off
+ user_data 0 user_data_type long
+ xywh {10 10 31 20}
}
MenuItem {} {
- label {p.m.}
- xywh {0 0 100 20}
+ label on
+ user_data 1 user_data_type long
+ xywh {10 10 31 20} divider
}
- }
- Fl_Choice wWear {
- label {Wear:} open
- xywh {25 100 105 20} down_box BORDER_BOX align 5
- } {
MenuItem {} {
- label shoes
- xywh {0 0 100 20}
+ label default
+ user_data 2 user_data_type long
+ xywh {10 10 31 20}
}
+ }
+ Fl_Choice wArrowFocus {
+ label {Arrow Keys move Focus:}
+ callback {int mode = wUserOrSystem->value();
+opt[Fl::OPTION_ARROW_FOCUS][mode] = wArrowFocus->value();} open
+ tooltip {OPTION_ARROW_FOCUS
+
+When switched on, moving the text cursor beyond the start or end of a text in a text widget will change focus to the next text widgt. When switched off, the cursor will stop at the end of the text. Pressing Tab or Ctrl-Tab will advance the keyboard focus.
+
+Default is off.} xywh {245 75 100 25} down_box BORDER_BOX
+ } {
MenuItem {} {
- label sandals
- xywh {0 0 100 20}
+ label off
+ user_data 0 user_data_type long
+ xywh {0 0 31 20}
}
MenuItem {} {
- label {flip flops}
- xywh {0 0 100 20}
+ label on
+ user_data 1 user_data_type long
+ xywh {0 0 31 20} divider
}
MenuItem {} {
- label {bare foot}
- xywh {0 0 100 20}
+ label default
+ user_data 2 user_data_type long
+ xywh {0 0 31 20}
}
}
- Fl_Group {} {open
- xywh {35 120 98 60}
- } {
- Fl_Round_Button wLeft {
- label {left side}
- xywh {35 120 95 25} type Radio down_box ROUND_DOWN_BOX
- }
- Fl_Round_Button wRight {
- label {right side}
- xywh {35 140 95 25} type Radio down_box ROUND_DOWN_BOX
- }
- Fl_Box {} {
- label {of the bed}
- xywh {38 160 95 20}
- }
- }
- Fl_Check_Button wShower {
- label shower
- xywh {25 180 105 25} down_box DOWN_BOX
- }
- Fl_Check_Button wShave {
- label shave
- xywh {25 200 105 25} down_box DOWN_BOX
- }
- Fl_Check_Button wBrush {
- label {brush teeth}
- xywh {25 220 105 25} down_box DOWN_BOX
- }
}
Fl_Group {} {
- label {Breakfast::} open
- xywh {160 30 115 225} box ENGRAVED_FRAME align 5
+ label {Tooltip Options} open
+ xywh {10 120 380 65} box GTK_DOWN_BOX labelfont 2 align 21
} {
- Fl_Choice wDrink {
- label {Drink:} open
- xywh {165 50 105 20} down_box BORDER_BOX align 5
+ Fl_Choice wShowTooltips {
+ label {Show Tooltips:}
+ callback {int mode = wUserOrSystem->value();
+opt[Fl::OPTION_SHOW_TOOLTIPS][mode] = wShowTooltips->value();} open
+ tooltip {OPTION_SHOW_TOOLTIPS
+
+If tooltips are enabled, hovering the mouse over a widget with a tooltip text will open a little tootip window until the mouse leaves the widget. If disabled, no tooltip is shown.
+
+Default is on.} xywh {245 150 100 25} down_box BORDER_BOX
} {
MenuItem {} {
- label coffee
- xywh {10 10 100 20}
+ label off
+ user_data 0 user_data_type long
+ xywh {10 10 31 20}
}
MenuItem {} {
- label tea
- xywh {10 10 100 20}
+ label on
+ user_data 1 user_data_type long
+ xywh {10 10 31 20} divider
}
MenuItem {} {
- label juice
- xywh {10 10 100 20}
+ label default
+ user_data 2 user_data_type long
+ xywh {10 10 31 20}
}
}
- Fl_Check_Button wMilk {
- label {with milk}
- xywh {170 70 100 25} down_box DOWN_BOX
- }
- Fl_Choice wBread {
- label {Bread:} open
- xywh {165 110 105 20} down_box BORDER_BOX align 5
+ }
+ Fl_Group {} {
+ label {Drag And Drop Options} open
+ xywh {10 194 380 66} box GTK_DOWN_BOX labelfont 2 align 21
+ } {
+ Fl_Choice wDNDText {
+ label {Allow dragging Text:}
+ callback {int mode = wUserOrSystem->value();
+opt[Fl::OPTION_DND_TEXT][mode] = wDNDText->value();} open
+ tooltip {OPTION_DND_TEXT
+
+If text drag-and-drop is enabled, the user can select and drag text from any text widget. If disabled, no dragging is possible, however dropping text from other applications still works.
+
+Default is on.} xywh {245 225 100 25} down_box BORDER_BOX
} {
MenuItem {} {
- label wheat
- xywh {0 0 100 20}
+ label off
+ user_data 0 user_data_type long
+ xywh {30 30 31 20}
}
MenuItem {} {
- label white
- xywh {0 0 100 20}
+ label on
+ user_data 1 user_data_type long
+ xywh {30 30 31 20} divider
}
MenuItem {} {
- label rye
- xywh {0 0 100 20}
+ label default
+ user_data 2 user_data_type long
+ xywh {30 30 31 20}
}
- MenuItem {} {
- label {sour doh}
- xywh {0 0 100 20}
- }
- }
- Fl_Check_Button wButter {
- label {with butter}
- xywh {170 130 100 25} down_box DOWN_BOX
- }
- Fl_Input wEggs {
- label eggs
- xywh {165 163 30 20} type Int align 8
}
- Fl_Value_Slider wMinutes {
- label {min.}
- xywh {175 185 70 20} type Horizontal align 8 minimum 2 maximum 6 value 3.1
+ }
+ Fl_Choice wUserOrSystem {
+ callback {refreshUI();} open
+ tooltip {Change settings for the current user, or for all users of this computer.} xywh {14 275 141 25} down_box BORDER_BOX
+ } {
+ MenuItem {} {
+ label {User Settings}
+ user_data 0 user_data_type long
+ xywh {0 0 31 20}
}
- Fl_Input wPaper {
- label {Newspaper:}
- xywh {165 225 105 20} align 5
+ MenuItem {} {
+ label {System Settings}
+ user_data 1 user_data_type long
+ xywh {0 0 31 20}
}
}
+ Fl_Button {} {
+ label Cancel
+ callback {Fl::delete_widget(myWindow);}
+ xywh {230 275 75 25}
+ }
+ Fl_Button {} {
+ label OK
+ callback {writePrefs();
+Fl::delete_widget(myWindow);}
+ xywh {315 275 75 25}
+ }
}
code {readPrefs();} {}
}
-
-Function {readPrefs()} {open return_type void
-} {
- code {int boolValue;
-int intValue;
-char buffer[80];
-double doubleValue;
-
-Fl_Preferences app( Fl_Preferences::USER, "fltk.org", "test/preferences" );
-
- char path[ FL_PATH_MAX ];
- app.getUserdataPath( path, sizeof(path) );
-
- Fl_Preferences bed( app, "Bed" );
- bed.get( "alarm", buffer, "8:00", 79 );
- wAlarm->value( buffer );
-
- bed.get( "ampm", intValue, 0 );
- wAmPm->value( intValue );
-
- bed.get( "wear", intValue, 1 );
- wWear->value( intValue );
-
- int side;
- bed.get( "side", side, 2 );
- if ( side == 1 ) wLeft->value( 1 );
- if ( side == 2 ) wRight->value( 1 );
-
- int tasks;
- bed.get( "taskFlags", tasks, 0x05 );
- if ( tasks & 0x01 ) wShower->value( 1 );
- if ( tasks & 0x02 ) wShave->value( 1 );
- if ( tasks & 0x04 ) wBrush->value( 1 );
-
- Fl_Preferences eat( app, "Breakfast" );
-
- eat.get( "drink", intValue, 1 );
- wDrink->value( intValue );
-
- eat.get( "wMilk", boolValue, 0 );
- wMilk->value( boolValue );
-
- eat.get( "bread", intValue, 0 );
- wBread->value( intValue );
-
- eat.get( "wButter", boolValue, 1 );
- wButter->value( boolValue );
-
- eat.get( "nEggs", intValue, 2 );
- sprintf( buffer, "%d", intValue );
- wEggs->value( buffer );
-
- eat.get( "minutes", doubleValue, 3.2 );
- wMinutes->value( doubleValue );
-
- char *flexBuffer;
- eat.get( "newspaper", flexBuffer, "NY Tymes" );
- wPaper->value( flexBuffer );
- if ( flexBuffer ) free( flexBuffer );
-
- eat.get( "foo", buffer, "bar", 80 );
-
- /** sample code only:
- Fl_Preferences prev( app, "PreviousStarts" );
- {
- int i, n;
- prev.get( "n", n, 0 );
- for ( i=0; i<n; i++ )
- prev.get( Fl_Preferences::Name( i ), flexBuffer, "" );
- }
-
- unsigned int hex;
- eat.get( "binFoo", (void*)&hex, 0, 0, sizeof( unsigned int ) );
- void *data;
- eat.get( "binFoo2", data, 0, 0 );
- **/} {}
-}
-
-Function {writePrefs()} {open return_type void
-} {
- code {Fl_Preferences app( Fl_Preferences::USER, "fltk.org", "test/preferences" );
-
- Fl_Preferences bed( app, "Bed" );
-
- bed.set( "alarm", wAlarm->value() );
- bed.set( "ampm", wAmPm->value() );
-
- bed.set( "wear", wWear->value() );
-
- int side = 0;
- if ( wLeft->value() ) side = 1;
- if ( wRight->value() ) side = 2;
- bed.set( "side", side );
-
- int tasks = 0;
- if ( wShower->value() ) tasks |= 0x01;
- if ( wShave->value() ) tasks |= 0x02;
- if ( wBrush->value() ) tasks |= 0x04;
- bed.set( "taskFlags", tasks );
-
- Fl_Preferences eat( app, "Breakfast" );
-
- eat.set( "drink", wDrink->value() );
- eat.set( "wMilk", wMilk->value() );
- eat.set( "bread", wBread->value() );
- eat.set( "wButter", wButter->value() );
-
- eat.set( "nEggs", wEggs->value() );
- eat.set( "minutes", wMinutes->value() );
-
- eat.set( "newspaper", wPaper->value() );
-
- eat.set( "foo", "bar\\nfly\\rBackslash: \\\\ and bell: \\007 and delete: \\177\\n" );
-
- eat.set( Fl_Preferences::Name( 3 ), "Test3" );
-
- /* sample: create a sub-sub-group */
- Fl_Preferences eatMore( eat, "More" );
-
- eatMore.set( "more", "stuff" );
-
- /* all the following searches should return 1 */
- int sum = 0;
- sum += app.groupExists( "Breakfast" ); /* find 'eat' relative to 'app' */
- sum += app.groupExists( "Breakfast/More" ); /* find 'eat.eatMore' relative to 'app' */
- sum += app.groupExists( "./Breakfast/More" ); /* find 'eat.eatMore' relative to Preferences */
- sum += eat.groupExists( "More" ); /* find 'eatMore' relative to 'eat' */
- sum += eat.groupExists( "./Breakfast/More" ); /* find 'eat.eatMore' relative to Preferences */
- sum += eat.groupExists( "." ); /* find myself ('eat') */
- sum += eat.groupExists( "./" ); /* find the topmost group ('app') */
- if ( sum != 7 )
- fl_message( "Assertion failed:\\nNot all group entries were found!" );
-
- /* sample code only: */
- unsigned int hex = 0x2387efcd;
- eat.set( "binFoo", (void*)&hex, sizeof( unsigned int ) );
- eat.set( "binFoo2", (void*)&writePrefs, 256 );} {selected
- }
-}