You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/SSBase/DrawOperator/StyleLibraryManager.h

255 lines
5.5 KiB
C

1 month ago
#pragma once
#include <memory>
#include "Xy.h"
namespace StyleManager
{
/**
* @class CStyleLibraryItem
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>
*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><EFBFBD>޸<EFBFBD>״̬<EFBFBD><EFBFBD>
*/
class AFX_EXT_CLASS CStyleLibraryItem
{
public:
/**
* @brief Ĭ<EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
CStyleLibraryItem();
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
virtual ~CStyleLibraryItem();
/**
* <EFBFBD><EFBFBD>ȡ pXy ָ<EFBFBD><EFBFBD>
*
* \return
*/
std::shared_ptr<CXy> GetXy() const;
/**
* <EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*
* \return <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><EFBFBD><EFBFBD>
*/
std::vector<CString> ListStyle();
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
* *
* \param styleName <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* \return ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
CLayer* FindStyle(const CString& styleName) const;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*
* \param oldName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param newName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void RenameStyle(const CString& oldName, const CString& newName);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
*
* @return <EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>Ƶij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>á<EFBFBD>
*/
const CString& GetItemName(void) const;
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \return ʵ<EFBFBD>ʷ<EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD>׺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
*/
const CString GetGroupName(void) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ơ<EFBFBD>
*/
void SetItemName(const CString& name);
/**
* @brief <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
*
* @return <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>/ʧ<EFBFBD><EFBFBD>
*/
bool Read(void);
/**
* @brief д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
*/
void Write(void);
/**
* <EFBFBD><EFBFBD>Ⱦ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> HDC <EFBFBD><EFBFBD>
*
* \param style <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param hdc ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param width <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param height <EFBFBD>߶<EFBFBD>
*/
bool RenderStyle(const CString &style, HDC hdc, int width, int height) const;
void RenderXy(HDC hdc, int width, int height) const;
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
*/
void ClearXy();
private:
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
*
* @param pxy ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD>
*/
void SetXy(std::shared_ptr<CXy> pxy);
std::vector<CLayer*> GetAllLayers() const;
void SaveLayersState() const;
void RestoreLayersState() const;
void HideOtherLayer(CLayer* pTargetLayer) const;
std::shared_ptr<CXy> m_pXy; ///< ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><D6B8>
CString m_strFileName; ///< <20><>Ŀ<EFBFBD><C4BF><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
bool m_bModified; ///< <20><>ʾ<EFBFBD><CABE>Ŀ<EFBFBD>Ƿ<EFBFBD><C7B7>ѱ<EFBFBD><D1B1>޸<EFBFBD>
mutable std::map<CLayer*, BYTE> m_storedState;
};
class AFX_EXT_CLASS CStyleLibraryManager
{
public:
CStyleLibraryManager();
virtual ~CStyleLibraryManager();
/*
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* \param strNewPath <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
* \param bNotJudgeSamePath <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*/
bool InitLib(const CString& strNewPath, bool bNotJudgeSamePath);
/**
* <EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>
*
* \return
*/
std::vector<CString> ListGroup() const;
/**
* <EFBFBD>г<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Items
*
* \return
*/
std::vector<std::shared_ptr<CStyleLibraryItem>> ListGroupItems() const;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µķ<EFBFBD><EFBFBD><EFBFBD>
*
* \param strNewFile <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void AddNewGroup(const CString &strNewFile);
/**
* <EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>
*/
void RemoveAll(void);
/**
* <EFBFBD>Ƴ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param strNewFile
*/
void RemoveGroup(const CString& strNewFile);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param oldFile <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param newFile <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
bool RenameGroup(const CString& oldFile, const CString& newFile);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param strLibName <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return
*/
std::shared_ptr<CStyleLibraryItem> Find(const CString& strGroup) const;
/** @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>strGroup<75><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪstrName<6D>ķ<EFBFBD><C4B7><EFBFBD> */
CLayer *FindStyle(const CString& strGroup, const CString& strName) const;
CHowToViewCurve* GetHowToViewCurve(const CString& strGroup, const CString& strName);
CHowToViewPoint* GetHowToViewPoint(const CString& strGroup, const CString& strName);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*
* \param strName <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* \return
*/
CLayer* FindStyle(const CString& strName);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*
* \param strGroup <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param oldName <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param newName <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void RenameStyle(const CString& strGroup, const CString& oldName, const CString& newName);
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ
*
* \return
*/
bool SaveAll();
/**
* Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
*
* \param group <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param style <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD>
* \param targetXy Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
* \param targetLayerName Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \return <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>и<EFBFBD><EFBFBD><EFBFBD>ʽ)<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> false<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򷵻<EFBFBD> true
*/
bool ApplyStyleTo(const CString& group, const CString& style, CXy* targetXy, const CString& targetLayerName);
/**
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0, <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ,2-<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ, 3-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
**/
int GetStyleType(const CString& group, const CString& style);
/**
* <EFBFBD><EFBFBD>Ⱦ<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> HDC <EFBFBD><EFBFBD>
*
* \param group <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param style <EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param hdc ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param width <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param height <EFBFBD>߶<EFBFBD>
*/
bool RenderStyle(const CString& group, const CString& style, HDC hdc, int width, int height) const;
private:
bool IsSameStyleLibraryPath(const CString& path) const;
void CopyHowtoViewCurve(const CLayer *pSourceLayer, CLayer* pTargetLayer) const;
void CopyHowtoViewPoint(const CLayer *pSourceLayer, CLayer* pTargetLayer) const;
void CopyHowtoViewMarkTo(CXy *pSourceXy, CHowToViewCurve *pHowToViewCurve, CHowToViewPoint* pHowToViewPoint, CXy* pTargetXy) const;
void CopyMarkTo(CXy *pSourceXy, CXy* pTargetXy, const CString& symbolName) const;
std::list<std::shared_ptr<CStyleLibraryItem>> m_libXy; ///< <20><><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>XY<58><59><EFBFBD><EFBFBD>
CString m_strPath;
};
}
extern "C" AFX_EXT_API StyleManager::CStyleLibraryManager & WINAPI AfxGetStyleLibMgr();