|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件 LayerClass.h
|
|
|
//主要功能:
|
|
|
//
|
|
|
//程序编写: 2005-12-07
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#pragma once
|
|
|
#include "afxcoll.h"
|
|
|
#include ".\name.h"
|
|
|
|
|
|
/**
|
|
|
* 图层列表类
|
|
|
*/
|
|
|
class CLayer;
|
|
|
class AFX_EXT_CLASS CLayerList : public CName
|
|
|
{
|
|
|
public:
|
|
|
CLayerList(CString strName);
|
|
|
CLayerList(void);
|
|
|
virtual ~CLayerList(void);
|
|
|
|
|
|
protected:
|
|
|
CPtrList value;
|
|
|
|
|
|
public:
|
|
|
virtual void Serialize(CArchive& ar, const short& ver);
|
|
|
virtual int Read(CFile& fr, const short& ver);
|
|
|
virtual void Write(CFile& fw, const short& ver);
|
|
|
virtual void ScaleProperty(double sx, double sy, BOOL bJudgeEditSatte=TRUE);
|
|
|
|
|
|
void SerializeLegend(CArchive& ar, const short &ver); //仅增加了写功能
|
|
|
void SerializeLayerName(CArchive& ar, const short& ver); //仅增加了写功能
|
|
|
void SerializeLayerState(CArchive& ar, const short& ver); //仅增加了写功能
|
|
|
|
|
|
int WriteLegend(CFile& fw, const short& ver, double cc=1.0);
|
|
|
void WriteLayerName(CFile& fw, const short& ver);
|
|
|
void WriteLayerState(CFile& fw, const short& ver);
|
|
|
|
|
|
void WriteLayerNameDML(CFile& fw, const short& ver, int nBaseTabNum, int isClosed);
|
|
|
void WriteLayerNameDML(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
void WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
int WriteLegendDML(CFile& fw, const short& ver, double cc=1.0, int nBaseTabNum=1);
|
|
|
|
|
|
void WriteLayerNamePCG(CFile& fw, const short& ver, int nBaseTabNum, int isClosed);
|
|
|
void WriteLayerNamePCG(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
void WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
|
|
|
int WriteLegendPCG(CFile& fw, const short& ver, double cc=1.0, int nBaseTabNum=1);
|
|
|
|
|
|
POSITION FindAdd(CString strName, bool* pbCreateNew = NULL); //先查找有没有该层,如果有则返回已有层的位置
|
|
|
POSITION Add(CLayer* pLayer); //不管列表中有没有该层,都往列表中增加
|
|
|
|
|
|
POSITION InsertAfter(POSITION posAfter, CLayer* pLayer);
|
|
|
POSITION InsertBefore(POSITION posBefore, CLayer* pLayer);
|
|
|
|
|
|
int Merge(CLayerList& cl, CPtrList* pAddedLayerList = NULL, bool bReplaceExistLayer = TRUE);
|
|
|
int ReplacePath(CString strOld, CString strNew);
|
|
|
|
|
|
int FindPath(CString strPathName, CString strFind);
|
|
|
POSITION FindLayer(CString strName, BOOL bIncludeSublayer = FALSE);
|
|
|
void FindLayers(CString strName, CPtrList& positions, BOOL bIncludeSublayer = FALSE);
|
|
|
int SetLayerState(CString sLayer, int state, BOOL bIncludeSubLayer);
|
|
|
int SetLayerState(int state); //设置该类下的所有类别的状态
|
|
|
|
|
|
void RemoveAll(BOOL bFreeMem=TRUE);
|
|
|
void RemoveAllLegend(void);
|
|
|
void RemoveAt(CString strLayerName);
|
|
|
void RemoveAt(POSITION pos);
|
|
|
void RemoveAt(CLayer* pLayer); //仅移走列表中的指针,并不删除pLayer对象
|
|
|
CLayer* RemoveAtNoClear(POSITION pos);
|
|
|
|
|
|
CString GetPathName(POSITION pos);
|
|
|
CString GetClassName(void);
|
|
|
CPtrList* GetPtrList(void);
|
|
|
|
|
|
CLayer* GetAt(POSITION pos);
|
|
|
CLayer* GetNext(POSITION &pos);
|
|
|
CLayer* GetPrev(POSITION &pos);
|
|
|
CLayer* GetHead();
|
|
|
CLayer* GetTail();
|
|
|
POSITION GetHeadPosition();
|
|
|
POSITION GetTailPosition();
|
|
|
int GetCount(void);
|
|
|
|
|
|
void Standardization(CString &strLayerName);
|
|
|
int PositionNew(int bReplace=1);//定位修饰中的符号指针,bReaplce=TRUE时表示符号不为空才重新定位,否则不管是否为空都重新定位
|
|
|
void GetNewUsing(CStringList &list);
|
|
|
void operator=(CLayerList& lc);
|
|
|
|
|
|
int AddHeadLayer(LPCTSTR lpszLayerName); //在所有层名前再增加层名串,格式如:"NewLayer\\"、"NewLayer\\Test\\"
|
|
|
};
|
|
|
|
|
|
AFX_INLINE CPtrList* CLayerList::GetPtrList(void)
|
|
|
{
|
|
|
return &value;
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CString CLayerList::GetClassName(void)
|
|
|
{
|
|
|
return name;
|
|
|
}
|
|
|
|
|
|
AFX_INLINE int CLayerList::GetCount(void)
|
|
|
{
|
|
|
return (int)value.GetCount();
|
|
|
}
|
|
|
|
|
|
AFX_INLINE POSITION CLayerList::GetHeadPosition()
|
|
|
{
|
|
|
return value.GetHeadPosition();
|
|
|
}
|
|
|
|
|
|
AFX_INLINE POSITION CLayerList::GetTailPosition()
|
|
|
{
|
|
|
return value.GetTailPosition();
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CLayer* CLayerList::GetNext(POSITION &pos)
|
|
|
{
|
|
|
return (CLayer*)value.GetNext(pos);
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CLayer* CLayerList::GetPrev(POSITION &pos)
|
|
|
{
|
|
|
return (CLayer*)value.GetPrev(pos);
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CLayer* CLayerList::GetAt(POSITION pos)
|
|
|
{
|
|
|
return (CLayer*)value.GetAt(pos);
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CLayer* CLayerList::GetHead()
|
|
|
{
|
|
|
return (CLayer*)value.GetHead();
|
|
|
}
|
|
|
|
|
|
AFX_INLINE CLayer* CLayerList::GetTail()
|
|
|
{
|
|
|
return (CLayer*)value.GetTail();
|
|
|
}
|