FWGUIManager

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285
// -*- C++ -*-
#ifndef Fireworks_Core_FWGUIManager_h
#define Fireworks_Core_FWGUIManager_h
//
// Package:     Core
// Class  :     FWGUIManager
//
/**\class FWGUIManager FWGUIManager.h Fireworks/Core/interface/FWGUIManager.h

   Description: Manages the GUI

   Usage:
    <usage>

 */
//
// Original Author:  Chris Jones
//         Created:  Mon Feb 11 10:52:24 EST 2008
//

// system include files
#include <functional>
#include <map>
#include <memory>

#include <sigc++/sigc++.h>
#include "Rtypes.h"
#include "GuiTypes.h"
#include "TGFileDialog.h"

// user include files
#include "Fireworks/Core/interface/FWConfigurable.h"
#include "DataFormats/Provenance/interface/EventID.h"

// forward declarations
class TGPictureButton;
class TGComboBox;
class TGTextButton;
class TGTextEntry;
class TGFrame;
class TGSplitFrame;
class TGVerticalFrame;
class TGMainFrame;
class TGPack;
class TGCompositeFrame;
class TGCheckButton;
class TGPopupMenu;

class TGListTreeItem;
class TGListTree;
class TEveElementList;
class TEveElement;
class TEveWindowPack;
class TEveWindowSlot;
class TEveCompositeFrame;
class TEveWindow;

class CmsShowMainFrame;
class FWEventItem;
class FWViewBase;
class FWGUISubviewArea;

class FWSelectionManager;
class FWSummaryManager;
class FWDetailViewManager;
class FWInvMassDialog;
class CSGAction;
class CSGContinuousAction;

class FWGUIEventDataAdder;

class CmsShowTaskExecutor;

class FWNavigatorBase;

class FWModelContextMenuHandler;
class FWViewContextMenuHandlerBase;
class TGWindow;

namespace edm {
  class EventBase;
}

class CmsShowEDI;
class CmsShowModelPopup;
class CmsShowViewPopup;
class FWViewManagerManager;
class CmsShowCommonPopup;
class CmsShowHelpPopup;

namespace fireworks {
  class Context;
}

class FWGUIManager : public FWConfigurable {
  // typedefs
public:
  typedef std::function<FWViewBase*(TEveWindowSlot*, const std::string&)> ViewBuildFunctor;
  typedef std::map<std::string, ViewBuildFunctor> NameToViewBuilder;

private:
  typedef std::map<TEveWindow*, FWViewBase*> ViewMap_t;
  typedef ViewMap_t::iterator ViewMap_i;

public:
  FWGUIManager(fireworks::Context* ctx, const FWViewManagerManager* iVMMgr, FWNavigatorBase* navigator);

  ~FWGUIManager() override;
  void evePreTerminate();

  //configuration management interface
  void addTo(FWConfiguration&) const override;
  void setFrom(const FWConfiguration&) override;
  void setWindowInfoFrom(const FWConfiguration& iFrom, TGMainFrame* iFrame);
  void initEmpty();

  TGVerticalFrame* createList(TGCompositeFrame* p);
  void createViews(TEveWindowSlot* slot);
  void exportImageOfMainView();
  void exportImagesOfAllViews();
  void exportAllViews(const std::string& format, int height);

  void createEDIFrame();
  ///Allowed values are -1 or ones from FWDataCategories enum
  void showEDIFrame(int iInfoToShow = -1);

  void open3DRegion();
  void showCommonPopup();

  void createModelPopup();
  void showModelPopup();
  void showViewPopup();
  void popupViewClosed();

  void showSelectedModelContextMenu(Int_t iGlobalX, Int_t iGlobalY, FWViewContextMenuHandlerBase* iHandler);

  void showInvMassDialog();
  //   void showGeometryBrowser();

  // help
  void createHelpPopup();
  void createShortcutPopup();
  void createHelpGLPopup();

  // ---------- const member functions ---------------------
  //      bool waitingForUserAction() const;
  CSGContinuousAction* playEventsAction();
  CSGContinuousAction* playEventsBackwardsAction();
  CSGContinuousAction* loopAction();

  // ---------- static member functions --------------------
  static FWGUIManager* getGUIManager();
  fireworks::Context* getContext() { return m_context; }
  static TGFrame* makeGUIsubview(TEveCompositeFrame* cp, TGCompositeFrame* parent, Int_t height);

  // ---------- member functions ---------------------------
  //have to use the portable syntax else the reflex code will not build
  void registerViewBuilder(const std::string& iName, ViewBuildFunctor& iBuilder);

  ViewMap_i createView(const std::string& iName, TEveWindowSlot* slot = nullptr);
  void newViewSlot(const std::string& iName);

