** Warning **
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::mysql::db handle dbname=lxr at /lxr/lib/LXR/Common.pm line 1103.
Last-Modified: Thu, 1 Feb 2023 05:51:05 GMT
Content-Type: text/html; charset=utf-8
/CMSSW_13_0_X_2023-01-31-2300/Fireworks/Core/src/CmsShowEDI.cc
File indexing completed on 2021-08-05 22:48:06
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014 #include <iostream>
0015 #include <sstream>
0016 #include <sigc++/sigc++.h>
0017 #include <functional>
0018 #include "TClass.h"
0019 #include "TGFrame.h"
0020 #include "TGTab.h"
0021 #include "TGButton.h"
0022 #include "TGLabel.h"
0023 #include "TGString.h"
0024 #include "TColor.h"
0025 #include "TG3DLine.h"
0026 #include "TGNumberEntry.h"
0027 #include "TGTextEntry.h"
0028 #include "TGTextView.h"
0029 #include "TGLayout.h"
0030 #include "TGFont.h"
0031 #include "TEveManager.h"
0032 #include "TGSlider.h"
0033 #include "TGMsgBox.h"
0034 #include "TGComboBox.h"
0035 #include "TVirtualX.h"
0036
0037
0038 #include "Fireworks /Core /interface /CmsShowEDI.h "
0039 #include "Fireworks /Core /interface /FWSelectionManager.h "
0040 #include "Fireworks /Core /interface /FWDisplayProperties.h "
0041 #include "Fireworks /Core /interface /FWEventItem.h "
0042 #include "Fireworks /Core /interface /FWProxyBuilderConfiguration.h "
0043 #include "Fireworks /Core /src /FWColorSelect.h "
0044 #include "Fireworks /Core /interface /FWModelChangeSignal.h "
0045 #include "Fireworks /Core /interface /FWModelExpressionSelector.h "
0046 #include "Fireworks /Core /interface /FWModelChangeManager.h "
0047 #include "Fireworks /Core /interface /FWColorManager.h "
0048 #include "Fireworks /Core /interface /FWExpressionException.h "
0049 #include "Fireworks /Core /src /FWGUIValidatingTextEntry.h "
0050 #include "Fireworks /Core /src /FWExpressionValidator.h "
0051 #include "Fireworks /Core /interface /FWDialogBuilder.h "
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064 CmsShowEDI ::CmsShowEDI (const TGWindow * p , UInt_t w , UInt_t h , FWSelectionManager * selMgr, FWColorManager * colorMgr)
0065 : TGTransientFrame (gClient ->GetDefaultRoot(), p , w , h ),
0066 m_item (nullptr ),
0067 m_validator (new FWExpressionValidator ),
0068 m_colorManager (colorMgr),
0069 m_settersFrame (nullptr ) {
0070 m_selectionManager = selMgr;
0071 SetCleanup (kDeepCleanup);
0072
0073 m_selectionManager ->itemSelectionChanged_ .connect (std ::bind (&CmsShowEDI ::fillEDIFrame , this ));
0074
0075 TGVerticalFrame * vf = new TGVerticalFrame (this );
0076 AddFrame (vf , new TGLayoutHints (kLHintsExpandX | kLHintsExpandY, 0, 0, 0, 0));
0077 FWDialogBuilder builder (vf , nullptr , true );
0078
0079 builder .indent (0)
0080 .expand (true , false )
0081 .addLabel (" " , 14, 2, &m_objectLabel )
0082
0083 .tabs (&m_tabs )
0084 .beginTab ("Graphics" )
0085 .indent (3)
0086 .addLabel ("Color" , 8)
0087 .addColorPicker (colorMgr, &m_colorSelectWidget )
0088 .expand (false )
0089 .addHSeparator ()
0090 .addLabel ("Opacity" , 8)
0091 .addHSlider (150, &m_opacitySlider )
0092 .addHSeparator ()
0093 .addCheckbox ("Visible" , &m_isVisibleButton )
0094 .addHSeparator ()
0095 .addLabel ("Drawing order" , 8)
0096 .addTextButton ("To back" , &m_backButton )
0097 .floatLeft ()
0098 .expand (false )
0099 .addNumberEntry (
0100 0.0, 4, TGNumberFormat::kNESInteger, FWEventItem ::minLayerValue (), FWEventItem ::maxLayerValue (), &m_layerEntry )
0101 .expand (false )
0102 .floatLeft ()
0103 .addTextButton ("To front" , &m_frontButton )
0104 .expand (false )
0105 .vSpacer ()
0106 .addHSeparator ()
0107 .endTab ()
0108 .beginTab ("Filter" )
0109 .indent (3)
0110 .addLabel ("Expression" , 8)
0111 .addValidatingTextEntry (nullptr , &m_filterExpressionEntry )
0112 .floatLeft ()
0113 .addTextButton ("Filter" , &m_filterButton )
0114 .expand (false )
0115 .addTextView ("" , &m_filterError )
0116 .vSpacer ()
0117 .endTab ()
0118 .beginTab ("Select" )
0119 .indent (3)
0120 .addLabel ("Expression" , 8)
0121 .addValidatingTextEntry (nullptr , &m_selectExpressionEntry )
0122 .addTextButton ("Select" , &m_selectButton )
0123 .floatLeft ()
0124 .expand (false )
0125 .addTextButton ("Select all" , &m_selectAllButton )
0126 .expand (false )
0127 .floatLeft ()
0128 .addTextButton ("Unselect all" , &m_deselectAllButton )
0129 .expand (false )
0130 .indent (3)
0131 .addLabel ("Color Selection" , 8)
0132 .addColorPicker (colorMgr, &m_cw )
0133 .expand (false )
0134 .addTextView ("" , &m_selectError )
0135 .vSpacer ()
0136 .endTab ()
0137 .beginTab ("Data" )
0138 .indent (3)
0139 .addLabel ("Name:" , 8)
0140 .addTextEntry ("None" , &m_nameEntry )
0141 .addLabel ("Labels:" , 8)
0142 .addLabel ("Type:" , 8)
0143 .addTextEntry ("None" , &m_typeEntry )
0144 .addLabel ("Module:" , 8)
0145 .addTextEntry ("None" , &m_moduleEntry )
0146 .addLabel ("Instance:" , 8)
0147 .addTextEntry ("None" , &m_instanceEntry )
0148 .addLabel ("Process:" , 8)
0149 .addTextEntry ("None" , &m_processEntry )
0150 .addHSeparator ()
0151 .addTextButton ("Remove collection" , &m_removeButton )
0152 .expand (false )
0153 .vSpacer ()
0154 .endTab ()
0155 .untabs ();
0156
0157 m_filterError ->SetForegroundColor (gVirtualX ->GetPixel(kRed));
0158 m_filterError ->SetBackgroundColor (TGFrame ::GetDefaultFrameBackground ());
0159 m_filterError ->ChangeOptions (0);
0160
0161 m_selectError ->SetForegroundColor (gVirtualX ->GetPixel(kRed));
0162 m_selectError ->SetBackgroundColor (TGFrame ::GetDefaultFrameBackground ());
0163 m_selectError ->ChangeOptions (0);
0164
0165 m_filterExpressionEntry ->setValidator (m_validator );
0166 m_selectExpressionEntry ->setValidator (m_validator );
0167
0168 m_colorSelectWidget ->Connect ("ColorChosen(Color_t)" , "CmsShowEDI" , this , "changeItemColor(Color_t)" );
0169 m_cw ->Connect ("ColorChosen(Color_t)" , "CmsShowEDI" , this , "changeSelectionColor(Color_t)" );
0170 m_opacitySlider ->Connect ("PositionChanged(Int_t)" , "CmsShowEDI" , this , "changeItemOpacity(Int_t)" );
0171 m_isVisibleButton ->Connect ("Toggled(Bool_t)" , "CmsShowEDI" , this , "toggleItemVisible(Bool_t)" );
0172 m_filterExpressionEntry ->Connect ("ReturnPressed()" , "CmsShowEDI" , this , "runFilter()" );
0173 m_filterButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "runFilter()" );
0174 m_selectExpressionEntry ->Connect ("ReturnPressed()" , "CmsShowEDI" , this , "runSelection()" );
0175 m_selectButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "runSelection()" );
0176 m_removeButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "removeItem()" );
0177 m_selectAllButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "selectAll()" );
0178 m_deselectAllButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "deselectAll()" );
0179 m_frontButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "moveToFront()" );
0180 m_backButton ->Connect ("Clicked()" , "CmsShowEDI" , this , "moveToBack()" );
0181 m_layerEntry ->Connect ("ValueSet(Long_t)" , "CmsShowEDI" , this , "moveToLayer(Long_t)" );
0182
0183 TGCompositeFrame * cf = m_tabs ->GetTabContainer(0);
0184 m_settersFrame = new TGVerticalFrame (cf );
0185 m_settersFrame ->SetCleanup (kDeepCleanup);
0186 cf ->AddFrame (m_settersFrame , new TGLayoutHints (kLHintsExpandX | kLHintsExpandY));
0187
0188 SetWindowName ("Collection Controller" );
0189 MapSubwindows ();
0190 Resize (GetDefaultSize ());
0191 Layout ();
0192
0193 fillEDIFrame ();
0194 }
0195
0196
0197
0198
0199
0200
0201 CmsShowEDI ::~CmsShowEDI () {
0202 disconnectAll ();
0203 m_colorSelectWidget ->Disconnect ("ColorSelected(Pixel_t)" , this , "changeItemColor(Pixel_t)" );
0204 m_cw ->Disconnect ("ColorSelected(Pixel_t)" , this , "changeSelectionColor(Pixel_t)" );
0205 m_opacitySlider ->Disconnect ("PositionChanged(Int_t)" , this , "changeItemColor" );
0206 m_isVisibleButton ->Disconnect ("Toggled(Bool_t)" , this , "toggleItemVisible(Bool_t)" );
0207 m_filterExpressionEntry ->Disconnect ("ReturnPressed()" , this , "runFilter()" );
0208 m_selectExpressionEntry ->Disconnect ("ReturnPressed()" , this , "runSelection()" );
0209 m_filterButton ->Disconnect ("Clicked()" , this , "runFilter()" );
0210 m_selectButton ->Disconnect ("Clicked()" , this , "runSelection()" );
0211 m_selectAllButton ->Disconnect ("Clicked()" , this , "selectAll()" );
0212 m_deselectAllButton ->Disconnect ("Clicked()" , this , "deselectAll()" );
0213 m_removeButton ->Disconnect ("Clicked()" , this , "removeItem()" );
0214 m_frontButton ->Disconnect ("Clicked()" , this , "moveToFront()" );
0215 m_backButton ->Disconnect ("Clicked()" , this , "moveToBack()" );
0216 m_layerEntry ->Disconnect ("ValueSet(Long_t)" , this , "moveToLayer(Long_t)" );
0217
0218
0219
0220 delete m_validator ;
0221 }
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239 void CmsShowEDI ::clearPBFrame () {
0240 if (!m_settersFrame ->GetList ()->IsEmpty ()) {
0241
0242 TGFrameElement* el = (TGFrameElement*)m_settersFrame ->GetList ()->First ();
0243 TGFrame * f = el ->fFrame;
0244 f ->UnmapWindow ();
0245 m_settersFrame ->RemoveFrame (f );
0246 f ->DestroyWindow ();
0247 }
0248 }
0249
0250 void CmsShowEDI ::fillEDIFrame () {
0251 FWEventItem * iItem = nullptr ;
0252 bool multipleCollections = false ;
0253 if (!m_selectionManager ->selectedItems ().empty ()) {
0254 if (m_selectionManager ->selectedItems ().size () == 1) {
0255 iItem = *(m_selectionManager ->selectedItems ().begin ());
0256 } else {
0257 multipleCollections = true ;
0258 }
0259 }
0260
0261 if (nullptr == m_item || iItem != m_item ) {
0262 disconnectAll ();
0263 m_item = iItem ;
0264 if (nullptr != m_item ) {
0265 const FWDisplayProperties & p = iItem ->defaultDisplayProperties ();
0266 m_objectLabel ->SetText (iItem ->name ().c_str ());
0267 m_colorSelectWidget ->SetColorByIndex (p .color (), kFALSE );
0268 m_opacitySlider ->SetPosition (100 - p .transparency ());
0269 m_isVisibleButton ->SetDisabledAndSelected (p .isVisible ());
0270 m_validator ->setType (edm ::TypeWithDict (*(iItem ->modelType ()->GetTypeInfo())));
0271 m_filterExpressionEntry ->SetText (iItem ->filterExpression ().c_str ());
0272 m_filterError ->Clear ();
0273 m_selectError ->Clear ();
0274 m_nameEntry ->SetText (iItem ->name ().c_str ());
0275 m_typeEntry ->SetText (iItem ->type ()->GetName ());
0276 m_moduleEntry ->SetText (iItem ->moduleLabel ().c_str ());
0277 m_instanceEntry ->SetText (iItem ->productInstanceLabel ().c_str ());
0278 m_processEntry ->SetText (iItem ->processName ().c_str ());
0279
0280 m_colorSelectWidget ->SetEnabled (kTRUE);
0281 m_opacitySlider ->SetEnabled (kTRUE);
0282 m_isVisibleButton ->SetEnabled (kTRUE);
0283 m_filterExpressionEntry ->SetEnabled (kTRUE);
0284 m_selectExpressionEntry ->SetEnabled (kTRUE);
0285 m_filterButton ->SetEnabled (kTRUE);
0286 m_selectButton ->SetEnabled (kTRUE);
0287 m_selectAllButton ->SetEnabled (kTRUE);
0288 m_deselectAllButton ->SetEnabled (kTRUE);
0289 m_cw ->SetColorByIndex (p .color (), kFALSE );
0290 m_cw ->SetEnabled (kTRUE);
0291 m_removeButton ->SetEnabled (kTRUE);
0292 updateLayerControls ();
0293 m_layerEntry ->SetState (kTRUE);
0294 m_displayChangedConn =
0295 m_item ->defaultDisplayPropertiesChanged_ .connect (std ::bind (&CmsShowEDI ::updateDisplay , this ));
0296 m_modelChangedConn = m_item ->changed_ .connect (std ::bind (&CmsShowEDI ::updateFilter , this ));
0297
0298 m_destroyedConn = m_item ->goingToBeDestroyed_ .connect (std ::bind (&CmsShowEDI ::disconnectAll , this ));
0299
0300 clearPBFrame ();
0301 m_item ->getConfig ()->populateFrame (m_settersFrame );
0302 } else if (multipleCollections ) {
0303 std ::ostringstream s ;
0304 s << m_selectionManager ->selectedItems ().size () << " Collections Selected" ;
0305 m_objectLabel ->SetText (s .str ().c_str ());
0306 }
0307
0308 Resize (GetDefaultSize ());
0309 Layout ();
0310 }
0311 }
0312
0313 void CmsShowEDI ::removeItem () {
0314 Int_t chosen = 0;
0315 std ::string message ("This action will remove the " );
0316 message += m_item ->name ();
0317 message +=
0318 " collection from the display."
0319 "\nIf you wish to return the collection you would have to use the 'Add Collection' window." ;
0320 new TGMsgBox(gClient ->GetDefaultRoot(),
0321 this ,
0322 "Remove Collection Confirmation" ,
0323 message .c_str (),
0324 kMBIconExclamation,
0325 kMBCancel | kMBApply,
0326 &chosen );
0327 if (kMBApply == chosen ) {
0328 m_item ->destroy ();
0329 m_item = nullptr ;
0330
0331 gEve->EditElement (nullptr );
0332 gEve->Redraw3D ();
0333 }
0334 }
0335
0336 void CmsShowEDI ::updateDisplay () {
0337
0338 const FWDisplayProperties & props = m_item ->defaultDisplayProperties ();
0339 m_colorSelectWidget ->SetColorByIndex (props .color (), kFALSE );
0340 m_opacitySlider ->SetPosition (100 - props .transparency ());
0341 m_isVisibleButton ->SetState (props .isVisible () ? kButtonDown : kButtonUp, kFALSE );
0342 }
0343
0344 void CmsShowEDI ::updateLayerControls () {
0345 m_backButton ->SetEnabled (!m_item ->isInBack ());
0346 m_frontButton ->SetEnabled (!m_item ->isInFront ());
0347 m_layerEntry ->SetIntNumber(m_item ->layer ());
0348 }
0349 void CmsShowEDI ::moveToBack () {
0350 m_item ->moveToBack ();
0351 updateLayerControls ();
0352 }
0353 void CmsShowEDI ::moveToFront () {
0354 m_item ->moveToFront ();
0355 updateLayerControls ();
0356 }
0357 void CmsShowEDI ::moveToLayer (Long_t) {
0358 m_item ->moveToLayer (static_cast <Int_t >(m_layerEntry ->GetIntNumber()));
0359 updateLayerControls ();
0360 }
0361
0362 void CmsShowEDI ::updateFilter () { m_filterExpressionEntry ->SetText (m_item ->filterExpression ().c_str ()); }
0363
0364 void CmsShowEDI ::disconnectAll () {
0365 m_objectLabel ->SetText ("No Collection Selected" );
0366 clearPBFrame ();
0367 if (nullptr != m_item ) {
0368 m_displayChangedConn .disconnect ();
0369 m_modelChangedConn .disconnect ();
0370 m_destroyedConn .disconnect ();
0371 m_item = nullptr ;
0372 m_colorSelectWidget ->SetColorByIndex (0, kFALSE );
0373 m_opacitySlider ->SetPosition (100);
0374 m_isVisibleButton ->SetDisabledAndSelected (kTRUE);
0375 m_filterExpressionEntry ->SetText (nullptr );
0376 m_selectExpressionEntry ->SetText (nullptr );
0377 m_nameEntry ->SetText (nullptr );
0378 m_typeEntry ->SetText (nullptr );
0379 m_moduleEntry ->SetText (nullptr );
0380 m_instanceEntry ->SetText (nullptr );
0381 m_processEntry ->SetText (nullptr );
0382
0383 m_colorSelectWidget ->SetEnabled (kFALSE );
0384 m_opacitySlider ->SetEnabled (kFALSE );
0385
0386 m_isVisibleButton ->SetEnabled (kFALSE );
0387 m_filterExpressionEntry ->SetEnabled (kFALSE );
0388 m_filterButton ->SetEnabled (kFALSE );
0389 m_selectExpressionEntry ->SetEnabled (kFALSE );
0390 m_selectButton ->SetEnabled (kFALSE );
0391 m_selectAllButton ->SetEnabled (kFALSE );
0392 m_deselectAllButton ->SetEnabled (kFALSE );
0393 m_removeButton ->SetEnabled (kFALSE );
0394 m_backButton ->SetEnabled (kFALSE );
0395 m_frontButton ->SetEnabled (kFALSE );
0396 m_layerEntry ->SetIntNumber(0);
0397 m_layerEntry ->SetState (kFALSE );
0398 m_layerEntry ->GetNumberEntry()->SetEnabled (kFALSE );
0399 m_layerEntry ->GetButtonUp()->SetEnabled (kFALSE );
0400 m_layerEntry ->GetButtonDown()->SetEnabled (kFALSE );
0401 }
0402 }
0403
0404
0405
0406
0407
0408
0409
0410 void CmsShowEDI ::changeItemColor (Color_t color ) {
0411 FWDisplayProperties changeProperties = m_item ->defaultDisplayProperties ();
0412 changeProperties .setColor (color );
0413 m_item ->setDefaultDisplayProperties (changeProperties );
0414 m_cw ->SetColorByIndex (color , kFALSE );
0415 }
0416
0417
0418 void CmsShowEDI ::toggleItemVisible (Bool_t on ) {
0419 FWDisplayProperties changeProperties = m_item ->defaultDisplayProperties ();
0420 changeProperties .setIsVisible (on );
0421 m_item ->setDefaultDisplayProperties (changeProperties );
0422 }
0423
0424
0425
0426
0427
0428
0429
0430
0431 void CmsShowEDI ::changeItemOpacity (Int_t opacity ) {
0432 FWDisplayProperties changeProperties = m_item ->defaultDisplayProperties ();
0433 changeProperties .setTransparency (100 - opacity );
0434 m_item ->setDefaultDisplayProperties (changeProperties );
0435 }
0436
0437 void CmsShowEDI ::runFilter () {
0438 const std ::string filter (m_filterExpressionEntry ->GetText ());
0439 if (m_item != nullptr ) {
0440 try {
0441 m_filterError ->Clear ();
0442 m_item ->setFilterExpression (filter );
0443 } catch (const FWExpressionException & e ) {
0444 m_filterError ->AddLine (e .what ().c_str ());
0445 m_filterError ->Update ();
0446 if (e .column () > -1) {
0447 m_filterExpressionEntry ->SetCursorPosition (e .column ());
0448 }
0449 }
0450 }
0451 }
0452
0453 void CmsShowEDI ::runSelection () {
0454 FWModelExpressionSelector selector ;
0455 const std ::string selection (m_selectExpressionEntry ->GetText ());
0456 if (m_item != nullptr ) {
0457 try {
0458 m_selectError ->Clear ();
0459
0460
0461 FWEventItem * item = m_item ;
0462 item ->selectionManager ()->clearModelSelectionLeaveItem ();
0463
0464 selector .select (item , selection , TColor ::GetColor (m_cw ->GetColor ()));
0465 } catch (const FWExpressionException & e ) {
0466 m_selectError ->AddLine (e .what ().c_str ());
0467 m_selectError ->Update ();
0468 if (e .column () > -1) {
0469 m_selectExpressionEntry ->SetCursorPosition (e .column ());
0470 }
0471 }
0472 }
0473 }
0474
0475 void CmsShowEDI ::selectAll () {
0476 FWChangeSentry sentry (*(m_item ->changeManager ()));
0477 for (int i = 0; i < static_cast <int >(m_item ->size ()); i ++) {
0478 m_item ->select (i );
0479 }
0480 }
0481 void CmsShowEDI ::deselectAll () {
0482 FWChangeSentry sentry (*(m_item ->changeManager ()));
0483 for (int i = 0; i < static_cast <int >(m_item ->size ()); i ++) {
0484 m_item ->unselect (i );
0485 }
0486 }
0487
0488 void CmsShowEDI ::changeSelectionColor (Color_t c ) {
0489 FWChangeSentry sentry (*(m_item ->changeManager ()));
0490 const std ::set <FWModelId >& ss = m_item ->selectionManager ()->selected ();
0491 FWDisplayProperties dp = m_item ->defaultDisplayProperties ();
0492 dp .setColor (c );
0493 for (std ::set <FWModelId >::const_iterator i = ss .begin (); i != ss .end (); ++i ) {
0494 m_item ->setDisplayProperties (i ->index (), dp );
0495 }
0496 }
0497
0498 void CmsShowEDI ::show (FWDataCategories iToView) { m_tabs ->SetTab (iToView); }
0499
0500
0501 void CmsShowEDI ::colorSetChanged () {
0502 if (m_item ) {
0503 const FWDisplayProperties & p = m_item ->defaultDisplayProperties ();
0504 m_colorSelectWidget ->SetColorByIndex (p .color (), kFALSE );
0505 m_cw ->SetColorByIndex (p .color (), kFALSE );
0506 }
0507 }