parent
2b66ed4a9b
commit
d447b13013
@ -24,9 +24,11 @@ static HMENU s_recentFilesMenu;
|
|||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
void Window_populateRecentList(text_t** files);
|
||||||
static bool setRegString(HKEY key, const wchar_t* name, const wchar_t* value, int size);
|
static bool setRegString(HKEY key, const wchar_t* name, const wchar_t* value, int size);
|
||||||
static bool getRegString(HKEY key, wchar_t* out, const wchar_t* name);
|
static bool getRegString(HKEY key, wchar_t* out, const wchar_t* name);
|
||||||
static void saveRecentFileList();
|
static void saveRecentFileList();
|
||||||
|
static void getRecentFiles();
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
@ -155,12 +157,18 @@ bool createWindow(const wchar_t* title, int width, int height)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!RegOpenKey(HKEY_CURRENT_USER, L"SOFTWARE\\Gnu Rocket", &s_regConfigKey))
|
if (RegOpenKey(HKEY_CURRENT_USER, L"SOFTWARE\\Gnu Rocket", &s_regConfigKey) != ERROR_SUCCESS)
|
||||||
{
|
{
|
||||||
return FALSE;
|
if (ERROR_SUCCESS != RegCreateKey(HKEY_CURRENT_USER, L"SOFTWARE\\Gnu Rocket", &s_regConfigKey))
|
||||||
|
{
|
||||||
|
// messagebox here
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getRecentFiles();
|
||||||
Window_buildMenu();
|
Window_buildMenu();
|
||||||
|
Window_populateRecentList(Editor_getRecentFiles());
|
||||||
|
|
||||||
ShowWindow(s_window, SW_SHOW);
|
ShowWindow(s_window, SW_SHOW);
|
||||||
SetForegroundWindow(s_window);
|
SetForegroundWindow(s_window);
|
||||||
@ -283,11 +291,11 @@ static void buildSubMenu(HMENU parentMenu, MenuDescriptor menuDesc[], wchar_t* n
|
|||||||
else if (desc->id == EDITOR_MENU_SUB_MENU)
|
else if (desc->id == EDITOR_MENU_SUB_MENU)
|
||||||
{
|
{
|
||||||
HMENU subMenu = CreatePopupMenu();
|
HMENU subMenu = CreatePopupMenu();
|
||||||
AppendMenu(parentMenu, MF_STRING | MF_POPUP, (UINT)subMenu, desc->name);
|
AppendMenu(menu, MF_STRING | MF_POPUP, (UINT)subMenu, desc->name);
|
||||||
|
|
||||||
// A bit hacky but will save us time searching for it later on
|
// A bit hacky but will save us time searching for it later on
|
||||||
|
|
||||||
if (!wcstrcmp(desc->name, L"Recent Files"))
|
if (!wcscmp(desc->name, L"Recent Files"))
|
||||||
s_recentFilesMenu = subMenu;
|
s_recentFilesMenu = subMenu;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -306,11 +314,22 @@ static void buildSubMenu(HMENU parentMenu, MenuDescriptor menuDesc[], wchar_t* n
|
|||||||
|
|
||||||
void Window_buildMenu()
|
void Window_buildMenu()
|
||||||
{
|
{
|
||||||
|
int i = 0;
|
||||||
HMENU mainMenu = CreateMenu();
|
HMENU mainMenu = CreateMenu();
|
||||||
buildSubMenu(mainMenu, g_fileMenu, L"&File");
|
buildSubMenu(mainMenu, g_fileMenu, L"&File");
|
||||||
buildSubMenu(mainMenu, g_editMenu, L"&Edit");
|
buildSubMenu(mainMenu, g_editMenu, L"&Edit");
|
||||||
buildSubMenu(mainMenu, g_viewMenu, L"&View");
|
buildSubMenu(mainMenu, g_viewMenu, L"&View");
|
||||||
SetMenu(s_window, mainMenu);
|
SetMenu(s_window, mainMenu);
|
||||||
|
|
||||||
|
// Add accelerators for the recents files
|
||||||
|
|
||||||
|
for (i = 0; i < 4; ++i)
|
||||||
|
{
|
||||||
|
ACCEL* accel = &s_accelTable[s_accelCount++];
|
||||||
|
accel->fVirt = 0x08 | 0x1;
|
||||||
|
accel->key = (WORD)('1' + i);
|
||||||
|
accel->cmd = (WORD)(EDITOR_MENU_RECENT_FILE_0 + i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -331,7 +350,11 @@ void Window_populateRecentList(text_t** files)
|
|||||||
for (i = 0; i < 4; ++i)
|
for (i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
wchar_t name[2048];
|
wchar_t name[2048];
|
||||||
wsprintf(name, L"%s\tCtrl-&%d", files[i], i);
|
|
||||||
|
if (!wcscmp(files[i], L""))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
wsprintf(name, L"%s\tCtrl-&%d", files[i], i + 1);
|
||||||
AppendMenu(s_recentFilesMenu, MF_STRING, EDITOR_MENU_RECENT_FILE_0 + i, name);
|
AppendMenu(s_recentFilesMenu, MF_STRING, EDITOR_MENU_RECENT_FILE_0 + i, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -605,7 +628,7 @@ int WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmndLine, i
|
|||||||
|
|
||||||
static bool setRegString(HKEY key, const wchar_t* name, const wchar_t* value, int size)
|
static bool setRegString(HKEY key, const wchar_t* name, const wchar_t* value, int size)
|
||||||
{
|
{
|
||||||
return ERROR_SUCCESS == RegSetValueExW(key, name, 0, REG_SZ, (BYTE*)value, size);
|
return ERROR_SUCCESS == RegSetValueExW(key, name, 0, REG_SZ, (BYTE*)value, (size + 1) * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -614,26 +637,47 @@ static bool getRegString(HKEY key, wchar_t* out, const wchar_t* name)
|
|||||||
{
|
{
|
||||||
DWORD size = 0;
|
DWORD size = 0;
|
||||||
DWORD type = 0;
|
DWORD type = 0;
|
||||||
DWORD ret = RegQueryValueExW(key, name, 0, &type, out, &size);
|
DWORD ret;
|
||||||
|
|
||||||
|
if (ERROR_SUCCESS != RegQueryValueExW(key, name, 0, &type, (LPBYTE)NULL, &size))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (REG_SZ != type)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ret = RegQueryValueExW(key, name, 0, &type, (LPBYTE)out, &size);
|
||||||
|
|
||||||
return ret == ERROR_SUCCESS;
|
return ret == ERROR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static void getRecentFiles()
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
text_t** recent_list = Editor_getRecentFiles();
|
||||||
|
|
||||||
|
for (i = 0; i < 4; ++i)
|
||||||
|
{
|
||||||
|
wchar_t entryName[64];
|
||||||
|
wsprintf(entryName, L"RecentFile%d", i);
|
||||||
|
getRegString(s_regConfigKey, recent_list[i], entryName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
static void saveRecentFileList()
|
static void saveRecentFileList()
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
text_t** recent_list = Editor_getRecentFiles();
|
text_t** recent_list = Editor_getRecentFiles();
|
||||||
|
|
||||||
if (ERROR_SUCCESS != RegOpenKey(HKEY_CURRENT_USER, L"SOFTWARE\\Gnu Rocket", &s_regConfigKey))
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (i = 0; i < 4; ++i)
|
for (i = 0; i < 4; ++i)
|
||||||
{
|
{
|
||||||
wchar_t entryName[64];
|
wchar_t entryName[64];
|
||||||
wsprintf(entryName, L"RecentFile%d", i);
|
wsprintf(entryName, L"RecentFile%d", i);
|
||||||
setRegString(s_regConfigKey, entryName, recent_list[i], wstrlen(recent_list[i]);
|
setRegString(s_regConfigKey, entryName, recent_list[i], wcslen(recent_list[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -107,7 +107,7 @@ Program {
|
|||||||
|
|
||||||
Depends = { "sync", "mxml", "emgui" },
|
Depends = { "sync", "mxml", "emgui" },
|
||||||
|
|
||||||
Libs = { { "wsock32.lib", "opengl32.lib", "glu32.lib", "kernel32.lib", "user32.lib", "gdi32.lib", "Comdlg32.lib" ; Config = "win32-*-*" } },
|
Libs = { { "wsock32.lib", "opengl32.lib", "glu32.lib", "kernel32.lib", "user32.lib", "gdi32.lib", "Comdlg32.lib", "Advapi32.lib" ; Config = "win32-*-*" } },
|
||||||
|
|
||||||
Frameworks = { "Cocoa", "OpenGL", "Carbon" },
|
Frameworks = { "Cocoa", "OpenGL", "Carbon" },
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user