Subversion Repositories f9daq

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
146 f9daq 1
#include "../include/substructure.h"
2
#include "../include/workstation.h"
3
#include <stdio.h> 
4
 
5
TSubStructure::TSubStructure()
6
{
7
   // ID of certain objects
8
   /*
9
    * id = 0 -> Label + Text Entry
10
    * id = 1 -> Label + Text Entry + Button
11
    * id = 2 -> Label + Button
12
    * id = 3 -> Label + Number Entry
13
    * id = 4 -> Text Entry + Button
14
    * id = 5 -> Label + Dropdown menu
15
    * id = 6 -> 2 or more buttons
16
    * id = 7 -> Label + 2 Number Entries
17
    * id = 8 -> Checkbutton list
18
    * id = 9 -> Button + horizontal progress bar
19
    * id = 10 -> Label + horizontal progress bar
20
    * id = 11 -> Button + horizontal progress bar + Text Entry
21
    * id = 12 -> Checkbutton + Number Entry
22
    * id = 13 -> Checkbutton + Text Entry
23
   */
24
}
25
 
26
TSubStructure::~TSubStructure()
27
{
28
   // TODO (delete and new not working as they should)
29
}
30
 
31
// Widget with Label and Text Entry
32
bool TSubStructure::TGLabelTEntry(TGWindow *parent, int w, int h, const char *label, const char *deftext = "", const char *layout = "oneline")
33
{
34
   id = 0;
35
 
36
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
37
 
38
   if(strcmp("oneline", layout) == 0)
39
   {
40
      outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
41
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
42
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,6,2,2,2);
43
   }
44
   else if(strcmp("twoline", layout) == 0)
45
   {
46
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
47
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
48
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,0,2,2,2);
49
   }
50
   lab = new TGLabel(outsidebox, label);
51
   outsidebox->AddFrame(lab, f0);
52
   widgetTE = new TGTextEntry(outsidebox, deftext);
53
   outsidebox->AddFrame(widgetTE, f0expandX);
54
 
55
   if(DBGSIG > 1) printf("id = %d\n",id);
56
 
57
   return true;
58
}
59
 
60
// Widget with Label, Text Entry and Button
61
bool TSubStructure::TGLabelTEntryButton(TGWindow *parent, int w, int h, const char *label, const char *deftext = "", const char *buttext = "Set", const char *layout = "oneline")
62
{
63
   id = 1;
64
 
65
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
66
 
67
   if(strcmp("oneline", layout) == 0)
68
   {
69
      outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
70
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
71
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,6,6,2,2);
72
      lab = new TGLabel(outsidebox, label);
73
      outsidebox->AddFrame(lab, f0);
74
      widgetTE = new TGTextEntry(outsidebox, deftext);
75
      widgetTE->Resize(w-12,22);
76
      outsidebox->AddFrame(widgetTE, f0expandX);
77
      widgetTB[0] = new TGTextButton(outsidebox, buttext);
78
      widgetTB[0]->SetTextJustify(36);
79
      widgetTB[0]->SetWrapLength(-1);
80
      widgetTB[0]->Resize(60,22);
81
      outsidebox->AddFrame(widgetTB[0], f0);
82
   }
83
   else if(strcmp("twoline", layout) == 0)
84
   {
85
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
86
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
87
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,0,6,2,2);
88
      lab = new TGLabel(outsidebox, label);
89
      outsidebox->AddFrame(lab, f0);
90
 
91
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
92
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
93
      widgetTE = new TGTextEntry(fH1, deftext);
94
      widgetTE->Resize(w-12,22);
95
      fH1->AddFrame(widgetTE, f0expandX);
96
      widgetTB[0] = new TGTextButton(fH1, buttext);
97
      widgetTB[0]->SetTextJustify(36);
98
      widgetTB[0]->SetWrapLength(-1);
99
      widgetTB[0]->Resize(60,22);
100
      fH1->AddFrame(widgetTB[0], f0);
101
      outsidebox->AddFrame(fH1, f0expandX);
102
   }
103
 
104
   if(DBGSIG > 1) printf("id = %d\n",id);
105
 
106
   return true;
107
}
108
 
