XSReactionDlg.cxx

Go to the documentation of this file.
00001 /*
00002  * $Header$
00003  * $Log$
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 //ClassImp(XSReactionDlg)
00026 
00027 // Options for filling containers
00028 enum    DirOptions {
00029                 DIROnlyFiles,
00030                 DIROnlyDirectories,
00031                 DIRBoth
00032         };
00033 
00034 // Options for creating the path
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 /* ----- XSReactionDlg ----- */
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         // Remember the main window
00075         mainWindow = main;
00076 
00077         /* ---------- Prepare the Layout Hints ------- */
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         /* --------- Create the Dialog -------------- */
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         /* ------------ Material --------------- */
00115         materialGroup = new TGGroupFrame(this,"Material",kVerticalFrame);
00116 
00117         /* ----- First Sub-Frame ---- */
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         /* ----- Second Sub-Frame ---- */
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         /* ----- Fourth Sub-Frame ---- */
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         /* --------------- Reaction ------------------ */
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         //reactionList->SetMultipleSelections(kTRUE);
00282         reactionList->Associate(this);
00283         frm4->AddFrame(reactionList,lHExpXCen);
00284 
00285         reactionGroup->AddFrame(frm4,lHExpX);
00286 
00287         // --- Second sub frame ---
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         /* --------------- Options ------------------ */
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         /* -------------- Information ------------------ */
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         /* --------- Initialize layout algorithm with Resize() -------- */
00377         MapSubwindows();
00378         Resize(GetDefaultSize());
00379 
00380         /* --------- Initialise with Element Z ---------- */
00381         SetElement(initZ);
00382         InitCombos();
00383 
00384         /* --------- Set Windows Position --------- */
00385         int     ax, ay;
00386 
00387         if (LastWinX == -1) {   // Go to the middle of parent window
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         /* --------- Map everything -------- */
00403         SetWindowName("Select Element/Reaction");
00404         MapWindow();
00405 
00406 } // XSReactionDlg
00407 
00408 /* ----- ~XSReactionDlg ----- */
00409 XSReactionDlg::~XSReactionDlg()
00410 {
00411         // --- Delete Layout Hints ---
00412         delete  lHFixed;
00413         delete  lHExpX;
00414         delete  lHExpY;
00415         delete  lHExpXY;
00416         delete  lHFixedCen;
00417         delete  lHExpXCen;
00418 
00419         // --- Delete Material Group ----
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         // --- Delete Reaction group ---
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         // --- Option Group ----
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         // --- Info Group ----
00474         delete  infoView;
00475         delete  infoGroup;
00476 
00477         // --- Frames ---
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         // --- Buttons ---
00489         delete  okButton;
00490         delete  execButton;
00491         delete  resetButton;
00492         delete  closeButton;
00493         delete  buttonFrame;
00494 } // ~XSReactionDlg
00495 
00496 /* ----- InitColorCombo ----- */
00497 void
00498 XSReactionDlg::InitColorCombo(TGComboBox *cb)
00499 {
00500         // Normaly this should be filled with color entries!!!
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);          // <<<< Should find the correct color...
00511 } // InitColorCombos
00512 
00513 /* ----- InitCombos ----- */
00514 void
00515 XSReactionDlg::InitCombos()
00516 {
00517         InitColorCombo(lineColorCombo);
00518         InitColorCombo(markerColorCombo);
00519         InitColorCombo(errorbarColorCombo);
00520 
00521         /* ---- Line Widths ----- */
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         // --- Select the correct one ---
00535 
00536         /* ---- Marker Style ----- */
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         // --- Select the correct one ---
00550 
00551         /* ---- Marker Size ----- */
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         // --- Select the correct one ---
00566 } // InitCombos
00567 
00568 /* ----- GetString ------- */
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 } // GetString
00625 
00626 /* ----- CreatePath ------ */
00627 char*
00628 XSReactionDlg::CreatePath( int option )
00629 {
00630         static  char    path[256];
00631 
00632         strlcpy(path, DBDIR,256);       // Initialise directory
00633         strlcat(path, XSelements->Mnemonic(Z),256);
00634         strlcat(path, PATHSEP,256);
00635 
00636         if (option == PATHIsotope) return path;
00637 
00638         /* --- add the selected isotope --- */
00639         strlcat(path, GetString(ISOTOPE_COMBO),256);
00640         strlcat(path, PATHSEP,256);
00641 
00642         if (option == PATHProjectile) return path;
00643 
00644         /* --- add the selected projectile --- */
00645         strlcat(path, GetString(PROJECTILE_COMBO),256);
00646         strlcat(path, PATHSEP,256);
00647 
00648         if (option == PATHDatabase) return path;
00649 
00650         /* --- finally add the file --- */
00651         strlcat(path, GetString(DATABASE_COMBO),256);
00652 
00653         return path;
00654 } // CreatePath
00655 
00656 /* ----- UpdateContainer ----- */
00657 int
00658 XSReactionDlg::UpdateContainer( TGListBox *lb, char *path, int option)
00659 {
00660    const char *entry;
00661    FileStat_t st;
00662 
00663         // --- First Remove everything ---
00664         lb->RemoveEntries(0,1000);
00665 
00666         // Scan directory to update the combo box
00667    void *dirp = gSystem->OpenDirectory(path);
00668         if (dirp==NULL) {
00669                 lb->AddEntry("-",0);
00670                 return kTRUE;   // Ooops not found
00671         }
00672 
00673         int     i=0;
00674         while ((entry = gSystem->GetDirEntry(dirp))) {
00675                 // Skip the . and .* directory entries
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;   // Ooops not found
00693         }
00694         return kFALSE;
00695 } // UpdateContainer
00696 
00697 /* ----- UpdateIsotopes ------ */
00698 void
00699 XSReactionDlg::UpdateIsotopes()
00700 {
00701         // --- Update the isotopes ---
00702         UpdateContainer(
00703                 isotopeCombo->GetListBox(),
00704                 CreatePath(PATHIsotope),
00705                 DIROnlyDirectories);
00706         isotopeCombo->Select(0);
00707 } // UpdateIsotopes
00708 
00709 /* ----- UpdateProjectile ------ */
00710 void
00711 XSReactionDlg::UpdateProjectile()
00712 {
00713         // --- Update the projectiles ---
00714         UpdateContainer(
00715                 projectileCombo->GetListBox(),
00716                 CreatePath(PATHProjectile),
00717                 DIROnlyDirectories);
00718         projectileCombo->Select(0);
00719 } // UpdateProjectile
00720 
00721 /* ----- UpdateDatabase ------ */
00722 void
00723 XSReactionDlg::UpdateDatabase()
00724 {
00725         // --- Update the databases ---
00726         UpdateContainer(
00727                 databaseCombo->GetListBox(),
00728                 CreatePath(PATHDatabase),
00729                 DIRBoth);
00730         databaseCombo->Select(0);
00731 } // UpdateDatabase
00732 
00733 /* ----- UpdateReactions ------ */
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         // Prepare a string with information
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 } // UpdateReactions
00785 
00786 /* ----- UpdateCurIsotope ----- */
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         // --- Update combos depending on isotope ---
00800         UpdateProjectile();
00801         UpdateDatabase();
00802         UpdateReactions();
00803 } // UpdateCurIsotope
00804 
00805 /* ----- SetElement ----- */
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         // --- Update several values for element ---
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         // ---Update the rest of combos ---
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         // Redraw everything
00853         fClient->NeedRedraw(this);
00854         Layout();
00855 } // SetElement
00856 
00857 /* ----- CloseWindow ----- */
00858 void
00859 XSReactionDlg::CloseWindow()
00860 {
00861         // --- Remember old position ---
00862         Window_t wdum;
00863         gVirtualX->TranslateCoordinates(GetId(), GetParent()->GetId(),
00864                 0, 0, LastWinX, LastWinY, wdum);
00865 
00866         delete this;
00867 } // CloseWindow
00868 
00869 /* ----- elementEntryChanged ---- */
00870 void
00871 XSReactionDlg::ElementEntryChanged()
00872 {
00873         const   char    *name;
00874         UInt_t  newZ;
00875 
00876         /* --- get contents --- */
00877         name = elementBuf->GetString();
00878 
00879         /* --- check if it is a number --- */
00880         newZ = atoi(name);
00881         if ((newZ>0) && (newZ<=XSelements->GetSize())) {
00882                 SetElement(newZ);
00883                 return;
00884         }
00885 
00886         /* Search for the specific element */
00887         newZ = XSelements->Find(name);
00888 
00889         if (newZ == 0) {
00890                 // --- Error Entry ---
00891                 // issue message and put the old one
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 } // ElementEntryChanged
00901 
00902 /* ----- UpdateGraph ---- */
00903 void
00904 XSReactionDlg::UpdateGraph( NdbMTReactionXS *xs )
00905 {
00906         char title[256];
00907 
00908         //!!! --- Only if new ---
00909         //!!! --- Else update the old one ---
00910         XSGraph *gr = new XSGraph(xs);
00911 
00912         // Prepare the title
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 //      gr->GetGraph()->GetHistogram()->SetXTitle(TString("Energy (eV)"));
00926 //      gr->GetGraph()->GetHistogram()->SetYTitle(TString("Cross Section (barn)"));
00927 
00928         Add2GraphList(gr);
00929         fClient->NeedRedraw(canvasWindow);
00930         fClient->NeedRedraw(const_cast<TGWindow*>(mainWindow));
00931    canvas->Update();
00932 } // UpdateGraph
00933 
00934 /* ----- ExecCommand ---- */
00935 Bool_t
00936 XSReactionDlg::ExecCommand()
00937 {
00938         // --- Load the data base ---
00939         NdbMTDir        el;
00940         if (el.LoadENDF(CreatePath(PATHFile)))
00941                 return kTRUE;
00942 
00943         // --- Get the selected reaction ---
00944         const char *reacstr = GetString(REACTION_LISTBOX);
00945 
00946         // --- Search for the reaction ---
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 } // ExecCommand
00960 
00961 /* ----- ProcessButton ----- */
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                         // Execute the command and close the window
00980                         if (!ExecCommand())
00981                                 CloseWindow();
00982                         break;
00983 
00984                 case REAC_EXEC:
00985                         // Execute the command, but don't close the window
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 } // ProcessButton
01009 
01010 /* ----- ProcessCombo ------ */
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 //////                  reactionInfoValLbl->SetText(
01032 //////                          new TGString(elem->IsotopeInfo(str)));
01033                         break;
01034 
01035                 default:
01036                         // Ooops an error in the code
01037                         break;
01038         }
01039 
01040         return kTRUE;
01041 } // ProcessCombo
01042 
01043 /* ----- ProcessMessage ----- */
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 //                      printf("Message = %d (%d)\n", GET_MSG(msg), GET_SUBMSG(msg));
01073                         break;
01074         }
01075         return kTRUE;
01076 } // ProcessMessage

Generated on Tue Jul 5 15:15:06 2011 for ROOT_528-00b_version by  doxygen 1.5.1