001 #include "FMScaleSelector.h"
002
003 #include "TTPosition.h"
004
005 #ifdef WIN32
006 #include <Riostream.h>
007 #else
008 #include <iostream.h>
009 #endif
010
011 using std::cout;
012 using std::endl;
013
014 FMScaleSelector::FMScaleSelector(IDisplayFrame* parentFrame):
015 m_parentFrame(parentFrame)
016 {
017
018 TGVerticalFrame* fToolFrame = parentFrame->modulesFrame();
019 m_pReader = parentFrame->ntupleReader();
020
021 fDataScaleGroupFrame = new TGGroupFrame(fToolFrame, "Scale", kVerticalFrame);
022
023 fAutoScaleButton = new TGCheckButton(fDataScaleGroupFrame,"Auto scale");
024 fAutoScaleButton->Connect("Clicked()", "FMScaleSelector", this, "OnAutoScaleChange()");
025 fAutoScaleButton->SetState(kButtonDown);
026 fDataScaleGroupFrame->AddFrame(fAutoScaleButton, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,0));
027
028 fCommonScaleButton = new TGCheckButton(fDataScaleGroupFrame,"Common scale");
029 fCommonScaleButton->Connect("Clicked()", "FMScaleSelector", this, "OnCommonScaleChange()");
030
031 fCommonScaleButton->SetState(kButtonDisabled);
032 fDataScaleGroupFrame->AddFrame(fCommonScaleButton, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX,2,2,2,0));
033
034
035 m_mapScale = m_pReader->dataScale();
036 std::map<TTPosition::eDetectorType, Scale>::iterator scale_it = m_mapScale.begin();
037 for(;scale_it!=m_mapScale.end();++scale_it) {
038 TTPosition::eDetectorType eDet = scale_it->first;
039 TGHorizontalFrame *fScaleLimitArea = new TGHorizontalFrame(fDataScaleGroupFrame,0,0, kHorizontalFrame);
040
041
042 TGNumberEntryField* fScaleMinNumberEntry = new TGNumberEntryField(fScaleLimitArea, 999, 0.,TGNumberFormat::kNESRealFour,TGNumberFormat::kNEAAnyNumber);
043 Int_t height = fScaleMinNumberEntry->GetDefaultHeight();
044 Int_t charw = fScaleMinNumberEntry->GetCharWidth("0123456789");
045 Int_t width = charw * TMath::Abs(3) / 10 + 8 + 2 * height / 3;
046 fScaleMinNumberEntry->Resize(width, height);
047 fScaleLimitArea->AddFrame(fScaleMinNumberEntry, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX, 0, 8, 2, 2));
048
049 TGNumberEntryField* fScaleMaxNumberEntry = new TGNumberEntryField(fScaleLimitArea, 999, 0.,TGNumberFormat::kNESRealFour,TGNumberFormat::kNEAAnyNumber);
050 fScaleMaxNumberEntry->Resize(width, height);
051 fScaleLimitArea->AddFrame(fScaleMaxNumberEntry, new TGLayoutHints(kLHintsRight | kLHintsTop | kLHintsExpandX, 8, 0, 2, 2));
052
053 fDataScaleGroupFrame->AddFrame(fScaleLimitArea,new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX ,0,0,0,0));
054
055 m_mapSubFrame[eDet] = fScaleLimitArea;
056 m_mapMinField[eDet] = fScaleMinNumberEntry;
057 m_mapMaxField[eDet] = fScaleMaxNumberEntry;
058 }
059
060
061 fUpdateScaleButtonArea = new TGHorizontalFrame(fDataScaleGroupFrame,0,0, kHorizontalFrame);
062 fDataScaleGroupFrame->AddFrame(fUpdateScaleButtonArea,new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX ,0,0,0,0));
063
064 fUpdateScaleButton = new TGTextButton(fUpdateScaleButtonArea, "&Update Scale");
065 fUpdateScaleButton->Connect("Clicked()", "FMScaleSelector", this, "OnScaleValueChange()");
066 fUpdateScaleButtonArea->AddFrame(fUpdateScaleButton,new TGLayoutHints( kLHintsTop | kLHintsExpandX ,0,0,2,0));
067
068 fToolFrame->AddFrame(fDataScaleGroupFrame, new TGLayoutHints(kLHintsLeft | kLHintsTop | kLHintsExpandX ,2,2,0,0));
069 }
070
071 FMScaleSelector::~FMScaleSelector(void)
072 {
073 }
074
075 void FMScaleSelector::OnAutoScaleChange() {
076 bool bState = (fAutoScaleButton->GetState()==kButtonDown);
077 this->autoScale(bState);
078
079 this->updateFrames();
080
081 if(bState) m_parentFrame->onScaleValueChange();
082 else this->updateFields();
083 }
084
085 void FMScaleSelector::updateFrames() {
086 bool bState = (fAutoScaleButton->GetState()==kButtonDown);
087
088
089 std::map<TTPosition::eDetectorType, Scale>::iterator it = m_mapScale.begin();
090 for(;it!=m_mapScale.end();++it) {
091 fDataScaleGroupFrame->HideFrame(m_mapSubFrame[it->first]);
092 }
093 fDataScaleGroupFrame->HideFrame(fUpdateScaleButtonArea);
094
095
096 if(!bState){
097 std::vector<TTPosition::eDetectorType> vDet = m_parentFrame->getSelectedDetectors();
098 std::vector<TTPosition::eDetectorType>::iterator it = vDet.begin();
099 for(;it!=vDet.end();++it) {
100 fDataScaleGroupFrame->ShowFrame(m_mapSubFrame[*it]);
101 }
102 fDataScaleGroupFrame->ShowFrame(fUpdateScaleButtonArea);
103 }
104 fDataScaleGroupFrame->Resize(fDataScaleGroupFrame->GetSize().fWidth, 0);
105 }
106
107 void FMScaleSelector::OnCommonScaleChange() {
108
109 }
110
111 void FMScaleSelector::OnScaleValueChange() {
112 std::map<TTPosition::eDetectorType, Scale>::iterator it = m_mapScale.begin();
113 for(;it!=m_mapScale.end();++it) {
114 double max = m_mapMaxField[it->first]->GetNumber();
115 double min = m_mapMinField[it->first]->GetNumber();
116 if(min<=max) {
117 it->second.setMaximum( max );
118 it->second.setMinimum( min );
119 }
120 }
121 m_parentFrame->onScaleValueChange();
122 }
123
124 void FMScaleSelector::newData() {
125 m_mapScale = m_pReader->dataScale();
126 this->updateFields();
127
128 }
129
130 void FMScaleSelector::autoScale(bool state) {
131 std::map<TTPosition::eDetectorType, Scale>::iterator it = m_mapScale.begin();
132 for(;it!=m_mapScale.end();++it) {
133 (it->second).setAutoScale(state);
134 }
135 }
136
137 void FMScaleSelector::updateFields() {
138 std::map<TTPosition::eDetectorType, Scale>::iterator it = m_mapScale.begin();
139 for(;it!=m_mapScale.end();++it) {
140 m_mapMaxField[it->first]->SetNumber( (it->second).maximum() );
141 m_mapMinField[it->first]->SetNumber( (it->second).minimum() );
142 }
143 }
144
145 std::map<TTPosition::eDetectorType, Scale> FMScaleSelector::dataScale(void) const {
146 return m_mapScale;
147 }
| Due to the LXR bug, the updates fail sometimes to remove references to deleted files. The Saturday's full rebuilds fix these problems |
|
This page was automatically generated by the
LXR engine.
|
|