109
// Widget with Label and Button
110
bool TSubStructure::TGLabelButton(TGWindow *parent, int w, int h, const char *label, const char *buttext = "Set", const char *pos = "left")
111
{
112
   id = 2;
113
 
114
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
115
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
116
   if(strcmp("left",pos) == 0)
117
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
118
   else if(strcmp("center",pos) == 0)
119
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
120
   else if(strcmp("right",pos) == 0)
121
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
122
 
123
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
124
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
125
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
126
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
127
   lab = new TGLabel(fH1, label);
128
   fH1->AddFrame(lab, f0);
129
   widgetTB[0] = new TGTextButton(fH1, buttext);
130
   widgetTB[0]->SetTextJustify(36);
131
   widgetTB[0]->SetWrapLength(-1);
132
   widgetTB[0]->Resize(60,22);
133
   fH1->AddFrame(widgetTB[0], f1);
134
   outsidebox->AddFrame(fH1, f2);
135
 
136
   if(DBGSIG > 1) printf("id = %d\n",id);
137
 
138
   return true;
139
}
140
 
141
// Widget with Label and Number Entry
142
bool TSubStructure::TGLabelNEntry(TGWindow *parent, int w, int h, const char *label, double defval, double *format, const char *pos)
143
{
144
   id = 3;
145
 
146
   TGNumberFormat::EStyle numtype;
147
   TGNumberFormat::EAttribute negpos;
148
   TGNumberFormat::ELimit numlim;
149
   bool arelimits[] = {false,false};
150
 
151
   // Number type (integer, real)
152
   if( (int)format[1] == 0 ) numtype = TGNumberFormat::kNESInteger;
153
   else if( (int)format[1] == 1 ) numtype = TGNumberFormat::kNESRealOne;
154
   else if( (int)format[1] == 2 ) numtype = TGNumberFormat::kNESRealTwo;
155
   else if( (int)format[1] == 3 ) numtype = TGNumberFormat::kNESRealThree;
156
   else if( (int)format[1] == 4 ) numtype = TGNumberFormat::kNESRealFour;
157
   else if( (int)format[1] == -1 ) numtype = TGNumberFormat::kNESReal;
158
 
159
   // Negative or positive
160
   if( (int)format[2] == 0 ) negpos = TGNumberFormat::kNEAAnyNumber;
161
   else if( (int)format[2] == 1 ) negpos = TGNumberFormat::kNEAPositive;
162
   else if( (int)format[2] == 2 ) negpos = TGNumberFormat::kNEANonNegative;
163
 
164
   // Limits
165
   if( (int)format[3] == 0 ) numlim = TGNumberFormat::kNELNoLimits;
166
   else if( (int)format[3] == 1 ) { numlim = TGNumberFormat::kNELLimitMax; arelimits[1] = true; }
167
   else if( (int)format[3] == 2 ) { numlim = TGNumberFormat::kNELLimitMinMax; arelimits[0] = true; arelimits[1] = true; }
168
   else if( (int)format[3] == -1 ) { numlim = TGNumberFormat::kNELLimitMin; arelimits[0] = true; }
169
 
170
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
171
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
172
   if(strcmp("left",pos) == 0)
173
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
174
   else if(strcmp("center",pos) == 0)
175
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
176
   else if(strcmp("right",pos) == 0)
177
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
178
 
179
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
180
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
181
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
182
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
183
   lab = new TGLabel(fH1, label);
184
   fH1->AddFrame(lab, f0);
185
   if( (int)format[1] == 0 )
186
   {
187
      if( arelimits[0] && arelimits[1] )
188
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, (int)format[4], (int)format[5]);
189
      else if( arelimits[0] )
190
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, (int)format[4], 0);
191
      else if( arelimits[1] )
192
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, 0, (int)format[4]);
193
      else
194
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim);
195
   }
196
   else if( (((int)format[1] > 0) && ((int)format[1] < 5)) || ((int)format[1] == -1) )
197
   {
198
      if( arelimits[0] && arelimits[1] )
199
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, format[4], format[5]);
200
      else if( arelimits[0] )
201
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, format[4], 0);
202
      else if( arelimits[1] )
203
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, 0, format[4]);
204
      else
205
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim);
206
   }
207
   else
208
   {
209
      delete outsidebox;
210
      delete lab;
211
      return false;
212
   }
213
   fH1->AddFrame(widgetNE[0], f1);
214
   outsidebox->AddFrame(fH1, f2);
215
 
216
   if(DBGSIG > 1) printf("id = %d\n",id);
217
 
218
   return true;
219
}
220
 
