00001 #include "TGLabel.h"
00002 #include "TGComboBox.h"
00003
00004 #include "Fireworks/Core/interface/FWGUIEventSelector.h"
00005 #include "Fireworks/Core/interface/FWEventSelector.h"
00006 #include "Fireworks/Core/interface/FWHLTValidator.h"
00007 #include "Fireworks/Core/src/FWGUIValidatingTextEntry.h"
00008 #include "Fireworks/Core/interface/FWCustomIconsButton.h"
00009 #include "Fireworks/Core/src/FWCheckBoxIcon.h"
00010
00011
00012 FWGUIEventSelector::FWGUIEventSelector(TGCompositeFrame* p, FWEventSelector* sel, std::vector<std::string>& triggerProcessList):
00013 TGHorizontalFrame(p),
00014 m_guiSelector(0),
00015 m_origSelector(0),
00016 m_text1(0),
00017 m_text2(0),
00018 m_enableBtn(0),
00019 m_deleteBtn(0),
00020 m_nEvents(0),
00021 m_combo(0),
00022 m_validator(0)
00023 {
00024 m_origSelector = sel;
00025 m_guiSelector = new FWEventSelector(m_origSelector);
00026
00027 if (!m_guiSelector->m_triggerProcess.empty())
00028 {
00029 m_combo = new TGComboBox(this);
00030 int cnt = 0;
00031 int id = -1;
00032 for ( std::vector<std::string>::iterator i = triggerProcessList.begin(); i!=triggerProcessList.end(); ++i)
00033 {
00034 if ((*i).c_str() == sel->m_triggerProcess) id = cnt;
00035 m_combo->AddEntry((*i).c_str(), cnt++);
00036 }
00037
00038 if (id < 0)
00039 {
00040 m_combo->AddEntry(sel->m_triggerProcess.c_str(), cnt);
00041 id = cnt;
00042 }
00043 m_combo->Select(id, false);
00044 m_combo->Resize(80, 21);
00045 AddFrame(m_combo, new TGLayoutHints(kLHintsNormal, 2,2,0,1));
00046
00047 m_validator = new FWHLTValidator(m_guiSelector->m_triggerProcess);
00048 m_combo->Connect("Selected(const char*)", "FWGUIEventSelector", this, "triggerProcessCallback(const char*)");
00049 }
00050
00051
00052
00053 m_text1 = new FWGUIValidatingTextEntry(this, m_guiSelector->m_expression.c_str());
00054 m_text1->SetHeight(20);
00055 m_text1->setValidator(m_validator);
00056 m_text1->ChangeOptions(0);
00057 m_text1->Connect("TextChanged(char*)", "FWGUIEventSelector", this, "expressionCallback(char*)");
00058 AddFrame(m_text1, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 2,2,1,1));
00059
00060
00061
00062 TGCompositeFrame *cfr = new TGHorizontalFrame(this, 120, 20, kFixedSize);
00063 AddFrame(cfr,new TGLayoutHints( kLHintsNormal, 2, 2, 1, 3 ));
00064 m_text2 = new FWGUIValidatingTextEntry(cfr, m_guiSelector->m_description.c_str());
00065
00066 m_text2->setValidator(m_validator);
00067 m_text2->ChangeOptions(0);
00068 m_text2->Connect("TextChanged(char*)", "string", &m_guiSelector->m_description, "assign(char*)");
00069 cfr->AddFrame(m_text2, new TGLayoutHints(kLHintsNormal | kLHintsExpandX, 2,2,0,0));
00070
00071
00072
00073 TGHorizontalFrame* labFrame = new TGHorizontalFrame(this, 60, 22, kFixedSize);
00074 AddFrame(labFrame, new TGLayoutHints(kLHintsBottom, 2, 2, 2, 2));
00075 m_nEvents = new TGLabel(labFrame, "");
00076 m_nEvents->SetTextJustify(kTextLeft );
00077 labFrame->AddFrame(m_nEvents, new TGLayoutHints(kLHintsCenterY|kLHintsExpandX));
00078 updateNEvents();
00079
00080
00081
00082 m_enableBtn = new TGCheckButton(this,"");
00083 m_enableBtn->SetToolTipText("Enable/disable the selection");
00084 m_enableBtn->SetOn(m_guiSelector->m_enabled);
00085 m_enableBtn->Connect("Toggled(bool)","FWGUIEventSelector", this, "enableCallback(bool)");
00086 AddFrame(m_enableBtn, new TGLayoutHints(kLHintsNormal | kLHintsCenterY , 2, 2, 0, 0));
00087
00088
00089 m_deleteBtn = new FWCustomIconsButton(this, fClient->GetPicture(FWCheckBoxIcon::coreIcondir()+"delete.png"),
00090 fClient->GetPicture(FWCheckBoxIcon::coreIcondir()+"delete-over.png"),
00091 fClient->GetPicture(FWCheckBoxIcon::coreIcondir()+"delete-disabled.png"));
00092 AddFrame(m_deleteBtn, new TGLayoutHints(kLHintsRight|kLHintsCenterY, 2,2,0, 0));
00093 TQObject::Connect(m_deleteBtn, "Clicked()", "FWGUIEventSelector", this, "deleteCallback()");
00094
00095 }
00096
00097 FWGUIEventSelector::~FWGUIEventSelector()
00098 {
00099 delete m_guiSelector;
00100 delete m_validator;
00101 }
00102
00103
00104 void FWGUIEventSelector::enableCallback(bool x)
00105 {
00106 m_guiSelector->m_enabled = x;
00107 selectorChanged();
00108 }
00109
00110
00111 void FWGUIEventSelector::removeSelector(FWGUIEventSelector* s)
00112 {
00113 Emit("removeSelector(FWGUIEventSelector*)", (Long_t)s);
00114 }
00115
00116
00117 void FWGUIEventSelector::deleteCallback()
00118 {
00119 removeSelector(this);
00120 }
00121
00122
00123 void FWGUIEventSelector::triggerProcessCallback(const char* txt)
00124 {
00125 m_guiSelector->m_triggerProcess = txt;
00126 m_validator->setProcess(txt);
00127 selectorChanged();
00128 }
00129
00130
00131 void FWGUIEventSelector::expressionCallback(char* txt)
00132 {
00133 m_guiSelector->m_expression = txt;
00134 selectorChanged();
00135 }
00136
00137
00138 void FWGUIEventSelector::selectorChanged()
00139 {
00140 if (m_origSelector) m_origSelector->m_updated = false;
00141 Emit("selectorChanged()");
00142 }
00143
00144
00145 void FWGUIEventSelector::updateNEvents()
00146 {
00147
00148 if (m_origSelector && m_origSelector->m_updated)
00149 {
00150 m_nEvents->Enable();
00151 const char* txtInfo = Form("%3d", m_origSelector ? m_origSelector->m_selected : -1);
00152 m_nEvents->SetText(txtInfo);
00153 }
00154 else
00155 {
00156 m_nEvents->Disable();
00157 m_nEvents->SetText("no check");
00158 }
00159 }