//////////////////////////////////////////////////////////////////////////////
//
//  Copyright 2025 by Autodesk, Inc.  All rights reserved.
//
// This computer source code and related instructions and comments 
// are the unpublished confidential and proprietary information of 
// Autodesk, Inc. and are protected under applicable copyright and 
// trade secret law.  They may not be disclosed to, copied or used 
// by any third party without the prior written consent of Autodesk, Inc.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef __STDDIN_H
#define __STDDIN_H

#ifndef __STDISO_H
	#error include 'stdISO.h' before including this file
#endif

///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether 
///AcmSymbolSTD can be used for a particular standard.</summary>
class STDIMP_DLLSHARE AcmStandardDIN : public AcmStandard
{
public:
  ACRX_DECLARE_MEMBERS(AcmStandardDIN);
  AcmStandardDIN();
  virtual ~AcmStandardDIN();
  ///<summary>Gets the original name of the standard.</summary>
  virtual LPCTSTR originalName() const;             
  ///<summary>This function initializes the internal structure of the standard.</summary>
  virtual Adesk::Boolean acmInit();             
  ///<summary>Returns a list of all supported text heights that conform to the standard setting.</summary>
  virtual void getTextHeightList(AcGeDoubleArray& txtArr) const;
  ///<summary>This function is used to initialize the standard.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  virtual Adesk::Boolean setDimDefaults();

protected:
  ///<summary>Constructs arrow services objects.</summary>
  virtual void initArrowServices();
  virtual Adesk::Boolean createDefaultStyle();
};                      

///<summary>This is class AcmSurfTextStdDIN.</summary>
class STDIMP_DLLSHARE AcmSurfTextStdDIN : public AcmSurfTextStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmSurfTextStdDIN);
  AcmSurfTextStdDIN();       
  virtual ~AcmSurfTextStdDIN();             
  ///<summary>Gets the information about the standard name and revision.</summary>
  Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const override;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether 
  ///AcmSymbolSTD can be used for a particular standard.</summary>
  Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const override;
  ///<summary>Sets the factory default values.</summary>
  Adesk::Boolean setFactoryDefaults() override;
  ///<summary>Gets a direction of lay symbol descriptor.</summary>
  Adesk::Boolean getLaySymbolList(AcmCObjArray<AcmSymbolDesc4CL>& list,
                                          const AcmCSurfText* pSubSym =NULL) const override;

  void getDefaultVarSuggestList(Acm::Variable var, CStringList& list) const override;
  ///<param name="list">Cut off list.</param>
  void getDefaultCutOffList(CStringList& list) const override;
  ///<param name="list">Waviness list.</param>
  void getDefaultWavinessList(CStringList& list) const override;
  ///<param name="list">Roughness list.</param>
  void getDefaultRoughnessList(CStringList& list) const override;
};                      

///<summary>The AcmSurfTextStdDIN2002 class is a derived class of the AcmSurfTextStdDIN class. The usage
///of AcmSurfTextStdDIN2002 class is the same as that of AcmSurfTextStd class.</summary>
class STDIMP_DLLSHARE AcmSurfTextStdDIN2002 : public AcmSurfTextStdDIN
{
public:
  ACRX_DECLARE_MEMBERS(AcmSurfTextStdDIN2002);
  AcmSurfTextStdDIN2002();
  virtual ~AcmSurfTextStdDIN2002();
  ///<summary>Gets the information about the standard name and revision.</summary>
  Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const override;
  ///<summary>Returns the variable of the Surface Texture symbol standard that will hold the input value at 
  ///the positional index (as shown in the diagram below).</summary>
  ///<param name="dlgIndex">Positional index (See diagram). DO_IMAGE images/surface_texture_requirement.png</param>
  ///<param name="var">Variable in Surface Texture symbol standard.</param>
  ///<returns>Acad::eOk = If the variable is valid in the Surface Texture symbol standard. Acad::eInvalidInput = If 
  ///the index is not valid in the Surface Texture symbol standard.</returns>
  Acad::ErrorStatus getVarFromDlgIndex(Adesk::UInt8 dlgIndex, Acm::Variable& var) const override;
  ///<summary>Returns the editability and other information of the drop-down list (Combo box) in Surface Texture 
  ///symbol standard dialog.</summary>
  ///<param name="var">Variable in Surface Texture symbol standard.</param>
  ///<param name="varDlgInfo">Information of the drop-down list.</param>
  AcmSurfTextStd::ConfigListState checkConfigListState(Acm::Variable var, CVarDlgInfo& varDlgInfo) const override;
  ///<summary>Sets the visibility status for all values in the surface texture sub-symbol.</summary>
  Acm::ErrorStatus checkVisibility(AcmCSurfText* pData) const override;
  ///<summary>Sets the initial status of variables.</summary>
  Acm::ErrorStatus initFields(AcmCSurfText* pData) const override;
  ///<summary>Sets the suggested values for any value in the sub-symbol.</summary>
  Acm::ErrorStatus setSuggested(AcmCSurfText* pData) const override;
  ///<summary>Restore the drop down lists for all variables of surface texture symbol standard to the default preset 
  ///lists.</summary>
  void restoreAllSuggestedList() override;
  void getDefaultVarSuggestList(Acm::Variable var, CStringList& list) const override;
  ///<summary>Returns true if this symbol standard supports surface indication leader. 
  ///Otherwise, returns false.</summary>
  Adesk::Boolean isSurfIndLeaderSupported() const override;
protected:
  ///<summary>Gets the height of the symbol.</summary>
  ///<param name="pSymb">Surface texture symbol of interest.</param>
  ///<param name="H1">Reference height 1.</param>
  ///<param name="H2">Reference height 2.</param>
  void getHeights(const AcmCSurfText* pSymb,
                          double& H1,
                          double& H2) const override;
};                      

///<summary>This derived class implements standard-specific versions of functions available in the AcmFCFStd class. 
///Refer to the AcmFCFStd class for further information.</summary>
class STDIMP_DLLSHARE AcmFCFStdDIN : public AcmFCFStd
{
public:
  ACRX_DECLARE_MEMBERS(AcmFCFStdDIN);
  AcmFCFStdDIN();
  virtual ~AcmFCFStdDIN();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD 
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  void initToEditOriginal() const override;
  void initToEdit() const override;
  ///<summary>Get the list of all arrowheads or all standard-supported arrowheads for the FCF symbol std. It will
  ///return additional arrowheads on top of those available in AcmSymbolStd.</summary>
  Adesk::Boolean getArrowDesc(AcmCObjArray<AcmCArrowDesc>& list,
                              Adesk::Boolean allSrv = Adesk::kTrue,
                              Adesk::Boolean bDarkTheme = Adesk::kFalse) const override;
  ///<summary>Returns the list of available material removal characteristics.</summary>
  virtual Adesk::Boolean getMat(AcmCObjArray<AcmCGDTSymbolDesc>& list) const;
  ///<summary>Checks whether the symbol data is visible or not.</summary>
  virtual Acm::ErrorStatus checkVisibility(AcmCFCF* pData) const;
  ///<summary>This function is used to return the default secondary arrow type for symbol.</summary>
  virtual Acm::ArrowType defaultSecondaryArrowType() const;
};                      

///<summary>This is class AcmFCFStdDIN2008.</summary>
class STDIMP_DLLSHARE AcmFCFStdDIN2008 : public AcmFCFStdDIN
{
public:
  ACRX_DECLARE_MEMBERS(AcmFCFStdDIN2008);
  AcmFCFStdDIN2008();
  virtual ~AcmFCFStdDIN2008();

  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Returns the list of available geometric characteristic descriptor objects.</summary>
  Adesk::Boolean getGeom(AcmCObjArray<AcmCGDTSymbolDesc>& list, const AcmCFCF* pSubSym = NULL) const override;
  ///<summary>Returns the list of available material removal characteristics.</summary>
  virtual Adesk::Boolean getMat(AcmCObjArray<AcmCGDTSymbolDesc>& list) const;
  ///<summary>This function is used to return the default secondary arrow type for symbol.</summary>
  virtual Acm::ArrowType defaultSecondaryArrowType() const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  ///<summary>Returns true if this symbol standard supports surface indication leader. 
  ///Otherwise, returns false.</summary>
  virtual Adesk::Boolean isSurfIndLeaderSupported() const;
};

///<summary>This is class AcmWeldingStdDIN.</summary>
class STDIMP_DLLSHARE AcmWeldingStdDIN : public AcmWeldingStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmWeldingStdDIN);
  AcmWeldingStdDIN();     
  virtual ~AcmWeldingStdDIN();             

  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>This class implementation doesn't do anything and returns eNotImplemented if it is not overloaded in 
  ///the child class.</summary>
  virtual Acm::ErrorStatus cInit();
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();

  virtual void getWeldProcessPrefix(CString& bufStr) const;
};        
///<summary>This is class AcmWeldingStdDIN2014.</summary>
class STDIMP_DLLSHARE AcmWeldingStdDIN2014 : public AcmWeldingStdISO2013
{
public:
	ACRX_DECLARE_MEMBERS(AcmWeldingStdDIN2014);

	AcmWeldingStdDIN2014() = default;
	virtual ~AcmWeldingStdDIN2014() = default;

	virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const override;
	virtual Adesk::Boolean isCompatibleTo(const AcmStandard* pStd) const override;
	virtual Adesk::Boolean setFactoryDefaults() override;
	virtual void getWeldProcessPrefix(CString& bufStr) const;
};


///<summary>This is class AcmDatumStdDIN.</summary>
class STDIMP_DLLSHARE AcmDatumStdDIN : public AcmDatumStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmDatumStdDIN);
  AcmDatumStdDIN();
  virtual ~AcmDatumStdDIN();
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
};                      

///<summary>This is class AcmDatumStdDIN.</summary>
class STDIMP_DLLSHARE AcmDatumStdDIN2008 : public AcmDatumStdDIN
{
public:
  ACRX_DECLARE_MEMBERS(AcmDatumStdDIN2008);
  AcmDatumStdDIN2008();
  virtual ~AcmDatumStdDIN2008();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
};                      

///<summary>This is class AcmCPartListStdDIN.</summary>
class STDIMP_DLLSHARE AcmCPartListStdDIN : public AcmCPartListStd
{
public:
  AcmCPartListStdDIN(AcmBOMStd *std);
  virtual ~AcmCPartListStdDIN();
  ///<summary>This member function will forward the call to the parts list standard and balloon standard objects, if
  ///they are defined.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  ///<summary>This member function is implemented for the AcmSymbolStd interface. It is necessary to be able to 
  ///properly edit the standard.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;

};

///<summary>This is class AcmCBalloonStdDIN.</summary>
class STDIMP_DLLSHARE AcmCBalloonStdDIN : public AcmCBalloonStd
{
public:
  AcmCBalloonStdDIN(AcmBOMStd *std);
  virtual ~AcmCBalloonStdDIN();
  ///<summary>This member function will forward the call to the parts list standard and balloon standard objects, if
  ///they are defined.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;

};

///<summary>The AcmBOMStdDIN class is a derived class of the AcmBOMStd class. The usage of AcmBOMStdDIN class is 
///the same as that of AcmBOMStd class.</summary>
class STDIMP_DLLSHARE AcmBOMStdDIN : public AcmBOMStd
{
public:
  ACRX_DECLARE_MEMBERS(AcmBOMStdDIN);
  ///<summary>the construct function.</summary>
  AcmBOMStdDIN();
  ///<summary>the destruct function.</summary>
  virtual ~AcmBOMStdDIN();
  ///<summary>You may overload this method in their classes to initialize the BOM standard with their own parts list 
  ///standard balloon standards.</summary>
  virtual Acm::ErrorStatus cInit();
  ///<summary>This member function will forward the call to the parts list standard and balloon standard objects, if
  ///they are defined.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  ///<summary>This member function is implemented for the AcmSymbolStd interface. It is necessary to be able to 
  ///properly edit the standard.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD 
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
};

///<summary>This is class AcmIdStdDIN.</summary>
class STDIMP_DLLSHARE AcmIdStdDIN : public AcmIdStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmIdStdDIN);
  AcmIdStdDIN();
  virtual ~AcmIdStdDIN();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Selects all supported arrowhead services available for use for the datum standard and returns a
  ///list of their descriptor objects.</summary>
  Adesk::Boolean getDatumArrowDesc(AcmCObjArray<AcmCArrowDesc>& list, Adesk::Boolean bDarkTheme = Adesk::kFalse) const override;
};

///<summary>This is class AcmIdStdDIN2008.</summary>
class STDIMP_DLLSHARE AcmIdStdDIN2008 : public AcmIdStdDIN
{
public:
  ACRX_DECLARE_MEMBERS(AcmIdStdDIN2008);
  AcmIdStdDIN2008();
  virtual ~AcmIdStdDIN2008();
  ///<summary>Sets factory default values for surface indication leader properties.</summary>
  virtual Adesk::Boolean setSurfIndLeaderFactoryDefaults();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Check the visibility of symbol variables. The "visiblity" always means certain properties are supported 
  ///by various master standards, or standard revisions.</summary>
  virtual Acm::ErrorStatus checkVisibility(AcmCId* pData) const;
  ///<summary>Gets the status for the feature id and datum Id symbols.</summary>
  virtual Adesk::Boolean isSupportedType(Acm::SubSymbolType type) const;
  ///<summary>Returns whether surface indication leader is supported or not.</summary>
  virtual Adesk::Boolean isSurfIndLeaderSupported(Acm::SubSymbolType type) const;
};

///<summary>This is class AcmIdStdDIN2012.</summary>
class STDIMP_DLLSHARE AcmIdStdDIN2012 : public AcmIdStdDIN2008
{
public:
  ACRX_DECLARE_MEMBERS(AcmIdStdDIN2012);
  AcmIdStdDIN2012();
  virtual ~AcmIdStdDIN2012();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Since the Datum Id uses a different arrowheads than other symbols, this member function specifies
  ///which one.</summary>
  virtual Acm::ArrowType defaultArrowType() const;
};

#endif // STDDIN