  void connectSubviewAreaSignals(FWGUISubviewArea*);
  void enableActions(bool enable = true);
  void disablePrevious();
  void disableNext();
  void setPlayMode(bool);
  void updateStatus(const char* status);
  void clearStatus();
  void eventChangedCallback();

  CSGAction* getAction(const std::string name);

  void addData();
  void titleChanged(const char* title);

  void openEveBrowserForDebugging() const;
  void setDelayBetweenEvents(Float_t);

  void showEventFilterGUI();
  void filterButtonClicked();
  void setFilterButtonText(const char* txt);
  void setFilterButtonIcon(int);
  void updateEventFilterEnable(bool);

  void runIdChanged();
  void lumiIdChanged();
  void eventIdChanged();
  void checkSubviewAreaIconState(TEveWindow*);
  void subviewIsBeingDestroyed(FWGUISubviewArea*);
  void subviewDestroy(FWGUISubviewArea*);  // timeout funct
  void subviewDestroyAll();
  void subviewInfoSelected(FWGUISubviewArea*);
  void subviewInfoUnselected(FWGUISubviewArea*);
  void subviewSwapped(FWGUISubviewArea*);

  CmsShowMainFrame* getMainFrame() const { return m_cmsShowMainFrame; }
  const edm::EventBase* getCurrentEvent() const;

  void resetWMOffsets();

  // signals
  sigc::signal<void()> filterButtonClicked_;
  sigc::signal<void(const TGWindow*)> showEventFilterGUI_;
  sigc::signal<void(const std::string&)> writeToConfigurationFile_;
  sigc::signal<void(const std::string&)> writePartialToConfigurationFile_;
  sigc::signal<void(const std::string&)> loadFromConfigurationFile_;
  sigc::signal<void(const std::string&)> loadPartialFromConfigurationFile_;
  sigc::signal<void(edm::RunNumber_t, edm::LuminosityBlockNumber_t, edm::EventNumber_t)> changedEventId_;
  sigc::signal<void()> goingToQuit_;
  sigc::signal<void()> writeToPresentConfigurationFile_;

  sigc::signal<void()> changedRunEntry_;
  sigc::signal<void()> changedEventEntry_;
  sigc::signal<void(Float_t)> changedDelayBetweenEvents_;

  FWGUIManager(const FWGUIManager&) = delete;                   // stop default
  const FWGUIManager& operator=(const FWGUIManager&) = delete;  // stop default

private:
  TEveWindow* getSwapCandidate();

  void newItem(const FWEventItem*);

  bool promptForConfigurationFile(std::string& result, enum EFileDialogMode mode);
  void promptForSaveConfigurationFile();
  void promptForPartialSaveConfigurationFile();
  void promptForLoadConfigurationFile();
  void promptForPartialLoadConfigurationFile();
  void savePartialToConfigurationFile();

  void delaySliderChanged(Int_t);

  void finishUpColorChange();

  void setViewPopup(TEveWindow*);

  void measureWMOffsets();

  // ---------- static member data --------------------------------

  static FWGUIManager* m_guiManager;

  // ---------- member data --------------------------------
  fireworks::Context* m_context;

  FWSummaryManager* m_summaryManager;

  //views are owned by their individual view managers
  FWDetailViewManager* m_detailViewManager;
  const FWViewManagerManager* m_viewManagerManager;
  FWModelContextMenuHandler* m_contextMenuHandler;
  FWNavigatorBase* m_navigator;
  CmsShowMainFrame* m_cmsShowMainFrame;

  TGPopupMenu* m_fileMenu;
  FWGUIEventDataAdder* m_dataAdder;

  // event data inspector
  CmsShowEDI* m_ediFrame;
  CmsShowModelPopup* m_modelPopup;
  CmsShowViewPopup* m_viewPopup;
  CmsShowCommonPopup* m_commonPopup;
  FWInvMassDialog* m_invMassDialog;

  // help
  CmsShowHelpPopup* m_helpPopup;
  CmsShowHelpPopup* m_shortcutPopup;
  CmsShowHelpPopup* m_helpGLPopup;

  // subview memebers
  mutable ViewMap_t m_viewMap;
  NameToViewBuilder m_nameToViewBuilder;

  TEveWindowPack* m_viewPrimPack;
  TEveWindowPack* m_viewSecPack;

  sigc::connection m_modelChangeConn;

  std::unique_ptr<CmsShowTaskExecutor> m_tasks;
  std::vector<FWViewBase*> m_regionViews;
  int m_WMOffsetX, m_WMOffsetY, m_WMDecorH;
};

#endif