⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 project.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CWKSP_Project::_Load_Data(CSG_File &Stream, const wxChar *ProjectDir)
{
	int				Type;
	CSG_String		sLine, sPath;
	CWKSP_Base_Item	*pItem;

	while( Stream.Read_Line(sLine) && sLine.Cmp(DATA_ENTRY_BEGIN) && sLine.Cmp(DATA_ENTRIES_END) );

	if( !sLine.Cmp(DATA_ENTRY_BEGIN) )
	{
		if(	Stream.Read_Line(sPath) && Stream.Read_Line(sLine) && sLine.asInt(Type) )
		{
//			if( wxFileExists(sPath.c_str()) || wxFileExists((sPath = Get_FilePath_Absolute(ProjectDir, sPath)).c_str()) )
			if( wxFileExists((sPath = Get_FilePath_Absolute(ProjectDir, sPath)).c_str()) )
			{
				if(	(pItem = g_pData->Open(Type, sPath)) != NULL )
				{
					if( pItem->Get_Parameters() )
					{
						pItem->Get_Parameters()->Serialize(Stream, false);
						pItem->Parameters_Changed();
					}
				}
			}
		}

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
bool CWKSP_Project::_Save_Data(CSG_File &Stream, const wxChar *ProjectDir, CSG_Data_Object *pDataObject, CSG_Parameters *pParameters)
{
	if( pDataObject && pDataObject->Get_File_Name() != NULL )
	{
		Stream.Printf(wxT("\n"));
		Stream.Printf(wxT("%s\n"), DATA_ENTRY_BEGIN);

		Stream.Printf(wxT("%s\n"), Get_FilePath_Relative(ProjectDir, pDataObject->Get_File_Name()).c_str());
		Stream.Printf(wxT("%d\n"), pDataObject->Get_ObjectType());

		if( pParameters )
		{
			pParameters->Serialize(Stream, true);
		}

		Stream.Printf(wxT("%s\n"), DATA_ENTRY_END);

		return( true );
	}

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CWKSP_Project::_Load_Map(CSG_File &Stream, const wxChar *ProjectDir)
{
	TSG_Rect		r;
	CSG_String		sLine;
	CWKSP_Base_Item	*pItem;
	CWKSP_Map		*pMap;

	while( Stream.Read_Line(sLine) && sLine.Cmp(MAP_ENTRY_BEGIN) && sLine.Cmp(MAP_ENTRIES_END) );

	if( !sLine.Cmp(MAP_ENTRY_BEGIN) )
	{
		if(	Stream.Read_Line(sLine) && SG_SSCANF(sLine, wxT("%lf %lf %lf %lf"), &r.xMin, &r.xMax, &r.yMin, &r.yMax) == 4 )
		{
			pMap	= NULL;

			while( Stream.Read_Line(sLine) && sLine.Cmp(MAP_ENTRY_END) )
			{
				sLine	= Get_FilePath_Absolute(ProjectDir, sLine).c_str();

				if(	(pItem = _Get_byFileName(sLine.c_str())) != NULL
				&&	(	pItem->Get_Type()	== WKSP_ITEM_Grid
					||	pItem->Get_Type()	== WKSP_ITEM_TIN
					||	pItem->Get_Type()	== WKSP_ITEM_Shapes) )
				{
					if( pMap == NULL )
					{
						pMap	= new CWKSP_Map;
					}

					g_pMaps->Add((CWKSP_Layer *)pItem, pMap);
				}
			}

			if( pMap )
			{
				pMap->Set_Extent(r);
				pMap->View_Show(true);
			}
		}

		return( true );
	}

	return( false );
}


//---------------------------------------------------------
bool CWKSP_Project::_Save_Map(CSG_File &Stream, const wxChar *ProjectDir, CWKSP_Map *pMap)
{
	if( pMap )
	{
		Stream.Printf(wxT("%s\n"), MAP_ENTRY_BEGIN);

		Stream.Printf(wxT("%f %f %f %f\n"),
			pMap->Get_Extent().Get_XMin(), pMap->Get_Extent().Get_XMax(),
			pMap->Get_Extent().Get_YMin(), pMap->Get_Extent().Get_YMax()
		);

		for(int i=pMap->Get_Count()-1; i>=0; i--)
		{
			if( pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_File_Name() != NULL )
			{
				Stream.Printf(wxT("%s\n"), Get_FilePath_Relative(ProjectDir, pMap->Get_Layer(i)->Get_Layer()->Get_Object()->Get_File_Name()).c_str());
			}
		}

		Stream.Printf(wxT("%s\n"), MAP_ENTRY_END);

		return( true );
	}

	return( false );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
CWKSP_Base_Item * CWKSP_Project::_Get_byFileName(wxString FileName)
{
	const wxChar				*s;
	int						i, j;
	CWKSP_Table_Manager		*pTables;
	CWKSP_Shapes_Manager	*pShapes;
	CWKSP_TIN_Manager		*pTINs;
	CWKSP_Grid_Manager		*pGrids;

	//-----------------------------------------------------
	if( FileName.Length() > 0 )
	{
		if( (pTables = g_pData->Get_Tables()) != NULL )
		{
			for(i=0; i<pTables->Get_Count(); i++)
			{
				if( (s = pTables->Get_Table(i)->Get_Table()->Get_File_Name()) && !FileName.Cmp(s) )
				{
					return( pTables->Get_Table(i) );
				}
			}
		}

		if( (pShapes = g_pData->Get_Shapes()) != NULL )
		{
			for(j=0; j<pShapes->Get_Count(); j++)
			{
				for(i=0; i<((CWKSP_Shapes_Type *)pShapes->Get_Item(j))->Get_Count(); i++)
				{
					if( (s = ((CWKSP_Shapes_Type *)pShapes->Get_Item(j))->Get_Shapes(i)->Get_Shapes()->Get_File_Name()) && !FileName.Cmp(s) )
					{
						return( ((CWKSP_Shapes_Type *)pShapes->Get_Item(j))->Get_Shapes(i) );
					}
				}
			}
		}

		if( (pTINs = g_pData->Get_TINs()) != NULL )
		{
			for(i=0; i<pTINs->Get_Count(); i++)
			{
				if( (s = pTINs->Get_TIN(i)->Get_TIN()->Get_File_Name()) && !FileName.Cmp(s) )
				{
					return( pTINs->Get_TIN(i) );
				}
			}
		}

		if( (pGrids = g_pData->Get_Grids()) != NULL )
		{
			for(j=0; j<pGrids->Get_Count(); j++)
			{
				for(i=0; i<pGrids->Get_System(j)->Get_Count(); i++)
				{
					if( (s = pGrids->Get_System(j)->Get_Grid(i)->Get_Grid()->Get_File_Name()) && !FileName.Cmp(s) )
					{
						return( pGrids->Get_System(j)->Get_Grid(i) );
					}
				}
			}
		}
	}

	return( NULL );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CWKSP_Project::Save_Modified(CWKSP_Base_Item *pItem)
{
	CSG_Parameters	Parameters;

	Parameters.Create(this, LNG("[CAP] Close and save modified data sets..."), LNG(""));
	Parameters.Add_Value(NULL, "SAVE_ALL", LNG("Save all"), LNG(""), PARAMETER_TYPE_Bool, false);

	_Modified_Get(&Parameters, pItem);

	if( Parameters.Get_Count() > 1 )
	{
		Parameters.Set_Callback_On_Parameter_Changed(&_Modified_Changed);

		if( !DLG_Parameters(&Parameters) )
		{
			return( false );
		}

		_Modified_Save(&Parameters);
	}

	return( true );
}

//---------------------------------------------------------
int CWKSP_Project::_Modified_Changed(CSG_Parameter *pParameter)
{
	if( pParameter && pParameter->Get_Owner() && pParameter->Get_Owner()->Get_Owner() )
	{
		if( !SG_STR_CMP(pParameter->Get_Identifier(), SG_T("SAVE_ALL")) )
		{
			for(int i=0; i<pParameter->Get_Owner()->Get_Count(); i++)
			{
				if( pParameter->Get_Owner()->Get_Parameter(i)->Get_Type() == PARAMETER_TYPE_Bool )
				{
					pParameter->Get_Owner()->Get_Parameter(i)->Set_Value(pParameter->asBool());
				}
			}
		}
		else if( pParameter->Get_Type() == PARAMETER_TYPE_Bool && pParameter->asBool() == false )
		{
			if( (pParameter = pParameter->Get_Owner()->Get_Parameter("SAVE_ALL")) != NULL )
			{
				pParameter->Set_Value(0);
			}
		}
	}

	return( 0 );
}

//---------------------------------------------------------
bool CWKSP_Project::_Modified_Get(CSG_Parameters *pParameters, CWKSP_Base_Item *pItem)
{
	int		i;

	if( pItem && pParameters )
	{
		switch( pItem->Get_Type() )
		{
		default:
			break;

		//-------------------------------------------------
		case WKSP_ITEM_Data_Manager:
		case WKSP_ITEM_Table_Manager:
		case WKSP_ITEM_Shapes_Manager:
		case WKSP_ITEM_Shapes_Type:
		case WKSP_ITEM_TIN_Manager:
		case WKSP_ITEM_Grid_Manager:
		case WKSP_ITEM_Grid_System:
			for(i=0; i<((CWKSP_Base_Manager *)pItem)->Get_Count(); i++)
			{
				_Modified_Get(pParameters, ((CWKSP_Base_Manager *)pItem)->Get_Item(i));
			}
			break;

		//-------------------------------------------------
		case WKSP_ITEM_Table:
			_Modified_Get(pParameters, pItem, ((CWKSP_Table *)pItem)->Get_Table() );
			break;

		case WKSP_ITEM_Shapes:
		case WKSP_ITEM_TIN:
		case WKSP_ITEM_Grid:
			_Modified_Get(pParameters, pItem, ((CWKSP_Layer *)pItem)->Get_Object());
			break;
		}
	}

	return( true );
}

//---------------------------------------------------------
bool CWKSP_Project::_Modified_Get(CSG_Parameters *pParameters, CWKSP_Base_Item *pItem, CSG_Data_Object *pObject)
{
	CSG_Parameter	*pNode, *pParent;
	wxString		sFilter, sPath;

	if( pObject->is_Modified() )
	{
		switch( pItem->Get_Type() )
		{
		//-------------------------------------------------
		default:	return( false );
		case WKSP_ITEM_Table:	sFilter	= DLG_Get_FILE_Filter(ID_DLG_TABLES_SAVE);	break;
		case WKSP_ITEM_Shapes:	sFilter	= DLG_Get_FILE_Filter(ID_DLG_SHAPES_SAVE);	break;
		case WKSP_ITEM_TIN:		sFilter	= DLG_Get_FILE_Filter(ID_DLG_TIN_SAVE);		break;
		case WKSP_ITEM_Grid:	sFilter	= DLG_Get_FILE_Filter(ID_DLG_GRIDS_SAVE);	break;
		}

		if( (pParent = pParameters->Get_Parameter(pItem->Get_Manager()->Get_Name())) == NULL )
		{
			pParent	= pParameters->Add_Node(NULL, pItem->Get_Manager()->Get_Name(), pItem->Get_Manager()->Get_Name(), wxT(""));
		}			

		//-------------------------------------------------
		pNode	= pParameters->Add_Node(
			pParent,
			wxString::Format(wxT("%d NODE"), (long)pObject),
			pItem->Get_Name(), wxT("")
		);

		pParameters->Add_Value(
			pNode,
			wxString::Format(wxT("%d")     , (long)pObject),
			LNG("[CAP] Save"), wxT(""), PARAMETER_TYPE_Bool, false
		);

		sPath	= pObject->Get_File_Name();
		if( sPath.Length() == 0 )
			sPath	= SG_File_Make_Path(SG_File_Get_Path(Get_File_Name()), pObject->Get_Name(), NULL);

		pParameters->Add_FilePath(
			pNode,
			wxString::Format(wxT("%d FILE"), (long)pObject),
			LNG("[CAP] File"), wxT(""), sFilter, sPath, true
		);

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
bool CWKSP_Project::_Modified_Save(CSG_Parameters *pParameters)
{
	bool			bSaveAll	= pParameters->Get_Parameter("SAVE_ALL")->asBool();
	CSG_Data_Object	*pObject;
	CSG_Parameter	*pParameter, *pPath	= NULL;

	for(int i=0, j=0; i<pParameters->Get_Count(); i++)
	{
		pParameter	= pParameters->Get_Parameter(i);

		if(	pParameter->Get_Type() == PARAMETER_TYPE_Bool && (bSaveAll || pParameter->asBool())
		&&	SG_SSCANF(pParameter->Get_Identifier(), wxT("%d"), (int *)(&pObject)) == 1 && g_pData->Exists(pObject)	)
		{
			CSG_String	fPath;

			if(	(pPath = pParameters->Get_Parameter(wxString::Format(wxT("%d FILE"), (long)pObject))) != NULL
			&&	pPath->asString() != NULL && SG_STR_LEN(pPath->asString()) > 0 )
			{
				fPath	= pPath->asString();
			}
			else
			{
				fPath	= SG_File_Make_Path(SG_File_Get_Path(Get_File_Name()), CSG_String::Format(wxT("%02d_%s"), ++j, pObject->Get_Name()), NULL);
			}

			pObject->Save(fPath);
		}
	}

	return( true );
}


///////////////////////////////////////////////////////////
//														 //
//														 //
//														 //
///////////////////////////////////////////////////////////

//---------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -