- added settings to TitanScriptGui

- fixed a bug with the dump file name
This commit is contained in:
Mr. eXoDia 2014-03-13 13:17:30 +01:00
parent 4692f86dfd
commit 2ac41ffb3c
1 changed files with 87 additions and 18 deletions

View File

@ -3,18 +3,26 @@
#include "..\SDK\CPP\TitanEngine.h" #include "..\SDK\CPP\TitanEngine.h"
#include "TitanScript.h" #include "TitanScript.h"
HINSTANCE hInst; //variables
HWND hLogBox; static HINSTANCE hInst;
TCHAR FileNameTarget[MAX_PATH] = {}; static HWND hLogBox;
TCHAR FileNameScript[MAX_PATH] = {}; static TCHAR FileNameTarget[MAX_PATH] = {};
static TCHAR FileNameScript[MAX_PATH] = {};
static TCHAR FileNameIni[MAX_PATH] = {};
INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //functions
bool GetFileDialog(TCHAR[MAX_PATH]); static INT_PTR CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void AddLogMessage(const char* szLogMessage, eLogType Type); static bool GetFileDialog(TCHAR[MAX_PATH]);
static void AddLogMessage(const char* szLogMessage, eLogType Type);
static void SettingSet(const TCHAR* name, const TCHAR* value);
static void SettingGet(const TCHAR* name, TCHAR* value, int value_size);
static bool FileExists(LPCTSTR szPath);
static void CreateDummyUnicodeFile(const TCHAR* szFileName);
tScripterLoadFileA load_file = NULL; //TitanScript functions
tScripterExecuteWithTitanMistA exec = NULL; static tScripterLoadFileA load_file = NULL;
tScripterSetLogCallback set_log_callback = NULL; static tScripterExecuteWithTitanMistA exec = NULL;
static tScripterSetLogCallback set_log_callback = NULL;
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{ {
@ -29,17 +37,39 @@ int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCm
INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{ {
switch (message) switch (message)
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
//set icon
HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE); HICON hIconLarge = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 32, 32, LR_DEFAULTSIZE);
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge); SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIconLarge);
HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE); HICON hIconSmall = (HICON)LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, LR_DEFAULTSIZE);
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall); SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIconSmall);
//initialize variables
hLogBox = GetDlgItem(hWnd, IDC_LOG); hLogBox = GetDlgItem(hWnd, IDC_LOG);
int i = GetModuleFileName(hInst, FileNameIni, _countof(FileNameIni));
while(FileNameIni[i] != TCHAR('\\') && i)
i--;
if(i)
{
int len = lstrlen(FileNameIni);
while(FileNameIni[i] != TCHAR('.') && i < len)
i++;
if(i+1 < len)
FileNameIni[i] = TCHAR('\0');
}
lstrcat(FileNameIni, _T(".ini"));
CreateDummyUnicodeFile(FileNameIni);
//restore last files
SettingGet(_T("Target"), FileNameTarget, _countof(FileNameTarget));
if(lstrlen(FileNameTarget))
SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget);
SettingGet(_T("Script"), FileNameScript, _countof(FileNameScript));
if(lstrlen(FileNameScript))
SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript);
//make sure TitanScript is available //make sure TitanScript is available
if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) ) if ( !ExtensionManagerIsPluginLoaded( "TitanScript" ) || !ExtensionManagerIsPluginEnabled( "TitanScript" ) )
@ -50,7 +80,6 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#else #else
AddLogMessage("Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR); AddLogMessage("Ensure plugins\\x86\\TitanScript.dll exists !", TS_LOG_ERROR);
#endif //_WIN64 #endif //_WIN64
EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE); EnableWindow(GetDlgItem(hWnd, IDC_RUN ), FALSE);
} }
else else
@ -58,13 +87,14 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
load_file = GetTSFunctionPointer( LoadFileA ); load_file = GetTSFunctionPointer( LoadFileA );
exec = GetTSFunctionPointer( ExecuteWithTitanMistA ); exec = GetTSFunctionPointer( ExecuteWithTitanMistA );
set_log_callback = GetTSFunctionPointer( SetLogCallback ); set_log_callback = GetTSFunctionPointer( SetLogCallback );
set_log_callback(&AddLogMessage); set_log_callback(&AddLogMessage);
} }
break; break;
} }
case WM_COMMAND: case WM_COMMAND:
{
switch (LOWORD(wParam)) switch (LOWORD(wParam))
{ {
case IDC_BROWSETARGET: case IDC_BROWSETARGET:
@ -72,6 +102,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if(GetFileDialog(FileNameTarget)) if(GetFileDialog(FileNameTarget))
{ {
SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget); SetDlgItemText(hWnd, IDC_TARGETPATH, FileNameTarget);
SettingSet(_T("Target"), FileNameTarget);
} }
break; break;
} }
@ -80,6 +111,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
if(GetFileDialog(FileNameScript)) if(GetFileDialog(FileNameScript))
{ {
SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript); SetDlgItemText(hWnd, IDC_SCRIPTPATH, FileNameScript);
SettingSet(_T("Script"), FileNameScript);
} }
break; break;
} }
@ -95,7 +127,7 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
wcstombs(buf, FileNameTarget, sizeof(buf)); wcstombs(buf, FileNameTarget, sizeof(buf));
if(!exec(buf, "dump.exe")) if(!exec(buf, "")) //TitanScript will generate the output filename
{ {
AddLogMessage("Failed to execute", TS_LOG_ERROR); AddLogMessage("Failed to execute", TS_LOG_ERROR);
break; break;
@ -105,17 +137,24 @@ INT_PTR CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
} }
break; }
break;
case WM_CLOSE: case WM_CLOSE:
{
EndDialog(hWnd, NULL); EndDialog(hWnd, NULL);
break; }
break;
default: default:
{
return false; return false;
} }
}
return 0; return 0;
} }
bool GetFileDialog(TCHAR Buffer[MAX_PATH]) static bool GetFileDialog(TCHAR Buffer[MAX_PATH])
{ {
OPENFILENAME sOpenFileName = {0}; OPENFILENAME sOpenFileName = {0};
const TCHAR szFilterString[] = _T("All Files \0*.*\0\0"); const TCHAR szFilterString[] = _T("All Files \0*.*\0\0");
@ -133,10 +172,40 @@ bool GetFileDialog(TCHAR Buffer[MAX_PATH])
return (TRUE == GetOpenFileName(&sOpenFileName)); return (TRUE == GetOpenFileName(&sOpenFileName));
} }
void AddLogMessage(const char* szLogMessage, eLogType Type) static void AddLogMessage(const char* szLogMessage, eLogType Type)
{ {
TCHAR buf[100] = {0}; TCHAR buf[100] = {0};
mbstowcs(buf, szLogMessage, sizeof(buf)); mbstowcs(buf, szLogMessage, sizeof(buf));
LRESULT cSelect = SendMessage(hLogBox, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)buf); LRESULT cSelect = SendMessage(hLogBox, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)buf);
SendMessage(hLogBox, LB_SETCURSEL, cSelect, NULL); SendMessage(hLogBox, LB_SETCURSEL, cSelect, NULL);
} }
static void SettingSet(const TCHAR* name, const TCHAR* value)
{
WritePrivateProfileString(_T("Settings"), name, value, FileNameIni);
}
static void SettingGet(const TCHAR* name, TCHAR* value, int value_size)
{
GetPrivateProfileString(_T("Settings"), name, _T(""), value, value_size, FileNameIni);
}
static bool FileExists(LPCTSTR szPath)
{
DWORD dwAttrib = GetFileAttributes(szPath);
return (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
}
static void CreateDummyUnicodeFile(const TCHAR* szFileName)
{
//http://www.codeproject.com/Articles/9071/Using-Unicode-in-INI-files
if (!FileExists(szFileName))
{
// UTF16-LE BOM(FFFE)
WORD wBOM = 0xFEFF;
DWORD NumberOfBytesWritten;
HANDLE hFile = CreateFile(szFileName, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, &wBOM, sizeof(WORD), &NumberOfBytesWritten, NULL);
CloseHandle(hFile);
}
}