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