Skip to content

Latest commit

 

History

History
302 lines (253 loc) · 8.64 KB

gui.h

File metadata and controls

302 lines (253 loc) · 8.64 KB
 
May 12, 2007
May 12, 2007
1
2
3
4
5
6
7
8
/**
* MojoSetup; a portable, flexible installation application.
*
* Please see the file LICENSE.txt in the source's root directory.
*
* This file written by Ryan C. Gordon.
*/
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef _INCL_GUI_H_
#define _INCL_GUI_H_
#include "universal.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef enum
{
MOJOGUI_PRIORITY_NEVER_TRY = 0,
Mar 27, 2006
Mar 27, 2006
21
MOJOGUI_PRIORITY_USER_REQUESTED,
22
23
MOJOGUI_PRIORITY_TRY_FIRST,
MOJOGUI_PRIORITY_TRY_NORMAL,
Mar 25, 2006
Mar 25, 2006
24
MOJOGUI_PRIORITY_TRY_LAST,
May 18, 2007
May 18, 2007
25
MOJOGUI_PRIORITY_TRY_ABSOLUTELY_LAST,
Mar 25, 2006
Mar 25, 2006
26
MOJOGUI_PRIORITY_TOTAL
27
28
} MojoGuiPluginPriority;
Nov 29, 2006
Nov 29, 2006
29
May 17, 2007
May 17, 2007
30
31
32
33
34
35
36
37
38
39
typedef enum
{
MOJOGUI_NO,
MOJOGUI_YES,
MOJOGUI_ALWAYS,
MOJOGUI_NEVER
} MojoGuiYNAN;
40
41
42
/*
* Abstract GUI interfaces.
*/
Nov 29, 2006
Nov 29, 2006
43
Dec 27, 2006
Dec 27, 2006
44
45
46
47
typedef struct MojoGuiSetupOptions MojoGuiSetupOptions;
struct MojoGuiSetupOptions
{
const char *description;
Jan 11, 2008
Jan 11, 2008
48
const char *tooltip;
Dec 27, 2006
Dec 27, 2006
49
50
51
boolean value;
boolean is_group_parent;
uint64 size;
Dec 27, 2006
Dec 27, 2006
52
int opaque; // GUI drivers shouldn't touch this.
May 12, 2007
May 12, 2007
53
void *guiopaque; // For GUI drivers. App won't touch or free this.
Dec 27, 2006
Dec 27, 2006
54
55
56
57
MojoGuiSetupOptions *next_sibling;
MojoGuiSetupOptions *child;
};
May 17, 2007
May 17, 2007
58
Nov 24, 2007
Nov 24, 2007
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
typedef enum
{
MOJOGUI_SPLASH_NONE,
MOJOGUI_SPLASH_TOP,
MOJOGUI_SPLASH_LEFT,
MOJOGUI_SPLASH_RIGHT,
MOJOGUI_SPLASH_BOTTOM,
MOJOGUI_SPLASH_BACKGROUND,
} MojoGuiSplashPos;
typedef struct MojoGuiSplash MojoGuiSplash;
struct MojoGuiSplash
{
const uint8 *rgba; // framebuffer.
uint32 w; // width in pixels.
uint32 h; // height in pixels.
MojoGuiSplashPos position; // where to put the splash.
};
Nov 29, 2006
Nov 29, 2006
79
80
81
82
#define MOJOGUI_ENTRY_POINT MojoSetup_Gui_GetInterface
#define MOJOGUI_ENTRY_POINT_STR DEFINE_TO_STR(MOJOGUI_ENTRY_POINT)
// Increment this value when MojoGui's structure changes.
Apr 25, 2009
Apr 25, 2009
83
#define MOJOGUI_INTERFACE_REVISION 6
Nov 29, 2006
Nov 29, 2006
84
85
86
typedef struct MojoGui MojoGui;
struct MojoGui
Nov 21, 2007
Nov 21, 2007
88
uint8 (*priority)(boolean istty);
Dec 7, 2006
Dec 7, 2006
89
90
91
92
const char* (*name)(void);
boolean (*init)(void);
void (*deinit)(void);
void (*msgbox)(const char *title, const char *text);
Jul 2, 2007
Jul 2, 2007
93
94
boolean (*promptyn)(const char *title, const char *text, boolean def);
MojoGuiYNAN (*promptynan)(const char *title, const char *text, boolean def);
Nov 24, 2007
Nov 24, 2007
95
boolean (*start)(const char *title, const MojoGuiSplash *splash);
Dec 20, 2006
Dec 20, 2006
96
void (*stop)(void);
May 10, 2007
May 10, 2007
97
int (*readme)(const char *name, const uint8 *data, size_t len,
May 10, 2007
May 10, 2007
98
boolean can_back, boolean can_fwd);
May 10, 2007
May 10, 2007
99
int (*options)(MojoGuiSetupOptions *opts,
May 10, 2007
May 10, 2007
100
boolean can_back, boolean can_fwd);
May 10, 2007
May 10, 2007
101
102
char * (*destination)(const char **recommendations, int recnum,
int *command, boolean can_back, boolean can_fwd);
Apr 25, 2009
Apr 25, 2009
103
104
int (*productkey)(const char *desc, const char *fmt, char *buf,
const int buflen, boolean can_back, boolean can_fwd);
Apr 21, 2007
Apr 21, 2007
105
boolean (*insertmedia)(const char *medianame);
Feb 20, 2008
Feb 20, 2008
106
void (*progressitem)(void);
May 7, 2007
May 7, 2007
107
boolean (*progress)(const char *type, const char *component,
Jan 24, 2008
Jan 24, 2008
108
int percent, const char *item, boolean can_cancel);
May 12, 2007
May 12, 2007
109
void (*final)(const char *msg);
110
111
};
Dec 7, 2006
Dec 7, 2006
112
113
typedef const MojoGui* (*MojoGuiEntryPoint)(int revision,
const MojoSetupEntryPoints *e);
Dec 7, 2006
Dec 7, 2006
115
116
117
#if !BUILDING_EXTERNAL_PLUGIN
extern const MojoGui *GGui;
const MojoGui *MojoGui_initGuiPlugin(void);
Mar 27, 2006
Mar 27, 2006
118
119
120
void MojoGui_deinitGuiPlugin(void);
#else
Dec 7, 2006
Dec 7, 2006
121
122
__EXPORT__ const MojoGui *MOJOGUI_ENTRY_POINT(int revision,
const MojoSetupEntryPoints *e);
Mar 27, 2006
Mar 27, 2006
123
Mar 25, 2006
Mar 25, 2006
124
125
126
127
128
/*
* We do this as a macro so we only have to update one place, and it
* enforces some details in the plugins. Without effort, plugins don't
* support anything but the latest version of the interface.
*/
Mar 27, 2006
Mar 27, 2006
129
#define MOJOGUI_PLUGIN(module) \
Dec 7, 2006
Dec 7, 2006
130
static const MojoSetupEntryPoints *entry = NULL; \
Nov 21, 2007
Nov 21, 2007
131
static uint8 MojoGui_##module##_priority(boolean istty); \
Dec 7, 2006
Dec 7, 2006
132
133
134
135
static const char* MojoGui_##module##_name(void) { return #module; } \
static boolean MojoGui_##module##_init(void); \
static void MojoGui_##module##_deinit(void); \
static void MojoGui_##module##_msgbox(const char *title, const char *text); \
Jul 2, 2007
Jul 2, 2007
136
137
static boolean MojoGui_##module##_promptyn(const char *t1, const char *t2, \
boolean d); \
May 17, 2007
May 17, 2007
138
static MojoGuiYNAN MojoGui_##module##_promptynan(const char *t1, \
Jul 2, 2007
Jul 2, 2007
139
const char *t2, boolean d); \
Nov 24, 2007
Nov 24, 2007
140
141
static boolean MojoGui_##module##_start(const char *t, \
const MojoGuiSplash *splash); \
Dec 20, 2006
Dec 20, 2006
142
static void MojoGui_##module##_stop(void); \
May 10, 2007
May 10, 2007
143
static int MojoGui_##module##_readme(const char *name, const uint8 *data, \
May 10, 2007
May 10, 2007
144
145
size_t len, boolean can_back, \
boolean can_fwd); \
May 10, 2007
May 10, 2007
146
static int MojoGui_##module##_options(MojoGuiSetupOptions *opts, \
May 10, 2007
May 10, 2007
147
boolean can_back, boolean can_fwd); \
May 10, 2007
May 10, 2007
148
149
static char *MojoGui_##module##_destination(const char **r, int recnum, \
int *command, boolean can_back, boolean can_fwd); \
Apr 25, 2009
Apr 25, 2009
150
151
152
static int MojoGui_##module##_productkey(const char *desc, const char *fmt, \
char *buf, const int buflen, boolean can_back, \
boolean can_fwd); \
Apr 21, 2007
Apr 21, 2007
153
static boolean MojoGui_##module##_insertmedia(const char *medianame); \
Feb 20, 2008
Feb 20, 2008
154
static void MojoGui_##module##_progressitem(void); \
May 7, 2007
May 7, 2007
155
static boolean MojoGui_##module##_progress(const char *typ, const char *comp, \
Jan 24, 2008
Jan 24, 2008
156
157
int percent, const char *item, \
boolean can_cancel); \
May 12, 2007
May 12, 2007
158
static void MojoGui_##module##_final(const char *msg); \
Dec 7, 2006
Dec 7, 2006
159
const MojoGui *MojoGuiPlugin_##module(int rev, const MojoSetupEntryPoints *e) \
Mar 25, 2006
Mar 25, 2006
160
{ \
Dec 7, 2006
Dec 7, 2006
161
162
163
164
165
166
167
168
if (rev == MOJOGUI_INTERFACE_REVISION) { \
static const MojoGui retval = { \
MojoGui_##module##_priority, \
MojoGui_##module##_name, \
MojoGui_##module##_init, \
MojoGui_##module##_deinit, \
MojoGui_##module##_msgbox, \
MojoGui_##module##_promptyn, \
May 17, 2007
May 17, 2007
169
MojoGui_##module##_promptynan, \
Dec 20, 2006
Dec 20, 2006
170
171
172
MojoGui_##module##_start, \
MojoGui_##module##_stop, \
MojoGui_##module##_readme, \
Dec 27, 2006
Dec 27, 2006
173
MojoGui_##module##_options, \
Dec 28, 2006
Dec 28, 2006
174
MojoGui_##module##_destination, \
Apr 25, 2009
Apr 25, 2009
175
MojoGui_##module##_productkey, \
Apr 21, 2007
Apr 21, 2007
176
MojoGui_##module##_insertmedia, \
Feb 20, 2008
Feb 20, 2008
177
MojoGui_##module##_progressitem, \
May 7, 2007
May 7, 2007
178
MojoGui_##module##_progress, \
May 12, 2007
May 12, 2007
179
MojoGui_##module##_final, \
Dec 7, 2006
Dec 7, 2006
180
181
}; \
entry = e; \
Nov 29, 2006
Nov 29, 2006
182
183
184
return &retval; \
} \
return NULL; \
Mar 25, 2006
Mar 25, 2006
185
186
} \
Mar 27, 2006
Mar 27, 2006
187
#define CREATE_MOJOGUI_ENTRY_POINT(module) \
Dec 7, 2006
Dec 7, 2006
188
const MojoGui *MOJOGUI_ENTRY_POINT(int rev, const MojoSetupEntryPoints *e) \
Mar 27, 2006
Mar 27, 2006
189
{ \
Dec 7, 2006
Dec 7, 2006
190
return MojoGuiPlugin_##module(rev, e); \
Mar 27, 2006
Mar 27, 2006
191
192
} \
Mar 2, 2008
Mar 2, 2008
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
// Redefine things that need to go through the plugin entry point interface,
// so plugins calling into the MojoSetup core can use the same code as the
// rest of the app.
#ifdef _
#undef _
#endif
#define _(x) entry->translate(x)
#ifdef xmalloc
#undef xmalloc
#endif
#define xmalloc(x) entry->xmalloc(x)
#ifdef xrealloc
#undef xrealloc
#endif
#define xrealloc(x,y) entry->xrealloc(x,y)
#ifdef xstrdup
#undef xstrdup
#endif
#define xstrdup(x) entry->xstrdup(x)
#ifdef xstrncpy
#undef xstrncpy
#endif
#define xstrncpy(x,y,z) entry->xstrcpy(x,y,z)
#ifdef logWarning
#undef logWarning
#endif
#define logWarning entry->logWarning
#ifdef logError
#undef logError
#endif
#define logError entry->logError
#ifdef logInfo
#undef logInfo
#endif
#define logInfo entry->logInfo
#ifdef logDebug
#undef logDebug
#endif
#define logDebug entry->logDebug
#ifdef format
#undef format
#endif
#define format entry->format
#ifdef numstr
#undef numstr
#endif
#define numstr(x) entry->numstr(x)
#ifdef ticks
#undef ticks
#endif
#define ticks() entry->ticks()
Mar 2, 2008
Mar 2, 2008
258
259
260
261
262
#ifdef utf8codepoint
#undef utf8codepoint
#endif
#define utf8codepoint(x) entry->utf8codepoint(x)
Mar 3, 2008
Mar 3, 2008
263
264
265
266
267
268
269
270
271
272
#ifdef utf8len
#undef utf8len
#endif
#define utf8len(x) entry->utf8len(x)
#ifdef splitText
#undef splitText
#endif
#define splitText(w,x,y,z) entry->splitText(w,x,y,z)
Apr 25, 2009
Apr 25, 2009
273
274
275
#ifdef isValidProductKey
#undef isValidProductKey
#endif
Apr 25, 2009
Apr 25, 2009
276
#define isValidProductKey(x,y) entry->isValidProductKey(x,y)
Apr 25, 2009
Apr 25, 2009
277
Mar 25, 2006
Mar 25, 2006
278
#endif
Mar 25, 2006
Mar 25, 2006
279
Nov 29, 2006
Nov 29, 2006
280
281
282
/*
* make some decisions about which GUI plugins to build...
Dec 7, 2006
Dec 7, 2006
283
284
* We list them all here, but some are built, some aren't. Some are DLLs,
* some aren't...
Nov 29, 2006
Nov 29, 2006
285
286
*/
Dec 7, 2006
Dec 7, 2006
287
const MojoGui *MojoGuiPlugin_stdio(int rev, const MojoSetupEntryPoints *e);
May 19, 2007
May 19, 2007
288
const MojoGui *MojoGuiPlugin_ncurses(int rev, const MojoSetupEntryPoints *e);
May 10, 2007
May 10, 2007
289
const MojoGui *MojoGuiPlugin_gtkplus2(int rev, const MojoSetupEntryPoints *e);
Jun 1, 2007
Jun 1, 2007
290
const MojoGui *MojoGuiPlugin_www(int rev, const MojoSetupEntryPoints *e);
Dec 7, 2006
Dec 7, 2006
291
const MojoGui *MojoGuiPlugin_macosx(int rev, const MojoSetupEntryPoints *e);
Dec 1, 2006
Dec 1, 2006
292
Nov 29, 2006
Nov 29, 2006
293
294
// !!! FIXME: Qt? KDE? Gnome? Console? Cocoa?
295
296
297
298
299
300
#ifdef __cplusplus
}
#endif
#endif
Mar 25, 2006
Mar 25, 2006
301
// end of gui.h ...