//////////////////////////////////////////////////////////////////////////////
//
//  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 __STDANSIDETAILSYM_H
#define __STDANSIDETAILSYM_H

class AcDbDetailViewStyle;

///<summary>This derived class implements standard-specific versions of functions available in the AmdtDetailSymStd class. 
///Refer to the AmdtDetailSymStd class for further information.</summary>
class STDIMP_DLLSHARE AmdtDetailSymStdANSI : public AmdtDetailSymStd
{
public:
  ACRX_DECLARE_MEMBERS(AmdtDetailSymStdANSI);
  AmdtDetailSymStdANSI();      
  virtual ~AmdtDetailSymStdANSI();             
  ///<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;
  void initToEditOriginal() const override;
  void initToEdit() const override;
  ///<summary>This member function is called on all symbol standards when their owner, the AcmStandard object, 
  ///changes units from millimeters to inches or vice versa.</summary>
  virtual Acm::ErrorStatus onChangeUnits(Adesk::Boolean isMetric); 
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean subSetFactoryDefaults();
  ///<summary>Get the list of all arrowheads or all standard-supported arrowheads for the AmdtDetailSymStd.</summary>
  ///<param name="list">The implementation here will return additional arrowheads ontop of what is available in AmdtDetailSymStd.</param>
  ///<param name="allSrv"> </param>
  Adesk::Boolean getArrowDesc(AcmCObjArray<AcmCArrowDesc>& list,
                              Adesk::Boolean allSrv = Adesk::kTrue,
                              Adesk::Boolean bDarkTheme = Adesk::kFalse) const override;
  virtual void getSubEntsLeader(const AmdtDetailSymC* pSymb,AcmCAuxEntArray& subents) const;

  virtual Acm::Visibility variableStatus(AmdtDetailSymStd::Variable var) const;

  ///<summary>Set settings in AcDbDetailViewStyle to the same values as the corresponding settings in AmdtDetailSymStd.
  ///Override to call AcDbDetailViewStyle::setIdentifierPlacement() to set to AcDbDetailViewStyle::kOnBoundaryWithLeader.</summary>
  ///<param name="pDetailViewStyle">detail view style object.</param> 
  virtual void setDetailViewStyle(AcDbDetailViewStyle* pDetailViewStyle) const;

private:

  virtual void setFactoryDefaultsOnNewSettings();
};                      

#endif // __STDANSIDETAILSYM_H
