File indexing completed on 2024-04-06 12:11:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <iostream>
0015 #include <functional>
0016 #include <cassert>
0017 #include "TGLabel.h"
0018 #include "TGButton.h"
0019 #include "TG3DLine.h"
0020 #include "TGFrame.h"
0021 #include "TGTab.h"
0022 #include "TG3DLine.h"
0023 #include "TEveWindow.h"
0024
0025
0026 #include "Fireworks/Core/interface/CmsShowViewPopup.h"
0027 #include "Fireworks/Core/interface/FWViewBase.h"
0028 #include "Fireworks/Core/interface/FWParameterSetterBase.h"
0029 #include "Fireworks/Core/interface/FWDialogBuilder.h"
0030 #include "Fireworks/Core/interface/FWColorManager.h"
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043 CmsShowViewPopup::CmsShowViewPopup(
0044 const TGWindow* p, UInt_t w, UInt_t h, FWColorManager* iCMgr, FWViewBase* vb, TEveWindow* ew)
0045 : TGTransientFrame(gClient->GetDefaultRoot(), p, w, h),
0046 m_mapped(kFALSE),
0047 m_viewLabel(nullptr),
0048 m_paramGUI(nullptr),
0049 m_saveImageButton(nullptr),
0050 m_changeBackground(nullptr),
0051 m_colorManager(iCMgr),
0052 m_viewBase(nullptr),
0053 m_eveWindow(nullptr) {
0054 m_colorManager->colorsHaveChanged_.connect(std::bind(&CmsShowViewPopup::backgroundColorWasChanged, this));
0055
0056 SetCleanup(kDeepCleanup);
0057
0058
0059 TGHorizontalFrame* viewFrame = new TGHorizontalFrame(this);
0060 m_viewLabel = new TGLabel(viewFrame, "No view selected");
0061 try {
0062 TGFont* defaultFont = gClient->GetFontPool()->GetFont(m_viewLabel->GetDefaultFontStruct());
0063 m_viewLabel->SetTextFont(gClient->GetFontPool()->GetFont(defaultFont->GetFontAttributes().fFamily,
0064 14,
0065 defaultFont->GetFontAttributes().fWeight + 2,
0066 defaultFont->GetFontAttributes().fSlant));
0067 } catch (...) {
0068
0069
0070
0071 }
0072
0073 m_viewLabel->SetTextJustify(kTextLeft);
0074 viewFrame->AddFrame(m_viewLabel, new TGLayoutHints(kLHintsExpandX));
0075 AddFrame(viewFrame, new TGLayoutHints(kLHintsExpandX, 2, 2, 0, 0));
0076
0077 m_changeBackground = new TGTextButton(this, "Change Background Color");
0078 backgroundColorWasChanged();
0079 AddFrame(m_changeBackground, new TGLayoutHints(kLHintsExpandX, 2, 2, 5, 5));
0080 m_changeBackground->Connect("Clicked()", "CmsShowViewPopup", this, "changeBackground()");
0081
0082 m_saveImageButton = new TGTextButton(this, "Save Image ...");
0083 AddFrame(m_saveImageButton, new TGLayoutHints(kLHintsExpandX, 2, 2, 5, 5));
0084 m_saveImageButton->Connect("Clicked()", "CmsShowViewPopup", this, "saveImage()");
0085
0086
0087 AddFrame(new TGHorizontal3DLine(this), new TGLayoutHints(kLHintsExpandX, 0, 0, 5, 5));
0088 m_paramGUI = new ViewerParameterGUI(this);
0089 AddFrame(m_paramGUI, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
0090
0091 SetWindowName("View Controller");
0092 }
0093
0094
0095
0096
0097
0098
0099 CmsShowViewPopup::~CmsShowViewPopup() {}
0100
0101 void CmsShowViewPopup::reset(FWViewBase* vb, TEveWindow* ew) {
0102 m_viewBase = vb;
0103 m_eveWindow = ew;
0104
0105 m_paramGUI->reset();
0106
0107
0108 if (m_viewBase) {
0109 m_saveImageButton->SetEnabled(kTRUE);
0110 m_viewLabel->SetText(m_viewBase->typeName().c_str());
0111 m_viewBase->populateController(*m_paramGUI);
0112 m_paramGUI->populateComplete();
0113
0114 fMain = m_eveWindow->GetEveFrame();
0115
0116 if (vb->typeId() >= FWViewType::kTable)
0117 m_saveImageButton->SetText("Print Text To Terminal");
0118 else
0119 m_saveImageButton->SetText("Save Image ...");
0120 } else {
0121 fMain = nullptr;
0122 m_viewLabel->SetText("No view selected");
0123 m_saveImageButton->SetEnabled(kFALSE);
0124 }
0125
0126 MapSubwindows();
0127 Resize(GetDefaultSize());
0128 Layout();
0129 if (fMain) {
0130 CenterOnParent(kTRUE, TGTransientFrame::kTopRight);
0131 }
0132 }
0133
0134 void CmsShowViewPopup::CloseWindow() {
0135 UnmapWindow();
0136 closed_.emit();
0137 }
0138
0139 void CmsShowViewPopup::MapWindow() {
0140 TGWindow::MapWindow();
0141 m_mapped = true;
0142 }
0143
0144 void CmsShowViewPopup::UnmapWindow() {
0145 TGWindow::UnmapWindow();
0146 m_mapped = false;
0147 }
0148
0149 void CmsShowViewPopup::saveImage() {
0150 if (m_viewBase)
0151 m_viewBase->promptForSaveImageTo(this);
0152 }
0153
0154 void CmsShowViewPopup::changeBackground() {
0155 m_colorManager->setBackgroundColorIndex(FWColorManager::kBlackIndex == m_colorManager->backgroundColorIndex()
0156 ? FWColorManager::kWhiteIndex
0157 : FWColorManager::kBlackIndex);
0158 }
0159
0160 void CmsShowViewPopup::backgroundColorWasChanged() {
0161 if (FWColorManager::kBlackIndex == m_colorManager->backgroundColorIndex()) {
0162 m_changeBackground->SetText("Change Background Color to White");
0163 } else {
0164 m_changeBackground->SetText("Change Background Color to Black");
0165 }
0166 }
0167
0168
0169
0170 ViewerParameterGUI::ViewerParameterGUI(const TGFrame* p)
0171 : TGCompositeFrame(p), m_tab(nullptr), m_selectedTabName("Style") {
0172 SetCleanup(kDeepCleanup);
0173 }
0174
0175 void ViewerParameterGUI::reset() {
0176
0177 if (m_tab)
0178 m_selectedTabName = m_tab->GetCurrentTab()->GetString();
0179 else
0180 m_selectedTabName = "Style";
0181
0182
0183 m_setters.clear();
0184 if (m_tab) {
0185 assert(GetList()->GetSize() == 1);
0186 TGFrameElement* el = (TGFrameElement*)GetList()->First();
0187 TGFrame* f = el->fFrame;
0188
0189 assert(f == m_tab);
0190 f->UnmapWindow();
0191 RemoveFrame(f);
0192 f->DeleteWindow();
0193 m_tab = nullptr;
0194 }
0195 }
0196
0197 ViewerParameterGUI& ViewerParameterGUI::requestTab(const char* name) {
0198 if (!m_tab) {
0199 m_tab = new TGTab(this);
0200 AddFrame(m_tab, new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
0201 }
0202
0203 if (!m_tab->GetTabContainer(name))
0204 m_tab->AddTab(name);
0205
0206 m_tab->SetTab(name);
0207
0208 return *this;
0209 }
0210
0211
0212 ViewerParameterGUI& ViewerParameterGUI::addParam(const FWParameterBase* param) {
0213 std::shared_ptr<FWParameterSetterBase> ptr(FWParameterSetterBase::makeSetterFor((FWParameterBase*)param));
0214 ptr->attach((FWParameterBase*)param, this);
0215 TGCompositeFrame* parent = m_tab->GetCurrentContainer();
0216
0217 TGFrame* pframe = ptr->build(parent);
0218 parent->AddFrame(pframe, new TGLayoutHints(kLHintsExpandX));
0219 m_setters.push_back(ptr);
0220
0221 pframe->MapWindow();
0222 pframe->MapSubwindows();
0223 pframe->Layout();
0224 parent->MapSubwindows();
0225 parent->Layout();
0226 m_tab->Layout();
0227 parent->Resize(parent->GetDefaultSize());
0228 return *this;
0229 }
0230
0231
0232 ViewerParameterGUI& ViewerParameterGUI::separator() {
0233 assert(m_tab);
0234 TGHorizontal3DLine* s = new TGHorizontal3DLine(m_tab->GetCurrentContainer());
0235 m_tab->GetCurrentContainer()->AddFrame(s, new TGLayoutHints(kLHintsExpandX, 4, 4, 2, 2));
0236
0237 return *this;
0238 }
0239
0240 TGCompositeFrame* ViewerParameterGUI::getTabContainer() {
0241 assert(m_tab);
0242 return m_tab->GetCurrentContainer();
0243 }
0244
0245 void ViewerParameterGUI::addFrameToContainer(TGCompositeFrame* x) {
0246 assert(m_tab);
0247 TGCompositeFrame* parent = m_tab->GetCurrentContainer();
0248 parent->AddFrame(x, new TGLayoutHints(kLHintsExpandX, 4, 4, 2, 2));
0249
0250 parent->MapSubwindows();
0251 parent->Layout();
0252 m_tab->Layout();
0253 parent->Resize(parent->GetDefaultSize());
0254 }
0255
0256 void ViewerParameterGUI::populateComplete() {
0257
0258 if (m_tab) {
0259 bool x = m_tab->SetTab(m_selectedTabName.c_str(), false);
0260 if (!x)
0261 m_tab->SetTab("Style");
0262 }
0263 }