📄 geosetmanagerwindow.cpp
字号:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "GeosetManagerWindow.h"
//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW GeosetManagerWindow;
//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW::GEOSET_MANAGER_WINDOW()
{
ManagerMenuId1 = GeosetMenu;
ManagerMenuId2 = GeosetMenu2;
Title = "Geoset Manager";
}
//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
GEOSET_MANAGER_WINDOW::~GEOSET_MANAGER_WINDOW()
{
//Empty
}
//+-----------------------------------------------------------------------------
//| Creates a new window
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Create()
{
if(!MANAGER_WINDOW::Create()) return FALSE;
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Destroys the window
//+-----------------------------------------------------------------------------
VOID GEOSET_MANAGER_WINDOW::Destroy()
{
MANAGER_WINDOW::Destroy();
}
//+-----------------------------------------------------------------------------
//| Handles the window messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::MessageHandler(UINT Message, WPARAM W, LPARAM L)
{
return MANAGER_WINDOW::MessageHandler(Message, W, L);
}
//+-----------------------------------------------------------------------------
//| Handles the window menu messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::MenuHandler(WORD MenuItem)
{
switch(MenuItem)
{
case GeosetFileCreate:
case GeosetFileCreate2:
{
if(!CreateNew())
{
Error.DisplayMessage(Window);
Error.ClearMessage();
return 0;
}
return 0;
}
case GeosetFileRemove:
case GeosetFileRemove2:
{
if(!Remove(Window))
{
Error.DisplayMessage(Window);
Error.ClearMessage();
return 0;
}
return 0;
}
case GeosetFileImport:
case GeosetFileImport2:
{
if(!Import())
{
Error.DisplayMessage(Window);
Error.ClearMessage();
return 0;
}
return 0;
}
case GeosetFileExport:
case GeosetFileExport2:
{
if(!Export())
{
Error.DisplayMessage(Window);
Error.ClearMessage();
return 0;
}
return 0;
}
case GeosetFileEdit:
case GeosetFileEdit2:
{
if(!Edit())
{
Error.DisplayMessage(Window);
Error.ClearMessage();
return 0;
}
return 0;
}
}
return MANAGER_WINDOW::MenuHandler(MenuItem);
}
//+-----------------------------------------------------------------------------
//| Handles the window control messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::ControlHandler(HWND Control, WORD Code)
{
if(Control == ListBox.GetWindow())
{
if(Code == LBN_DBLCLK)
{
SendMessage(WM_COMMAND, GeosetFileEdit, 0);
return 0;
}
}
return MANAGER_WINDOW::ControlHandler(Control, Code);
}
//+-----------------------------------------------------------------------------
//| Handles the window notify messages
//+-----------------------------------------------------------------------------
LRESULT GEOSET_MANAGER_WINDOW::NotifyHandler(HWND Control, UINT Code, NMHDR* Header)
{
return MANAGER_WINDOW::NotifyHandler(Control, Code, Header);
}
//+-----------------------------------------------------------------------------
//| Selects a geoset
//+-----------------------------------------------------------------------------
VOID GEOSET_MANAGER_WINDOW::SelectGeoset(MODEL_GEOSET* Geoset)
{
INT Size;
INT Index;
Size = ListBox.GetNrOfItems();
Index = 0;
while(Index < Size)
{
if(reinterpret_cast<MODEL_GEOSET*>(ListBox.GetData(Index)) == Geoset)
{
ListBox.SetCurrentSelection(Index);
return;
}
Index++;
}
ListBox.SetCurrentSelection(-1);
}
//+-----------------------------------------------------------------------------
//| Creates a new geoset
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::CreateNew()
{
MODEL_GEOSET_DATA Data;
MODEL_GEOSET* Geoset;
MODEL_MATERIAL* Material;
Material = NULL;
Geoset = new MODEL_GEOSET();
if(Geoset == NULL)
{
Error.SetMessage("Unable to create a new geoset, memory allocation failed!");
return FALSE;
}
if(!GeosetDialog.Display(Window, Geoset, Data, Material))
{
delete Geoset;
return TRUE;
}
Geoset->Data() = Data;
if(Material != NULL)
{
Geoset->MaterialNode.Attach(Material->GeosetNodes);
}
else
{
Geoset->MaterialNode.Detach();
}
if(!Model.AddGeoset(Geoset))
{
delete Geoset;
return FALSE;
}
MainWindow.MakeModelUnsaved();
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Removes an existing geoset
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Remove(HWND Window)
{
INT Index;
MODEL_GEOSET* Geoset;
Index = ListBox.GetCurrentSelection();
if(Index == INVALID_INDEX) return TRUE;
Geoset = reinterpret_cast<MODEL_GEOSET*>(ListBox.GetData(Index));
if(Geoset == NULL) return TRUE;
if(!Model.RemoveGeoset(Geoset, Window)) return FALSE;
MainWindow.MakeModelUnsaved();
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Imports an existing geoset from a geo file
//+-----------------------------------------------------------------------------
BOOL GEOSET_MANAGER_WINDOW::Import()
{
MODEL_BASE* Node;
MODEL_GEOSET* Geoset;
std::string FileName;
WINDOW_FILE_DIALOG FileDialog;
FileDialog.SetTitle("Import Geoset");
FileDialog.SetFilter(FILTER_GEOSET);
if(!FileDialog.OpenFile(Window, FileName)) return TRUE;
Node = NULL;
if(!ImportGeosetDialog.Display(Window, Node)) return TRUE;
Geoset = new MODEL_GEOSET();
if(Geoset == NULL)
{
Error.SetMessage("Unable to create a new geoset, memory allocation failed!");
return FALSE;
}
if(!ImportGeoset(*Geoset, FileName, Node))
{
delete Geoset;
return FALSE;
}
if(!Model.AddGeoset(Geoset))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -