1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
|
/**
\page page_setting_dialog Settings Dialog
\tableofcontents
<img src="w_settings.png" align="left" hspace="10" vspace="10" />
\image latex w_settings.png "Settings Dialog" width=7cm
The *Settings* dialog combines application preferences
and project settings in a compact set of six tabs.
The *General* tab contains a collection of application wide settings. They are
stored as user preferences.
The *Project* tab holds settings for the current project. They are saved with
the `.fl` file.
The *Layout* tab manages databases of preferred widget alignment. These
preferences can be saved per user, or as part of the project, or exported for
use in other projects.
The *Shell* tab manages a database of quick access shell commands and scripts.
Shell commands can be saved as a user preference and also as part of the
`.fl` project file.
The *Locale* tab sets the method of internationalizing texts in the project,
commonly used for labels and tooltips.
The *User* tab manages customization of fonts and colors in the widget browser.
These settings are stored as user preferences.
<div style="clear:both;"></div>
<!-- ---------------------------------------------------------------------- -->
\section setting_general Application Settings
<img src="w_settings_general_tab.png" align="left" hspace="10" vspace="10" />
\image latex w_settings_general_tab.png "General Settings Tab" width=7cm
__Scheme__:
Select one of the graphics schemes built into FLTK. It's helpful
to verify the look of various schemes for an application design.
__Options__:
Various options to make life as a developer more convenient.
__Recent Files__:
FLUID keeps track of recently opened files.
__External Editor__:
Users that don't like the built-in FLUID code editor can enter a shell command
here that opens the content of Code nodes in an external editor. FLUID does
its best to pick up on changed content or when the editor is closed.
__Overlays__:
The *Position Guides* are little red arrows that indicate if snap points are
found. See the *Layout* tab for details. *Restricted Areas* are areas where
widgets from within the same group overlap. They are visible in the project
window as a diagonally hashed pattern. *Ghosted Group Outlines* show faint
frames around groups that would otherwise be invisible in the project window.
<div style="clear:both;"></div>
<!-- ---------------------------------------------------------------------- -->
\section setting_project Project Settings
<img src="w_settings_project_tab.png" align="left" hspace="10" vspace="10" />
\image latex w_settings_project_tab.png "Project Settings Tab" width=7cm
__Header File__, __Code File__:
These fields are used to build the file path and name of the generated header
and source file. If one field is empty the value defaults to `.h` and `.cxx`
respectively. If a name starts with a `.`, FLUID assumes that the rest of the
text is a file extension. The code file name is then generated by replacing
the extension of the `.fl` project file name.
\todo Document the exact way the source and header file paths are calculated
for interactive FLUID, and for FLUID launched from the command line.
__Include Header from Code__:
If checked, the statement to include the header file is automatically
generated in one of the first lines of the source file.
__Menu shortcuts use FL_COMMAND__:
Setting this option will replace FL_CTRL and FL_META as a modifier for
shortcuts with the platform aware modifiers FL_COMMAND and FL_CONTROL, making
shortcuts more portable between macOS and Windows/Linux.
__allow Unicode__:
If unchecked, Unicode characters in strings are escaped. If checked, the Unicode
character is stored in the source code in UTF-8 encoding.
__avoid early include__:
FLUID by default includes `<FL/Fl.H>` early in the header file. If this option
is checked, users can include other files before including the FL header. The
user must then include `<FL/Fl.H>` later using a Declaration node.
<div style="clear:both;"></div>
<!-- ---------------------------------------------------------------------- -->
\section setting_layout Layout Preferences
<img src="w_settings_layout_tab.png" align="left" hspace="10" vspace="10" />
\image latex w_settings_layout_tab.png "Layout Settings Tab" width=7cm
Layouts are a collection of hints that help when interactively positioning and
resizing widgets in the project window. Layouts come in a set of three for
the application window, for dialog boxes, and for toolboxes.
__Layout__:
The layout pulldown menu lets users choose from a list of existing layouts.
The plus button creates a new set of layouts based on the currently selected
layout.
The pulldown menu has items to rename, load, and save layouts. It can also
change the location where the layout is stored. The FLUID beaker is for
layouts that are predefined in FLUID, the portrait icon stores as user
preference, the document
icon stores the layout in the `.fl` file, and the disk icon lets users store
layout in external files.
__Window Margin and Grid__:
Snap widget position to that margin in relation to the window. The grid
snaps widgets to fixed intervals.
__Group Margin and Grid__:
Snap widget position to that margin in relation to the group. The grid
snaps widgets to fixed intervals relative to the top left of the group.
__Tabs Margin__:
Snap the tab inside `Fl_Tabs` to the tab border and the offset given in
Margins.
__Widget Minimum, Increment, and Gap__:
_Minimum_ sets the minimal width of a widget. _Increment_ is the size multiplier
added to the _Minimum_ value. _Gap_ is the preferred distance to other widgets
in the same group.
__Label Font__, __Text Font__:
The preferred label and text font and size for new widgets.
<div style="clear:both;"></div>
<!-- ---------------------------------------------------------------------- -->
\section setting_shell Shell Commands
<img src="w_settings_shell_tab.png" align="left" hspace="10" vspace="10" />
\image latex w_settings_shell_tab.png "Shell Settings Tab" width=7cm
__Shell Command List__:
A list of all currently available shell commands. The portrait symbol in front
of the name indicates that the script is stored in the user preferences. The
document symbol saves them within the `.fl` project file.
`[+]` adds a fresh new script to the list, `[++]` duplicates the currently
selected script. `[DEL]` deletes it, and `[v]` offers import and export
functionality. The `[T]` button shows the terminal window, and finally the
`[Run]` button runs the selected shell script.
Selecting a shell script will fill in the bottom half of the dialog.
__Name__:
This is the name of the script as it appears in the Shell Command List.
__Menu Label__:
Shell scripts that match the *Condition* flag are also available for quick
access in the *Shell* menu in the main window and via shortcut key
combinations. This is the text that is used for the menu entry.
__Shortcut__:
Assign a keyboard shortcut to this shell script for even faster access. FLUID
does not check if a shortcut is already used elsewhere. Try to avoid
collisions, especially when the script is part of a project file.
__Store__:
Choose where to store the settings of this shell script, either in the user
preferences or as part of the `.fl` project file.
__Condition__:
Shell scripts can be quite different for different platforms hosting FLUID.
This choice limits scripts to specific platforms. Multiple scripts can have
the same shortcut if they have different conditions.
__Shell Script__:
This is a text field for the shell script. The `[v]` pulldown menu has a list
of variables that are replaced with the corresponding value before running
the script. The zoom button gives access to a much larger shell script editor.
The options below are a list of actions that can be executed before running
the script.
<div style="clear:both;"></div>
<!-- ---------------------------------------------------------------------- -->
\section setting_i18n Internationalization
The *Locale* tab can be used to configure optional internationalization.
FLUID supports GNU `gettext` and POSIX `catgets`.
FLUID supports internationalization (I18N for short) of label
strings and tooltips used by widgets. The GNU gettext option also
supports deferred translation of statically initialized menu item
labels. The setting panel (`Alt+p`) provides access
to the I18N options.
\image html w_settings_i18n_gnu.png
\image latex w_settings_i18n_gnu.png "I18N With GNU gettext" width=7cm
FLUID supports three methods of I18N: none, GNU
gettext, and POSIX catgets. The "none" method is the
default and just passes the label strings as-is to the widget
constructors.
The "GNU gettext" method uses GNU gettext (or a similar
text-based I18N library) to retrieve a localized string before
calling the widget constructor.
The GNU gettext option adds some preprocessor code to the source file:
```
#include <libintl.h>
#ifndef gettext_noop
# define gettext_noop(text) text
#endif
```
and the gettext call around strings in the source code:
```
new Fl_Button(50, 50, 54, 40, "Button");
// ->
new Fl_Button(50, 50, 54, 40, gettext("Button"));
```
FLUID's code support for GNU gettext is limited to calling a
function or macro to retrieve the localized label; you still
need to call \p setlocale() and \p textdomain() or
\p bindtextdomain() to select the appropriate language and
message file.
__Include__: controls the header file to include for
I18N; by default this is \b <libintl.h>, the
standard I18N file for GNU gettext.
__Conditional__: If this field contains a macro name, i18n will only be
compiled into the product if this macro is defined. The build system should
define the macro only if all required headers and libraries are available. If
the macro is not defined, no headers are included and `gettext` passes text
through untranslated.
__Function__: controls the function (or macro) that will retrieve the localized
message; by default the \p gettext function will be called.
__Static Function__: names a macro that will mark static text fields for
extraction with the `xgettext` tool. The default macro name is
\p gettext_noop and will be defined as `#define gettext_noop(text) text`
right after the `#include` statement. FLUID will call `gettext` on static
texts later, after the textdomain was set by the user.
\see [GNU gettext special cases](https://www.gnu.org/software/gettext/manual/html_node/Special-cases.html)
\image html w_settings_i18n_psx.png
\image latex w_settings_i18n_psx.png "I18N With POSIX catgets" width=7cm
The "POSIX catgets" method uses the POSIX catgets function to
retrieve a numbered message from a message catalog before
calling the widget constructor.
FLUID's code support for POSIX catgets allows you to use a
global message file for all interfaces or a file specific to
each <tt>.fl</tt> file; you still need to call
\p setlocale() to select the appropriate language.
This option adds some preprocessor code to the source file:
```
#include <nl_types.h>
// Initialize I18N stuff now for menus...
#include <locale.h>
static char *_locale = setlocale(LC_MESSAGES, "");
static nl_catd _catalog = catopen("", 0);
```
and the catgets call around strings in the source code:
```
new Fl_Button(50, 50, 54, 40, "Button");
// ->
new Fl_Button(50, 50, 54, 40, catgets(_catalog,1,6,"Button"));
```
__Include__: controls the header file to include for
I18N; by default this is \b <nl_types.h>, the
standard I18N file for POSIX catgets.
__Conditional__: include the header file only if this preprocessor macro is
defined.
__Catalog__: controls the name of the catalog file
variable to use when retrieving localized messages; by default
the file field is empty which forces a local (static) catalog
file to be used for all of the windows defined in your
<tt>.fl</tt> file.
__Set__: controls the set number in the catalog file.
The default set is 1 and rarely needs to be changed.
<!-- ---------------------------------------------------------------------- -->
\section setting_user User Interface Preferences
<img src="w_settings_user_tab.png" align="left" hspace="10" vspace="10" />
\image latex w_settings_user_tab.png "User Settings Tab" width=7cm
This tab lets users change the font and color of text in the widget browser.
The settings are stored in the user preferences.
All changes are directly visible in the widget browser.
<div style="clear:both;"></div>
*/
|