
Sun Aug 18 12:17:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch> * [files/drive.c] Added 'Filesystem' option in drives configuration. * [files/dos_fs.c] Added handling of case-insensitive filesystems. * [memory/selector.c] [include/stackframe.h] Removed MAKE_SEGPTR. * [misc/commdlg.c] [multimedia/mcistring.c] Replaced MAKE_SEGPTR by the SEGPTR_* macros. * [objects/bitblt.c] [windows/graphics.c] Use an intermediary pixmap to avoid some BadMatch errors on XGetImage(). Sun Aug 18 09:21:27 1996 Albrecht Kleine <kleine@ak.sax.de> * [windows/message.c] Added handling of WM_NC...mouse messages in JOURNALRECORD hook. * [misc/ver.c] Fixed a bad string result in VerQueryValue[16|32A|32W]. Fri Aug 16 19:55:04 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [if1632/crtdll.spec] [misc/crtdll.c] More additions to get win95 programs further down the road. * [if1632/kernel.spec] [loader/module.c] GetModuleName() added. LoadModule(): params->showCmd can be NULL. * [if1632/kernel32.spec] [if1632/thunk.c] ThunkConnect32() stub added. * [loader/resource.c] Entries include lastentry. * [misc/shell.c] [files/file.c] Made progman work again. Fri Aug 16 09:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu> * [windows/defwnd.c] [windows/winpos.c] [windows/painting.c] Icon painting fixes. * [windows/winpos.c] [windows/painting.c] Enforce and follow hrgnUpdate more closely to cut down on redundant RedrawWindow() calls. * [windows/event.c] Process ConfigureNotify only for managed windows. * [windows/winpos.c] Do not redraw parent if the window was hidden before SetWindowPos(). * [windows/nonclient.c] Omit some nonclient decoration painting for managed windows. * [controls/menu.c] [windows/mdi.c] [windows/nonclient.c] Implemented WM_NEXTMENU. * [controls/listbox.c] Multicolumn listboxes return WVR_VREDRAW on WM_NCCALCSIZE. * [misc/shell.c] Added .ICO file handling to ExtractIcon().
141 lines
4.3 KiB
C
141 lines
4.3 KiB
C
/*
|
|
* Program Manager
|
|
*
|
|
* Copyright 1996 Ulrich Schmid
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#ifdef WINELIB
|
|
#include <options.h>
|
|
#endif
|
|
#include "progman.h"
|
|
|
|
/* Class names */
|
|
|
|
CHAR STRING_MAIN_WIN_CLASS_NAME[] = "PMMain";
|
|
CHAR STRING_MDI_WIN_CLASS_NAME[] = "MDICLIENT";
|
|
CHAR STRING_GROUP_WIN_CLASS_NAME[] = "PMGroup";
|
|
CHAR STRING_PROGRAM_WIN_CLASS_NAME[] = "PMProgram";
|
|
|
|
/* Resource names */
|
|
/* Xx will be overwritten with En, ... */
|
|
CHAR STRING_ACCEL[] = "ACCEL";
|
|
CHAR STRING_MENU_Xx[] = "MENU_Xx";
|
|
CHAR STRING_NEW_Xx[] = "DIALOG_NEW_Xx";
|
|
CHAR STRING_OPEN_Xx[] = "DIALOG_OPEN_Xx";
|
|
CHAR STRING_MOVE_Xx[] = "DIALOG_MOVE_Xx";
|
|
CHAR STRING_COPY_Xx[] = "DIALOG_COPY_Xx";
|
|
CHAR STRING_DELETE_Xx[] = "DIALOG_DELETE_Xx";
|
|
CHAR STRING_GROUP_Xx[] = "DIALOG_GROUP_Xx";
|
|
CHAR STRING_PROGRAM_Xx[] = "DIALOG_PROGRAM_Xx";
|
|
CHAR STRING_SYMBOL_Xx[] = "DIALOG_SYMBOL_Xx";
|
|
CHAR STRING_EXECUTE_Xx[] = "DIALOG_EXECUTE_Xx";
|
|
|
|
static BOOL STRING_LoadStringOtherLanguage(UINT num, UINT ids, LPSTR str, UINT len)
|
|
{
|
|
ids -= Globals.wStringTableOffset;
|
|
ids += num * 0x100;
|
|
return(LoadString(Globals.hInstance, ids, str, len));
|
|
};
|
|
|
|
VOID STRING_SelectLanguageByName(LPCSTR lang)
|
|
{
|
|
INT i;
|
|
CHAR newlang[3];
|
|
|
|
for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
|
|
if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang)) &&
|
|
!lstrcmp(lang, newlang))
|
|
{
|
|
STRING_SelectLanguageByNumber(i);
|
|
return;
|
|
}
|
|
|
|
/* Fallback */
|
|
for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
|
|
if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_ID, newlang, sizeof(newlang)))
|
|
{
|
|
STRING_SelectLanguageByNumber(i);
|
|
return;
|
|
}
|
|
|
|
MessageBox(Globals.hMainWnd, "No language found", "FATAL ERROR", MB_OK);
|
|
PostQuitMessage(1);
|
|
}
|
|
|
|
VOID STRING_SelectLanguageByNumber(UINT num)
|
|
{
|
|
INT i;
|
|
CHAR lang[3];
|
|
CHAR caption[MAX_STRING_LEN];
|
|
CHAR item[MAX_STRING_LEN];
|
|
HMENU hMainMenu;
|
|
HLOCAL hGroup;
|
|
|
|
/* Select string table */
|
|
Globals.wStringTableOffset = num * 0x100;
|
|
|
|
/* Get Language id */
|
|
LoadString(Globals.hInstance, IDS_LANGUAGE_ID, lang, sizeof(lang));
|
|
Globals.lpszLanguage = lang;
|
|
|
|
/* Set frame caption */
|
|
LoadString(Globals.hInstance, IDS_PROGRAM_MANAGER, caption, sizeof(caption));
|
|
SetWindowText(Globals.hMainWnd, caption);
|
|
|
|
/* Change Resource names */
|
|
lstrcpyn(STRING_MENU_Xx + sizeof(STRING_MENU_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_NEW_Xx + sizeof(STRING_NEW_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_OPEN_Xx + sizeof(STRING_OPEN_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_MOVE_Xx + sizeof(STRING_MOVE_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_COPY_Xx + sizeof(STRING_COPY_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_DELETE_Xx + sizeof(STRING_DELETE_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_GROUP_Xx + sizeof(STRING_GROUP_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_PROGRAM_Xx + sizeof(STRING_PROGRAM_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_SYMBOL_Xx + sizeof(STRING_SYMBOL_Xx) - 3, lang, 3);
|
|
lstrcpyn(STRING_EXECUTE_Xx + sizeof(STRING_EXECUTE_Xx) - 3, lang, 3);
|
|
|
|
/* Create menu */
|
|
hMainMenu = LoadMenu(Globals.hInstance, STRING_MENU_Xx);
|
|
Globals.hFileMenu = GetSubMenu(hMainMenu, 0);
|
|
Globals.hOptionMenu = GetSubMenu(hMainMenu, 1);
|
|
Globals.hWindowsMenu = GetSubMenu(hMainMenu, 2);
|
|
Globals.hLanguageMenu = GetSubMenu(hMainMenu, 3);
|
|
|
|
/* Remove dummy item */
|
|
RemoveMenu(Globals.hLanguageMenu, 0, MF_BYPOSITION);
|
|
/* Add language items */
|
|
for (i = 0; i <= MAX_LANGUAGE_NUMBER; i++)
|
|
if (STRING_LoadStringOtherLanguage(i, IDS_LANGUAGE_MENU_ITEM, item, sizeof(item)))
|
|
AppendMenu(Globals.hLanguageMenu, MF_STRING | MF_BYCOMMAND,
|
|
PM_FIRST_LANGUAGE + i, item);
|
|
|
|
if (Globals.hMDIWnd)
|
|
SendMessage(Globals.hMDIWnd, WM_MDISETMENU,
|
|
(WPARAM) hMainMenu,
|
|
(LPARAM) Globals.hWindowsMenu);
|
|
else SetMenu(Globals.hMainWnd, hMainMenu);
|
|
|
|
/* Destroy old menu */
|
|
if (Globals.hMainMenu) DestroyMenu(Globals.hMainMenu);
|
|
Globals.hMainMenu = hMainMenu;
|
|
|
|
#ifdef WINELIB
|
|
/* Update system menus */
|
|
for (i = 0; Languages[i].name && lstrcmp(lang, Languages[i].name);) i++;
|
|
if (Languages[i].name) Options.language = i;
|
|
|
|
GetSystemMenu(Globals.hMainWnd, TRUE);
|
|
for (hGroup = GROUP_FirstGroup(); hGroup;
|
|
hGroup = GROUP_NextGroup(hGroup))
|
|
{
|
|
GROUP *group = LocalLock(hGroup);
|
|
GetSystemMenu(group->hWnd, TRUE);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/* Local Variables: */
|
|
/* c-file-style: "GNU" */
|
|
/* End: */
|