221
// Widget with Text Entry and Button
222
bool TSubStructure::TGTEntryButton(TGWindow *parent, int w, int h, const char *deftext = "", const char *buttext = "Set")
223
{
224
   id = 4;
225
 
226
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
227
   f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,2,6,2,2);
228
 
229
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
230
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
231
   widgetTE = new TGTextEntry(outsidebox, deftext);
232
   widgetTE->Resize(w-12,22);
233
   outsidebox->AddFrame(widgetTE, f0expandX);
234
   widgetTB[0] = new TGTextButton(outsidebox, buttext);
235
   widgetTB[0]->SetTextJustify(36);
236
   widgetTB[0]->SetWrapLength(-1);
237
   widgetTB[0]->Resize(60,22);
238
   outsidebox->AddFrame(widgetTB[0], f0);
239
 
240
   if(DBGSIG > 1) printf("id = %d\n",id);
241
 
242
   return true;
243
}
244
 
245
// Widget with Label and Dropdown menu
246
bool TSubStructure::TGLabelDrop(TGWindow *parent, int w, int h, const char *label, int nrentries, const char *entrytext[512], const char *selecttext)
247
{
248
   id = 5;
249
 
250
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
251
   f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,6,2,2,2);
252
 
253
   int sel = 0;
254
 
255
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
256
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
257
   lab = new TGLabel(outsidebox, label);
258
   outsidebox->AddFrame(lab, f0);
259
   widgetCB = new TGComboBox(outsidebox, 200);
260
   for(int i = 0; i < nrentries; i++)
261
   {
262
      widgetCB->AddEntry(entrytext[i], i);
263
      if( strcmp(entrytext[i], selecttext) == 0 )
264
         sel = i;
265
   }
266
   widgetCB->Resize(50,22);
267
   widgetCB->Select(sel);
268
   outsidebox->AddFrame(widgetCB, f0expandX);
269
 
270
   if(DBGSIG > 1) printf("id = %d\n",id);
271
 
272
   return true;
273
}
274
 
275
// Widget with 2 or more buttons (up to 6)
276
bool TSubStructure::TGMultiButton(TGWindow *parent, int w, int h, int nrbuttons, const char *buttext[512], const char *pos)
277
{
278
   id = 6;
279
 
280
   if(nrbuttons > 6) return false;
281
 
282
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
283
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
284
   if(strcmp("left",pos) == 0)
285
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
286
   else if(strcmp("center",pos) == 0)
287
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
288
   else if(strcmp("right",pos) == 0)
289
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
290
 
291
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
292
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
293
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
294
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
295
   for(int i = 0; i < nrbuttons; i++)
296
   {
297
      widgetTB[i] = new TGTextButton(fH1, buttext[i]);
298
      widgetTB[i]->SetTextJustify(36);
299
      widgetTB[i]->SetWrapLength(-1);
300
      widgetTB[i]->Resize((w-6-8)/nrbuttons,22);
301
      if(i == 0) fH1->AddFrame(widgetTB[i], f0);
302
      else fH1->AddFrame(widgetTB[i], f1);
303
   }
304
   outsidebox->AddFrame(fH1, f2);
305
 
306
   if(DBGSIG > 1) printf("id = %d\n",id);
307
 
308
   return true;
309
}
310
 
