Files
gjm 164968b62e chore
把非utf8-bom编码的cpp/h文件改为 utf8 bom 编码, msvc识别utf8编码时,如果不是bom格式的,会使用当前cp_oem来解码.
2026-10-04 00:04:20 +08:00

260 lines
5.1 KiB
C++

#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<CString>
{
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<WDictItem>
{
public:
~WDictPath();
WDictPath(const CString& sPath);
bool IsValid();
};
class WDict : public WDictItem, public PDList<WDictItem>
{
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);
};