00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "TGo4LinkProxy.h"
00017
00018 #include "TH1.h"
00019 #include "TString.h"
00020
00021 #include "TGo4Slot.h"
00022 #include "TGo4ObjectManager.h"
00023
00024 TGo4LinkProxy::TGo4LinkProxy() :
00025 TGo4Proxy(),
00026 fLink(0)
00027 {
00028 }
00029
00030 TGo4LinkProxy::TGo4LinkProxy(TGo4Slot* linkedslot) :
00031 TGo4Proxy(),
00032 fLink(linkedslot)
00033 {
00034 }
00035
00036 TGo4LinkProxy::~TGo4LinkProxy()
00037 {
00038 }
00039
00040 void TGo4LinkProxy::Initialize(TGo4Slot* slot)
00041 {
00042 TGo4ObjectManager* om = slot->GetOM();
00043 if (om!=0)
00044 om->RegisterLink(fLink, slot);
00045 }
00046
00047 void TGo4LinkProxy::Finalize(TGo4Slot* slot)
00048 {
00049 TGo4ObjectManager* om = slot->GetOM();
00050 if (om!=0) {
00051
00052
00053
00054 if (slot->DoingDelete())
00055 om->RetranslateEvent(slot, TGo4Slot::evDelete);
00056
00057 om->UnregisterLink(slot);
00058 }
00059 }
00060
00061 TGo4Access* TGo4LinkProxy::MakeProxy(const char* name)
00062 {
00063 return (fLink!=0) ? fLink->ProvideSlotAccess(name) : 0;
00064 }
00065
00066 TGo4LevelIter* TGo4LinkProxy::MakeIter()
00067 {
00068 return (fLink!=0) ? fLink->MakeLevelIter() : 0;
00069 }
00070
00071 void TGo4LinkProxy::WriteData(TGo4Slot* slot, TDirectory* dir, Bool_t onlyobjs)
00072 {
00073 if (!onlyobjs) {
00074 TString linkname;
00075 if (fLink!=0)
00076 fLink->ProduceFullName(linkname);
00077
00078 slot->SetPar("LinkProxy::LinkName", linkname.Length()>0 ? linkname.Data() : 0);
00079 }
00080 }
00081
00082 void TGo4LinkProxy::ReadData(TGo4Slot* slot, TDirectory* dir)
00083 {
00084 const char* linkname = slot->GetPar("LinkProxy::LinkName");
00085 if (linkname!=0)
00086 fLink = slot->GetOM()->GetSlot(linkname);
00087
00088 }
00089
00090 Int_t TGo4LinkProxy::GetObjectKind()
00091 {
00092 return (fLink!=0) ? fLink->GetSlotKind() : TGo4Access::kndNone;
00093 }
00094
00095 const char* TGo4LinkProxy::GetContainedClassName()
00096 {
00097 return (fLink!=0) ? fLink->GetSlotClassName() : 0;
00098 }
00099
00100 Bool_t TGo4LinkProxy::IsAcceptObject(TClass* cl)
00101 {
00102 return (fLink!=0) ? fLink->IsAcceptObject(cl) : kFALSE;
00103 }
00104
00105 Bool_t TGo4LinkProxy::AssignObject(TGo4Slot* slot, TObject* obj, Bool_t owner)
00106 {
00107 return fLink==0 ? kFALSE : fLink->AssignObject(obj, owner);
00108 }
00109
00110 TObject* TGo4LinkProxy::GetAssignedObject()
00111 {
00112 return fLink==0 ? 0 : fLink->GetAssignedObject();
00113 }
00114
00115 Bool_t TGo4LinkProxy::ProcessEvent(TGo4Slot* slot, TGo4Slot* source, Int_t id, void* param)
00116 {
00117 if ((id == TGo4Slot::evDelete) && (source == fLink)) {
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 fLink = 0;
00128 slot->Delete();
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138 return kFALSE;
00139 }
00140
00141
00142 slot->ForwardEvent(slot, id, param);
00143
00144 return kFALSE;
00145 }
00146
00147