311
// Widget with Label and two Number Entries
312
bool TSubStructure::TGLabelDoubleNEntry(TGWindow *parent, int w, int h, const char *label, double defval1, double *format1, double defval2, double *format2, const char *pos)
313
{
314
   id = 7;
315
 
316
   TGNumberFormat::EStyle numtype1, numtype2;
317
   TGNumberFormat::EAttribute negpos1, negpos2;
318
   TGNumberFormat::ELimit numlim1, numlim2;
319
   bool arelimits[] = {false,false,false,false};
320
 
321
   // Number type (integer, real)
322
   if( (int)format1[1] == 0 ) numtype1 = TGNumberFormat::kNESInteger;
323
   else if( (int)format1[1] == 1 ) numtype1 = TGNumberFormat::kNESRealOne;
324
   else if( (int)format1[1] == 2 ) numtype1 = TGNumberFormat::kNESRealTwo;
325
   else if( (int)format1[1] == 3 ) numtype1 = TGNumberFormat::kNESRealThree;
326
   else if( (int)format1[1] == 4 ) numtype1 = TGNumberFormat::kNESRealFour;
327
   else if( (int)format1[1] == -1 ) numtype1 = TGNumberFormat::kNESReal;
328
 
329
   if( (int)format2[1] == 0 ) numtype2 = TGNumberFormat::kNESInteger;
330
   else if( (int)format2[1] == 1 ) numtype2 = TGNumberFormat::kNESRealOne;
331
   else if( (int)format2[1] == 2 ) numtype2 = TGNumberFormat::kNESRealTwo;
332
   else if( (int)format2[1] == 3 ) numtype2 = TGNumberFormat::kNESRealThree;
333
   else if( (int)format2[1] == 4 ) numtype2 = TGNumberFormat::kNESRealFour;
334
   else if( (int)format2[1] == -1 ) numtype2 = TGNumberFormat::kNESReal;
335
 
336
   // Negative or positive
337
   if( (int)format1[2] == 0 ) negpos1 = TGNumberFormat::kNEAAnyNumber;
338
   else if( (int)format1[2] == 1 ) negpos1 = TGNumberFormat::kNEAPositive;
339
   else if( (int)format1[2] == 2 ) negpos1 = TGNumberFormat::kNEANonNegative;
340
 
341
   if( (int)format2[2] == 0 ) negpos2 = TGNumberFormat::kNEAAnyNumber;
342
   else if( (int)format2[2] == 1 ) negpos2 = TGNumberFormat::kNEAPositive;
343
   else if( (int)format2[2] == 2 ) negpos2 = TGNumberFormat::kNEANonNegative;
344
 
345
   // Limits
346
   if( (int)format1[3] == 0 ) numlim1 = TGNumberFormat::kNELNoLimits;
347
   else if( (int)format1[3] == 1 ) { numlim1 = TGNumberFormat::kNELLimitMax; arelimits[1] = true; }
348
   else if( (int)format1[3] == 2 ) { numlim1 = TGNumberFormat::kNELLimitMinMax; arelimits[0] = true; arelimits[1] = true; }
349
   else if( (int)format1[3] == -1 ) { numlim1 = TGNumberFormat::kNELLimitMin; arelimits[0] = true; }
350
 
351
   if( (int)format2[3] == 0 ) numlim2 = TGNumberFormat::kNELNoLimits;
352
   else if( (int)format2[3] == 1 ) { numlim2 = TGNumberFormat::kNELLimitMax; arelimits[3] = true; }
353
   else if( (int)format2[3] == 2 ) { numlim2 = TGNumberFormat::kNELLimitMinMax; arelimits[2] = true; arelimits[3] = true; }
354
   else if( (int)format2[3] == -1 ) { numlim2 = TGNumberFormat::kNELLimitMin; arelimits[2] = true; }
355
 
356
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
357
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
358
   if(strcmp("left",pos) == 0)
359
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
360
   else if(strcmp("center",pos) == 0)
361
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
362
   else if(strcmp("right",pos) == 0)
363
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
364
 
365
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
366
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
367
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
368
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
369
   lab = new TGLabel(fH1, label);
370
   fH1->AddFrame(lab, f0);
371
   if( (int)format1[1] == 0 )
372
   {
373
      if( arelimits[0] && arelimits[1] )
374
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, (int)format1[4], (int)format1[5]);
375
      else if( arelimits[0] )
376
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, (int)format1[4], 0);
377
      else if( arelimits[1] )
378
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, 0, (int)format1[4]);
379
      else
380
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval1, (int)format1[0], 999, numtype1, negpos1, numlim1);
381
   }
382
   else if( (((int)format1[1] > 0) && ((int)format1[1] < 5)) || ((int)format1[1] == -1) )
383
   {
384
      if( arelimits[0] && arelimits[1] )
385
         widgetNE[0] = new TGNumberEntry(fH1, defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, format1[4], format1[5]);
386
      else if( arelimits[0] )
387
         widgetNE[0] = new TGNumberEntry(fH1, defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, format1[4], 0);
388
      else if( arelimits[1] )
389
         widgetNE[0] = new TGNumberEntry(fH1, defval1, (int)format1[0], 999, numtype1, negpos1, numlim1, 0, format1[4]);
390
      else
391
         widgetNE[0] = new TGNumberEntry(fH1, defval1, (int)format1[0], 999, numtype1, negpos1, numlim1);
392
   }
393
   fH1->AddFrame(widgetNE[0], f1);
