?? windoweventobjectdialog.cpp
字號:
//+-----------------------------------------------------------------------------
//| Included files
//+-----------------------------------------------------------------------------
#include "WindowEventObjectDialog.h"
//+-----------------------------------------------------------------------------
//| Global objects
//+-----------------------------------------------------------------------------
WINDOW_EVENT_OBJECT_DIALOG EventObjectDialog;
//+-----------------------------------------------------------------------------
//| Static member variables
//+-----------------------------------------------------------------------------
MODEL_EVENT_OBJECT_DATA WINDOW_EVENT_OBJECT_DIALOG::StaticData;
MODEL_GLOBAL_SEQUENCE* WINDOW_EVENT_OBJECT_DIALOG::StaticGlobalSequence;
std::string WINDOW_EVENT_OBJECT_DIALOG::StaticNameType;
std::string WINDOW_EVENT_OBJECT_DIALOG::StaticNameIdentifier;
std::string WINDOW_EVENT_OBJECT_DIALOG::StaticNameData;
std::map<std::string, std::string> WINDOW_EVENT_OBJECT_DIALOG::SplatMap;
std::map<std::string, std::string> WINDOW_EVENT_OBJECT_DIALOG::UberSplatMap;
std::map<std::string, std::string> WINDOW_EVENT_OBJECT_DIALOG::SoundMap;
std::map<std::string, std::string> WINDOW_EVENT_OBJECT_DIALOG::SpawnObjectMap;
//+-----------------------------------------------------------------------------
//| Constructor
//+-----------------------------------------------------------------------------
WINDOW_EVENT_OBJECT_DIALOG::WINDOW_EVENT_OBJECT_DIALOG()
{
//Empty
}
//+-----------------------------------------------------------------------------
//| Destructor
//+-----------------------------------------------------------------------------
WINDOW_EVENT_OBJECT_DIALOG::~WINDOW_EVENT_OBJECT_DIALOG()
{
//Empty
}
//+-----------------------------------------------------------------------------
//| Loads all data
//+-----------------------------------------------------------------------------
BOOL WINDOW_EVENT_OBJECT_DIALOG::LoadData()
{
BUFFER Buffer;
TOKEN_IN_STREAM TokenStream;
std::string FileName;
std::string ProgramDirectory;
std::string Name;
std::string Data;
ProgramDirectory = Common.GetProgramDirectory() + "\\";
FileName = ProgramDirectory + PATH_DATA_SPLAT;
TokenStream.SetFileName(FileName);
if(!FileLoader.LoadFromFile(FileName, Buffer))
{
Error.SetMessage("Unable to open \"" + FileName + "\"!");
return FALSE;
}
if(!TokenStream.Load(Buffer)) return FALSE;
while(!TokenStream.Eof())
{
Data = TokenStream.ReadWord();
if(Data == "") break;
Name = TokenStream.ReadLine();
if(Name == "") break;
RegisterSplat(Data, Data + " - " + Name);
}
FileName = ProgramDirectory + PATH_DATA_UBERSPLAT;
TokenStream.SetFileName(FileName);
if(!FileLoader.LoadFromFile(FileName, Buffer))
{
Error.SetMessage("Unable to open \"" + FileName + "\"!");
return FALSE;
}
if(!TokenStream.Load(Buffer)) return FALSE;
while(!TokenStream.Eof())
{
Data = TokenStream.ReadWord();
if(Data == "") break;
Name = TokenStream.ReadLine();
if(Name == "") break;
RegisterUberSplat(Data, Data + " - " + Name);
}
FileName = ProgramDirectory + PATH_DATA_SOUND;
TokenStream.SetFileName(FileName);
if(!FileLoader.LoadFromFile(FileName, Buffer))
{
Error.SetMessage("Unable to open \"" + FileName + "\"!");
return FALSE;
}
if(!TokenStream.Load(Buffer)) return FALSE;
while(!TokenStream.Eof())
{
Data = TokenStream.ReadWord();
if(Data == "") break;
Name = TokenStream.ReadLine();
if(Name == "") break;
RegisterSound(Data, Data + " - " + Name);
}
FileName = ProgramDirectory + PATH_DATA_SPAWNOBJECT;
TokenStream.SetFileName(FileName);
if(!FileLoader.LoadFromFile(FileName, Buffer))
{
Error.SetMessage("Unable to open \"" + FileName + "\"!");
return FALSE;
}
if(!TokenStream.Load(Buffer)) return FALSE;
while(!TokenStream.Eof())
{
Data = TokenStream.ReadWord();
if(Data == "") break;
Name = TokenStream.ReadLine();
if(Name == "") break;
RegisterSpawnObject(Data, Data + " - " + Name);
}
return TRUE;
}
//+-----------------------------------------------------------------------------
//| Displays the dialog
//+-----------------------------------------------------------------------------
BOOL WINDOW_EVENT_OBJECT_DIALOG::Display(HWND ParentWindow, MODEL_EVENT_OBJECT_DATA& Data, MODEL_GLOBAL_SEQUENCE*& GlobalSequence) CONST
{
StaticData = Data;
StaticGlobalSequence = GlobalSequence;
if(DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(DialogEventObject), ParentWindow, DialogMessageHandler, 0))
{
Data = StaticData;
GlobalSequence = StaticGlobalSequence;
StaticData = MODEL_EVENT_OBJECT_DATA();
return TRUE;
}
StaticData = MODEL_EVENT_OBJECT_DATA();
return FALSE;
}
//+-----------------------------------------------------------------------------
//| Handles the dialog messages
//+-----------------------------------------------------------------------------
BOOL CALLBACK WINDOW_EVENT_OBJECT_DIALOG::DialogMessageHandler(HWND Window, UINT Message, WPARAM W, LPARAM L)
{
switch(Message)
{
case WM_INITDIALOG:
{
INT Index;
HWND ListBox;
HWND ComboBox;
std::list<INT>::iterator i;
AddWindow(Window);
CenterWindow(Window);
ListBox = GetDlgItem(Window, DialogEventObjectList);
ComboBox = GetDlgItem(Window, DialogEventObjectCombo1);
i = StaticData.EventTrack.begin();
while(i != StaticData.EventTrack.end())
{
SortedInsert(ListBox, (*i));
i++;
}
::SendMessage(ListBox, LB_SETCURSEL, 0, 0);
Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("FPT (FootPrint)")));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 0);
Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("SPL (BloodSplat)")));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 1);
Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("UBR (UberSplat)")));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 2);
Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("SND (Sound)")));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 3);
Index = static_cast<INT>(::SendMessage(ComboBox, CB_INSERTSTRING, -1, reinterpret_cast<LPARAM>("SPN (SpawnObject)")));
::SendMessage(ComboBox, CB_SETITEMDATA, Index, 4);
if(StaticData.Name.size() != 8) StaticData.Name = STRING_DEFAULT_EVENT;
StaticNameType = StaticData.Name.substr(0, 3);
StaticNameIdentifier = StaticData.Name.substr(3, 1);
StaticNameData = StaticData.Name.substr(4, 4);
if(StaticNameType == "SPL")
{
BuildSplatList(Window);
::SendMessage(ComboBox, CB_SETCURSEL, 1, 0);
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, GetComboIndex(Window, StaticNameData, SplatMap), 0);
}
else if(StaticNameType == "UBR")
{
BuildUberSplatList(Window);
::SendMessage(ComboBox, CB_SETCURSEL, 2, 0);
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, GetComboIndex(Window, StaticNameData, UberSplatMap), 0);
}
else if(StaticNameType == "SND")
{
BuildSoundList(Window);
::SendMessage(ComboBox, CB_SETCURSEL, 3, 0);
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, GetComboIndex(Window, StaticNameData, SoundMap), 0);
}
else if(StaticNameType == "SPN")
{
BuildSpawnObjectList(Window);
::SendMessage(ComboBox, CB_SETCURSEL, 4, 0);
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, GetComboIndex(Window, StaticNameData, SpawnObjectMap), 0);
}
else
{
BuildSplatList(Window);
::SendMessage(ComboBox, CB_SETCURSEL, 0, 0);
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, GetComboIndex(Window, StaticNameData, SplatMap), 0);
}
SetString(GetDlgItem(Window, DialogEventObjectEditIdentifier), StaticNameIdentifier);
SetString(GetDlgItem(Window, DialogEventObjectEditData), StaticNameData);
BuildGlobalSequenceIdList(Window);
return TRUE;
}
case WM_CONTEXTMENU:
{
INT Index;
INT MenuId;
INT NrOfItems;
RECT TempRect;
RECT ListRect;
POINT MousePosition;
POINT LocalMousePosition;
HWND ListBox;
ListBox = GetDlgItem(Window, DialogEventObjectList);
GetWindowRect(ListBox, &ListRect);
GetCursorPos(&MousePosition);
LocalMousePosition = MousePosition;
ScreenToClient(ListBox, &LocalMousePosition);
if(!Common.PointInsideRect(MousePosition, ListRect)) return TRUE;
MenuId = TrackMenu2;
NrOfItems = static_cast<INT>(::SendMessage(ListBox, LB_GETCOUNT, 0, 0));
Index = 0;
while(Index < NrOfItems)
{
::SendMessage(ListBox, LB_GETITEMRECT, Index, reinterpret_cast<LPARAM>(&TempRect));
if(Common.PointInsideRect(LocalMousePosition, TempRect))
{
::SendMessage(ListBox, LB_SETCURSEL, Index, 0);
MenuId = TrackMenu;
break;
}
Index++;
}
TrackPopupMenuEx(GetSubMenu(LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(MenuId)), 0), TPM_LEFTALIGN | TPM_RIGHTBUTTON, MousePosition.x, MousePosition.y, Window, NULL);
return TRUE;
}
case WM_COMMAND:
{
HWND Control;
Control = reinterpret_cast<HWND>(L);
if(Control == GetDlgItem(Window, DialogEventObjectCombo1))
{
switch(HIWORD(W))
{
case CBN_SELCHANGE:
{
INT Index;
INT Type;
Index = static_cast<INT>(::SendMessage(Control, CB_GETCURSEL, 0, 0));
Type = static_cast<INT>(::SendMessage(Control, CB_GETITEMDATA, Index, 0));
switch(Type)
{
case 0:
{
BuildSplatList(Window);
break;
}
case 1:
{
BuildSplatList(Window);
break;
}
case 2:
{
BuildUberSplatList(Window);
break;
}
case 3:
{
BuildSoundList(Window);
break;
}
case 4:
{
BuildSpawnObjectList(Window);
break;
}
}
::SendMessage(GetDlgItem(Window, DialogEventObjectCombo2), CB_SETCURSEL, 0, 0);
break;
}
}
return TRUE;
}
else if(Control == GetDlgItem(Window, DialogEventObjectCombo2))
{
switch(HIWORD(W))
{
case CBN_SELCHANGE:
{
INT Index;
INT Type;
INT Size;
std::vector<CHAR> Buffer;
std::string String;
std::map<std::string, std::string>::iterator i;
Index = static_cast<INT>(::SendMessage(GetDlgItem(Window, DialogEventObjectCombo1), CB_GETCURSEL, 0, 0));
Type = static_cast<INT>(::SendMessage(GetDlgItem(Window, DialogEventObjectCombo1), CB_GETITEMDATA, Index, 0));
Index = static_cast<INT>(::SendMessage(Control, CB_GETCURSEL, 0, 0));
Size = static_cast<INT>(::SendMessage(Control, CB_GETLBTEXTLEN, Index, 0));
if(Size == LB_ERR) return TRUE;
Buffer.resize(Size + 1);
::SendMessage(Control, CB_GETLBTEXT, Index, reinterpret_cast<LPARAM>(&Buffer[0]));
Buffer[Size] = '\0';
String = &Buffer[0];
switch(Type)
{
case 0:
{
i = SplatMap.find(String);
if(i == SplatMap.end()) break;
SetString(GetDlgItem(Window, DialogEventObjectEditData), i->second);
break;
}
case 1:
{
i = SplatMap.find(String);
if(i == SplatMap.end()) break;
SetString(GetDlgItem(Window, DialogEventObjectEditData), i->second);
break;
}
case 2:
{
i = UberSplatMap.find(String);
if(i == UberSplatMap.end()) break;
SetString(GetDlgItem(Window, DialogEventObjectEditData), i->second);
break;
}
case 3:
{
i = SoundMap.find(String);
if(i == SoundMap.end()) break;
SetString(GetDlgItem(Window, DialogEventObjectEditData), i->second);
break;
}
case 4:
{
i = SpawnObjectMap.find(String);
if(i == SpawnObjectMap.end()) break;
SetString(GetDlgItem(Window, DialogEventObjectEditData), i->second);
break;
}
default:
{
SetString(GetDlgItem(Window, DialogEventObjectEditData), "Data not found!");
break;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -