-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathConfigurable.hh
115 lines (84 loc) · 3.94 KB
/
Configurable.hh
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
// $Id: Configurable.hh 2641 2007-09-02 21:31:02Z flaterco $
/* Configurable: A setting or a switch.
Copyright (C) 2004 David Flater.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
class PredictionValue;
typedef SafeVector<Dstr> DstrVector;
// Configurable must be an aggregate so that we can initialize it with
// an initializer-list. That means no inheriting from Nullable even
// though it is, in fact, nullable. An aggregate may not have a
// constructor.
struct Configurable {
// Enum values are postfixed with Kind, Rep, and Interp to avoid
// stepping on reserved words.
// Settings are those configurables enumerated at
// http://www.flaterco.com/xtide/settings.html, which have
// representations as preprocessor defines, X resources, xtide.xml
// attributes, and command line switches.
// Switches are those configurables enumerated at
// http://www.flaterco.com/xtide/tty.html, which are not available
// in any form except command line switches.
// Switches recognized by X11 are magically removed from the command
// line by XtOpenDisplay, so it is not necessary to handle them
// here.
enum Kind {settingKind,
switchKind};
// Representation tells you which of the data types is used.
enum Representation {unsignedRep,
doubleRep,
charRep,
dstrRep,
predictionValueRep,
dstrVectorRep};
// Interpretation constrains the allowable values. No value is
// constrained to be not null. All constraint checking is done
// in Settings.cc.
enum Interpretation {
booleanInterp, // constrains charRep to 'y' or 'n'
posIntInterp, // constrains unsignedRep to be > 0
posDoubleInterp, // constrains doubleRep to be > 0.0
nonnegativeDoubleInterp, // constrains doubleRep to be >= 0.0
glDoubleInterp, // constrains doubleRep to have one of the gl values
modeInterp, // constrains charRep to be one of the mode characters
formatInterp, // constrains charRep to be one of the format characters
colorInterp, // constrains dstrRep to contain a color spec
unitInterp, // constrains dstrRep to be "ft", "m", or "x"
timeFormatInterp, // constrains dstrRep to be a strftime format string
eventMaskInterp, // constrains dstrRep to be a valid eventmask
numberInterp, // a scanf %f must succeed on the input
textInterp // the input cannot be a null pointer or empty string
};
Dstr switchName; // 2-character ID used on command line and XML
Dstr resourceName; // X resource name sans XTide* prefix
// For use in control panel. If null, do not offer option in control panel.
Dstr caption;
Kind kind;
Representation representation;
Interpretation interpretation;
// See comments at top regarding inheritance from Nullable.
bool isNull;
// This glob of attributes is collectively "value." The space saved
// by a union would not be worth the inconvenience.
unsigned u;
double d;
char c;
Dstr s;
PredictionValue p;
DstrVector v;
// Only unsigned configurables can have minimum values, so why make
// it complicated.
unsigned minValue;
};
// Keyed by switchName.
typedef BetterMap<const Dstr, Configurable> ConfigurablesMap;
// Cleanup2006 Done