394
 
395
   if( (int)format2[1] == 0 )
396
   {
397
      if( arelimits[2] && arelimits[3] )
398
         widgetNE[1] = new TGNumberEntry(fH1, (int)defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, (int)format2[4], (int)format2[5]);
399
      else if( arelimits[2] )
400
         widgetNE[1] = new TGNumberEntry(fH1, (int)defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, (int)format2[4], 0);
401
      else if( arelimits[3] )
402
         widgetNE[1] = new TGNumberEntry(fH1, (int)defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, 0, (int)format2[4]);
403
      else
404
         widgetNE[1] = new TGNumberEntry(fH1, (int)defval2, (int)format2[0], 999, numtype2, negpos2, numlim2);
405
   }
406
   else if( (((int)format2[1] > 0) && ((int)format2[1] < 5)) || ((int)format2[1] == -1) )
407
   {
408
      if( arelimits[2] && arelimits[3] )
409
         widgetNE[1] = new TGNumberEntry(fH1, defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, format2[4], format2[5]);
410
      else if( arelimits[2] )
411
         widgetNE[1] = new TGNumberEntry(fH1, defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, format2[4], 0);
412
      else if( arelimits[3] )
413
         widgetNE[1] = new TGNumberEntry(fH1, defval2, (int)format2[0], 999, numtype2, negpos2, numlim2, 0, format2[4]);
414
      else
415
         widgetNE[1] = new TGNumberEntry(fH1, defval2, (int)format2[0], 999, numtype2, negpos2, numlim2);
416
   }
417
   else
418
   {
419
      delete outsidebox;
420
      delete lab;
421
      return false;
422
   }
423
   fH1->AddFrame(widgetNE[1], f1);
424
   outsidebox->AddFrame(fH1, f2);
425
 
426
   if(DBGSIG > 1) printf("id = %d\n",id);
427
 
428
   return true;
429
}
430
 
431
// Widget with 1 or more check boxes (up to 9)
432
bool TSubStructure::TGCheckList(TGWindow *parent, int w, int h, int nrchecks, const char *labels[512], int *onoff, const char *layout, const char *pos)
433
{
434
   id = 8;
435
 
436
   if(nrchecks > 8) return false;
437
 
438
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
439
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
440
   if(strcmp("left",pos) == 0)
441
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
442
   else if(strcmp("center",pos) == 0)
443
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
444
   else if(strcmp("right",pos) == 0)
445
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
446
 
447
   if(strcmp("left",pos) == 0)
448
      f3 = new TGLayoutHints(kLHintsLeft,2,2,2,2);
449
   else if(strcmp("center",pos) == 0)
450
      f3 = new TGLayoutHints(kLHintsCenterX,2,2,2,2);
451
   else if(strcmp("right",pos) == 0)
452
      f3 = new TGLayoutHints(kLHintsRight,2,2,2,2);
453
 
454
   if(strcmp("horizontal", layout) == 0)
455
   {
456
      outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
457
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
458
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
459
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
460
 
461
      for(int i = 0; i < nrchecks; i++)
462
      {
463
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
464
         if(onoff[i] == 0)
465
            widgetChBox[i]->SetState(kButtonUp);
466
         else if(onoff[i] == 1)
467
            widgetChBox[i]->SetState(kButtonDown);
468
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
469
         if(i == 0) fH1->AddFrame(widgetChBox[i], f0);
470
         else fH1->AddFrame(widgetChBox[i], f1);
471
      }
472
 
473
      outsidebox->AddFrame(fH1, f2);
474
   }
475
   else if(strcmp("vertical", layout) == 0)
476
   {
477
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
478
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
479
 
480
      for(int i = 0; i < nrchecks; i++)
481
      {
482
         widgetChBox[i] = new TGCheckButton(outsidebox, labels[i]);
483
         if(onoff[i] == 0)
484
            widgetChBox[i]->SetState(kButtonUp);
485
         else if(onoff[i] == 1)
486
            widgetChBox[i]->SetState(kButtonDown);
487
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
488
         outsidebox->AddFrame(widgetChBox[i], f3);
489
      }
490
   }
491
   else if(strcmp("twoline", layout) == 0)
492
   {
493
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
494
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
495
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
496
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
497
 
498
      for(int i = 0; i < TMath::Ceil(nrchecks/2.); i++)
499
      {
500
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
501
         if(onoff[i] == 0)
502
            widgetChBox[i]->SetState(kButtonUp);
503
         else if(onoff[i] == 1)
504
            widgetChBox[i]->SetState(kButtonDown);
505
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
506
         if(i == 0) fH1->AddFrame(widgetChBox[i], f0);
507
         else fH1->AddFrame(widgetChBox[i], f1);
508
      }
509
      outsidebox->AddFrame(fH1, f2);
510
 
511
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
512
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
513
 
514
      for(int i = TMath::Ceil(nrchecks/2.); i < nrchecks; i++)
515
      {
516
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
517
         if(onoff[i] == 0)
518
            widgetChBox[i]->SetState(kButtonUp);
519
         else if(onoff[i] == 1)
520
            widgetChBox[i]->SetState(kButtonDown);
521
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
522
         if(i == TMath::Ceil(nrchecks/2.)) fH1->AddFrame(widgetChBox[i], f0);
523
         else fH1->AddFrame(widgetChBox[i], f1);
524
      }
525
      outsidebox->AddFrame(fH1, f2);
526
   }
527
   else if(strcmp("threeline", layout) == 0)
528
   {
529
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
530
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
531
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
532
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
533
 
534
      for(int i = 0; i < TMath::Ceil(nrchecks/3.); i++)
535
      {
536
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
537
         if(onoff[i] == 0)
538
            widgetChBox[i]->SetState(kButtonUp);
539
         else if(onoff[i] == 1)
540
            widgetChBox[i]->SetState(kButtonDown);
541
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
542
         if(i == 0) fH1->AddFrame(widgetChBox[i], f0);
543
         else fH1->AddFrame(widgetChBox[i], f1);
544
      }
545
      outsidebox->AddFrame(fH1, f2);
546
 
547
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
548
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
549
 
550
      for(int i = TMath::Ceil(nrchecks/3.); i < TMath::Ceil(2.*nrchecks/3.); i++)
551
      {
552
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
553
         if(onoff[i] == 0)
554
            widgetChBox[i]->SetState(kButtonUp);
555
         else if(onoff[i] == 1)
556
            widgetChBox[i]->SetState(kButtonDown);
557
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
558
         if(i == TMath::Ceil(nrchecks/3.)) fH1->AddFrame(widgetChBox[i], f0);
559
         else fH1->AddFrame(widgetChBox[i], f1);
560
      }
561
      outsidebox->AddFrame(fH1, f2);
562
 
563
      fH1 = new TGHorizontalFrame(outsidebox, 100, h);
564
      if(DBGSIG > 1) fH1->SetBackgroundColor(200);
565
 
566
      for(int i = TMath::Ceil(2.*nrchecks/3.); i < nrchecks; i++)
567
      {
568
         widgetChBox[i] = new TGCheckButton(fH1, labels[i]);
569
         if(onoff[i] == 0)
570
            widgetChBox[i]->SetState(kButtonUp);
571
         else if(onoff[i] == 1)
572
            widgetChBox[i]->SetState(kButtonDown);
573
         widgetChBox[i]->Resize((w-6-8)/nrchecks,22);
574
         if(i == TMath::Ceil(2.*nrchecks/3.)) fH1->AddFrame(widgetChBox[i], f0);
575
         else fH1->AddFrame(widgetChBox[i], f1);
576
      }
577
      outsidebox->AddFrame(fH1, f2);
578
   }
579
   else
580
      return false;
581
 
582
   if(DBGSIG > 1) printf("id = %d\n",id);
583
 
584
   return true;
585
}
586
 
587
// Widget with Button and horizontal progress bar
588
bool TSubStructure::TGButtonProgress(TGWindow *parent, int w, int h, const char *buttext = "Set")
589
{
590
   id = 9;
591
 
592
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
593
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,20,2,2,2);
594
   f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
595
 
596
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
597
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
598
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
599
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
600
   widgetTB[0] = new TGTextButton(fH1, buttext);
601
   widgetTB[0]->SetTextJustify(36);
602
   widgetTB[0]->SetWrapLength(-1);
603
   widgetTB[0]->Resize(60,22);
604
   fH1->AddFrame(widgetTB[0], f0);
605
   widgetPB = new TGHProgressBar(fH1, TGProgressBar::kStandard, w/2);
606
   widgetPB->ShowPosition();
607
   widgetPB->SetRange(0,100);
