mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-14 10:37:41 -04:00
Added Donate button to the login screen
Added fixes from Christian Walther for the Python SDL tuples Added plLocalizationEditor source and project
This commit is contained in:
@ -0,0 +1,171 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="plLocalizationEditor"
|
||||
ProjectGUID="{0342CAB9-E62D-4636-A519-763FF84609FE}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../../Sources/Plasma/NucleusLib/inc;..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\Sources\Plasma\CoreLib;../../../Sources/Plasma/FeatureLib/inc"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;UNICODE"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
BufferSecurityCheck="TRUE"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="comctl32.lib libexpatwMT.lib ws2_32.lib Rpcrt4.lib"
|
||||
OutputFile="$(OutDir)/plLocalizationEditor.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\win32"
|
||||
IgnoreDefaultLibraryNames="libcmt.lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/plLocalizationEditor.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="../../../Sources/Plasma/NucleusLib/inc;..\..\..\Sources\Plasma\PubUtilLib\inc;..\..\..\Sources\Plasma\CoreLib;../../../Sources/Plasma/FeatureLib/inc"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;UNICODE"
|
||||
MinimalRebuild="TRUE"
|
||||
RuntimeLibrary="2"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="comctl32.lib libexpatwMT.lib ws2_32.lib Rpcrt4.lib"
|
||||
OutputFile="$(OutDir)/plLocalizationEditor.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="TRUE"
|
||||
AdditionalLibraryDirectories="..\..\..\..\StaticSDKs\XPlatform\expat-1.95.7\StaticLibs\win32"
|
||||
IgnoreDefaultLibraryNames="libcmt.lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plAddDlgs.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plEditDlg.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plLocalizationEditor.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plLocTreeView.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plAddDlgs.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plEditDlg.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\plLocTreeView.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\res\Resource.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\res\icon1.ico">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\..\Sources\Tools\plLocalizationEditor\res\plLocalizationEditor.rc">
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
@ -199,8 +199,9 @@ BEGIN
|
||||
RTEXT "Product String",IDC_PRODUCTSTRING,88,86,194,8
|
||||
CONTROL "",IDC_STATIC,"Static",SS_BLACKFRAME | SS_SUNKEN,7,49,
|
||||
288,152
|
||||
PUSHBUTTON "Need an account?",IDC_URULOGIN_GAMETAPLINK,95,175,110,
|
||||
14,BS_FLAT
|
||||
PUSHBUTTON "Need an account?",IDC_URULOGIN_GAMETAPLINK,32,174,95,14,
|
||||
BS_FLAT
|
||||
PUSHBUTTON "Donate",IDC_URULOGIN_GAMETAPLINK2,175,174,95,14,BS_FLAT
|
||||
END
|
||||
|
||||
IDD_URULOGIN_EULA DIALOGEX 0, 0, 300, 318
|
||||
|
@ -87,6 +87,7 @@
|
||||
#define IDC_BUTTON1 1030
|
||||
#define IDC_URULOGIN_GAMETAPLINK 1030
|
||||
#define IDC_AUTH_MESSAGE 1031
|
||||
#define IDC_URULOGIN_GAMETAPLINK2 1031
|
||||
#define IDC_PRODUCTSTRING 1033
|
||||
#define IDC_STATUS_TEXT 1034
|
||||
#define IDC_HOTKEY1 1035
|
||||
|
@ -1419,6 +1419,12 @@ BOOL CALLBACK UruLoginDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_URULOGIN_GAMETAPLINK2)
|
||||
{
|
||||
ShellExecute(NULL, "open", "http://www.mystonline.com/donate", NULL, NULL, SW_SHOWNORMAL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,413 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
// basic classes for encapsulating the add dialogs
|
||||
|
||||
#include "res/resource.h"
|
||||
#include "plAddDlgs.h"
|
||||
#include "plEditDlg.h"
|
||||
|
||||
#include "hsUtils.h"
|
||||
#include "../plResMgr/plLocalization.h"
|
||||
#include "../pfLocalizationMgr/pfLocalizationDataMgr.h"
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
extern HINSTANCE gInstance;
|
||||
|
||||
// very simple subclass for edit controls (and combo boxes) so that they only accept alphanumeric values
|
||||
class AlphaNumericEditCtrl
|
||||
{
|
||||
int fCtrlID;
|
||||
HWND fOwner, fEditBox;
|
||||
LONG_PTR fPrevProc;
|
||||
|
||||
public:
|
||||
AlphaNumericEditCtrl() : fCtrlID(0), fOwner(NULL), fEditBox(NULL), fPrevProc(NULL) {}
|
||||
~AlphaNumericEditCtrl() {}
|
||||
|
||||
void Setup(int ctrlID, HWND owner, bool comboBox);
|
||||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
};
|
||||
|
||||
std::map<int, AlphaNumericEditCtrl> editBoxMap;
|
||||
|
||||
// basic setup of the edit control
|
||||
void AlphaNumericEditCtrl::Setup(int ctrlID, HWND owner, bool comboBox)
|
||||
{
|
||||
fCtrlID = ctrlID;
|
||||
fOwner = owner;
|
||||
|
||||
// if we're a combo box, we need to subclass the edit control, not the combo box
|
||||
if (comboBox)
|
||||
{
|
||||
COMBOBOXINFO cbinfo;
|
||||
cbinfo.cbSize = sizeof(COMBOBOXINFO);
|
||||
GetComboBoxInfo(GetDlgItem(fOwner, fCtrlID), &cbinfo);
|
||||
fEditBox = cbinfo.hwndItem;
|
||||
}
|
||||
else
|
||||
fEditBox = GetDlgItem(fOwner, fCtrlID);
|
||||
|
||||
// subclass the edit box so we can filter input (don't ask me why we have to double cast the
|
||||
// function pointer to get rid of the compiler warning)
|
||||
fPrevProc = SetWindowLongPtr(fEditBox, GWLP_WNDPROC, (LONG)(LONG_PTR)AlphaNumericEditCtrl::WndProc);
|
||||
|
||||
editBoxMap[fCtrlID] = *this;
|
||||
}
|
||||
|
||||
// Message handler for our edit box
|
||||
LRESULT CALLBACK AlphaNumericEditCtrl::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int ctrlID = GetDlgCtrlID(hWnd);
|
||||
if (editBoxMap.find(ctrlID) == editBoxMap.end()) // control ID doesn't exist, so it's probably a combo boxes' edit ctrl
|
||||
ctrlID = GetDlgCtrlID(GetParent(hWnd)); // so grab the parent's ID number instead
|
||||
switch (message)
|
||||
{
|
||||
case WM_CHAR:
|
||||
{
|
||||
AlphaNumericEditCtrl editBox = editBoxMap[ctrlID];
|
||||
char theChar = (char)wParam;
|
||||
|
||||
// we only accept 0-9, a-z, A-Z, or backspace
|
||||
if ((theChar < '0' || theChar > '9') && (theChar < 'a' || theChar > 'z') && (theChar < 'A' || theChar >'Z') && !(theChar == VK_BACK))
|
||||
{
|
||||
MessageBeep(-1); // alert the user
|
||||
return FALSE; // and make sure the default handler doesn't get it
|
||||
}
|
||||
}
|
||||
}
|
||||
// Any messages we don't process must be passed onto the original window function
|
||||
return CallWindowProc((WNDPROC)editBoxMap[ctrlID].fPrevProc, hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
||||
// plAddElementDlg - dialog for adding a single element
|
||||
BOOL CALLBACK plAddElementDlg::IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static plAddElementDlg* pthis = NULL;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
pthis = (plAddElementDlg*)lParam;
|
||||
if (!pthis->IInitDlg(hDlg))
|
||||
EndDialog(hDlg, 0);
|
||||
return FALSE;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK)
|
||||
{
|
||||
EndDialog(hDlg, 1);
|
||||
return TRUE;
|
||||
}
|
||||
else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_PARENTAGE)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
// we do this whole get sel, get item because get text won't return the updated text
|
||||
int index = (int)SendMessage(GetDlgItem(hDlg, IDC_PARENTAGE), CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
|
||||
SendMessage(GetDlgItem(hDlg, IDC_PARENTAGE), CB_GETLBTEXT, (WPARAM)index, (LPARAM)buff);
|
||||
|
||||
pthis->fAgeName = buff;
|
||||
pthis->fAgeChanged = true;
|
||||
pthis->IUpdateDlg(hDlg);
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_EDITCHANGE && LOWORD(wParam) == IDC_PARENTAGE)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
GetDlgItemTextW(hDlg, IDC_PARENTAGE, buff, 256);
|
||||
|
||||
pthis->fAgeName = buff;
|
||||
pthis->fAgeChanged = true;
|
||||
pthis->IUpdateDlg(hDlg, false);
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_PARENTSET)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
// we do this whole get sel, get item because get text won't return the updated text
|
||||
int index = (int)SendMessage(GetDlgItem(hDlg, IDC_PARENTSET), CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
|
||||
SendMessage(GetDlgItem(hDlg, IDC_PARENTSET), CB_GETLBTEXT, (WPARAM)index, (LPARAM)buff);
|
||||
|
||||
pthis->fSetName = buff;
|
||||
pthis->IUpdateDlg(hDlg);
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_EDITCHANGE && LOWORD(wParam) == IDC_PARENTSET)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
GetDlgItemTextW(hDlg, IDC_PARENTSET, buff, 256);
|
||||
|
||||
pthis->fSetName = buff;
|
||||
pthis->IUpdateDlg(hDlg, false);
|
||||
}
|
||||
else if (HIWORD(wParam) == EN_UPDATE && LOWORD(wParam) == IDC_ELEMENTNAME)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
GetDlgItemTextW(hDlg, IDC_ELEMENTNAME, buff, 256);
|
||||
pthis->fElementName = buff;
|
||||
|
||||
pthis->IUpdateDlg(hDlg);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SYSCOMMAND:
|
||||
switch (wParam)
|
||||
{
|
||||
case SC_CLOSE:
|
||||
EndDialog(hDlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool plAddElementDlg::IInitDlg(HWND hDlg)
|
||||
{
|
||||
HWND listCtrl = GetDlgItem(hDlg, IDC_PARENTAGE);
|
||||
std::vector<std::wstring> ageNames = pfLocalizationDataMgr::Instance().GetAgeList();
|
||||
|
||||
// add the age names to the list
|
||||
for (int i = 0; i < ageNames.size(); i++)
|
||||
SendMessage(listCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)ageNames[i].c_str());
|
||||
|
||||
// select the age we were given
|
||||
SendMessage(listCtrl, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)fAgeName.c_str());
|
||||
|
||||
AlphaNumericEditCtrl ageCtrl, setCtrl, subCtrl;
|
||||
ageCtrl.Setup(IDC_PARENTAGE, hDlg, true);
|
||||
setCtrl.Setup(IDC_PARENTSET, hDlg, true);
|
||||
subCtrl.Setup(IDC_ELEMENTNAME, hDlg, false);
|
||||
|
||||
fAgeChanged = true;
|
||||
|
||||
IUpdateDlg(hDlg);
|
||||
return true;
|
||||
}
|
||||
|
||||
void plAddElementDlg::IUpdateDlg(HWND hDlg, bool setFocus)
|
||||
{
|
||||
std::wstring pathStr = L"Path: " + fAgeName + L"." + fSetName + L"." + fElementName;
|
||||
SetDlgItemTextW(hDlg, IDC_PATH, pathStr.c_str());
|
||||
|
||||
if (fAgeChanged) // we only update this if the age changed (saves time and prevents weird bugs, like typing backwards)
|
||||
{
|
||||
// now add the sets
|
||||
HWND listCtrl = GetDlgItem(hDlg, IDC_PARENTSET);
|
||||
SendMessage(listCtrl, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0);
|
||||
std::vector<std::wstring> setNames = pfLocalizationDataMgr::Instance().GetSetList(fAgeName);
|
||||
|
||||
// add the set names to the list
|
||||
for (int i = 0; i < setNames.size(); i++)
|
||||
SendMessage(listCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)setNames[i].c_str());
|
||||
|
||||
// select the set we currently have
|
||||
int ret = (int)SendMessage(listCtrl, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)fSetName.c_str());
|
||||
if (ret == CB_ERR) // couldn't find the string, so just set it as the current string in the edit box
|
||||
SetDlgItemTextW(hDlg, IDC_PARENTSET, fSetName.c_str());
|
||||
|
||||
fAgeChanged = false;
|
||||
}
|
||||
|
||||
if (fSetName != L"" && setFocus)
|
||||
SetFocus(GetDlgItem(hDlg, IDC_ELEMENTNAME));
|
||||
|
||||
if (fSetName != L"" && fElementName != L"")
|
||||
EnableWindow(GetDlgItem(hDlg, IDOK), TRUE);
|
||||
else
|
||||
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
|
||||
}
|
||||
|
||||
plAddElementDlg::plAddElementDlg(std::wstring parentPath)
|
||||
{
|
||||
// throw away vars
|
||||
std::wstring element, lang;
|
||||
|
||||
SplitLocalizationPath(parentPath, fAgeName, fSetName, element, lang);
|
||||
}
|
||||
|
||||
bool plAddElementDlg::DoPick(HWND parent)
|
||||
{
|
||||
INT_PTR ret = DialogBoxParam(gInstance, MAKEINTRESOURCE(IDD_ADDELEMENT),
|
||||
parent, IDlgProc, (LPARAM)this);
|
||||
|
||||
editBoxMap.clear();
|
||||
|
||||
return (ret != 0);
|
||||
}
|
||||
|
||||
// plAddLocalizationDlg - dialog for adding a single localization
|
||||
BOOL CALLBACK plAddLocalizationDlg::IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
static plAddLocalizationDlg* pthis = NULL;
|
||||
|
||||
switch (msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
pthis = (plAddLocalizationDlg*)lParam;
|
||||
if (!pthis->IInitDlg(hDlg))
|
||||
EndDialog(hDlg, 0);
|
||||
return FALSE;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK)
|
||||
{
|
||||
EndDialog(hDlg, 1);
|
||||
return TRUE;
|
||||
}
|
||||
else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDCANCEL)
|
||||
{
|
||||
EndDialog(hDlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
else if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_LANGUAGE)
|
||||
{
|
||||
wchar_t buff[256];
|
||||
// we do this whole get sel, get item because get text won't return the updated text
|
||||
int index = (int)SendMessage(GetDlgItem(hDlg, IDC_LANGUAGE), CB_GETCURSEL, (WPARAM)0, (LPARAM)0);
|
||||
SendMessage(GetDlgItem(hDlg, IDC_LANGUAGE), CB_GETLBTEXT, (WPARAM)index, (LPARAM)buff);
|
||||
|
||||
pthis->fLanguageName = buff;
|
||||
pthis->IUpdateDlg(hDlg);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SYSCOMMAND:
|
||||
switch (wParam)
|
||||
{
|
||||
case SC_CLOSE:
|
||||
EndDialog(hDlg, 0);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
std::vector<std::wstring> IGetAllLanguageNames()
|
||||
{
|
||||
int numLocales = plLocalization::GetNumLocales();
|
||||
std::vector<std::wstring> retVal;
|
||||
|
||||
for (int curLocale = 0; curLocale <= numLocales; curLocale++)
|
||||
{
|
||||
char *name = plLocalization::GetLanguageName((plLocalization::Language)curLocale);
|
||||
wchar_t *wName = hsStringToWString(name);
|
||||
retVal.push_back(wName);
|
||||
delete [] wName;
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
bool plAddLocalizationDlg::IInitDlg(HWND hDlg)
|
||||
{
|
||||
std::wstring pathStr = L"Path: " + fAgeName + L"." + fSetName + L"." + fElementName;
|
||||
SetDlgItemTextW(hDlg, IDC_PATH, pathStr.c_str());
|
||||
|
||||
std::vector<std::wstring> existingLanguages;
|
||||
existingLanguages = pfLocalizationDataMgr::Instance().GetLanguages(fAgeName, fSetName, fElementName);
|
||||
|
||||
std::vector<std::wstring> missingLanguages = IGetAllLanguageNames();
|
||||
for (int i = 0; i < existingLanguages.size(); i++) // remove all languages we already have
|
||||
{
|
||||
for (int j = 0; j < missingLanguages.size(); j++)
|
||||
{
|
||||
if (missingLanguages[j] == existingLanguages[i])
|
||||
{
|
||||
missingLanguages.erase(missingLanguages.begin() + j);
|
||||
j--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HWND listCtrl = GetDlgItem(hDlg, IDC_LANGUAGE);
|
||||
// see if any languages are missing
|
||||
if (missingLanguages.size() == 0)
|
||||
{
|
||||
// none are missing, so disable the control
|
||||
EnableWindow(listCtrl, FALSE);
|
||||
IUpdateDlg(hDlg);
|
||||
return true;
|
||||
}
|
||||
|
||||
// add the missing languages to the list
|
||||
for (i = 0; i < missingLanguages.size(); i++)
|
||||
SendMessage(listCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)missingLanguages[i].c_str());
|
||||
|
||||
// select the first language in the list
|
||||
SendMessage(listCtrl, CB_SETCURSEL, (WPARAM)0, (LPARAM)0);
|
||||
// and put it's value into the internal variable
|
||||
wchar_t buff[256];
|
||||
GetDlgItemText(hDlg, IDC_LANGUAGE, buff, 256);
|
||||
fLanguageName = buff;
|
||||
|
||||
IUpdateDlg(hDlg);
|
||||
return true;
|
||||
}
|
||||
|
||||
void plAddLocalizationDlg::IUpdateDlg(HWND hDlg)
|
||||
{
|
||||
if (fLanguageName != L"")
|
||||
EnableWindow(GetDlgItem(hDlg, IDOK), TRUE);
|
||||
else
|
||||
EnableWindow(GetDlgItem(hDlg, IDOK), FALSE);
|
||||
}
|
||||
|
||||
plAddLocalizationDlg::plAddLocalizationDlg(std::wstring parentPath)
|
||||
{
|
||||
// throw away vars
|
||||
std::wstring lang;
|
||||
|
||||
SplitLocalizationPath(parentPath, fAgeName, fSetName, fElementName, lang);
|
||||
}
|
||||
|
||||
bool plAddLocalizationDlg::DoPick(HWND parent)
|
||||
{
|
||||
INT_PTR ret = DialogBoxParam(gInstance, MAKEINTRESOURCE(IDD_ADDLOCALIZATION),
|
||||
parent, IDlgProc, (LPARAM)this);
|
||||
|
||||
return (ret != 0);
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
// basic classes for encapsulating the add dialogs
|
||||
#ifndef __plAddDlgs_h__
|
||||
#define __plAddDlgs_h__
|
||||
|
||||
#include <string>
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <WinSock2.h>
|
||||
#include <Windows.h>
|
||||
|
||||
class plAddElementDlg
|
||||
{
|
||||
protected:
|
||||
static BOOL CALLBACK IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
bool IInitDlg(HWND hDlg);
|
||||
void IUpdateDlg(HWND hDlg, bool setFocus = true);
|
||||
|
||||
std::wstring fAgeName, fSetName, fElementName;
|
||||
bool fAgeChanged;
|
||||
public:
|
||||
plAddElementDlg(std::wstring parentPath);
|
||||
|
||||
bool DoPick(HWND parent); // returns true if [Ok] clicked, false otherwise.
|
||||
std::wstring GetValue() {return fAgeName + L"." + fSetName + L"." + fElementName;}
|
||||
};
|
||||
|
||||
class plAddLocalizationDlg
|
||||
{
|
||||
protected:
|
||||
static BOOL CALLBACK IDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
bool IInitDlg(HWND hDlg);
|
||||
void IUpdateDlg(HWND hDlg);
|
||||
|
||||
std::wstring fAgeName, fSetName, fElementName, fLanguageName;
|
||||
public:
|
||||
plAddLocalizationDlg(std::wstring parentPath);
|
||||
|
||||
bool DoPick(HWND parent); // returns true if [Ok] clicked, false otherwise.
|
||||
std::wstring GetValue() {return fLanguageName;}
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,316 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
// Basic edit dialog stuff
|
||||
#include "plEditDlg.h"
|
||||
#include "res/resource.h"
|
||||
#include "plLocTreeView.h"
|
||||
#include "plAddDlgs.h"
|
||||
|
||||
#include "hsUtils.h"
|
||||
#include "../pfLocalizationMgr/pfLocalizationDataMgr.h"
|
||||
|
||||
#include <map>
|
||||
|
||||
HWND gEditDlg = NULL;
|
||||
extern HINSTANCE gInstance;
|
||||
extern HWND gTreeView;
|
||||
|
||||
// global data for this dialog
|
||||
std::wstring gCurrentPath = L"";
|
||||
|
||||
// split a subtitle path up into its component parts
|
||||
void SplitLocalizationPath(std::wstring path, std::wstring &ageName, std::wstring &setName, std::wstring &locName, std::wstring &locLanguage)
|
||||
{
|
||||
ageName = setName = locName = locLanguage = L"";
|
||||
|
||||
std::wstring::size_type lastPos = 0, curPos = 0;
|
||||
// separate the age name out
|
||||
curPos = path.find(L".");
|
||||
if (curPos == std::wstring::npos)
|
||||
{
|
||||
ageName = path;
|
||||
return;
|
||||
}
|
||||
ageName = path.substr(0, curPos);
|
||||
path = path.substr(curPos + 1, path.length());
|
||||
|
||||
// separate the set name out
|
||||
curPos = path.find(L".");
|
||||
if (curPos == std::wstring::npos)
|
||||
{
|
||||
setName = path;
|
||||
return;
|
||||
}
|
||||
setName = path.substr(0, curPos);
|
||||
path = path.substr(curPos + 1, path.length());
|
||||
|
||||
// separate the element out
|
||||
curPos = path.find(L".");
|
||||
if (curPos == std::wstring::npos)
|
||||
{
|
||||
locName = path;
|
||||
return;
|
||||
}
|
||||
locName = path.substr(0, curPos);
|
||||
path = path.substr(curPos + 1, path.length());
|
||||
|
||||
// what's left is the language
|
||||
locLanguage = path;
|
||||
}
|
||||
|
||||
// saves the current localization text to the data manager
|
||||
void SaveLocalizationText()
|
||||
{
|
||||
if (gCurrentPath == L"")
|
||||
return; // no path to save
|
||||
|
||||
UInt32 textLen = (UInt32)SendMessage(GetDlgItem(gEditDlg, IDC_LOCALIZATIONTEXT), WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0);
|
||||
wchar_t *buffer = new wchar_t[textLen + 2];
|
||||
GetDlgItemTextW(gEditDlg, IDC_LOCALIZATIONTEXT, buffer, textLen + 1);
|
||||
buffer[textLen + 1] = 0;
|
||||
std::wstring plainTextData = buffer;
|
||||
delete [] buffer;
|
||||
std::wstring ageName, setName, elementName, elementLanguage;
|
||||
SplitLocalizationPath(gCurrentPath, ageName, setName, elementName, elementLanguage);
|
||||
|
||||
std::wstring name = ageName + L"." + setName + L"." + elementName;
|
||||
pfLocalizationDataMgr::Instance().SetElementPlainTextData(name, elementLanguage, plainTextData);
|
||||
}
|
||||
|
||||
// Reset all controls to their default values (except for static controls)
|
||||
void ResetDlgDefaults()
|
||||
{
|
||||
SetDlgItemTextW(gEditDlg, IDC_LOCALIZATIONTEXT, L"");
|
||||
}
|
||||
|
||||
// Enable/disable all edit controls (some won't enable/disable unless an audio file is loaded and the subtitle is timed)
|
||||
void EnableDlg(BOOL enable)
|
||||
{
|
||||
if (!enable)
|
||||
ResetDlgDefaults(); // reset controls to defaults
|
||||
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_LOCALIZATIONTEXT), enable);
|
||||
}
|
||||
|
||||
// updates the edit dialog based on the path specified
|
||||
void UpdateEditDlg(std::wstring locPath)
|
||||
{
|
||||
if (locPath == gCurrentPath)
|
||||
return;
|
||||
|
||||
gCurrentPath = locPath;
|
||||
|
||||
std::wstring itemText = L"Text (";
|
||||
itemText += locPath + L"):";
|
||||
SetDlgItemTextW(gEditDlg, IDC_LOCPATH, itemText.c_str());
|
||||
|
||||
std::wstring ageName = L"", setName = L"", elementName = L"", elementLanguage = L"";
|
||||
SplitLocalizationPath(locPath, ageName, setName, elementName, elementLanguage);
|
||||
|
||||
// now make sure they've drilled down deep enough to enable the dialog
|
||||
if (elementLanguage == L"") // not deep enough
|
||||
EnableDlg(FALSE);
|
||||
else
|
||||
{
|
||||
EnableDlg(TRUE);
|
||||
std::wstring key = ageName + L"." + setName + L"." + elementName;
|
||||
std::wstring elementText = pfLocalizationDataMgr::Instance().GetElementPlainTextData(key, elementLanguage);
|
||||
SetDlgItemTextW(gEditDlg, IDC_LOCALIZATIONTEXT, elementText.c_str());
|
||||
}
|
||||
|
||||
// now to setup the add/delete buttons
|
||||
if (elementLanguage != L"") // they have selected a language
|
||||
{
|
||||
SetDlgItemText(gEditDlg, IDC_ADD, L"Add Localization");
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_ADD), TRUE);
|
||||
SetDlgItemText(gEditDlg, IDC_DELETE, L"Delete Localization");
|
||||
if (elementLanguage != L"English") // don't allow them to delete the default language
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_DELETE), TRUE);
|
||||
else
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_DELETE), FALSE);
|
||||
}
|
||||
else // they have selected something else
|
||||
{
|
||||
SetDlgItemText(gEditDlg, IDC_ADD, L"Add Element");
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_ADD), TRUE);
|
||||
SetDlgItemText(gEditDlg, IDC_DELETE, L"Delete Element");
|
||||
if (elementName != L"") // the have selected an individual element
|
||||
{
|
||||
std::vector<std::wstring> elementNames = pfLocalizationDataMgr::Instance().GetElementList(ageName, setName);
|
||||
if (elementNames.size() > 1) // they can't delete the only subtitle in a set
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_DELETE), TRUE);
|
||||
else
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_DELETE), FALSE);
|
||||
}
|
||||
else
|
||||
EnableWindow(GetDlgItem(gEditDlg, IDC_DELETE), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL HandleCommandMessage(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int wmID, wmEvent;
|
||||
wmID = LOWORD(wParam);
|
||||
wmEvent = HIWORD(wParam);
|
||||
|
||||
switch (wmEvent)
|
||||
{
|
||||
case BN_CLICKED:
|
||||
switch (wmID)
|
||||
{
|
||||
case IDC_ADD:
|
||||
{
|
||||
SaveLocalizationText(); // save any current changes to the database
|
||||
|
||||
std::wstring buttonText;
|
||||
wchar_t buff[256];
|
||||
GetDlgItemText(gEditDlg, IDC_ADD, buff, 256);
|
||||
buttonText = buff;
|
||||
|
||||
if (buttonText == L"Add Element")
|
||||
{
|
||||
plAddElementDlg dlg(gCurrentPath);
|
||||
if (dlg.DoPick(gEditDlg))
|
||||
{
|
||||
std::wstring path = dlg.GetValue(); // path is age.set.name
|
||||
if (!pfLocalizationDataMgr::Instance().AddElement(path))
|
||||
MessageBox(gEditDlg, L"Couldn't add new element because one already exists with that name!", L"Error", MB_ICONERROR | MB_OK);
|
||||
else
|
||||
{
|
||||
gCurrentPath = L"";
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
plLocTreeView::FillTreeViewFromData(gTreeView, path);
|
||||
UpdateEditDlg(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (buttonText == L"Add Localization")
|
||||
{
|
||||
plAddLocalizationDlg dlg(gCurrentPath);
|
||||
if (dlg.DoPick(gEditDlg))
|
||||
{
|
||||
std::wstring newLanguage = dlg.GetValue();
|
||||
std::wstring ageName, setName, elementName, elementLanguage;
|
||||
SplitLocalizationPath(gCurrentPath, ageName, setName, elementName, elementLanguage);
|
||||
std::wstring key = ageName + L"." + setName + L"." + elementName;
|
||||
if (!pfLocalizationDataMgr::Instance().AddLocalization(key, newLanguage))
|
||||
MessageBox(gEditDlg, L"Couldn't add additional localization!", L"Error", MB_ICONERROR | MB_OK);
|
||||
else
|
||||
{
|
||||
std::wstring path = key + L"." + newLanguage; // select the new language
|
||||
gCurrentPath = L"";
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
plLocTreeView::FillTreeViewFromData(gTreeView, path);
|
||||
UpdateEditDlg(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
case IDC_DELETE:
|
||||
{
|
||||
SaveLocalizationText(); // save any current changes to the database
|
||||
|
||||
std::wstring messageText = L"Are you sure that you want to delete " + gCurrentPath + L"?";
|
||||
int res = MessageBoxW(gEditDlg, messageText.c_str(), L"Delete", MB_ICONQUESTION | MB_YESNO);
|
||||
if (res == IDYES)
|
||||
{
|
||||
std::wstring buttonText;
|
||||
wchar_t buff[256];
|
||||
GetDlgItemText(gEditDlg, IDC_DELETE, buff, 256);
|
||||
buttonText = buff;
|
||||
|
||||
if (buttonText == L"Delete Element")
|
||||
{
|
||||
if (!pfLocalizationDataMgr::Instance().DeleteElement(gCurrentPath))
|
||||
MessageBox(gEditDlg, L"Couldn't delete element!", L"Error", MB_ICONERROR | MB_OK);
|
||||
else
|
||||
{
|
||||
std::wstring path = gCurrentPath;
|
||||
gCurrentPath = L"";
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
plLocTreeView::FillTreeViewFromData(gTreeView, path);
|
||||
UpdateEditDlg(path);
|
||||
}
|
||||
}
|
||||
else if (buttonText == L"Delete Localization")
|
||||
{
|
||||
std::wstring ageName, setName, elementName, elementLanguage;
|
||||
SplitLocalizationPath(gCurrentPath, ageName, setName, elementName, elementLanguage);
|
||||
std::wstring key = ageName + L"." + setName + L"." + elementName;
|
||||
if (!pfLocalizationDataMgr::Instance().DeleteLocalization(key, elementLanguage))
|
||||
MessageBox(gEditDlg, L"Couldn't delete localization!", L"Error", MB_ICONERROR | MB_OK);
|
||||
else
|
||||
{
|
||||
std::wstring path = gCurrentPath;
|
||||
gCurrentPath = L"";
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
plLocTreeView::FillTreeViewFromData(gTreeView, path);
|
||||
UpdateEditDlg(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return (BOOL)DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
// our dialog's window procedure
|
||||
BOOL CALLBACK EditDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch(msg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
{
|
||||
gEditDlg = hWnd;
|
||||
EnableDlg(FALSE);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_COMMAND:
|
||||
return HandleCommandMessage(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
// Basic edit dialog stuff
|
||||
#ifndef _pfEditDlg_h
|
||||
#define _pfEditDlg_h
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <WinSock2.h>
|
||||
#include <Windows.h>
|
||||
#include <string>
|
||||
|
||||
// Little trick to show a wait cursor while something is working
|
||||
class plWaitCursor
|
||||
{
|
||||
HCURSOR fOrig;
|
||||
public:
|
||||
plWaitCursor()
|
||||
{
|
||||
fOrig = SetCursor(LoadCursor(NULL, IDC_WAIT));
|
||||
}
|
||||
|
||||
~plWaitCursor()
|
||||
{
|
||||
SetCursor(fOrig);
|
||||
}
|
||||
};
|
||||
|
||||
void SplitLocalizationPath(std::wstring path, std::wstring &ageName, std::wstring &setName, std::wstring &locName, std::wstring &locLanguage);
|
||||
void SaveLocalizationText();
|
||||
void UpdateEditDlg(std::wstring subtitlePath);
|
||||
BOOL CALLBACK EditDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
#endif
|
@ -0,0 +1,213 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#include "plLocTreeView.h"
|
||||
#include "plEditDlg.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <WinSock2.h>
|
||||
#include <Windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <shlwapi.h>
|
||||
#include "res\resource.h"
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
#include "hsUtils.h"
|
||||
#include "../pfLocalizationMgr/pfLocalizationDataMgr.h"
|
||||
|
||||
extern HINSTANCE gInstance;
|
||||
|
||||
std::wstring plLocTreeView::fPath = L"";
|
||||
|
||||
HTREEITEM AddLeaf(HWND hTree, HTREEITEM hParent, std::wstring text, bool sort = true)
|
||||
{
|
||||
TVITEM tvi = {0};
|
||||
tvi.mask = TVIF_TEXT | TVIF_PARAM;
|
||||
tvi.pszText = (wchar_t*)text.c_str();
|
||||
tvi.cchTextMax = (int)text.length();
|
||||
tvi.lParam = NULL;
|
||||
|
||||
TVINSERTSTRUCT tvins = {0};
|
||||
tvins.item = tvi;
|
||||
tvins.hParent = hParent;
|
||||
if (sort)
|
||||
tvins.hInsertAfter = TVI_SORT;
|
||||
else
|
||||
tvins.hInsertAfter = TVI_LAST;
|
||||
|
||||
return TreeView_InsertItem(hTree, &tvins);
|
||||
}
|
||||
|
||||
void plLocTreeView::FillTreeViewFromData(HWND treeCtrl, std::wstring selectionPath)
|
||||
{
|
||||
std::wstring targetAge, targetSet, targetElement, targetLang;
|
||||
SplitLocalizationPath(selectionPath, targetAge, targetSet, targetElement, targetLang);
|
||||
bool ageMatched = false;
|
||||
bool setMatched = false;
|
||||
bool elementMatched = false;
|
||||
|
||||
std::vector<std::wstring> ages = pfLocalizationDataMgr::Instance().GetAgeList();
|
||||
for (int curAge = 0; curAge < ages.size(); curAge++)
|
||||
{
|
||||
// add the age to the tree
|
||||
HTREEITEM ageItem = AddLeaf(treeCtrl, NULL, ages[curAge]);
|
||||
|
||||
if (ages[curAge] == targetAge)
|
||||
{
|
||||
TreeView_SelectItem(treeCtrl, ageItem);
|
||||
TreeView_EnsureVisible(treeCtrl, ageItem);
|
||||
ageMatched = true;
|
||||
}
|
||||
else
|
||||
ageMatched = false;
|
||||
|
||||
std::vector<std::wstring> sets = pfLocalizationDataMgr::Instance().GetSetList(ages[curAge]);
|
||||
for (int curSet = 0; curSet < sets.size(); curSet++)
|
||||
{
|
||||
std::vector<std::wstring> elements = pfLocalizationDataMgr::Instance().GetElementList(ages[curAge], sets[curSet]);
|
||||
|
||||
HTREEITEM setItem = AddLeaf(treeCtrl, ageItem, sets[curSet]);
|
||||
|
||||
if ((sets[curSet] == targetSet) && ageMatched)
|
||||
{
|
||||
TreeView_SelectItem(treeCtrl, setItem);
|
||||
TreeView_EnsureVisible(treeCtrl, setItem);
|
||||
setMatched = true;
|
||||
}
|
||||
else
|
||||
setMatched = false;
|
||||
|
||||
for (int curElement = 0; curElement < elements.size(); curElement++)
|
||||
{
|
||||
HTREEITEM subItem = AddLeaf(treeCtrl, setItem, elements[curElement]);
|
||||
|
||||
if (elements[curElement] == targetElement && setMatched)
|
||||
{
|
||||
TreeView_SelectItem(treeCtrl, subItem);
|
||||
TreeView_EnsureVisible(treeCtrl, subItem);
|
||||
elementMatched = true;
|
||||
|
||||
if (targetLang.empty())
|
||||
targetLang = L"English";
|
||||
}
|
||||
else
|
||||
elementMatched = false;
|
||||
|
||||
std::vector<std::wstring> languages = pfLocalizationDataMgr::Instance().GetLanguages(ages[curAge], sets[curSet], elements[curElement]);
|
||||
for (int curLang = 0; curLang < languages.size(); curLang++)
|
||||
{
|
||||
HTREEITEM langItem = AddLeaf(treeCtrl, subItem, languages[curLang]);
|
||||
|
||||
if (languages[curLang] == targetLang && elementMatched)
|
||||
{
|
||||
TreeView_SelectItem(treeCtrl, langItem);
|
||||
TreeView_EnsureVisible(treeCtrl, langItem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void plLocTreeView::ClearTreeView(HWND treeCtrl)
|
||||
{
|
||||
TreeView_DeleteAllItems(treeCtrl);
|
||||
}
|
||||
|
||||
void plLocTreeView::SelectionChanged(HWND treeCtrl)
|
||||
{
|
||||
HTREEITEM hItem = TreeView_GetSelection(treeCtrl);
|
||||
std::vector<std::wstring> path;
|
||||
fPath = L"";
|
||||
|
||||
while (hItem)
|
||||
{
|
||||
wchar_t s[200];
|
||||
TVITEM tvi = {0};
|
||||
tvi.hItem = hItem;
|
||||
tvi.mask = TVIF_TEXT;
|
||||
tvi.pszText = s;
|
||||
tvi.cchTextMax = 200;
|
||||
TreeView_GetItem(treeCtrl, &tvi);
|
||||
path.push_back(tvi.pszText);
|
||||
hItem = TreeView_GetParent(treeCtrl, hItem);
|
||||
}
|
||||
|
||||
while (!path.empty())
|
||||
{
|
||||
fPath += path.back();
|
||||
|
||||
path.pop_back();
|
||||
if (!path.empty())
|
||||
fPath += L".";
|
||||
}
|
||||
}
|
||||
|
||||
void plLocTreeView::SelectionDblClicked(HWND treeCtrl)
|
||||
{
|
||||
HTREEITEM hItem = TreeView_GetSelection(treeCtrl);
|
||||
std::vector<std::wstring> path;
|
||||
fPath = L"";
|
||||
|
||||
while (hItem)
|
||||
{
|
||||
wchar_t s[200];
|
||||
TVITEM tvi = {0};
|
||||
tvi.hItem = hItem;
|
||||
tvi.mask = TVIF_TEXT;
|
||||
tvi.pszText = s;
|
||||
tvi.cchTextMax = 200;
|
||||
TreeView_GetItem(treeCtrl, &tvi);
|
||||
path.push_back(tvi.pszText);
|
||||
hItem = TreeView_GetParent(treeCtrl, hItem);
|
||||
}
|
||||
|
||||
while (!path.empty())
|
||||
{
|
||||
fPath += path.back();
|
||||
|
||||
path.pop_back();
|
||||
if (!path.empty())
|
||||
fPath += L".";
|
||||
}
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#ifndef _plLocTreeView_h
|
||||
#define _plLocTreeView_h
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <WinSock2.h>
|
||||
#include <Windows.h>
|
||||
#include <string>
|
||||
|
||||
class plLocTreeView
|
||||
{
|
||||
protected:
|
||||
static std::wstring fPath;
|
||||
|
||||
public:
|
||||
static void FillTreeViewFromData(HWND treeCtrl, std::wstring selectionPath);
|
||||
static void ClearTreeView(HWND treeCtrl);
|
||||
|
||||
static void SelectionChanged(HWND treeCtrl);
|
||||
static void SelectionDblClicked(HWND treeCtrl);
|
||||
|
||||
static std::wstring GetPath() {return fPath;}
|
||||
};
|
||||
|
||||
#endif //_plLocTreeView_h
|
@ -0,0 +1,394 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program 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, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
#define CLASSNAME L"plLocalizationEditor"
|
||||
#define WINDOWNAME L"plLocalizationEditor"
|
||||
#define IDC_REGTREEVIEW 1000
|
||||
|
||||
#define FILE_MENU_POS 0 // 0-based index of the file sub menu
|
||||
|
||||
#include "pnAllCreatables.h"
|
||||
#include "../plResMgr/plResMgrCreatable.h"
|
||||
|
||||
// These are so that we don't have to link in stuff we don't have to
|
||||
#include "../plMessage/plResMgrHelperMsg.h"
|
||||
#include "../plMessage/plAgeLoadedMsg.h"
|
||||
REGISTER_CREATABLE(plResMgrHelperMsg);
|
||||
REGISTER_CREATABLE(plAgeLoadedMsg);
|
||||
REGISTER_CREATABLE(plAgeLoaded2Msg);
|
||||
REGISTER_CREATABLE(plAgeBeginLoadingMsg);
|
||||
REGISTER_CREATABLE(plInitialAgeStateLoadedMsg);
|
||||
|
||||
#include "../pfLocalizationMgr/pfLocalizationMgr.h"
|
||||
#include "../pfLocalizationMgr/pfLocalizationDataMgr.h"
|
||||
#include "../plResMgr/plResManager.h"
|
||||
|
||||
#include "plLocTreeView.h"
|
||||
#include "plEditDlg.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <WinSock2.h>
|
||||
#include <Windows.h>
|
||||
#include <Commdlg.h>
|
||||
#include <stdio.h>
|
||||
#include <commctrl.h>
|
||||
#include <shlwapi.h>
|
||||
#include <shlobj.h>
|
||||
#include "res/resource.h"
|
||||
|
||||
HINSTANCE gInstance = NULL;
|
||||
HWND gMainWindow = NULL;
|
||||
HWND gTreeView = NULL; // the tree view for display of localization strings
|
||||
extern HWND gEditDlg; // the main edit dialog for the localization strings
|
||||
std::wstring gCurPath = L""; // current data path
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||
BOOL WinInit(HINSTANCE hInst, int nCmdShow);
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
|
||||
{
|
||||
MSG msg;
|
||||
HACCEL accelTable = LoadAccelerators(hInst, MAKEINTRESOURCE(IDR_ACCELERATOR1));
|
||||
|
||||
if (!WinInit(hInst, nCmdShow))
|
||||
return -1;
|
||||
|
||||
plResManager *rMgr = new plResManager;
|
||||
hsgResMgr::Init(rMgr);
|
||||
|
||||
while (GetMessage(&msg, NULL, 0, 0))
|
||||
{
|
||||
if (!TranslateAccelerator(gMainWindow, accelTable, &msg))
|
||||
{
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
}
|
||||
|
||||
pfLocalizationMgr::Shutdown();
|
||||
|
||||
hsgResMgr::Shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL WinInit(HINSTANCE hInst, int nCmdShow)
|
||||
{
|
||||
LoadLibrary(L"Riched20.dll"); // so we can use our rich edit control
|
||||
gInstance = hInst;
|
||||
|
||||
WNDCLASSEX wcEx;
|
||||
wcEx.cbSize = sizeof(WNDCLASSEX);
|
||||
wcEx.style = CS_HREDRAW | CS_VREDRAW;
|
||||
wcEx.lpfnWndProc = MainWndProc;
|
||||
wcEx.cbClsExtra = 0;
|
||||
wcEx.cbWndExtra = 0;
|
||||
wcEx.hInstance = hInst;
|
||||
wcEx.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_APPICON));
|
||||
wcEx.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wcEx.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
|
||||
wcEx.lpszMenuName = MAKEINTRESOURCE(IDR_APPMENU);
|
||||
wcEx.lpszClassName = CLASSNAME;
|
||||
wcEx.hIconSm = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_APPICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
|
||||
|
||||
if (!RegisterClassEx(&wcEx))
|
||||
return FALSE;
|
||||
|
||||
DWORD dwStyle = WS_POPUP | WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE;
|
||||
DWORD dwExStyle = WS_EX_CONTROLPARENT;
|
||||
|
||||
// Create a window
|
||||
gMainWindow = CreateWindowEx(dwExStyle, CLASSNAME, WINDOWNAME, dwStyle, 10, 10, 800, 500, NULL, NULL, hInst, NULL);
|
||||
if (gMainWindow == NULL)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void SetWindowTitle(HWND hWnd, std::wstring path)
|
||||
{
|
||||
std::wstring title = L"plLocalizationEditor";
|
||||
if (path != L"")
|
||||
title += L"-" + path;
|
||||
|
||||
SetWindowText(hWnd, title.c_str());
|
||||
}
|
||||
|
||||
BOOL CALLBACK AboutDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if(msg == WM_COMMAND)
|
||||
EndDialog(hWnd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void RequestSaveOnExit()
|
||||
{
|
||||
if (gCurPath == L"") // no data open
|
||||
return;
|
||||
|
||||
static alreadyRequested = false; // make sure we don't ask multiple times
|
||||
if (alreadyRequested)
|
||||
return;
|
||||
alreadyRequested = true;
|
||||
|
||||
SaveLocalizationText(); // make sure any changed text is saved to the manager
|
||||
|
||||
int res = MessageBox(NULL, L"Do you wish to save your changes?", L"Save Changes", MB_ICONQUESTION | MB_YESNO);
|
||||
if (res == IDYES)
|
||||
{
|
||||
// save it to a new directory
|
||||
BROWSEINFO bInfo;
|
||||
LPITEMIDLIST itemList;
|
||||
LPMALLOC shMalloc;
|
||||
wchar_t path[MAX_PATH];
|
||||
|
||||
memset(&bInfo, 0, sizeof(bInfo));
|
||||
bInfo.hwndOwner = NULL;
|
||||
bInfo.pidlRoot = NULL;
|
||||
bInfo.pszDisplayName = path;
|
||||
bInfo.lpszTitle = L"Select a directory to save the localization data to:";
|
||||
bInfo.ulFlags = BIF_EDITBOX;
|
||||
|
||||
itemList = SHBrowseForFolder(&bInfo);
|
||||
if (itemList != NULL)
|
||||
{
|
||||
plWaitCursor waitCursor;
|
||||
|
||||
SHGetPathFromIDList(itemList, path);
|
||||
SHGetMalloc(&shMalloc);
|
||||
shMalloc->Free(itemList);
|
||||
shMalloc->Release();
|
||||
|
||||
gCurPath = path;
|
||||
char *sPath = hsWStringToString(gCurPath.c_str());
|
||||
pfLocalizationDataMgr::Instance().WriteDatabaseToDisk(sPath);
|
||||
delete [] sPath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CALLBACK HandleCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case ID_FILE_EXIT:
|
||||
RequestSaveOnExit();
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case ID_FILE_OPENDATADIRECTORY:
|
||||
{
|
||||
BROWSEINFO bInfo;
|
||||
LPITEMIDLIST itemList;
|
||||
LPMALLOC shMalloc;
|
||||
wchar_t path[MAX_PATH];
|
||||
|
||||
memset(&bInfo, 0, sizeof(bInfo));
|
||||
bInfo.hwndOwner = hWnd;
|
||||
bInfo.pidlRoot = NULL;
|
||||
bInfo.pszDisplayName = path;
|
||||
bInfo.lpszTitle = L"Select a localization data directory:";
|
||||
bInfo.ulFlags = BIF_EDITBOX;
|
||||
|
||||
itemList = SHBrowseForFolder(&bInfo);
|
||||
if (itemList != NULL)
|
||||
{
|
||||
plWaitCursor waitCursor;
|
||||
|
||||
SHGetPathFromIDList(itemList, path);
|
||||
SHGetMalloc(&shMalloc);
|
||||
shMalloc->Free(itemList);
|
||||
shMalloc->Release();
|
||||
|
||||
pfLocalizationMgr::Shutdown();
|
||||
|
||||
char *sPath = hsWStringToString(path);
|
||||
pfLocalizationMgr::Initialize(sPath);
|
||||
delete [] sPath;
|
||||
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
plLocTreeView::FillTreeViewFromData(gTreeView, L"");
|
||||
|
||||
gCurPath = path;
|
||||
SetWindowTitle(hWnd, path);
|
||||
|
||||
HMENU menu = GetMenu(hWnd);
|
||||
HMENU fileMenu = GetSubMenu(menu, FILE_MENU_POS);
|
||||
EnableMenuItem(fileMenu, ID_FILE_SAVETOCUR, MF_ENABLED);
|
||||
EnableMenuItem(fileMenu, ID_FILE_SAVETONEW, MF_ENABLED);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ID_FILE_SAVETOCUR:
|
||||
{
|
||||
SaveLocalizationText(); // make sure any changed text is saved to the manager
|
||||
|
||||
// save it to our current directory
|
||||
int res = MessageBox(hWnd, L"Are you sure you want to save to the current directory? Current data will be overwritten!", L"Save to Current Directory", MB_ICONQUESTION | MB_YESNOCANCEL);
|
||||
if (res == IDYES)
|
||||
{
|
||||
plWaitCursor waitCursor;
|
||||
char *sPath = hsWStringToString(gCurPath.c_str());
|
||||
pfLocalizationDataMgr::Instance().WriteDatabaseToDisk(sPath);
|
||||
delete [] sPath;
|
||||
}
|
||||
else if (res == IDNO)
|
||||
SendMessage(hWnd, WM_COMMAND, (WPARAM)ID_FILE_SAVETONEW, (LPARAM)0);
|
||||
// and if it's cancel we don't do anything
|
||||
}
|
||||
break;
|
||||
case ID_FILE_SAVETONEW:
|
||||
{
|
||||
SaveLocalizationText(); // make sure any changed text is saved to the manager
|
||||
|
||||
// save it to a new directory
|
||||
BROWSEINFO bInfo;
|
||||
LPITEMIDLIST itemList;
|
||||
LPMALLOC shMalloc;
|
||||
wchar_t path[MAX_PATH];
|
||||
|
||||
memset(&bInfo, 0, sizeof(bInfo));
|
||||
bInfo.hwndOwner = hWnd;
|
||||
bInfo.pidlRoot = NULL;
|
||||
bInfo.pszDisplayName = path;
|
||||
bInfo.lpszTitle = L"Select a directory to save the localization data to:";
|
||||
bInfo.ulFlags = BIF_EDITBOX;
|
||||
|
||||
itemList = SHBrowseForFolder(&bInfo);
|
||||
if (itemList != NULL)
|
||||
{
|
||||
plWaitCursor waitCursor;
|
||||
|
||||
SHGetPathFromIDList(itemList, path);
|
||||
SHGetMalloc(&shMalloc);
|
||||
shMalloc->Free(itemList);
|
||||
shMalloc->Release();
|
||||
|
||||
gCurPath = path;
|
||||
SetWindowTitle(hWnd, path);
|
||||
char *sPath = hsWStringToString(gCurPath.c_str());
|
||||
pfLocalizationDataMgr::Instance().WriteDatabaseToDisk(sPath);
|
||||
delete [] sPath;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_HELP_ABOUT:
|
||||
DialogBox(gInstance, MAKEINTRESOURCE(IDD_ABOUT), hWnd, AboutDialogProc);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SizeControls(HWND parent)
|
||||
{
|
||||
RECT clientRect, editRect;
|
||||
|
||||
GetClientRect(parent, &clientRect);
|
||||
GetClientRect(gEditDlg, &editRect);
|
||||
|
||||
SetWindowPos(gTreeView, NULL, 0, 0, clientRect.right - editRect.right - 4, clientRect.bottom, 0);
|
||||
|
||||
OffsetRect(&editRect, clientRect.right - editRect.right, (clientRect.bottom >> 1) - (editRect.bottom >> 1));
|
||||
SetWindowPos(gEditDlg, NULL, editRect.left, editRect.top, 0, 0, SWP_NOSIZE);
|
||||
}
|
||||
|
||||
void InitWindowControls(HWND hWnd)
|
||||
{
|
||||
RECT clientRect;
|
||||
|
||||
GetClientRect(hWnd, &clientRect);
|
||||
|
||||
gTreeView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TREEVIEW, L"Tree View", WS_VISIBLE | WS_CHILD | WS_BORDER |
|
||||
TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_SHOWSELALWAYS,
|
||||
0, 0, 0, 0, hWnd, (HMENU)IDC_REGTREEVIEW, gInstance, NULL);
|
||||
|
||||
gEditDlg = CreateDialog(gInstance, MAKEINTRESOURCE(IDD_EDITDLG), hWnd, EditDlgProc);
|
||||
|
||||
SizeControls(hWnd);
|
||||
}
|
||||
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (msg)
|
||||
{
|
||||
case WM_CREATE:
|
||||
InitCommonControls();
|
||||
InitWindowControls(hWnd);
|
||||
break;
|
||||
case WM_CLOSE:
|
||||
RequestSaveOnExit();
|
||||
DestroyWindow(hWnd);
|
||||
break;
|
||||
case WM_DESTROY:
|
||||
RequestSaveOnExit();
|
||||
plLocTreeView::ClearTreeView(gTreeView);
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
case WM_SIZING:
|
||||
case WM_SIZE:
|
||||
SizeControls(hWnd);
|
||||
break;
|
||||
case WM_GETMINMAXINFO:
|
||||
{
|
||||
MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
|
||||
pmmi->ptMinTrackSize.x = 800;
|
||||
pmmi->ptMinTrackSize.y = 500;
|
||||
return 0;
|
||||
}
|
||||
case WM_NOTIFY:
|
||||
if(wParam == IDC_REGTREEVIEW)
|
||||
{
|
||||
SaveLocalizationText(); // save any current changes to the database
|
||||
|
||||
NMHDR *hdr = (NMHDR*)lParam;
|
||||
if(hdr->code == TVN_SELCHANGED)
|
||||
plLocTreeView::SelectionChanged(gTreeView);
|
||||
else if(hdr->code == NM_DBLCLK)
|
||||
plLocTreeView::SelectionDblClicked(gTreeView);
|
||||
UpdateEditDlg(plLocTreeView::GetPath());
|
||||
}
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
return HandleCommand(hWnd, wParam, lParam);
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, msg, wParam, lParam);
|
||||
}
|
@ -0,0 +1,268 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#define APSTUDIO_HIDDEN_SYMBOLS
|
||||
#include "windows.h"
|
||||
#undef APSTUDIO_HIDDEN_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_APPICON ICON "icon1.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
IDR_APPMENU MENU
|
||||
BEGIN
|
||||
POPUP "&File"
|
||||
BEGIN
|
||||
MENUITEM "&Open Data Directory...\tCtrl+O",
|
||||
ID_FILE_OPENDATADIRECTORY
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Save to Current Directory\tCtrl+S", ID_FILE_SAVETOCUR
|
||||
, GRAYED
|
||||
MENUITEM "S&ave to Specified Directory...\tCtrl+Shift+S",
|
||||
ID_FILE_SAVETONEW, GRAYED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "E&xit", ID_FILE_EXIT
|
||||
END
|
||||
POPUP "&Help"
|
||||
BEGIN
|
||||
MENUITEM "&About ...", ID_HELP_ABOUT
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
IDD_ABOUT DIALOGEX 0, 0, 275, 40
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "About plLocalizationEditor"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,221,6,50,14
|
||||
ICON IDI_APPICON,IDC_STATIC,7,7,21,20
|
||||
LTEXT "plLocalizationEditor\nA basic editor for Plasma 21 localization resource files\nCopyright (C) 2004 Cyan Worlds, Inc.",
|
||||
IDC_STATIC,33,7,180,26
|
||||
END
|
||||
|
||||
IDD_EDITDLG DIALOGEX 0, 0, 421, 280
|
||||
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
PUSHBUTTON "Add",IDC_ADD,72,20,138,14,WS_DISABLED
|
||||
PUSHBUTTON "Delete",IDC_DELETE,216,20,132,14,WS_DISABLED
|
||||
GROUPBOX "Localization Tree",IDC_STATIC,7,7,407,32
|
||||
GROUPBOX "Localization Information",IDC_STATIC,7,45,407,228
|
||||
LTEXT "Text:",IDC_LOCPATH,15,57,391,8
|
||||
CONTROL "",IDC_LOCALIZATIONTEXT,"RichEdit20A",ES_MULTILINE |
|
||||
ES_AUTOHSCROLL | WS_DISABLED | WS_BORDER | WS_VSCROLL |
|
||||
WS_HSCROLL | WS_TABSTOP,15,71,391,194
|
||||
END
|
||||
|
||||
IDD_ADDELEMENT DIALOGEX 0, 0, 186, 91
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "Add Element"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
COMBOBOX IDC_PARENTAGE,57,19,122,51,CBS_DROPDOWN | CBS_SORT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX IDC_PARENTSET,57,34,122,51,CBS_DROPDOWN | CBS_SORT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
EDITTEXT IDC_ELEMENTNAME,57,49,122,14,ES_AUTOHSCROLL
|
||||
DEFPUSHBUTTON "OK",IDOK,129,70,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,73,70,50,14
|
||||
LTEXT "Path:",IDC_PATH,7,7,172,8
|
||||
LTEXT "Parent Age:",IDC_STATIC,7,22,48,8
|
||||
LTEXT "Parent Set:",IDC_STATIC,7,37,38,8
|
||||
LTEXT "Element Name:",IDC_STATIC,7,52,49,8
|
||||
END
|
||||
|
||||
IDD_ADDLOCALIZATION DIALOGEX 0, 0, 186, 59
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
|
||||
WS_SYSMENU
|
||||
CAPTION "Add Localization"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
COMBOBOX IDC_LANGUAGE,45,19,134,65,CBS_DROPDOWNLIST | CBS_SORT |
|
||||
WS_VSCROLL | WS_TABSTOP
|
||||
DEFPUSHBUTTON "OK",IDOK,129,38,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,73,38,50,14
|
||||
LTEXT "Path:",IDC_PATH,7,7,172,8
|
||||
LTEXT "Language:",IDC_STATIC,7,21,35,8
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,1
|
||||
PRODUCTVERSION 1,0,0,1
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x1L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Cyan Worlds, Inc."
|
||||
VALUE "FileDescription", "plLocalizationEditor"
|
||||
VALUE "FileVersion", "1, 0, 0, 1"
|
||||
VALUE "InternalName", "plLocalizationEditor"
|
||||
VALUE "LegalCopyright", "Copyright <20> 2004"
|
||||
VALUE "OriginalFilename", "plLocalizationEditor.exe"
|
||||
VALUE "ProductName", "Cyan Worlds Localization Editor"
|
||||
VALUE "ProductVersion", "1, 0, 0, 1"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"#include ""windows.h""\r\n"
|
||||
"#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
IDD_ABOUT, DIALOG
|
||||
BEGIN
|
||||
RIGHTMARGIN, 252
|
||||
END
|
||||
|
||||
IDD_EDITDLG, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 414
|
||||
VERTGUIDE, 15
|
||||
VERTGUIDE, 72
|
||||
VERTGUIDE, 210
|
||||
VERTGUIDE, 216
|
||||
VERTGUIDE, 348
|
||||
VERTGUIDE, 406
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 273
|
||||
HORZGUIDE, 71
|
||||
HORZGUIDE, 265
|
||||
END
|
||||
|
||||
IDD_ADDELEMENT, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 179
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 84
|
||||
END
|
||||
|
||||
IDD_ADDLOCALIZATION, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 179
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 52
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Accelerator
|
||||
//
|
||||
|
||||
IDR_ACCELERATOR1 ACCELERATORS
|
||||
BEGIN
|
||||
"O", ID_FILE_OPENDATADIRECTORY, VIRTKEY, CONTROL, NOINVERT
|
||||
"S", ID_FILE_SAVETOCUR, VIRTKEY, CONTROL, NOINVERT
|
||||
"S", ID_FILE_SAVETONEW, VIRTKEY, SHIFT, CONTROL,
|
||||
NOINVERT
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
@ -0,0 +1,51 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by plLocalizationEditor.rc
|
||||
//
|
||||
#define IDC_MYICON 2
|
||||
#define IDI_APPICON 102
|
||||
#define IDD_PLLOCALIZATIONEDITOR_DIALOG 102
|
||||
#define IDS_APP_TITLE 103
|
||||
#define IDD_ABOUTBOX 103
|
||||
#define IDI_PLLOCALIZATIONEDITOR 107
|
||||
#define IDI_SMALL 108
|
||||
#define IDC_PLLOCALIZATIONEDITOR 109
|
||||
#define IDR_APPMENU 109
|
||||
#define IDD_ADDELEMENT 113
|
||||
#define IDD_ADDLOCALIZATION 114
|
||||
#define IDR_MAINFRAME 128
|
||||
#define IDD_ABOUT 129
|
||||
#define IDR_ACCELERATOR1 130
|
||||
#define IDD_EDITDLG 131
|
||||
#define IDC_RICHEDIT21 1000
|
||||
#define IDC_LOCALIZATIONTEXT 1002
|
||||
#define IDC_APPLY 1014
|
||||
#define IDC_DISCARD 1015
|
||||
#define IDC_LOCPATH 1019
|
||||
#define IDC_ADD 1020
|
||||
#define IDC_DELETE 1021
|
||||
#define IDC_PATH 1023
|
||||
#define IDC_PARENTSET 1026
|
||||
#define IDC_ELEMENTNAME 1027
|
||||
#define IDC_PARENTAGE 1028
|
||||
#define IDC_LANGUAGE 1028
|
||||
#define ID_FILE_EXIT 32772
|
||||
#define ID_HELP_ABOUT 32773
|
||||
#define ID_FILE_OPENDATADIRECTORY 32774
|
||||
#define ID_FILE_SAVETOSPECIFIEDDIRECTORY 32778
|
||||
#define ID_FILE_SAVETOCURRENTDIRECTORY 32779
|
||||
#define ID_FILE_SAVETOCUR 32782
|
||||
#define ID_FILE_SAVETONEW 32783
|
||||
#define IDC_STATIC -1
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NO_MFC 1
|
||||
#define _APS_NEXT_RESOURCE_VALUE 132
|
||||
#define _APS_NEXT_COMMAND_VALUE 32784
|
||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||
#define _APS_NEXT_SYMED_VALUE 110
|
||||
#endif
|
||||
#endif
|
Reference in New Issue
Block a user