// @(#)root/eve:$Id$
// Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TEveTrackPropagatorEditor
#define ROOT_TEveTrackPropagatorEditor

#include "TGedFrame.h"

class TGButton;
class TGCheckButton;
class TGNumberEntry;
class TGColorSelect;
class TGComboBox;
class TGLineWidthComboBox;
class TGLineStyleComboBox;

class TAttMarkerEditor;

class TEveTrackPropagator;

class TEveGValuator;
class TEveGDoubleValuator;
class TEveTrackPropagatorSubEditor;

class TEveTrackPropagatorSubEditor : public TGVerticalFrame
{
   friend class TEveTrackPropagatorEditor;
   friend class TEveTrackListEditor;

private:
   TEveTrackPropagatorSubEditor(const TEveTrackPropagatorSubEditor&);            // Not implemented
   TEveTrackPropagatorSubEditor& operator=(const TEveTrackPropagatorSubEditor&); // Not implemented

protected:
   TEveTrackPropagator *fM;

   TEveGValuator      *fMaxR;
   TEveGValuator      *fMaxZ;
   TEveGValuator      *fMaxOrbits;
   TEveGValuator      *fMaxAng;
   TEveGValuator      *fDelta;

   TGCompositeFrame   *fRefsCont;
   TGCompositeFrame   *fPMFrame;

   TGButton           *fFitDaughters;
   TGButton           *fFitReferences;
   TGButton           *fFitDecay;
   TGButton           *fFitCluster2Ds;
   TGButton           *fFitLineSegments;
   TGButton           *fRnrDaughters;
   TGButton           *fRnrReferences;
   TGButton           *fRnrDecay;
   TGButton           *fRnrCluster2Ds;
   TGButton           *fRnrFV;

   TAttMarkerEditor   *fPMAtt;
   TAttMarkerEditor   *fFVAtt;

   TGComboBox         *fProjTrackBreaking;
   TGButton           *fRnrPTBMarkers;
   TAttMarkerEditor   *fPTBAtt;

public:
   TEveTrackPropagatorSubEditor(const TGWindow* p);
   ~TEveTrackPropagatorSubEditor() override {}

   void SetModel(TEveTrackPropagator* m);

   void Changed(); //*SIGNAL*

   void DoMaxR();
   void DoMaxZ();
   void DoMaxOrbits();
   void DoMaxAng();
   void DoDelta();

   void DoFitPM();
   void DoRnrPM();

   void DoRnrFV();

   void DoModePTB(UChar_t mode);
   void DoRnrPTB();

   void CreateRefsContainer(TGVerticalFrame* p);

   ClassDefOverride(TEveTrackPropagatorSubEditor, 0); // Sub-editor for TEveTrackPropagator class.
};

/******************************************************************************/
// TEveTrackPropagatorEditor
/******************************************************************************/

class TEveTrackPropagatorEditor : public TGedFrame
{
private:
   TEveTrackPropagatorEditor(const TEveTrackPropagatorEditor&);            // Not implemented
   TEveTrackPropagatorEditor& operator=(const TEveTrackPropagatorEditor&); // Not implemented

   void CreateRefTab();
protected:
   TEveTrackPropagator           *fM;           // Model object.
   TEveTrackPropagatorSubEditor  *fRSSubEditor; // Render-style sub-editor.

public:
   TEveTrackPropagatorEditor(const TGWindow *p = nullptr, Int_t width=170, Int_t height=30,
                             UInt_t options=kChildFrame, Pixel_t back=GetDefaultFrameBackground());
   ~TEveTrackPropagatorEditor() override {}

   void SetModel(TObject* obj) override;

   ClassDefOverride(TEveTrackPropagatorEditor, 0); // Editor for TEveTrackPropagator class.
};

#endif
