#pragma once #include "PDList.h" #include "SHList.h" #include "globalFunc.h" //字典项 class WDictItem { public: WDictItem(const TCHAR* sName = NULL, const TCHAR* sDesc = NULL); virtual ~WDictItem(); virtual int GetType() const; virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); bool IsDict() const; bool IsValid(); bool operator == (const WDictItem &item) const; bool operator != (const WDictItem &item) const; bool operator > (const WDictItem &item) const; bool operator < (const WDictItem &item) const; virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: //名称不能为空,区分大小写! CString m_sName; //项描述 CString m_sDesc; }; class WBoolItem : public WDictItem { public: virtual ~WBoolItem(); virtual int GetType()const; virtual void operator>>(CArchive& ar); virtual void operator<<(CArchive& ar); virtual void CopyData(const WDictItem& src); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: BOOL m_data; }; class WCharItem : public WDictItem { public: virtual ~WCharItem(); virtual int GetType()const; virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: char m_data; }; class WCStringItem : public WDictItem { public: virtual ~WCStringItem(); virtual int GetType()const; virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: CString m_data; }; class WDoubleItem : public WDictItem { public: virtual ~WDoubleItem(); virtual int GetType()const; virtual void operator>>(CArchive &ar); virtual void operator<<(CArchive &ar); virtual void CopyData(const WDictItem &src); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: double m_data; }; class WLongItem : public WDictItem { public: virtual ~WLongItem(); virtual int GetType()const; virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: long m_data; }; class WSelectItem : public WDictItem, public SHList { public: virtual ~WSelectItem(); virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); //自定义类型类型号大于100 virtual int GetType()const; //外部要保证m_data为有效索引 CString GetSelString()const; virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); public: int m_data; }; class WDictPath : public PDList { public: ~WDictPath(); WDictPath(const CString& sPath); bool IsValid(); }; class WDict : public WDictItem, public PDList { public: WDict(const TCHAR* sName = NULL, const TCHAR *sDesc = NULL); virtual ~WDict(); virtual int GetType() const; virtual void operator >> (CArchive &ar); virtual void operator << (CArchive &ar); virtual void CopyData(const WDictItem &src); //没找到则添加,路径被键占用返回NULL,path内容一般会改变! WDict* FindOrAddDict(WDictPath &path); WDict* FindOrAddDict(const CString &sPath); bool ReadFile(const TCHAR *sFile); bool WriteFile(const TCHAR *sFile); bool ReadByDWG(); bool WriteToDWG(); //如果名称重复返回false,且外部释放pNewItem!无论是否添加成功,GetCurPData()==*pNewItem! bool AppendItem(WDictItem *pNewItem); //在父路径下添加,返回false时外部释放pNewItem! bool AppendItem(const CString &sParentPath, WDictItem *pNewItem); bool SetValue(const CString &sPath, int value); bool GetValue(const CString &sPath, int &value); bool SetValue(const CString &sPath, bool value); bool GetValue(const CString &sPath, bool &value); bool SetValue(const CString &sPath, char value); bool GetValue(const CString &sPath, char &value); bool SetValue(const CString &sPath, long value); bool GetValue(const CString &sPath, long &value); bool SetValue(const CString &sPath, double value); bool GetValue(const CString &sPath, double &value); bool SetValue(const CString &sPath, unsigned int valude); bool GetValue(const CString &sPath, unsigned int &value); bool SetValue(const CString &sPath, const CString& value); bool GetValue(const CString &sPath, CString &value); bool GetCombValue(const CString &sPath, int &v); //path内容一般会改变! WDictItem* FindItem(WDictPath &path); WDictItem* FindItem(const CString &sPath); //没找到则添加 WDictItem* FindOrAddItem(const CString &sPath, int type); virtual void saveToJson(DIMJson::WValue &v); virtual void loadByJson(const DIMJson::WValue &v); private: WDictItem* DynCreateItem(int type); };