1
//------------------------------------------------------------------------
2
// Options : Unix/FLTK Option boxes
3
//------------------------------------------------------------------------
5
// GL-Friendly Node Builder (C) 2000-2007 Andrew Apted
7
// Based on 'BSP 2.3' by Colin Reed, Lee Killough and others.
9
// This program is free software; you can redistribute it and/or
10
// modify it under the terms of the GNU General Public License
11
// as published by the Free Software Foundation; either version 2
12
// of the License, or (at your option) any later version.
14
// This program is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
// GNU General Public License for more details.
19
//------------------------------------------------------------------------
21
// this includes everything we need
25
#define BM_BUTTONTYPE FL_ROUND_DOWN_BOX
26
#define BM_BUTTONSIZE 30
29
static void build_mode_radio_CB(Fl_Widget *w, void *data)
31
boolean_g old_gwa = guix_info.gwa_mode;
33
guix_win->build_mode->WriteInfo();
35
// communicate with output file widget, for GWA mode
36
if (old_gwa != guix_info.gwa_mode)
38
guix_win->files->GWA_Changed();
41
guix_win->misc_opts->GWA_Changed();
46
// BuildMode Constructor
48
Guix_BuildMode::Guix_BuildMode(int x, int y, int w, int h) :
49
Fl_Group(x, y, w, h, "Build Mode")
51
// cancel the automatic 'begin' in Fl_Group constructor
55
resizable(0); // no resizing the kiddies, please
57
labelfont(FL_HELVETICA | FL_BOLD);
58
labeltype(FL_NORMAL_LABEL);
59
align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT | FL_ALIGN_TOP);
61
// create the children
66
gwa = new Fl_Check_Button(CX, CY,
67
BM_BUTTONSIZE, BM_BUTTONSIZE, "GWA Mode");
68
gwa->down_box(BM_BUTTONTYPE);
69
gwa->type(FL_RADIO_BUTTON);
70
gwa->align(FL_ALIGN_RIGHT);
71
gwa->callback((Fl_Callback *) build_mode_radio_CB);
76
maybe_normal = new Fl_Check_Button(CX, CY,
77
BM_BUTTONSIZE, BM_BUTTONSIZE, "GL, Normal if missing");
78
maybe_normal->down_box(BM_BUTTONTYPE);
79
maybe_normal->type(FL_RADIO_BUTTON);
80
maybe_normal->align(FL_ALIGN_RIGHT);
81
maybe_normal->callback((Fl_Callback *) build_mode_radio_CB);
86
both = new Fl_Check_Button(CX, CY,
87
BM_BUTTONSIZE, BM_BUTTONSIZE, "GL and Normal nodes");
88
both->down_box(BM_BUTTONTYPE);
89
both->type(FL_RADIO_BUTTON);
90
both->align(FL_ALIGN_RIGHT);
91
both->callback((Fl_Callback *) build_mode_radio_CB);
96
gl_only = new Fl_Check_Button(CX, CY,
97
BM_BUTTONSIZE, BM_BUTTONSIZE, "GL nodes only");
98
gl_only->down_box(BM_BUTTONTYPE);
99
gl_only->type(FL_RADIO_BUTTON);
100
gl_only->align(FL_ALIGN_RIGHT);
101
gl_only->callback((Fl_Callback *) build_mode_radio_CB);
111
// BuildMode Destructor
113
Guix_BuildMode::~Guix_BuildMode()
119
void Guix_BuildMode::ReadInfo()
121
if (guix_info.gwa_mode)
124
else if (guix_info.no_normal)
127
else if (guix_info.force_normal)
131
maybe_normal->setonly();
133
// redraw them all (just to be safe)
137
maybe_normal->redraw();
141
void Guix_BuildMode::WriteInfo()
143
// default: everything false
144
guix_info.gwa_mode = FALSE;
145
guix_info.no_normal = FALSE;
146
guix_info.force_normal = FALSE;
150
guix_info.gwa_mode = TRUE;
152
else if (gl_only->value())
154
guix_info.no_normal = TRUE;
156
else if (both->value())
158
guix_info.force_normal = TRUE;
163
void Guix_BuildMode::LockOut(boolean_g lock_it)
168
maybe_normal->set_output();
170
gl_only->set_output();
175
maybe_normal->clear_output();
176
both->clear_output();
177
gl_only->clear_output();
182
//------------------------------------------------------------------------
185
static void misc_opts_check_CB(Fl_Widget *w, void *data)
187
guix_win->misc_opts->WriteInfo();
192
// MiscOptions Constructor
194
Guix_MiscOptions::Guix_MiscOptions(int x, int y, int w, int h) :
195
Fl_Group(x, y, w, h, "Misc Options")
197
// cancel the automatic 'begin' in Fl_Group constructor
201
resizable(0); // no resizing the kiddies, please
203
labelfont(FL_HELVETICA | FL_BOLD);
204
labeltype(FL_NORMAL_LABEL);
205
align(FL_ALIGN_INSIDE | FL_ALIGN_LEFT | FL_ALIGN_TOP);
212
warnings = new Fl_Check_Button(CX, CY, 22, 22, "Extra Warnings");
213
warnings->down_box(FL_DOWN_BOX);
214
warnings->align(FL_ALIGN_RIGHT);
215
warnings->callback((Fl_Callback *) misc_opts_check_CB);
220
no_reject = new Fl_Check_Button(CX, CY, 22, 22, "Don't clobber REJECT");
221
no_reject->down_box(FL_DOWN_BOX);
222
no_reject->align(FL_ALIGN_RIGHT);
223
no_reject->callback((Fl_Callback *) misc_opts_check_CB);
228
pack_sides = new Fl_Check_Button(CX, CY, 22, 22, "Pack Sidedefs");
229
pack_sides->down_box(FL_DOWN_BOX);
230
pack_sides->align(FL_ALIGN_RIGHT);
231
pack_sides->callback((Fl_Callback *) misc_opts_check_CB);
236
choose_fresh = new Fl_Check_Button(CX, CY, 22, 22, "Fresh Partition Lines");
237
choose_fresh->down_box(FL_DOWN_BOX);
238
choose_fresh->align(FL_ALIGN_RIGHT);
239
choose_fresh->callback((Fl_Callback *) misc_opts_check_CB);
249
// MiscOptions Destructor
251
Guix_MiscOptions::~Guix_MiscOptions()
257
void Guix_MiscOptions::ReadInfo()
259
choose_fresh->value(guix_info.fast ? 0 : 1); // API change
260
choose_fresh->redraw();
262
warnings->value(guix_info.mini_warnings ? 1 : 0);
265
no_reject->value(guix_info.no_reject ? 1 : 0);
268
pack_sides->value(guix_info.pack_sides ? 1 : 0);
269
pack_sides->redraw();
275
void Guix_MiscOptions::WriteInfo()
277
guix_info.fast = choose_fresh->value() ? FALSE : TRUE; // API change
278
guix_info.no_reject = no_reject->value() ? TRUE : FALSE;
279
guix_info.mini_warnings = warnings->value() ? TRUE : FALSE;
280
guix_info.pack_sides = pack_sides->value() ? TRUE : FALSE;
284
void Guix_MiscOptions::GWA_Changed()
286
if (guix_info.gwa_mode)
288
no_reject->deactivate();
289
pack_sides->deactivate();
293
no_reject->activate();
294
pack_sides->activate();
297
if (guix_info.force_normal)
298
choose_fresh->deactivate();
300
choose_fresh->activate();
304
void Guix_MiscOptions::LockOut(boolean_g lock_it)
308
choose_fresh->set_output();
309
warnings->set_output();
310
no_reject->set_output();
311
pack_sides->set_output();
315
choose_fresh->clear_output();
316
warnings->clear_output();
317
no_reject->clear_output();
318
pack_sides->clear_output();