source: trunk/MagicSoft/Mars/mmain/MGPrototyp.cc@ 714

Last change on this file since 714 was 714, checked in by tbretz, 24 years ago
*** empty log message ***
File size: 12.2 KB
Line 
1#include "MGPrototyp.h"
2
3#include <TSystem.h> // gSystem
4
5#include <TGTab.h> // TGTab
6#include <TGMenu.h> // TGPopupMenu
7#include <TGButton.h> // TGTextButton
8#include <TGMsgBox.h> // TGMsgBox
9#include <TGListBox.h> // TGListBox
10#include <TGFSContainer.h> // TGFileContainer
11#include <TGSplitter.h> // TGHorizontal3DLine
12#include <TGTextEntry.h>
13#include <TGLabel.h> // TGLabel
14
15
16// FIXME: Move to MAGIC.h
17#define S_ISDIR(m) (((m)&(0170000)) == (0040000))
18
19ClassImp(MGPrototyp)
20
21enum CommandPrototyp {
22 M_FILE_CLOSE ,
23 M_BUTTON_ACTION,
24
25 M_FILERESET,
26 M_PBUTTON_CDIR_UP,
27 M_PBUTTON_LIST_MODE,
28 M_PBUTTON_DETAIL_MODE
29} ;
30
31
32MGPrototyp::MGPrototyp(const TGWindow *p, const TGWindow *main,
33 UInt_t w, UInt_t h )
34 : TGTransientFrame(p, main, w, h )
35{
36 //
37 // Main window to controll the october test
38 //
39
40 // set non-gui members to starting values
41
42 sprintf ( fInputFile, "\n" ) ;
43
44 //
45 // First create the MenuBar.
46 //
47
48 // Layout objects for menue.
49
50 fLayMenuBar = new TGLayoutHints ( kLHintsTop | kLHintsLeft | kLHintsExpandX, 2, 2, 2, 2 ) ;
51 fLayMenuItem = new TGLayoutHints ( kLHintsTop | kLHintsLeft , 0, 4, 0, 0 ) ;
52
53 // crate the menu bar
54
55 fFileMenu = new TGPopupMenu ( fClient->GetRoot() ) ;
56 fFileMenu->AddEntry ("Close", M_FILE_CLOSE ) ;
57 fFileMenu->Associate(this) ;
58
59 // the button messages are handled by main frame (this)
60
61 fMenuBar = new TGMenuBar ( this, 1, 1, kHorizontalFrame ) ;
62 fMenuBar->AddPopup("File", fFileMenu, fLayMenuItem ) ;
63 AddFrame(fMenuBar, fLayMenuBar ) ;
64
65 fLineSep1 = new TGHorizontal3DLine(this) ;
66 AddFrame(fLineSep1, new TGLayoutHints(kLHintsTop | kLHintsExpandX) );
67
68
69 //
70 // Create the top window with a lot of buttons
71 //
72
73 fFrameTop = new TGCompositeFrame (this, 300,100, kVerticalFrame ) ;
74
75 fTop1 = new TGHorizontalFrame (fFrameTop, 300, 100 ) ;
76
77 fButAction = new TGTextButton(fTop1, "ACTION", M_BUTTON_ACTION );
78 fButAction->Associate(this) ;
79 fTop1->AddFrame (fButAction, new TGLayoutHints(kLHintsTop | kLHintsLeft, 10, 10, 5, 5) );
80
81 fFrameTop->AddFrame (fTop1, new TGLayoutHints(kLHintsCenterX, 10, 10, 5, 5) );
82
83 AddFrame(fFrameTop, new TGLayoutHints (kLHintsTop ) ) ;
84
85 // a line between top and low frame
86
87 fLineSep2 = new TGHorizontal3DLine(this) ;
88 AddFrame(fLineSep2, new TGLayoutHints(kLHintsTop | kLHintsExpandX) );
89
90 //
91 // Create the low window with a tabs in it
92 //
93
94 fFrameLow = new TGCompositeFrame (this, 300,100, kHorizontalFrame ) ;
95
96 fLayTab = new TGLayoutHints ( kLHintsExpandX , 5, 5, 5, 5 ) ;
97
98 // create the first tab
99
100 fTab = new TGTab ( fFrameLow, 400, 400 ) ;
101
102 TGCompositeFrame *tf = fTab->AddTab("Input File") ;
103
104 fTabF1 = new TGCompositeFrame (tf, 100, 100, kHorizontalFrame) ;
105 // tf->AddFrame(fTabF1, fLayTab ) ;
106
107 fTabF1a = new TGCompositeFrame (tf, 100, 100, kHorizontalFrame) ;
108 tf->AddFrame(fTabF1a, new TGLayoutHints ( kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5 ) ) ;
109
110 fTabF1b = new TGCompositeFrame (tf, 100, 100, kHorizontalFrame) ;
111 tf->AddFrame(fTabF1b, new TGLayoutHints ( kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5 ) ) ;
112
113 fTabF1c = new TGCompositeFrame (tf, 100, 100, kVerticalFrame) ;
114 // tf->AddFrame(fTabF1c, new TGLayoutHints ( kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY , 5, 5, 5, 5 ) ) ;
115 tf->AddFrame(fTabF1c, new TGLayoutHints ( kLHintsExpandX | kLHintsExpandY , 5, 5, 5, 5 ) ) ;
116
117 // the items in the first subframe
118
119 fLabFileName = new TGLabel(fTabF1a, new TGString("selected File:") );
120 fTabF1a->AddFrame( fLabFileName, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ;
121
122 fTxtFileName = new TGTextEntry(fTabF1a, fTxtBufFileName = new TGTextBuffer(256) );
123 fTxtFileName->Resize(60, fTxtFileName->GetDefaultHeight());
124 fTabF1a->AddFrame(fTxtFileName, new TGLayoutHints(kLHintsTop | kLHintsExpandX, 5, 5, 5, 5));
125
126 fButFileReset = new TGTextButton (fTabF1a, "Reset", M_FILERESET ) ;
127 fButFileReset->Associate(this) ;
128 fTabF1a->AddFrame (fButFileReset, new TGLayoutHints (kLHintsRight, 10, 10, 10, 10 ) ) ;
129
130
131
132 // the items in the second subfraem
133
134 fLabDir = new TGLabel(fTabF1b, new TGString("Directory:") );
135 fTabF1b->AddFrame( fLabDir, new TGLayoutHints (kLHintsLeft, 10, 10, 10, 10)) ;
136
137 fDir = new TGListBox(fTabF1b, -1) ;
138 fDir->Resize(350,20) ;
139 char temp[100] ;
140 // sprintf ( temp, "%s", START_DIRECTORY ) ;
141 sprintf ( temp, "%s", gSystem->WorkingDirectory() ) ;
142 fDir->AddEntry(temp, 1) ;
143 fTabF1b->AddFrame( fDir, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX, 5, 5, 5, 5 ) ) ;
144
145
146 fPicCdup = fClient->GetPicture("tb_uplevel.xpm") ;
147 fCdup = new TGPictureButton(fTabF1b, fPicCdup, M_PBUTTON_CDIR_UP ) ;
148 fCdup->SetToolTipText("One Level up!") ;
149 fCdup->Associate(this) ;
150 fTabF1b->AddFrame (fCdup, new TGLayoutHints(kLHintsLeft | kLHintsTop, 5, 5, 5, 5) ) ;
151
152 fPicList = fClient->GetPicture("tb_list.xpm") ;
153 fListMode = new TGPictureButton(fTabF1b, fPicList, M_PBUTTON_LIST_MODE ) ;
154 fListMode->SetToolTipText("List Mode") ;
155 fListMode->Associate(this) ;
156 fListMode->SetState(kButtonUp) ;
157 fListMode->AllowStayDown(kTRUE) ;
158 fListMode->AllowStayDown(kTRUE) ; fTabF1b->AddFrame (fListMode, new TGLayoutHints(kLHintsLeft | kLHintsTop, 5, 5, 5, 5) ) ;
159
160 fPicDetail = fClient->GetPicture("tb_details.xpm") ;
161 fDetail = new TGPictureButton(fTabF1b, fPicDetail, M_PBUTTON_DETAIL_MODE ) ;
162 fDetail->SetToolTipText("Details Mode") ;
163 fDetail->Associate(this) ;
164 fDetail->SetState(kButtonEngaged) ;
165 fDetail->AllowStayDown(kTRUE) ;
166 fTabF1b->AddFrame (fDetail, new TGLayoutHints(kLHintsLeft | kLHintsTop, 5, 5, 5, 5) ) ;
167
168 // the items in the third subframe
169
170 fFileView = new TGListView(fTabF1c, 540, 380 ) ;
171 fFileCont = new TGFileContainer(fFileView->GetViewPort(), 100, 100,
172 kVerticalFrame, fgWhitePixel) ;
173
174 fFileCont->Associate(this) ;
175 fFileView->GetViewPort()->SetBackgroundColor(fgWhitePixel) ;
176 fFileView->SetContainer(fFileCont) ;
177 fFileCont->SetFilter("*") ;
178 // fFileCont->ChangeDirectory(START_DIRECTORY) ;
179 fFileCont->ChangeDirectory(gSystem->WorkingDirectory()) ;
180 fFileView->SetViewMode(kLVDetails);
181 fFileCont->Sort(kSortByName) ;
182
183 fTabF1c->AddFrame(fFileView, new TGLayoutHints(kLHintsTop | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5) ) ;
184
185 tf->AddFrame(fTabF1, fLayTab) ;
186
187 fFrameLow->AddFrame ( fTab, new TGLayoutHints(kLHintsBottom | kLHintsExpandX | kLHintsExpandY, 5, 5, 5, 5) );
188
189 AddFrame(fFrameLow, new TGLayoutHints (kLHintsExpandX|kLHintsExpandY) ) ;
190
191 //
192 // Map the window, set up the layout, etc.
193 //
194
195 SetWMSizeHints(200, 250, 1000, 1000, 10, 10 ) ; // set the smallest and biggest size of the Main frame
196
197 MapSubwindows();
198
199 Layout();
200
201 SetWindowName("Prototyp");
202 SetIconName("Prototyp");
203
204 MapWindow();
205
206}
207
208
209// ======================================================================
210// ======================================================================
211
212MGPrototyp::~MGPrototyp()
213{
214 //delete fPicCdup, fPicList, fPicDetail;
215 delete fLayTab;
216 delete fLayMenuBar;
217 delete fLayMenuItem;
218 delete fFileView;
219 delete fFileCont;
220 delete fCdup;
221 delete fListMode;
222 delete fDetail;
223 delete fDir ;
224 delete fLabDir ;
225
226 delete fButFileReset ;
227 delete fTxtFileName ;
228 delete fLabFileName ;
229
230 delete fTabF1c;
231 delete fTabF1b;
232 delete fTabF1a;
233 delete fTabF1;
234 delete fButAction;
235 delete fTop1;
236 delete fTab;
237
238 delete fFrameTop;
239 delete fFrameLow;
240 delete fLineSep2 ;
241 delete fLineSep1 ;
242
243 delete fFileMenu;
244 delete fMenuBar;
245
246}
247
248
249// ======================================================================
250// ======================================================================
251
252void MGPrototyp::CloseWindow()
253{
254 // Got close message for this MainFrame. Calls parent CloseWindow()
255 // (which destroys the window) and terminate the application.
256 // The close message is generated by the window manager when its close
257 // window menu item is selected.
258
259 delete this ;
260}
261
262
263// ======================================================================
264// ======================================================================
265
266Bool_t MGPrototyp::InputFileSelected()
267{
268 // Checks if there is a selected input root file
269
270 if ( strcmp ( fInputFile, "\n") == 0 )
271 {
272 return ( kFALSE ) ;
273 }
274
275 return (kTRUE) ;
276}
277
278
279// ======================================================================
280// ======================================================================
281
282Bool_t MGPrototyp::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
283{
284 // Process events generated by the buttons in the frame.
285
286 Int_t buttons = 4, retval = 0 ;
287 Char_t wort[100] ;
288 Char_t extens[5] ;
289 Char_t command[110] ;
290
291 TGFileItem *item ; // to process items in the file view container
292 void *np = NULL ; // null pointer
293
294 switch (GET_MSG(msg))
295 {
296 case kC_COMMAND:
297 switch (GET_SUBMSG(msg))
298 {
299 case kCM_BUTTON:
300
301 switch (parm1)
302 {
303
304 case M_BUTTON_ACTION:
305
306 if ( InputFileSelected() == kFALSE ) { // it is not selected
307
308 new TGMsgBox(fClient->GetRoot(), this, "ERROR!",
309 "No Input (root) File selected!", kMBIconExclamation, buttons, &retval);
310 break ;
311 }
312
313 new TGMsgBox(fClient->GetRoot(), this, "INFORMATION!",
314 "Put Intelligence here!!!", kMBIconExclamation, buttons, &retval);
315
316 break ;
317
318
319 case M_FILERESET:
320
321 sprintf ( fInputFile, "\n" ) ;
322 fTxtFileName->SetText( fInputFile ) ;
323
324 break;
325 case M_PBUTTON_CDIR_UP :
326
327 // goto the parent directory
328
329 gSystem->ChangeDirectory("..") ;
330 fDir->RemoveEntry(1) ;
331 sprintf (wort, "%s", gSystem->WorkingDirectory() ) ;
332 fDir->AddEntry(wort,1) ;
333 fDir->MapSubwindows() ;
334 fDir->Layout() ;
335 fFileCont->ChangeDirectory( wort ) ;
336 fFileCont->DisplayDirectory() ;
337
338 break ;
339
340 case M_PBUTTON_LIST_MODE:
341 fFileView->SetViewMode(kLVList) ;
342 fDetail->SetState(kButtonUp) ;
343
344 break ;
345
346 case M_PBUTTON_DETAIL_MODE:
347 fFileView->SetViewMode(kLVDetails) ;
348 fListMode->SetState(kButtonUp) ;
349
350 break ;
351
352 default:
353 break ;
354 }
355
356 case kCM_MENU:
357
358 switch (parm1) {
359 case M_FILE_CLOSE:
360 CloseWindow() ;
361
362 break;
363 }
364 break ;
365
366 default:
367 break ;
368
369 }
370
371 case kC_CONTAINER:
372 switch (GET_SUBMSG(msg)) {
373
374 // case kCT_ITEMCLICK:
375 // printf ("itemclick\n");
376 // break;
377
378
379 case kCT_ITEMDBLCLICK:
380 //
381 // process the double click in the file view container
382 //
383
384 if ( parm1 == kButton1) {
385 if ( fFileCont->NumSelected() == 1 ) {
386 //
387 // one file selected
388 //
389 item = (TGFileItem *) fFileCont->GetNextSelected(&np) ;
390
391 if ( S_ISDIR(item->GetType()) ) // file is directory
392 {
393 // goto directory
394
395 sprintf (wort, "%s", item->GetItemName()->GetString()) ;
396 fFileCont->ChangeDirectory ( wort ) ;
397 gSystem->ChangeDirectory( wort ) ;
398
399 sprintf (wort, "%s", gSystem->WorkingDirectory() ) ;
400 fDir->RemoveEntry(1) ;
401 fDir->AddEntry( wort, 1 ) ;
402 fDir->MapSubwindows() ;
403 fDir->Layout() ;
404 }
405 else // file is no directory, is a file
406 {
407 sprintf (wort, "%s", item->GetItemName()->GetString() ) ;
408
409 // determine the file type by extensions
410
411 for (Int_t i = 0 ; i<5; i++)
412 extens[i] = '\0' ;
413
414 for ( Int_t i=0; wort[i] != '\0'; i++) {
415 if ( wort[i] == '.') {
416 strncpy (extens, &wort[i+1], 4 ) ;
417 break ;
418 }
419 }
420
421 if ( ! strcmp(extens, "ps") ) { // postscript file
422 sprintf ( command, "gv %s/%s &",
423 gSystem->WorkingDirectory(),
424 wort ) ;
425 gSystem->Exec(command) ;
426 break ;
427 }
428 else if ( ! strcmp(extens, "root") ) { // root file
429 sprintf ( fInputFile, "%s/%s" , gSystem->WorkingDirectory(), wort ) ;
430 fTxtFileName->SetText( fInputFile ) ;
431
432 break ;
433 }
434
435 }
436 }
437 }
438 break;
439
440 default:
441 break ;
442 }
443
444
445
446 default:
447 break;
448 }
449 return kTRUE;
450}
Note: See TracBrowser for help on using the repository browser.