608
   widgetPB->SetBarColor("green");
609
   fH1->AddFrame(widgetPB, f1);
610
 
611
   outsidebox->AddFrame(fH1, f2);
612
 
613
   if(DBGSIG > 1) printf("id = %d\n",id);
614
 
615
   return true;
616
}
617
 
618
// Widget with Button and horizontal progress bar
619
bool TSubStructure::TGButtonProgressTEntry(TGWindow *parent, int w, int h, const char *buttext = "Set", const char *deftext = "Remaining time: ")
620
{
621
   id = 11;
622
 
623
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
624
   f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,20,2,2,2);
625
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,20,2,2,2);
626
   f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
627
 
628
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
629
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
630
   fH1 = new TGHorizontalFrame(outsidebox, 5*w/6, h, kFixedWidth);
631
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
632
   widgetTB[0] = new TGTextButton(fH1, buttext);
633
   widgetTB[0]->SetTextJustify(36);
634
   widgetTB[0]->SetWrapLength(-1);
635
   widgetTB[0]->Resize(60,22);
636
   fH1->AddFrame(widgetTB[0], f0);
637
   widgetPB = new TGHProgressBar(fH1, TGProgressBar::kStandard, w/4);
638
   widgetPB->ShowPosition();
639
   widgetPB->SetRange(0,100);
640
   widgetPB->SetBarColor("green");
641
   fH1->AddFrame(widgetPB, f1);
642
   widgetTE = new TGTextEntry(fH1, deftext);
643
   fH1->AddFrame(widgetTE, f0expandX);
644
 
645
   outsidebox->AddFrame(fH1, f2);
646
 
647
   if(DBGSIG > 1) printf("id = %d\n",id);
648
 
649
   return true;
650
}
651
 
652
// Widget with Label and horizontal progress bar
653
bool TSubStructure::TGLabelProgress(TGWindow *parent, int w, int h, const char *label)
654
{
655
   id = 10;
656
 
657
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
658
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,20,2,2,2);
659
   f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
660
 
661
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
662
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
663
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
664
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
665
   lab = new TGLabel(fH1, label);
666
   fH1->AddFrame(lab, f0);
667
   widgetPB = new TGHProgressBar(fH1, TGProgressBar::kStandard, w/2);
668
   widgetPB->ShowPosition();
669
   widgetPB->SetRange(0,100);
670
   widgetPB->SetBarColor("green");
671
   fH1->AddFrame(widgetPB, f1);
672
 
673
   outsidebox->AddFrame(fH1, f2);
674
 
675
   if(DBGSIG > 1) printf("id = %d\n",id);
676
 
677
   return true;
678
}
679
 
680
// Widget with checkbutton and number entry
681
bool TSubStructure::TGCheckNEntry(TGWindow *parent, int w, int h, const char *label, int onoff, double defval, double *format, const char *pos)
682
{
683
   id = 12;
684
 
685
   TGNumberFormat::EStyle numtype;
686
   TGNumberFormat::EAttribute negpos;
687
   TGNumberFormat::ELimit numlim;
688
   bool arelimits[] = {false,false};
689
 
690
   // Number type (integer, real)
691
   if( (int)format[1] == 0 ) numtype = TGNumberFormat::kNESInteger;
692
   else if( (int)format[1] == 1 ) numtype = TGNumberFormat::kNESRealOne;
693
   else if( (int)format[1] == 2 ) numtype = TGNumberFormat::kNESRealTwo;
694
   else if( (int)format[1] == 3 ) numtype = TGNumberFormat::kNESRealThree;
695
   else if( (int)format[1] == 4 ) numtype = TGNumberFormat::kNESRealFour;
696
   else if( (int)format[1] == -1 ) numtype = TGNumberFormat::kNESReal;
697
 
698
   // Negative or positive
699
   if( (int)format[2] == 0 ) negpos = TGNumberFormat::kNEAAnyNumber;
700
   else if( (int)format[2] == 1 ) negpos = TGNumberFormat::kNEAPositive;
701
   else if( (int)format[2] == 2 ) negpos = TGNumberFormat::kNEANonNegative;
702
 
703
   // Limits
704
   if( (int)format[3] == 0 ) numlim = TGNumberFormat::kNELNoLimits;
705
   else if( (int)format[3] == 1 ) { numlim = TGNumberFormat::kNELLimitMax; arelimits[1] = true; }
706
   else if( (int)format[3] == 2 ) { numlim = TGNumberFormat::kNELLimitMinMax; arelimits[0] = true; arelimits[1] = true; }
707
   else if( (int)format[3] == -1 ) { numlim = TGNumberFormat::kNELLimitMin; arelimits[0] = true; }
708
 
709
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
710
   f1 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,6,2,2,2);
