📄 wksp_data_manager.cpp
字号:
///////////////////////////////////////////////////////////
// //
// SAGA //
// //
// System for Automated Geoscientific Analyses //
// //
// User Interface //
// //
// Program: SAGA //
// //
//-------------------------------------------------------//
// //
// WKSP_Data_Manager.cpp //
// //
// Copyright (C) 2005 by Olaf Conrad //
// //
//-------------------------------------------------------//
// //
// This file is part of 'SAGA - System for Automated //
// Geoscientific Analyses'. SAGA is free software; you //
// can redistribute it and/or modify it under the terms //
// of the GNU General Public License as published by the //
// Free Software Foundation; version 2 of the License. //
// //
// SAGA is distributed in the hope that it will be //
// useful, but WITHOUT ANY WARRANTY; without even the //
// implied warranty of MERCHANTABILITY or FITNESS FOR A //
// PARTICULAR PURPOSE. See the GNU General Public //
// License for more details. //
// //
// You should have received a copy of the GNU General //
// Public License along with this program; if not, //
// write to the Free Software Foundation, Inc., //
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, //
// USA. //
// //
//-------------------------------------------------------//
// //
// contact: Olaf Conrad //
// Institute of Geography //
// University of Goettingen //
// Goldschmidtstr. 5 //
// 37077 Goettingen //
// Germany //
// //
// e-mail: oconrad@saga-gis.org //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
// $Id: wksp_data_manager.cpp,v 1.19 2007/03/22 14:24:43 oconrad Exp $
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
#ifdef _SAGA_LINUX
#include <stdlib.h>
#endif
#include <wx/filename.h>
#include <saga_api/saga_api.h>
#include "saga.h"
#include "res_commands.h"
#include "res_dialogs.h"
#include "helper.h"
#include "project.h"
#include "wksp_data_control.h"
#include "wksp_data_manager.h"
#include "wksp_data_menu_files.h"
#include "wksp_table_manager.h"
#include "wksp_shapes_manager.h"
#include "wksp_tin_manager.h"
#include "wksp_grid_manager.h"
#include "wksp_map_manager.h"
#include "active.h"
#include "active_parameters.h"
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CWKSP_Data_Manager *g_pData = NULL;
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
CWKSP_Data_Manager::CWKSP_Data_Manager(void)
{
m_pTables = NULL;
m_pShapes = NULL;
m_pTINs = NULL;
m_pGrids = NULL;
m_pProject = new CWKSP_Project;
m_pMenu_Files = new CWKSP_Data_Menu_Files;
g_pData = this;
//-----------------------------------------------------
bool bValue;
long lValue;
wxString sValue;
if( CONFIG_Read(wxT("/DATA/GRIDS"), wxT("CACHE_TMP_DIR") , sValue) )
{
SG_Grid_Cache_Set_Directory(sValue);
}
if( CONFIG_Read(wxT("/DATA/GRIDS"), wxT("CACHE_AUTO") , bValue) )
{
SG_Grid_Cache_Set_Automatic(bValue);
}
if( CONFIG_Read(wxT("/DATA/GRIDS"), wxT("CACHE_THRESHOLD") , lValue) )
{
SG_Grid_Cache_Set_Threshold(lValue);
}
if( CONFIG_Read(wxT("/DATA/GRIDS"), wxT("CACHE_CONFIRM") , lValue) )
{
SG_Grid_Cache_Set_Confirm (lValue);
}
//-----------------------------------------------------
CSG_Parameter *pNode;
m_Parameters.Create(this, LNG(""), LNG(""));
pNode = m_Parameters.Add_Node(NULL, "NODE_GRID_MEM", LNG("Grid File Caching"), LNG(""));
m_Parameters.Add_FilePath(
pNode , "GRID_MEM_CACHE_TMPDIR" , LNG("Temporary files"),
LNG("Directory, where temporary cache files shall be saved."),
NULL, SG_Grid_Cache_Get_Directory(), true, true
);
m_Parameters.Add_Value(
pNode , "GRID_MEM_CACHE_AUTO" , LNG("Automatic mode"),
LNG("Activate file caching automatically, if memory size exceeds the threshold value."),
PARAMETER_TYPE_Bool, SG_Grid_Cache_Get_Automatic()
);
m_Parameters.Add_Value(
pNode , "GRID_MEM_CACHE_THRSHLD" , LNG("Threshold for automatic mode [MB]"),
LNG(""),
PARAMETER_TYPE_Double, SG_Grid_Cache_Get_Threshold_MB(), 0.0, true
);
m_Parameters.Add_Choice(
pNode , "GRID_MEM_CACHE_CONFIRM" , LNG("Confirm file caching"),
LNG(""),
wxString::Format(wxT("%s|%s|%s|"),
LNG("do not confirm"),
LNG("confirm"),
LNG("confirm with options")
),
SG_Grid_Cache_Get_Confirm()
);
//-----------------------------------------------------
pNode = m_Parameters.Add_Node(NULL, "NODE_GENERAL", LNG("General"), LNG(""));
if( CONFIG_Read(wxT("/DATA"), wxT("PROJECT_START") , lValue) == false )
{
lValue = 2;
}
m_Parameters.Add_Choice(
pNode , "PROJECT_START" , LNG("Start Project"),
LNG(""),
wxString::Format(wxT("%s|%s|%s|"),
LNG("empty"),
LNG("last opened"),
LNG("automatically save and load")
), lValue
);
if( CONFIG_Read(wxT("/DATA"), wxT("START_LOGO") , lValue) == false )
{
lValue = 1;
}
m_Parameters.Add_Choice(
pNode , "START_LOGO" , LNG("Show Logo at Start Up"),
LNG(""),
CSG_String::Format(wxT("%s|%s|%s|%s|"),
LNG("do not show"),
LNG("only during start up phase"),
LNG("20 seconds"),
LNG("until user closes it")
), lValue
);
}
//---------------------------------------------------------
CWKSP_Data_Manager::~CWKSP_Data_Manager(void)
{
g_pData = NULL;
delete(m_pProject);
delete(m_pMenu_Files);
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CWKSP_Data_Manager::Initialise(void)
{
wxString FileName;
if( m_pProject->Has_File_Name() )
{
return( m_pProject->Load(false) );
}
else
{
return( CONFIG_Read(wxT("/DATA"), wxT("PROJECT_FILE"), FileName) && wxFileExists(FileName) && m_pProject->Load(FileName, false, false) );
}
return( false );
}
//---------------------------------------------------------
bool CWKSP_Data_Manager::Finalise(void)
{
//-----------------------------------------------------
CONFIG_Write(wxT("/DATA/GRIDS") , wxT("CACHE_TMP_DIR") , SG_Grid_Cache_Get_Directory());
CONFIG_Write(wxT("/DATA/GRIDS") , wxT("CACHE_AUTO") , SG_Grid_Cache_Get_Automatic());
CONFIG_Write(wxT("/DATA/GRIDS") , wxT("CACHE_THRESHOLD"), (long)SG_Grid_Cache_Get_Threshold());
CONFIG_Write(wxT("/DATA/GRIDS") , wxT("CACHE_CONFIRM") , (long)SG_Grid_Cache_Get_Confirm ());
//-----------------------------------------------------
#ifdef _SAGA_LINUX
// wxFileName fProject(wxString(getenv( "HOME"), wxConvFile ), wxT("saga_gui"), wxT("cfg"));
CSG_String sHome(getenv("HOME"));
wxFileName fProject(sHome.c_str(), wxT("saga_gui"), wxT("cfg"));
#else
wxFileName fProject(g_pSAGA->Get_App_Path(), wxT("saga_gui"), wxT("cfg"));
#endif
CONFIG_Write(wxT("/DATA") , wxT("PROJECT_START") , (long)m_Parameters("PROJECT_START") ->asInt());
CONFIG_Write(wxT("/DATA") , wxT("START_LOGO") , (long)m_Parameters("START_LOGO") ->asInt());
if( Get_Count() == 0 )
{
wxRemoveFile(fProject.GetFullPath());
CONFIG_Write(wxT("/DATA"), wxT("PROJECT_FILE"), LNG(""));
}
else switch( m_Parameters("PROJECT_START")->asInt() )
{
case 0: // empty
wxRemoveFile(fProject.GetFullPath());
CONFIG_Write(wxT("/DATA"), wxT("PROJECT_FILE"), LNG(""));
break;
case 1: // last opened
wxRemoveFile(fProject.GetFullPath());
CONFIG_Write(wxT("/DATA"), wxT("PROJECT_FILE"), m_pProject->Get_File_Name());
break;
case 2: // automatically save and load
m_pProject->Save(fProject.GetFullPath(), false);
CONFIG_Write(wxT("/DATA"), wxT("PROJECT_FILE"), fProject.GetFullPath());
break;
}
m_pProject->Clr_File_Name();
return( true );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
wxString CWKSP_Data_Manager::Get_Name(void)
{
return( LNG("[CAP] Data") );
}
//---------------------------------------------------------
wxString CWKSP_Data_Manager::Get_Description(void)
{
wxString s;
s.Printf(wxT("<b>%s</b><br>"), LNG("[CAP] Data"));
if( Get_Count() <= 0 )
{
s.Append(LNG("[TXT] No data loaded."));
}
else
{
if( m_pProject->Has_File_Name() )
{
s.Append(wxString::Format(wxT("%s: %s<br>"), LNG("[CAP] Project File"), m_pProject->Get_File_Name()));
}
if( Get_Tables() )
{
s.Append(wxString::Format(wxT("%s: %d<br>"), LNG("[CAP] Tables"), Get_Tables()->Get_Count()));
}
if( Get_Shapes() )
{
s.Append(wxString::Format(wxT("%s: %d<br>"), LNG("[CAP] Shapes"), Get_Shapes()->Get_Items_Count()));
}
if( Get_TINs() )
{
s.Append(wxString::Format(wxT("%s: %d<br>"), LNG("[CAP] TIN"), Get_TINs()->Get_Count()));
}
if( Get_Grids() )
{
s.Append(wxString::Format(wxT("%s: %d<br>"), LNG("[CAP] Grid Systems"), Get_Grids()->Get_Count()));
s.Append(wxString::Format(wxT("%s: %d<br>"), LNG("[CAP] Grids"), Get_Grids()->Get_Items_Count()));
}
}
return( s );
}
//---------------------------------------------------------
wxMenu * CWKSP_Data_Manager::Get_Menu(void)
{
wxMenu *pMenu;
pMenu = new wxMenu(LNG("[CAP] Data"));
CMD_Menu_Add_Item(pMenu, false, ID_CMD_WKSP_ITEM_CLOSE);
pMenu->AppendSeparator();
CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_OPEN);
// CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_OPEN_ADD);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_SAVE);
CMD_Menu_Add_Item(pMenu, false, ID_CMD_DATA_PROJECT_SAVE_AS);
return( pMenu );
}
///////////////////////////////////////////////////////////
// //
// //
// //
///////////////////////////////////////////////////////////
//---------------------------------------------------------
bool CWKSP_Data_Manager::On_Command(int Cmd_ID)
{
//-----------------------------------------------------
if( Open_CMD(Cmd_ID) )
{
return( true );
}
if( m_pTables && Cmd_ID >= ID_CMD_TABLES_FIRST && Cmd_ID <= ID_CMD_TABLES_LAST && m_pTables->On_Command(Cmd_ID) )
{
return( true );
}
if( m_pShapes && Cmd_ID >= ID_CMD_SHAPES_FIRST && Cmd_ID <= ID_CMD_SHAPES_LAST && m_pShapes->On_Command(Cmd_ID) )
{
return( true );
}
if( m_pTINs && Cmd_ID >= ID_CMD_TIN_FIRST && Cmd_ID <= ID_CMD_TIN_LAST && m_pTINs ->On_Command(Cmd_ID) )
{
return( true );
}
if( m_pGrids && Cmd_ID >= ID_CMD_GRIDS_FIRST && Cmd_ID <= ID_CMD_GRIDS_LAST && m_pGrids ->On_Command(Cmd_ID) )
{
return( true );
}
//-----------------------------------------------------
switch( Cmd_ID )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -