00001
00002
00003
00004
00005
00006 #include <stdlib.h>
00007 #include <sys/stat.h>
00008 #include <sys/types.h>
00009
00010 #include <Riostream.h>
00011 #include <TSystem.h>
00012 #include <TGTab.h>
00013 #include <TGFrame.h>
00014 #include <TGButton.h>
00015 #include <TGWindow.h>
00016 #include <TGButton.h>
00017 #include <TGMsgBox.h>
00018
00019 #include "XSVarious.h"
00020 #include "XSElementDlg.h"
00021 #include "XSReactionDlg.h"
00022
00023 #include "NdbMTDir.h"
00024
00025
00026
00027
00028 enum DirOptions {
00029 DIROnlyFiles,
00030 DIROnlyDirectories,
00031 DIRBoth
00032 };
00033
00034
00035 enum PathOptions {
00036 PATHIsotope,
00037 PATHProjectile,
00038 PATHDatabase,
00039 PATHFile
00040 };
00041
00042 enum XSReactionMessages {
00043 REAC_ELEMENT_STEP,
00044 REAC_TABLE,
00045 REAC_OK,
00046 REAC_EXEC,
00047 REAC_CLOSE,
00048 REAC_RESET,
00049 REAC_PTABLE
00050 };
00051
00052 enum ComboIds {
00053 ISOTOPE_COMBO,
00054 PROJECTILE_COMBO,
00055 TEMPERATURE_COMBO,
00056 DATABASE_COMBO,
00057 LINE_WIDTH_COMBO,
00058 LINE_COLOR_COMBO,
00059 MARKER_STYLE_COMBO,
00060 MARKER_COLOR_COMBO,
00061 MARKER_SIZE_COMBO,
00062 ERRORBAR_COLOR_COMBO,
00063 REACTION_LISTBOX,
00064 };
00065
00066 static Int_t LastWinX = -1;
00067 static Int_t LastWinY = -1;
00068
00069
00070 XSReactionDlg::XSReactionDlg( const TGWindow *p,
00071 const TGWindow *main, UInt_t initZ, UInt_t w, UInt_t h)
00072 : TGTransientFrame(p,main,w,h)
00073 {
00074
00075 mainWindow = main;
00076
00077
00078 lHFixed = new TGLayoutHints(kLHintsTop | kLHintsLeft,
00079 3, 3, 2, 2);
00080 lHExpX = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX,
00081 3, 3, 2, 2);
00082 lHExpY = new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandY,
00083 3, 3, 2, 2);
00084 lHExpXY = new TGLayoutHints(kLHintsTop | kLHintsLeft |
00085 kLHintsExpandX | kLHintsExpandY,
00086 3, 3, 2, 2);
00087 lHBot = new TGLayoutHints(kLHintsBottom | kLHintsRight,
00088 3, 3, 2, 2);
00089
00090 lHExpXCen = new TGLayoutHints( kLHintsTop | kLHintsLeft |
00091 kLHintsExpandX | kLHintsCenterY,
00092 5, 5, 2, 2);
00093 lHFixedCen = new TGLayoutHints( kLHintsTop | kLHintsLeft |
00094 kLHintsCenterY,
00095 5, 5, 2, 2);
00096
00097
00098 buttonFrame = new TGHorizontalFrame(this, 240, 20, kFixedWidth);
00099 okButton = new TGTextButton(buttonFrame, "&Ok", REAC_OK);
00100 okButton->Associate(this);
00101 execButton = new TGTextButton(buttonFrame, "&Execute", REAC_EXEC);
00102 execButton->Associate(this);
00103 resetButton = new TGTextButton(buttonFrame, "&Reset", REAC_RESET);
00104 resetButton->Associate(this);
00105 closeButton = new TGTextButton(buttonFrame, "&Close", REAC_CLOSE);
00106 closeButton->Associate(this);
00107
00108 buttonFrame->AddFrame(okButton, lHExpX);
00109 buttonFrame->AddFrame(execButton, lHExpX);
00110 buttonFrame->AddFrame(resetButton, lHExpX);
00111 buttonFrame->AddFrame(closeButton, lHExpX);
00112 AddFrame(buttonFrame, lHBot);
00113
00114
00115 materialGroup = new TGGroupFrame(this,"Material",kVerticalFrame);
00116
00117
00118 frm1 = new TGHorizontalFrame(
00119 materialGroup, w, 36,
00120 kChildFrame|kFitWidth );
00121 frm1->ChangeBackground(0xFF00);
00122
00123 elementLbl = new TGLabel(frm1,"Element:");
00124 elementLbl->SetTextJustify(kTextRight | kTextCenterY);
00125 frm1->AddFrame(elementLbl,lHFixedCen);
00126
00127 elementBuf = new TGTextBuffer(20);
00128 elementText = new TGTextEntry(frm1,elementBuf);
00129 elementText->Resize(50, elementText->GetDefaultHeight());
00130 elementText->Associate(this);
00131 frm1->AddFrame(elementText,lHFixedCen);
00132
00133 elementStep = new XSStepButton(frm1,REAC_ELEMENT_STEP);
00134 elementStep->Associate(this);
00135 frm1->AddFrame(elementStep,lHFixedCen);
00136
00137 nameLbl = new TGLabel(frm1,"X",blueBoldGC);
00138 nameLbl->SetTextJustify(kTextLeft | kTextCenterY);
00139 frm1->AddFrame(nameLbl,lHExpXCen);
00140
00141 ptableButton = new TGPictureButton(frm1,
00142 fClient->GetPicture(PTBL_ICON),
00143 REAC_PTABLE);
00144 ptableButton->SetToolTipText(
00145 "Choose the Element from the Periodic Table");
00146 ptableButton->Associate(this);
00147 frm1->AddFrame(ptableButton,lHFixedCen);
00148
00149 materialGroup->AddFrame(frm1,lHExpX);
00150
00151
00152 frm2 = new TGHorizontalFrame(materialGroup,w,20,
00153 kChildFrame|kFitWidth);
00154
00155 Vfrm1 = new TGCompositeFrame(frm2, w, 70,
00156 kChildFrame|kFitHeight|kFitWidth);
00157 Vfrm1->SetLayoutManager(new TGMatrixLayout(Vfrm1,0,4));
00158
00159 chargeLbl = new TGLabel(Vfrm1,"Charge (Z):");
00160 chargeLbl->SetTextJustify(kTextRight | kTextCenterY);
00161 Vfrm1->AddFrame(chargeLbl);
00162
00163 zLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00164 zLbl->SetTextJustify(kTextLeft | kTextCenterY);
00165 Vfrm1->AddFrame(zLbl);
00166
00167 massLbl = new TGLabel(Vfrm1,"Atomic Mass:");
00168 massLbl->SetTextJustify(kTextRight | kTextCenterY);
00169 Vfrm1->AddFrame(massLbl);
00170
00171 massValLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00172 massValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00173 Vfrm1->AddFrame(massValLbl);
00174
00175 densityLbl = new TGLabel(Vfrm1,"Density:");
00176 densityLbl->SetTextJustify(kTextRight | kTextCenterY);
00177 Vfrm1->AddFrame(densityLbl);
00178
00179 densityValLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00180 densityValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00181 Vfrm1->AddFrame(densityValLbl);
00182
00183 oxidationLbl = new TGLabel(Vfrm1,"Oxidation:");
00184 oxidationLbl->SetTextJustify(kTextRight | kTextCenterY);
00185 Vfrm1->AddFrame(oxidationLbl);
00186
00187 oxidationValLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00188 oxidationValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00189 Vfrm1->AddFrame(oxidationValLbl);
00190
00191 meltingPtLbl = new TGLabel(Vfrm1,"Melting Pt (C):");
00192 meltingPtLbl->SetTextJustify(kTextRight | kTextCenterY);
00193 Vfrm1->AddFrame(meltingPtLbl);
00194
00195 meltingValLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00196 meltingValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00197 Vfrm1->AddFrame(meltingValLbl);
00198
00199 boilingPtLbl = new TGLabel(Vfrm1,"Boiling Pt (C):");
00200 boilingPtLbl->SetTextJustify(kTextRight | kTextCenterY);
00201 Vfrm1->AddFrame(boilingPtLbl);
00202
00203 boilingValLbl = new TGLabel(Vfrm1,"ZZZZZZZZ",blueBoldGC);
00204 boilingValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00205 Vfrm1->AddFrame(boilingValLbl);
00206
00207 frm2->AddFrame(Vfrm1,lHExpX);
00208 materialGroup->AddFrame(frm2,lHExpX);
00209
00210
00211 frm3 = new TGHorizontalFrame(materialGroup,w,20,
00212 kChildFrame|kFitWidth);
00213
00214 isotopeLbl = new TGLabel(frm3,"Isotope (A):");
00215 isotopeLbl->SetTextJustify(kTextRight | kTextCenterY);
00216 frm3->AddFrame(isotopeLbl,lHFixedCen);
00217
00218 isotopeCombo = new TGComboBox(frm3,ISOTOPE_COMBO);
00219 isotopeCombo->Resize(80,20);
00220 isotopeCombo->Associate(this);
00221 frm3->AddFrame(isotopeCombo,lHFixedCen);
00222
00223 isotopeInfoLbl = new TGLabel(frm3,"Isotope Info:");
00224 isotopeInfoLbl->SetTextJustify(kTextRight | kTextCenterY);
00225 frm3->AddFrame(isotopeInfoLbl,lHFixedCen);
00226
00227 isotopeInfoValLbl = new TGLabel(frm3,"MMMM",blueBoldGC);
00228 isotopeInfoValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00229 frm3->AddFrame(isotopeInfoValLbl,lHExpXCen);
00230
00231 materialGroup->AddFrame(frm3,lHExpX);
00232
00233 AddFrame(materialGroup,lHExpX);
00234
00235
00236 reactionGroup = new TGGroupFrame(this,"Reaction",kVerticalFrame);
00237
00238 frm4 = new TGHorizontalFrame(reactionGroup,w,60,
00239 kChildFrame|kFitWidth);
00240
00241 Vfrm2 = new TGCompositeFrame(frm4, 160, 70,
00242 kChildFrame|kFitHeight|kFitWidth);
00243
00244 Vfrm2->SetLayoutManager(new TGMatrixLayout(Vfrm2,0,2));
00245
00246 projectileLbl = new TGLabel(Vfrm2,"Projectile:");
00247 projectileLbl->SetTextJustify(kTextRight | kTextCenterY);
00248 Vfrm2->AddFrame(projectileLbl);
00249
00250 projectileCombo = new TGComboBox(Vfrm2,PROJECTILE_COMBO);
00251 projectileCombo->Resize(90,20);
00252 projectileCombo->Associate(this);
00253 Vfrm2->AddFrame(projectileCombo);
00254
00255 temperatureLbl = new TGLabel(Vfrm2,"Temperature:");
00256 temperatureLbl->SetTextJustify(kTextRight | kTextCenterY);
00257 Vfrm2->AddFrame(temperatureLbl);
00258
00259 temperatureCombo = new TGComboBox(Vfrm2,TEMPERATURE_COMBO);
00260 temperatureCombo->Resize(90,20);
00261 temperatureCombo->Associate(this);
00262 Vfrm2->AddFrame(temperatureCombo);
00263
00264 databaseLbl = new TGLabel(Vfrm2,"Database:");
00265 databaseLbl->SetTextJustify(kTextRight | kTextCenterY);
00266 Vfrm2->AddFrame(databaseLbl);
00267
00268 databaseCombo = new TGComboBox(Vfrm2,DATABASE_COMBO);
00269 databaseCombo->Resize(90,20);
00270 databaseCombo->Associate(this);
00271 Vfrm2->AddFrame(databaseCombo);
00272
00273 frm4->AddFrame(Vfrm2,lHExpXCen);
00274
00275 reactionLbl = new TGLabel(frm4,"Reaction:");
00276 reactionLbl->SetTextJustify(kTextLeft | kTextCenterY);
00277 frm4->AddFrame(reactionLbl,lHFixedCen);
00278
00279 reactionList = new TGListBox(frm4,REACTION_LISTBOX);
00280 reactionList->Resize(70,80);
00281
00282 reactionList->Associate(this);
00283 frm4->AddFrame(reactionList,lHExpXCen);
00284
00285 reactionGroup->AddFrame(frm4,lHExpX);
00286
00287
00288 frm5 = new TGHorizontalFrame(reactionGroup,w,20,
00289 kChildFrame|kFitWidth);
00290 reactionInfoLbl = new TGLabel(frm5,"Reaction Info:");
00291 reactionInfoLbl->SetTextJustify(kTextRight | kTextCenterY);
00292 frm5->AddFrame(reactionInfoLbl,lHFixedCen);
00293
00294 reactionInfoValLbl = new TGLabel(frm5,"-",blueBoldGC);
00295 reactionInfoValLbl->SetTextJustify(kTextLeft | kTextCenterY);
00296 frm5->AddFrame(reactionInfoValLbl,lHExpXCen);
00297
00298 reactionGroup->AddFrame(frm5,lHExpX);
00299
00300 AddFrame(reactionGroup,lHExpX);
00301
00302
00303 optionGroup = new TGGroupFrame(this,"Options",kVerticalFrame);
00304
00305 Vfrm3 = new TGCompositeFrame(optionGroup, w, 70,
00306 kChildFrame|kFitHeight|kFitWidth);
00307
00308 Vfrm3->SetLayoutManager(new TGMatrixLayout(Vfrm3,0,4));
00309
00310 lineWidthLbl = new TGLabel(Vfrm3,"Line Width:");
00311 lineWidthLbl->SetTextJustify(kTextLeft | kTextCenterY);
00312 Vfrm3->AddFrame(lineWidthLbl);
00313
00314 lineWidthCombo = new TGComboBox(Vfrm3,LINE_WIDTH_COMBO);
00315 lineWidthCombo->Resize(100,20);
00316 lineWidthCombo->Associate(this);
00317 Vfrm3->AddFrame(lineWidthCombo);
00318
00319 lineColorLbl = new TGLabel(Vfrm3," Line Color:");
00320 lineColorLbl->SetTextJustify(kTextLeft | kTextCenterY);
00321 Vfrm3->AddFrame(lineColorLbl);
00322
00323 lineColorCombo = new TGComboBox(Vfrm3,LINE_COLOR_COMBO);
00324 lineColorCombo->Resize(100,20);
00325 lineColorCombo->Associate(this);
00326 Vfrm3->AddFrame(lineColorCombo);
00327
00328 markerStyleLbl = new TGLabel(Vfrm3,"Marker Style:");
00329 markerStyleLbl->SetTextJustify(kTextLeft | kTextCenterY);
00330 Vfrm3->AddFrame(markerStyleLbl);
00331
00332 markerStyleCombo = new TGComboBox(Vfrm3,MARKER_STYLE_COMBO);
00333 markerStyleCombo->Resize(100,20);
00334 markerStyleCombo->Associate(this);
00335 Vfrm3->AddFrame(markerStyleCombo);
00336
00337 markerColorLbl = new TGLabel(Vfrm3," Marker Color:");
00338 markerColorLbl->SetTextJustify(kTextLeft | kTextCenterY);
00339 Vfrm3->AddFrame(markerColorLbl);
00340
00341 markerColorCombo = new TGComboBox(Vfrm3, MARKER_COLOR_COMBO);
00342 markerColorCombo->Resize(100,20);
00343 markerColorCombo->Associate(this);
00344 Vfrm3->AddFrame(markerColorCombo);
00345
00346 markerSizeLbl = new TGLabel(Vfrm3,"Marker Size:");
00347 markerSizeLbl->SetTextJustify(kTextLeft | kTextCenterY);
00348 Vfrm3->AddFrame(markerSizeLbl);
00349
00350 markerSizeCombo = new TGComboBox(Vfrm3, MARKER_SIZE_COMBO);
00351 markerSizeCombo->Resize(100,20);
00352 markerSizeCombo->Associate(this);
00353 Vfrm3->AddFrame(markerSizeCombo);
00354
00355 errorbarColorLbl = new TGLabel(Vfrm3," ErrorBar Color:");
00356 errorbarColorLbl->SetTextJustify(kTextLeft | kTextCenterY);
00357 Vfrm3->AddFrame(errorbarColorLbl);
00358
00359 errorbarColorCombo = new TGComboBox(Vfrm3,ERRORBAR_COLOR_COMBO);
00360 errorbarColorCombo->Resize(100,20);
00361 errorbarColorCombo->Associate(this);
00362 Vfrm3->AddFrame(errorbarColorCombo);
00363
00364 optionGroup->AddFrame(Vfrm3,lHExpX);
00365 AddFrame(optionGroup,lHExpX);
00366
00367
00368 infoGroup = new TGGroupFrame(this,"Information",kVerticalFrame);
00369
00370 infoView = new TGTextView(infoGroup, 200, 100,
00371 kChildFrame | kSunkenFrame);
00372 infoGroup->AddFrame(infoView,lHExpXY);
00373
00374 AddFrame(infoGroup, lHExpXY);
00375
00376
00377 MapSubwindows();
00378 Resize(GetDefaultSize());
00379
00380
00381 SetElement(initZ);
00382 InitCombos();
00383
00384
00385 int ax, ay;
00386
00387 if (LastWinX == -1) {
00388 Window_t wdum;
00389 gVirtualX->TranslateCoordinates(main->GetId(), GetParent()->GetId(),
00390 (((TGFrame *) main)->GetWidth() - fWidth) >> 1,
00391 (((TGFrame *) main)->GetHeight() - fHeight) >> 1,
00392 ax, ay, wdum);
00393 ax = MAX(ax,0);
00394 ay = MAX(ay,0);
00395 } else {
00396 ax = LastWinX;
00397 ay = LastWinY;
00398 }
00399 Move(ax,ay);
00400 SetWMPosition(ax,ay);
00401
00402
00403 SetWindowName("Select Element/Reaction");
00404 MapWindow();
00405
00406 }
00407
00408
00409 XSReactionDlg::~XSReactionDlg()
00410 {
00411
00412 delete lHFixed;
00413 delete lHExpX;
00414 delete lHExpY;
00415 delete lHExpXY;
00416 delete lHFixedCen;
00417 delete lHExpXCen;
00418
00419
00420 delete elementLbl;
00421 delete elementText;
00422 delete elementStep;
00423 delete ptableButton;
00424 delete chargeLbl;
00425 delete zLbl;
00426 delete nameLbl;
00427 delete massLbl;
00428 delete massValLbl;
00429 delete densityLbl;
00430 delete densityValLbl;
00431 delete meltingPtLbl;
00432 delete meltingValLbl;
00433 delete boilingPtLbl;
00434 delete boilingValLbl;
00435 delete oxidationLbl;
00436 delete oxidationValLbl;
00437 delete isotopeInfoLbl;
00438 delete isotopeInfoValLbl;
00439 delete isotopeLbl;
00440 delete isotopeCombo;
00441 delete materialGroup;
00442
00443
00444 delete projectileLbl;
00445 delete projectileCombo;
00446 delete temperatureLbl;
00447 delete temperatureCombo;
00448 delete databaseLbl;
00449 delete databaseCombo;
00450 delete reactionLbl;
00451 delete reactionList;
00452 delete reactionInfoLbl;
00453 delete reactionInfoValLbl;
00454 delete reactionGroup;
00455
00456
00457 delete lineWidthLbl;
00458 delete lineColorLbl;
00459 delete markerStyleLbl;
00460 delete markerColorLbl;
00461 delete markerSizeLbl;
00462 delete errorbarColorLbl;
00463
00464 delete lineWidthCombo;
00465 delete lineColorCombo;
00466 delete markerStyleCombo;
00467 delete markerColorCombo;
00468 delete markerSizeCombo;
00469 delete errorbarColorCombo;
00470
00471 delete optionGroup;
00472
00473
00474 delete infoView;
00475 delete infoGroup;
00476
00477
00478 delete frm1;
00479 delete frm2;
00480 delete frm3;
00481 delete frm4;
00482 delete frm5;
00483
00484 delete Vfrm1;
00485 delete Vfrm2;
00486 delete Vfrm3;
00487
00488
00489 delete okButton;
00490 delete execButton;
00491 delete resetButton;
00492 delete closeButton;
00493 delete buttonFrame;
00494 }
00495
00496
00497 void
00498 XSReactionDlg::InitColorCombo(TGComboBox *cb)
00499 {
00500
00501
00502 cb->AddEntry("Black",0);
00503 cb->AddEntry("Red",1);
00504 cb->AddEntry("Green",2);
00505 cb->AddEntry("Blue",3);
00506 cb->AddEntry("Yellow",4);
00507 cb->AddEntry("Magenta",5);
00508 cb->AddEntry("Cyan",6);
00509
00510 cb->Select(0);
00511 }
00512
00513
00514 void
00515 XSReactionDlg::InitCombos()
00516 {
00517 InitColorCombo(lineColorCombo);
00518 InitColorCombo(markerColorCombo);
00519 InitColorCombo(errorbarColorCombo);
00520
00521
00522 lineWidthCombo->AddEntry("None",0);
00523 lineWidthCombo->AddEntry("1",1);
00524 lineWidthCombo->AddEntry("2",2);
00525 lineWidthCombo->AddEntry("3",3);
00526 lineWidthCombo->AddEntry("4",4);
00527 lineWidthCombo->AddEntry("5",5);
00528 lineWidthCombo->AddEntry("6",6);
00529 lineWidthCombo->AddEntry("7",7);
00530 lineWidthCombo->AddEntry("8",8);
00531 lineWidthCombo->AddEntry("9",9);
00532 lineWidthCombo->AddEntry("10",10);
00533 lineWidthCombo->Select(1);
00534
00535
00536
00537 markerStyleCombo->AddEntry("None",0);
00538 markerStyleCombo->AddEntry("Bullet",1);
00539 markerStyleCombo->AddEntry("Triangle Up",2);
00540 markerStyleCombo->AddEntry("Triangle Down",3);
00541 markerStyleCombo->AddEntry("Square",4);
00542 markerStyleCombo->AddEntry("Diamond",5);
00543 markerStyleCombo->AddEntry("Star",6);
00544 markerStyleCombo->AddEntry("Empty Bullet",7);
00545 markerStyleCombo->AddEntry("Empty Tri-Up",8);
00546 markerStyleCombo->AddEntry("Empty Tri-Down",9);
00547 markerStyleCombo->AddEntry("Empty Square",10);
00548 markerStyleCombo->Select(0);
00549
00550
00551
00552 markerSizeCombo->AddEntry("None",0);
00553 markerSizeCombo->AddEntry("0.1",1);
00554 markerSizeCombo->AddEntry("0.2",2);
00555 markerSizeCombo->AddEntry("0.3",3);
00556 markerSizeCombo->AddEntry("0.4",4);
00557 markerSizeCombo->AddEntry("0.5",5);
00558 markerSizeCombo->AddEntry("0.6",6);
00559 markerSizeCombo->AddEntry("0.7",7);
00560 markerSizeCombo->AddEntry("0.8",8);
00561 markerSizeCombo->AddEntry("0.9",9);
00562 markerSizeCombo->AddEntry("1.0",10);
00563 markerSizeCombo->Select(0);
00564
00565
00566 }
00567
00568
00569 const char *
00570 XSReactionDlg::GetString( int box )
00571 {
00572 const TGLBEntry *entry;
00573 switch (box) {
00574 case ISOTOPE_COMBO:
00575 entry = isotopeCombo->GetSelectedEntry();
00576 break;
00577
00578 case PROJECTILE_COMBO:
00579 entry = projectileCombo->GetSelectedEntry();
00580 break;
00581
00582 case TEMPERATURE_COMBO:
00583 entry = temperatureCombo->GetSelectedEntry();
00584 break;
00585
00586 case DATABASE_COMBO:
00587 entry = databaseCombo->GetSelectedEntry();
00588 break;
00589
00590 case LINE_WIDTH_COMBO:
00591 entry = lineWidthCombo->GetSelectedEntry();
00592 break;
00593
00594 case LINE_COLOR_COMBO:
00595 entry = lineColorCombo->GetSelectedEntry();
00596 break;
00597
00598 case MARKER_STYLE_COMBO:
00599 entry = markerStyleCombo->GetSelectedEntry();
00600 break;
00601
00602 case MARKER_COLOR_COMBO:
00603 entry = markerColorCombo->GetSelectedEntry();
00604 break;
00605
00606 case MARKER_SIZE_COMBO:
00607 entry = markerSizeCombo->GetSelectedEntry();
00608 break;
00609
00610 case ERRORBAR_COLOR_COMBO:
00611 entry = errorbarColorCombo->GetSelectedEntry();
00612 break;
00613
00614 case REACTION_LISTBOX:
00615 entry = reactionList->GetSelectedEntry();
00616 break;
00617
00618 default:
00619 entry = NULL;
00620 }
00621 if (entry==NULL) return NULL;
00622
00623 return ((TGTextLBEntry*)entry)->GetText()->GetString();
00624 }
00625
00626
00627 char*
00628 XSReactionDlg::CreatePath( int option )
00629 {
00630 static char path[256];
00631
00632 strlcpy(path, DBDIR,256);
00633 strlcat(path, XSelements->Mnemonic(Z),256);
00634 strlcat(path, PATHSEP,256);
00635
00636 if (option == PATHIsotope) return path;
00637
00638
00639 strlcat(path, GetString(ISOTOPE_COMBO),256);
00640 strlcat(path, PATHSEP,256);
00641
00642 if (option == PATHProjectile) return path;
00643
00644
00645 strlcat(path, GetString(PROJECTILE_COMBO),256);
00646 strlcat(path, PATHSEP,256);
00647
00648 if (option == PATHDatabase) return path;
00649
00650
00651 strlcat(path, GetString(DATABASE_COMBO),256);
00652
00653 return path;
00654 }
00655
00656
00657 int
00658 XSReactionDlg::UpdateContainer( TGListBox *lb, char *path, int option)
00659 {
00660 const char *entry;
00661 FileStat_t st;
00662
00663
00664 lb->RemoveEntries(0,1000);
00665
00666
00667 void *dirp = gSystem->OpenDirectory(path);
00668 if (dirp==NULL) {
00669 lb->AddEntry("-",0);
00670 return kTRUE;
00671 }
00672
00673 int i=0;
00674 while ((entry = gSystem->GetDirEntry(dirp))) {
00675
00676 if (entry[0] == '.') continue;
00677
00678 char fn[256];
00679 strlcpy(fn,path,256);
00680 strlcat(fn,entry,256);
00681
00682 gSystem->GetPathInfo(fn, st);
00683 if (((option == DIROnlyFiles) && !R_ISDIR(st.fMode)) ||
00684 ((option == DIROnlyDirectories) && R_ISDIR(st.fMode)) ||
00685 (option == DIRBoth)) {
00686 lb->AddEntry(entry,i++);
00687 }
00688 }
00689 gSystem->FreeDirectory(dirp);
00690 if (i==0) {
00691 lb->AddEntry("None",0);
00692 return kTRUE;
00693 }
00694 return kFALSE;
00695 }
00696
00697
00698 void
00699 XSReactionDlg::UpdateIsotopes()
00700 {
00701
00702 UpdateContainer(
00703 isotopeCombo->GetListBox(),
00704 CreatePath(PATHIsotope),
00705 DIROnlyDirectories);
00706 isotopeCombo->Select(0);
00707 }
00708
00709
00710 void
00711 XSReactionDlg::UpdateProjectile()
00712 {
00713
00714 UpdateContainer(
00715 projectileCombo->GetListBox(),
00716 CreatePath(PATHProjectile),
00717 DIROnlyDirectories);
00718 projectileCombo->Select(0);
00719 }
00720
00721
00722 void
00723 XSReactionDlg::UpdateDatabase()
00724 {
00725
00726 UpdateContainer(
00727 databaseCombo->GetListBox(),
00728 CreatePath(PATHDatabase),
00729 DIRBoth);
00730 databaseCombo->Select(0);
00731 }
00732
00733
00734 void
00735 XSReactionDlg::UpdateReactions()
00736 {
00737 NdbMTDir elemDir;
00738
00739 reactionList->RemoveEntries(0,1000);
00740 infoView->Clear();
00741
00742 if (elemDir.LoadENDF(CreatePath(PATHFile)))
00743 return;
00744
00745 int id = 0;
00746 for (int i=0; i<elemDir.Sections(); i++) {
00747 if (elemDir.DIRMF(i) == 3)
00748 reactionList->AddEntry(
00749 XSReactionDesc->GetShort(elemDir.DIRMT(i)),
00750 id++);
00751 }
00752 reactionList->MapSubwindows();
00753 reactionList->Select(0);
00754
00755
00756
00757 TString info;
00758
00759 info.Append("Symbol name:\t\t");
00760 info.Append(elemDir.SymbolName());
00761
00762 info.Append("\nLaboratory:\t\t");
00763 info.Append(elemDir.Laboratory());
00764
00765 info.Append("\nEvaluation Date:\t");
00766 info.Append(elemDir.EvaluationDate());
00767
00768 info.Append("\nAuthor(s):\t\t");
00769 info.Append(elemDir.Author());
00770
00771 info.Append("\nReference:\t\t");
00772 info.Append(elemDir.Reference());
00773
00774 info.Append("\nDistribution Date:\t");
00775 info.Append(elemDir.DistributionDate());
00776 info.Append("\nLast Revision Date:\t");
00777 info.Append(elemDir.LastRevisionDate());
00778 info.Append("\nMaster Entry Date:\t");
00779 info.Append(elemDir.MasterEntryDate());
00780 info.Append("\n\n");
00781 info.Append(elemDir.GetInfo());
00782
00783 infoView->LoadBuffer(info.Data());
00784 }
00785
00786
00787 void
00788 XSReactionDlg::UpdateCurIsotope()
00789 {
00790 XSElement *elem = XSelements->Elem(Z);
00791
00792 const char *str = GetString(ISOTOPE_COMBO);
00793 if (str)
00794 isotopeInfoValLbl->SetText(
00795 new TGString(elem->IsotopeInfo(str)));
00796 else
00797 isotopeInfoValLbl->SetText(new TGString("-"));
00798
00799
00800 UpdateProjectile();
00801 UpdateDatabase();
00802 UpdateReactions();
00803 }
00804
00805
00806 void
00807 XSReactionDlg::SetElement(UInt_t aZ)
00808 {
00809 char str[5];
00810
00811 Z = aZ;
00812 if (Z<1)
00813 Z = 1;
00814 else
00815 if (Z>XSelements->GetSize())
00816 Z = XSelements->GetSize();
00817
00818
00819 XSElement *elem = XSelements->Elem(Z);
00820
00821 elementBuf->Clear();
00822 elementBuf->AddText(0,elem->Symbol());
00823 fClient->NeedRedraw(elementText);
00824 nameLbl->SetText(new TGString(elem->Name()));
00825
00826 snprintf(str,5,"%d",Z);
00827 zLbl->SetText(new TGString(str));
00828
00829
00830 massValLbl->SetText(new TGString(elem->AtomicWeight()));
00831 densityValLbl->SetText(new TGString(elem->Density()));
00832 densityValLbl->SetText(new TGString(elem->Density()));
00833 meltingValLbl->SetText(new TGString(elem->MeltingPt()));
00834 boilingValLbl->SetText(new TGString(elem->BoilingPt()));
00835 oxidationValLbl->SetText(new TGString(elem->Oxidation()));
00836
00837
00838 UpdateIsotopes();
00839 UpdateCurIsotope();
00840
00841
00842
00843
00844 temperatureCombo->RemoveEntries(0,1000);
00845 temperatureCombo->AddEntry("0",0);
00846 temperatureCombo->AddEntry("293",1);
00847 temperatureCombo->AddEntry("900",2);
00848 temperatureCombo->AddEntry("1000",3);
00849 temperatureCombo->Select(1);
00850
00851
00852
00853 fClient->NeedRedraw(this);
00854 Layout();
00855 }
00856
00857
00858 void
00859 XSReactionDlg::CloseWindow()
00860 {
00861
00862 Window_t wdum;
00863 gVirtualX->TranslateCoordinates(GetId(), GetParent()->GetId(),
00864 0, 0, LastWinX, LastWinY, wdum);
00865
00866 delete this;
00867 }
00868
00869
00870 void
00871 XSReactionDlg::ElementEntryChanged()
00872 {
00873 const char *name;
00874 UInt_t newZ;
00875
00876
00877 name = elementBuf->GetString();
00878
00879
00880 newZ = atoi(name);
00881 if ((newZ>0) && (newZ<=XSelements->GetSize())) {
00882 SetElement(newZ);
00883 return;
00884 }
00885
00886
00887 newZ = XSelements->Find(name);
00888
00889 if (newZ == 0) {
00890
00891
00892 char msg[256];
00893 int retval;
00894 snprintf(msg,256,"Element %s not found!", elementBuf->GetString());
00895 new TGMsgBox(fClient->GetRoot(),this,"Not found",msg,
00896 kMBIconAsterisk,kMBOk,&retval);
00897 SetElement(Z);
00898 } else
00899 SetElement(newZ);
00900 }
00901
00902
00903 void
00904 XSReactionDlg::UpdateGraph( NdbMTReactionXS *xs )
00905 {
00906 char title[256];
00907
00908
00909
00910 XSGraph *gr = new XSGraph(xs);
00911
00912
00913 snprintf(title,256,"%s-%s %s",
00914 XSelements->Mnemonic(Z),
00915 GetString(ISOTOPE_COMBO),
00916 xs->Description().Data()
00917 );
00918
00919 gr->GetGraph()->SetTitle(title);
00920 gr->GetGraph()->SetFillColor(19);
00921 gr->GetGraph()->SetLineColor(2);
00922 gr->GetGraph()->SetLineWidth(2);
00923 gr->GetGraph()->Draw("ALW");
00924
00925
00926
00927
00928 Add2GraphList(gr);
00929 fClient->NeedRedraw(canvasWindow);
00930 fClient->NeedRedraw(const_cast<TGWindow*>(mainWindow));
00931 canvas->Update();
00932 }
00933
00934
00935 Bool_t
00936 XSReactionDlg::ExecCommand()
00937 {
00938
00939 NdbMTDir el;
00940 if (el.LoadENDF(CreatePath(PATHFile)))
00941 return kTRUE;
00942
00943
00944 const char *reacstr = GetString(REACTION_LISTBOX);
00945
00946
00947 for (int i=0; i<el.Sections(); i++) {
00948 if (el.DIRMF(i) == 3 && XSReactionDesc->GetShort(el.DIRMT(i))) {
00949 if (reacstr && !strcmp(reacstr,
00950 XSReactionDesc->GetShort(el.DIRMT(i)))) {
00951 NdbMTReactionXS xs(el.DIRMT(i), reacstr);
00952 xs.LoadENDF(CreatePath(PATHFile));
00953
00954 UpdateGraph(&xs);
00955 }
00956 }
00957 }
00958 return kFALSE;
00959 }
00960
00961
00962 Bool_t
00963 XSReactionDlg::ProcessButton(Long_t param1, Long_t param2)
00964 {
00965 UInt_t newZ;
00966 switch (param1) {
00967 case REAC_ELEMENT_STEP:
00968 if (param2==XSSTEPBUTTON_UP) {
00969 newZ = Z+1;
00970 if (newZ > XSelements->GetSize()) Z = 1;
00971 } else {
00972 newZ = Z-1;
00973 if (newZ<1) Z = XSelements->GetSize();
00974 }
00975 SetElement(newZ);
00976 break;
00977
00978 case REAC_OK:
00979
00980 if (!ExecCommand())
00981 CloseWindow();
00982 break;
00983
00984 case REAC_EXEC:
00985
00986 ExecCommand();
00987 break;
00988
00989 case REAC_RESET:
00990 SetElement(1);
00991 break;
00992
00993 case REAC_CLOSE:
00994 CloseWindow();
00995 break;
00996
00997 case REAC_PTABLE:
00998 newZ = Z;
00999 new XSElementDlg(fClient->GetRoot(), this, &newZ);
01000 if (newZ>0)
01001 SetElement(newZ);
01002 break;
01003
01004 default:
01005 break;
01006 }
01007 return kTRUE;
01008 }
01009
01010
01011 Bool_t
01012 XSReactionDlg::ProcessCombo( Long_t param1, Long_t param2 )
01013 {
01014 printf("ComboMessage %ld %ld\n",param1,param2);
01015
01016 switch (param1) {
01017 case ISOTOPE_COMBO:
01018 UpdateCurIsotope();
01019 break;
01020
01021 case PROJECTILE_COMBO:
01022 UpdateDatabase();
01023 UpdateReactions();
01024 break;
01025
01026 case DATABASE_COMBO:
01027 UpdateReactions();
01028 break;
01029
01030 case REACTION_LISTBOX:
01031
01032
01033 break;
01034
01035 default:
01036
01037 break;
01038 }
01039
01040 return kTRUE;
01041 }
01042
01043
01044 Bool_t
01045 XSReactionDlg::ProcessMessage(Long_t msg, Long_t param1, Long_t param2)
01046 {
01047 printf("Message = %d (%d)\n", GET_MSG(msg), GET_SUBMSG(msg));
01048
01049 switch (GET_MSG(msg)) {
01050 case kC_COMMAND:
01051 switch (GET_SUBMSG(msg)) {
01052 case kCM_BUTTON:
01053 ProcessButton(param1,param2);
01054 break;
01055
01056 case kCM_COMBOBOX:
01057 ProcessCombo(param1,param2);
01058 break;
01059
01060 default:
01061 break;
01062 }
01063 case kC_TEXTENTRY:
01064 switch (GET_SUBMSG(msg)) {
01065 case kTE_ENTER:
01066 ElementEntryChanged();
01067 break;
01068 default:
01069 break;
01070 }
01071 default:
01072
01073 break;
01074 }
01075 return kTRUE;
01076 }