711
   if(strcmp("left",pos) == 0)
712
      f2 = new TGLayoutHints(kLHintsLeft,0,0,0,0);
713
   else if(strcmp("center",pos) == 0)
714
      f2 = new TGLayoutHints(kLHintsCenterX,0,0,0,0);
715
   else if(strcmp("right",pos) == 0)
716
      f2 = new TGLayoutHints(kLHintsRight,0,0,0,0);
717
 
718
   outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
719
   if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
720
   fH1 = new TGHorizontalFrame(outsidebox, 100, h);
721
   if(DBGSIG > 1) fH1->SetBackgroundColor(200);
722
   widgetChBox[0] = new TGCheckButton(fH1, label);
723
   if(onoff == 0)
724
      widgetChBox[0]->SetState(kButtonUp);
725
   else if(onoff == 1)
726
      widgetChBox[0]->SetState(kButtonDown);
727
//   widgetChBox[0]->Resize(w-14,22);
728
   fH1->AddFrame(widgetChBox[0], f0);
729
   if( (int)format[1] == 0 )
730
   {
731
      if( arelimits[0] && arelimits[1] )
732
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, (int)format[4], (int)format[5]);
733
      else if( arelimits[0] )
734
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, (int)format[4], 0);
735
      else if( arelimits[1] )
736
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim, 0, (int)format[4]);
737
      else
738
         widgetNE[0] = new TGNumberEntry(fH1, (int)defval, (int)format[0], 999, numtype, negpos, numlim);
739
   }
740
   else if( (((int)format[1] > 0) && ((int)format[1] < 5)) || ((int)format[1] == -1) )
741
   {
742
      if( arelimits[0] && arelimits[1] )
743
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, format[4], format[5]);
744
      else if( arelimits[0] )
745
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, format[4], 0);
746
      else if( arelimits[1] )
747
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim, 0, format[4]);
748
      else
749
         widgetNE[0] = new TGNumberEntry(fH1, defval, (int)format[0], 999, numtype, negpos, numlim);
750
   }
751
   else
752
   {
753
      delete outsidebox;
754
      delete lab;
755
      return false;
756
   }
757
   fH1->AddFrame(widgetNE[0], f1);
758
   outsidebox->AddFrame(fH1, f2);
759
 
760
   if(DBGSIG > 1) printf("id = %d\n",id);
761
 
762
   return true;
763
}
764
 
765
// Widget with checkbutton and text entry
766
bool TSubStructure::TGCheckTEntry(TGWindow *parent, int w, int h, const char *label, int onoff, const char *deftext, const char *layout)
767
{
768
   id = 13;
769
 
770
   f0 = new TGLayoutHints(kLHintsLeft | kLHintsCenterY,2,2,2,2);
771
 
772
   if(strcmp("oneline", layout) == 0)
773
   {
774
      outsidebox = new TGCompositeFrame(parent, w-6, h, kHorizontalFrame | kFixedWidth);
775
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
776
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,6,2,2,2);
777
   }
778
   else if(strcmp("twoline", layout) == 0)
779
   {
780
      outsidebox = new TGCompositeFrame(parent, w-6, h, kVerticalFrame | kFixedWidth);
781
      if(DBGSIG > 1) outsidebox->SetBackgroundColor(0);
782
      f0expandX = new TGLayoutHints(kLHintsExpandX | kLHintsCenterY,0,2,2,2);
783
   }
784
 
785
   widgetChBox[0] = new TGCheckButton(outsidebox, label);
786
   if(onoff == 0)
787
      widgetChBox[0]->SetState(kButtonUp);
788
   else if(onoff == 1)
789
      widgetChBox[0]->SetState(kButtonDown);
790
   outsidebox->AddFrame(widgetChBox[0], f0);
791
   widgetTE = new TGTextEntry(outsidebox, deftext);
792
   outsidebox->AddFrame(widgetTE, f0expandX);
793
 
794
   if(DBGSIG > 1) printf("id = %d\n",id);
795
 
796
   return true;
797
}