#ifndef __TGMrbMacroBrowser_h__
#define __TGMrbMacroBrowser_h__
namespace std {} using namespace std;
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <fstream>
#include "Rtypes.h"
#include "TSystem.h"
#include "TROOT.h"
#include "TList.h"
#include "TObjArray.h"
#include "TEnv.h"
#include "TApplication.h"
#include "TGWindow.h"
#include "TGFrame.h"
#include "TGLabel.h"
#include "TGMenu.h"
#include "TGTab.h"
#include "TGFileDialog.h"
#include "RQ_OBJECT.h"
#include "TMrbNamedX.h"
#include "TMrbLofNamedX.h"
#include "TMrbLofMacros.h"
#include "TGMrbLayout.h"
#include "TGMrbLabelEntry.h"
#include "TGMrbFileEntry.h"
#include "TGMrbFileObject.h"
#include "TGMrbRadioButton.h"
#include "TGMrbCheckButton.h"
#include "TGMrbTextButton.h"
#include "TGMrbLabelCombo.h"
#include "TGMrbMessageViewer.h"
#include "TGMrbLofKeyBindings.h"
class TGMrbMacroArg : public TMrbNamedX {
friend class TGMrbMacroFrame;
public:
enum EGMrbMacroEntryType {
kGMrbMacroEntryBitEntry = BIT(0),
kGMrbMacroEntryBitMulti = BIT(1),
kGMrbMacroEntryBitChkBtn = BIT(2),
kGMrbMacroEntryBitRdoBtn = BIT(3),
kGMrbMacroEntryBitBeginEnd = BIT(4),
kGMrbMacroEntryBitUpDown = BIT(5),
kGMrbMacroEntryPlain = kGMrbMacroEntryBitEntry,
kGMrbMacroEntryPlain2 = kGMrbMacroEntryBitEntry | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryPlainC = kGMrbMacroEntryBitEntry | kGMrbMacroEntryBitChkBtn,
kGMrbMacroEntryPlainC2 = kGMrbMacroEntryPlainC | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryUpDown = kGMrbMacroEntryBitEntry | kGMrbMacroEntryBitUpDown,
kGMrbMacroEntryUpDown2 = kGMrbMacroEntryUpDown | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryUpDownC = kGMrbMacroEntryUpDown | kGMrbMacroEntryBitChkBtn,
kGMrbMacroEntryUpDownC2 = kGMrbMacroEntryUpDownC | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryUpDownX = kGMrbMacroEntryUpDown | kGMrbMacroEntryBitBeginEnd,
kGMrbMacroEntryUpDownXC = kGMrbMacroEntryUpDownX | kGMrbMacroEntryBitChkBtn,
kGMrbMacroEntryUpDownX2 = kGMrbMacroEntryUpDownX | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryUpDownXC2 = kGMrbMacroEntryUpDownXC | kGMrbMacroEntryBitMulti,
kGMrbMacroEntryYesNo = BIT(6),
kGMrbMacroEntryRadio = BIT(7),
kGMrbMacroEntryCheck = BIT(8),
kGMrbMacroEntryText = BIT(9),
kGMrbMacroEntryCombo = BIT(10),
kGMrbMacroEntryFile = BIT(11),
kGMrbMacroEntryFObjCombo = BIT(12),
kGMrbMacroEntryFObjListBox = BIT(13),
kGMrbMacroEntryComment = BIT(14),
kGMrbMacroEntrySection = BIT(15),
kGMrbMacroEntryGroup = BIT(16),
kGMrbMacroEntryPad = BIT(17),
kGMrbMacroEntryTab = BIT(18),
kGMrbMacroEntryFrame = BIT(20)
};
enum EGMrbMacroArgType {
kGMrbMacroArgInt,
kGMrbMacroArgUInt,
kGMrbMacroArgFloat,
kGMrbMacroArgDouble,
kGMrbMacroArgChar,
kGMrbMacroArgBool,
kGMrbMacroArgObjArr
};
enum EGMrbMacroArgBase {
kGMrbMacroArgBaseDec = BIT(0),
kGMrbMacroArgBaseBin = BIT(1),
kGMrbMacroArgBaseOct = BIT(2),
kGMrbMacroArgBaseHex = BIT(3)
};
enum EGMrbMacroArgOrientation { kGMrbMacroEntryHorizontal = BIT(0),
kGMrbMacroEntryVertical = BIT(1)
};
enum { kGMrbMacroEntryNo = 0 };
enum { kGMrbMacroEntryYes = 1 };
enum { kGMrbMacroNofFileTypes = 50 };
public:
TGMrbMacroArg() : TMrbNamedX(0, "Arg0") {
fFileInfo = new TGFileInfo();
};
TGMrbMacroArg(Int_t Number) : TMrbNamedX(Number, Form("Arg%d", Number)) {
fFileInfo = new TGFileInfo();
};
TGMrbMacroArg(Int_t Number, const Char_t * Name) : TMrbNamedX(Number, Name) {
fFileInfo = new TGFileInfo();
};
virtual ~TGMrbMacroArg() { delete fFileInfo; };
const Char_t * GetResource(TString & Resource, const Char_t * ResourceName) const;
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TMrbNamedX * fType;
TMrbNamedX * fEntryType;
TString fCurrentValue;
TString fDefaultValue;
Bool_t fAddLofValues;
TGLabel * fComment;
TGLabel * fSection;
TGLabel * fTab;
TGGroupFrame * fGroup;
TGVerticalFrame * fFrame;
TGMrbLabelEntry * fEntry;
TGMrbRadioButtonList * fRadio;
TGMrbCheckButtonList * fCheck;
TGMrbTextButtonList * fText;
TGMrbLabelCombo * fCombo;
TGMrbFileEntry * fFile;
TGMrbFileObjectCombo * fFObjCombo;
TGMrbFileObjectListBox * fFObjListBox;
TMrbLofNamedX fButtons;
Int_t fEntryWidth;
Int_t fNofEntryFields;
Double_t fLowerLimit;
Double_t fUpperLimit;
Double_t fIncrement;
Int_t fOrientation;
Int_t fNofCL;
TString fExecFunct;
TGFileInfo * fFileInfo;
TObjArray fFileTypes;
const Char_t * fPtrFileTypes[2 * TGMrbMacroArg::kGMrbMacroNofFileTypes];
ClassDef(TGMrbMacroArg, 0)
};
class TGMrbMacroFrame : public TGTransientFrame {
RQ_OBJECT("TGMrbMacroFrame")
public:
enum EGMrbMacroId { kGMrbMacroIdExec,
kGMrbMacroIdReset,
kGMrbMacroIdClose,
kGMrbMacroIdQuit,
kGMrbMacroIdModifyHeader,
kGMrbMacroIdModifySource,
kGMrbMacroIdExecClose
};
enum { kUserButtonStart = BIT(16) };
enum { kFrameWidth = 1200 };
enum { kLineHeight = 20 };
enum { kGMrbMacroNofFrames = 10 };
enum { kGMrbMacroNofSubframes = 10 };
enum { kGMrbMacroNofTabs = 10 };
public:
TGMrbMacroFrame(const TGWindow * Parent, const TGWindow * Main, TMrbNamedX * Macro, UInt_t Width, UInt_t Height, UInt_t Options = kMainFrame | kVerticalFrame);
~TGMrbMacroFrame() { fHeap.Delete(); };
Bool_t ResetMacroArgs();
Bool_t ExecMacro(Bool_t UserStart = kFALSE);
Bool_t ModifyMacroHeader();
Bool_t ModifyMacroSource();
inline TMrbLofNamedX * GetLofArgTypes() { return(&fLofArgTypes); };
inline TMrbLofNamedX * GetLofEntryTypes() { return(&fLofEntryTypes); };
inline TObjArray * GetLofMacroArgs() { return(&fLofMacroArgs); };
TGMrbMacroArg * FindArgByName(const Char_t * ArgName);
Bool_t SetArgValue(const Char_t * ArgName, Int_t Value, Int_t EntryNo = 0);
Bool_t SetArgValue(const Char_t * ArgName, Bool_t Value, Int_t EntryNo = 0);
Bool_t SetArgValue(const Char_t * ArgName, Double_t Value, Int_t EntryNo = 0);
Bool_t SetArgValue(const Char_t * ArgName, const Char_t * Value, Int_t EntryNo = 0);
Bool_t SetArgValue(const Char_t * ArgName, TObjArray & Selection);
Bool_t GetArgValue(const Char_t * ArgName, Int_t & Value, Int_t EntryNo = 0);
Bool_t GetArgValue(const Char_t * ArgName, Bool_t & Value, Int_t EntryNo = 0);
Bool_t GetArgValue(const Char_t * ArgName, Double_t & Value, Int_t EntryNo = 0);
Bool_t GetArgValue(const Char_t * ArgName, TString & Value, Int_t EntryNo = 0);
Bool_t GetArgValue(const Char_t * ArgName, TObjArray & Selection);
Bool_t SetArgCheck(const Char_t * ArgName, UInt_t Check);
Bool_t GetArgCheck(const Char_t * ArgName, UInt_t & Check);
Bool_t ArgIsChecked(const Char_t * ArgName);
void ProcessSignal(Int_t FrameId, Int_t Signal);
void ActionButtonPressed(Int_t FrameId, Int_t Signal);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Bool_t LoadMacro();
protected:
TList fHeap;
TMrbNamedX * fMacro;
TGGroupFrame * fMacroInfo;
TGLabel * fMacroName;
TGLabel * fMacroPath;
TGLabel * fMacroTitle;
TGGroupFrame * fMacroArgs;
TGTab * fMacroTab;
TGCompositeFrame * fMacroLofTabs[kGMrbMacroNofTabs];
TGVerticalFrame * fMacroLofTabFrames[kGMrbMacroNofTabs];
TGHorizontalFrame * fMacroLofFrames[kGMrbMacroNofFrames];
TGVerticalFrame * fMacroLofSubframes[kGMrbMacroNofSubframes];
TGMrbTextButtonGroup * fAction;
TMrbLofNamedX fLofArgTypes;
TMrbLofNamedX fLofEntryTypes;
TMrbLofNamedX fLofActions;
TMrbLofNamedX fLofActionsM;
TMrbLofNamedX fLofActionsX;
TObjArray fLofMacroArgs;
Bool_t fMacroLoaded;
ClassDef(TGMrbMacroFrame, 0)
};
class TGMrbMacroEdit : public TGTransientFrame {
public:
enum EGMrbMacroEditButtons { kGMrbMacroAclicPlus,
kGMrbMacroAclicPlusPlus,
kGMrbMacroAclicPlusG,
kGMrbMacroAclicPlusPlusG,
kGMrbMacroMayModify,
kGMrbMacroDontModify,
kGMrbMacroArglistOnly,
kGMrbMacroGuiPtrOnly,
kGMrbMacroArglistAndGui,
kGMrbMacroUserStartOn,
kGMrbMacroUserStartOff
};
enum EGMrbMacroEditId { kGMrbMacroEditCurrentArg,
kGMrbMacroEditIdFirstArg,
kGMrbMacroEditIdLastArg,
kGMrbMacroEditIdRemoveArg,
kGMrbMacroEditIdResetArg,
kGMrbMacroEditIdNewArgBefore,
kGMrbMacroEditIdNewArgAfter,
kGMrbMacroEditIdResetAll,
kGMrbMacroEditIdResetHeader,
kGMrbMacroEditIdResetAllArgs,
kGMrbMacroEditIdSave,
kGMrbMacroEditIdClose
};
enum { kEntryId = 1000 };
enum { kFrameWidth = 630 };
enum { kLineHeight = 20 };
enum { kMaxNofArgs = 50 };
enum EGMrbMacroTag { kMacroTagFile,
kMacroTagName,
kMacroTagTitle,
kMacroTagProc,
kMacroTagAuthor,
kMacroTagMailAddr,
kMacroTagUrl,
kMacroTagCreationDate,
kMacroTagSyntax,
kMacroTagArguments,
kMacroTagExec,
kMacroTagIncludeHFiles,
kMacroTagArgEnums,
kMacroTagEnums,
kMacroTagCode
};
public:
TGMrbMacroEdit(const TGWindow * Parent, const TGWindow * Main, TMrbNamedX * Macro, UInt_t Width, UInt_t Height, UInt_t Options = kMainFrame | kVerticalFrame);
~TGMrbMacroEdit() { fHeap.Delete(); };
Bool_t SwitchToArg(Int_t FrameId, Int_t EntryNo = -1);
void ActionButtonPressed(Int_t FrameId, Int_t Button);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
Bool_t UpdateArg(Int_t ArgNo = -1);
Bool_t UpdateNofArgs();
Bool_t StoreHeader();
Bool_t StoreArg(Int_t ArgNo = -1);
Bool_t RemoveArg(Int_t ArgNo = -1);
Bool_t InsertArg(Int_t ArgNo);
Bool_t RestoreArg(Int_t ArgNo = -1);
Bool_t RestoreHeader();
Bool_t RestoreAllArgs();
Bool_t ChangeEnv(Int_t ArgNo, Bool_t Delete);
Bool_t SaveMacro(const Char_t * NewFile, const Char_t * OldFile);
Int_t ExtractEnums(TMrbLofNamedX & LofEnums, Int_t ArgNo);
Bool_t CopyUserCode(const Char_t * NewFile, const Char_t * OrgFile);
Bool_t CopyUserCode(ofstream & Out, const Char_t * OutFile, ifstream & In, const Char_t * InFile, const Char_t * Tag, Bool_t CopyFlag);
protected:
TList fHeap;
TMrbNamedX * fMacro;
TGGroupFrame * fMacroInfo;
TGMrbLabelEntry * fMacroName;
TGMrbLabelEntry * fMacroTitle;
TGMrbLabelEntry * fMacroRcFile;
TGMrbLabelEntry * fMacroProc;
TGMrbLabelEntry * fMacroWidth;
TGMrbRadioButtonList * fMacroAclic;
TGMrbRadioButtonList * fMacroModify;
TGMrbRadioButtonList * fMacroGuiPtrMode;
TGMrbRadioButtonList * fMacroUserStart;
TGMrbLabelEntry * fMacroNofArgs;
TGGroupFrame * fMacroArg;
TGMrbLabelEntry * fArgNumber;
TGMrbTextButtonList * fArgAction;
TGGroupFrame * fMacroLayout;
TGMrbLabelEntry * fArgName;
TGMrbLabelEntry * fArgTitle;
TGMrbLabelCombo * fArgType;
TGMrbLabelCombo * fArgEntryType;
TGMrbLabelEntry * fArgNofEntryFields;
TGMrbLabelEntry * fArgEntryWidth;
TGMrbLabelEntry * fArgDefaultValue;
TGMrbLabelEntry * fArgValues;
TGMrbRadioButtonList * fArgAddLofValues;
TGMrbRadioButtonList * fArgBase;
TGMrbLabelEntry * fArgLimits;
TGMrbRadioButtonList * fArgOrientation;
TGMrbLabelEntry * fArgNofCL;
TGMrbLabelEntry * fArgExecFunct;
TGMrbTextButtonGroup * fAction;
TMrbLofNamedX fLofAclicModes;
TMrbLofNamedX fLofModifyModes;
TMrbLofNamedX fLofArglistGuiModes;
TMrbLofNamedX fLofUserStartModes;
TMrbLofNamedX fLofArgTypes;
TMrbLofNamedX fLofEntryTypes;
TMrbLofNamedX fLofOrientations;
TMrbLofNamedX fLofIntegerBases;
TMrbLofNamedX fYesNo;
TMrbLofNamedX fLofArgActions;
TMrbLofNamedX fLofActions;
Int_t fNofArgs;
TGMrbMacroArg fCurrentArg;
TEnv * fOriginalEnv;
TEnv * fCurrentEnv;
TMrbLofNamedX fLofEnvNames;
ClassDef(TGMrbMacroEdit, 0)
};
class TGMrbMacroList : public TGVerticalFrame {
public:
TGMrbMacroList(const TGWindow * Parent, TMrbLofMacros * MacroList, UInt_t Width, UInt_t Height,
TGMrbLayout * FrameGC, TGMrbLayout * ButtonGC,
UInt_t FrameOptions = kChildFrame | kVerticalFrame,
UInt_t ButtonOptions = kRaisedFrame | kDoubleBorder);
~TGMrbMacroList() { fHeap.Delete(); };
void SelectMacro(Int_t FrameId, Int_t Selection);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TList fHeap;
TGMrbTextButtonList * fButtonList;
TMrbLofMacros * fLofMacros;
TMrbLofNamedX fLofButtons;
ClassDef(TGMrbMacroList, 0)
};
class TGMrbMacroBrowserMain : public TGMainFrame {
public:
enum EGMrbMacroMainId { kGMrbMacroMenuFileNew,
kGMrbMacroMenuFileOpen,
kGMrbMacroMenuFileExit,
kGMrbMacroMenuViewErrors,
kGMrbMacroMenuHelpContents,
kGMrbMacroMenuHelpAbout
};
public:
TGMrbMacroBrowserMain(const TGWindow * Parent, TMrbLofMacros * LofMacros,
UInt_t Width, UInt_t Height);
virtual ~TGMrbMacroBrowserMain() { fHeap.Delete(); };
inline TMrbLofMacros * GetLofMacros() const { return(fLofMacros); };
inline Bool_t HandleKey(Event_t * Event) { return(fKeyBindings.HandleKey(Event)); };
void MenuSelect(Int_t Selection);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
inline void CloseWindow() { TGMainFrame::CloseWindow(); gApplication->Terminate(0); };
protected:
void PopupMessageViewer();
protected:
TList fHeap;
TGPopupMenu * fMenuFile;
TGPopupMenu * fMenuView;
TGPopupMenu * fMenuHelp;
TGMenuBar * fMenuBar;
TGMrbLayout * fFrameGC;
TGMrbLayout * fButtonGC;
TMrbLofMacros * fLofMacros;
TGMrbMacroList * fMacroList;
TGMrbMessageViewer * fMsgViewer;
TGMrbLofKeyBindings fKeyBindings;
ClassDef(TGMrbMacroBrowserMain,0)
};
class TGMrbMacroBrowserVertical : public TGVerticalFrame {
public:
TGMrbMacroBrowserVertical(const TGWindow * Parent, TMrbLofMacros * LofMacros, UInt_t Width, UInt_t Height, UInt_t Options);
virtual ~TGMrbMacroBrowserVertical() {};
inline TMrbLofMacros * GetLofMacros() const { return(fLofMacros); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TList fHeap;
TMrbLofMacros * fLofMacros;
TGMrbMacroList * fMacroList;
ClassDef(TGMrbMacroBrowserVertical,0)
};
class TGMrbMacroBrowserGroup : public TGGroupFrame {
public:
TGMrbMacroBrowserGroup(const TGWindow * Parent, const Char_t * Title, TMrbLofMacros * LofMacros, TGMrbLayout * Layout);
virtual ~TGMrbMacroBrowserGroup() {};
inline TMrbLofMacros * GetLofMacros() const { return(fLofMacros); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TList fHeap;
TMrbLofMacros * fLofMacros;
TGMrbMacroList * fMacroList;
ClassDef(TGMrbMacroBrowserGroup,0)
};
class TGMrbMacroBrowserPopup : public TGPopupMenu {
public:
enum EGMrbMacroPopupId { kGMrbPopupNew = 1000,
kGMrbPopupOpen
};
public:
TGMrbMacroBrowserPopup(const TGWindow * Parent, TMrbLofMacros * LofMacros, UInt_t Width = 10, UInt_t Height = 10);
virtual ~TGMrbMacroBrowserPopup() { fHeap.Delete(); };
inline TMrbLofMacros * GetLofMacros() const { return(fLofMacros); };
void MenuSelect(Int_t Signal);
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TList fHeap;
TMrbLofMacros * fLofMacros;
ClassDef(TGMrbMacroBrowserPopup,0)
};
class TGMrbMacroBrowserTransient : public TGTransientFrame {
public:
TGMrbMacroBrowserTransient(const TGWindow * Parent, const TGWindow * Main, const Char_t * Title, TMrbLofMacros * LofMacros,
UInt_t Width, UInt_t Height, UInt_t Options = kMainFrame | kVerticalFrame);
virtual ~TGMrbMacroBrowserTransient() {fHeap.Delete(); };
inline TMrbLofMacros * GetLofMacros() const { return(fLofMacros); };
inline void Help() { gSystem->Exec(Form("mrbHelp %s", this->ClassName())); };
protected:
TList fHeap;
TMrbLofMacros * fLofMacros;
TGMrbMacroList * fMacroList;
ClassDef(TGMrbMacroBrowserTransient,0)
};
#endif