[OLEDLG] Sync with Wine Staging 1.7.47. CORE-9924

svn path=/trunk/; revision=68488
This commit is contained in:
Amine Khaldi 2015-07-20 22:45:19 +00:00
parent f2c0f1c18d
commit f52f16e748
28 changed files with 199 additions and 24 deletions

View file

@ -30,6 +30,8 @@ STRINGTABLE
IDS_BROWSE "Procházet"
IDS_NOTOLEMOD "Soubor není platným OLE modulem. Nelze registrovat OLE propojení."
IDS_NOTOLEMODCAPTION "Přidat propojení"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -27,6 +27,8 @@ STRINGTABLE
IDS_BROWSE "Gennemse"
IDS_NOTOLEMOD "Filen ser ikke ud til at være et gyldig OLE modul. Kunne ikke registrere OLE control'en."
IDS_NOTOLEMODCAPTION "Tilføj control"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -27,6 +27,8 @@ STRINGTABLE
IDS_BROWSE "Durchsuchen"
IDS_NOTOLEMOD "Die Datei ist offenbar kein gültiges OLE-Steuermodul. Die OLE-Steuerung konnte nicht registriert werden."
IDS_NOTOLEMODCAPTION "Steuerung hinzufügen"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -25,6 +25,8 @@ STRINGTABLE
IDS_BROWSE "Browse"
IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control."
IDS_NOTOLEMODCAPTION "Add Control"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -25,6 +25,8 @@ STRINGTABLE
IDS_BROWSE "Explorar"
IDS_NOTOLEMOD "El archivo no parece ser un módulo OLE válido. Incapaz de registrar el control OLE."
IDS_NOTOLEMODCAPTION "Añadir control"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -32,6 +32,8 @@ STRINGTABLE
IDS_BROWSE "Parcourir"
IDS_NOTOLEMOD "Le fichier ne semble pas être un module OLE valide. Impossible d'enregistrer le contrôle OLE."
IDS_NOTOLEMODCAPTION "Ajouter un contrôle"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -27,6 +27,8 @@ STRINGTABLE
IDS_BROWSE "סייר"
IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control."
IDS_NOTOLEMODCAPTION "הוספת בקר"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "Tallózás"
IDS_NOTOLEMOD "A fájl úgy tűnik nem egy érvényes OLE modul. Nem tudom regisztrálni az OLE vezérlőt."
IDS_NOTOLEMODCAPTION "Vezérlő hozzáadása"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -29,6 +29,8 @@ STRINGTABLE
IDS_BROWSE "Esplora"
IDS_NOTOLEMOD "Il file non sembra essere un modulo OLE valido. Impossibile registrare il controllo OLE."
IDS_NOTOLEMODCAPTION "Aggiungi Controllo"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "参照"
IDS_NOTOLEMOD "ファイルは有効なOLEモジュールではないようです。OLEコントロールを登録できません。"
IDS_NOTOLEMODCAPTION "コントロールを追加"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -26,6 +26,8 @@ STRINGTABLE
IDS_BROWSE "찾기"
IDS_NOTOLEMOD "이 파일은 올바른 OLE모듈이 아닌거로 보입니다. OLE컨트롤을 등록할수 없습니다."
IDS_NOTOLEMODCAPTION "컨트롤 더하기"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "Parinkti"
IDS_NOTOLEMOD "Panašu, kad failas nėra galiojantis OLE modulis. Nepavyko užregistruoti OLE valdiklio."
IDS_NOTOLEMODCAPTION "Pridėti valdiklį"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -29,6 +29,8 @@ STRINGTABLE
IDS_BROWSE "Bladeren"
IDS_NOTOLEMOD "Het bestand is geen geldig OLE bestand. De registratie is mislukt."
IDS_NOTOLEMODCAPTION "Toevoegen"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -25,6 +25,8 @@ STRINGTABLE
IDS_BROWSE "Bla"
IDS_NOTOLEMOD "Filen ser ikke ut til å være en gyldig OLE-modul. Kunne ikke registrere OLE-kontroller."
IDS_NOTOLEMODCAPTION "Legg til kontroller"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -26,6 +26,8 @@ STRINGTABLE
IDS_BROWSE "Przeglądaj"
IDS_NOTOLEMOD "Plik nie wydaje się być poprawnym modułem OLE. Nie udało się zarejestrować kontrolki OLE."
IDS_NOTOLEMODCAPTION "Dodaj kontrolkę"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -30,6 +30,8 @@ STRINGTABLE
IDS_BROWSE "Procurar"
IDS_NOTOLEMOD "O arquivo não parece ser um módulo OLE válido. Impossível registrar o controle OLE."
IDS_NOTOLEMODCAPTION "Adicionar Controle"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE
@ -108,6 +110,8 @@ STRINGTABLE
IDS_BROWSE "Procurar"
IDS_NOTOLEMOD "O ficheiro não parece ser um módulo OLE válido. Impossível registrar o controlo OLE."
IDS_NOTOLEMODCAPTION "Adicionar Controlo"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -30,6 +30,8 @@ STRINGTABLE
IDS_BROWSE "Navigare"
IDS_NOTOLEMOD "Fișierul nu pare a fi un modul OLE valid. Nu se poate înregistra controlul OLE."
IDS_NOTOLEMODCAPTION "Adaugă un control"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "Просмотр"
IDS_NOTOLEMOD "Файл не является корректным модулем OLE. Невозможно зарегистрировать элемент управления OLE."
IDS_NOTOLEMODCAPTION "Добавить элемент управления"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -27,6 +27,8 @@ STRINGTABLE
IDS_BROWSE "Brskaj"
IDS_NOTOLEMOD "Datoteka ni veljaven OLE modul. OLE kontrole ni mogoče registrirati."
IDS_NOTOLEMODCAPTION "Dodajanje kontrole"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "Shfleto"
IDS_NOTOLEMOD "Dokument nuk duket të ketë një modul të vlefshme OLE. Në pamundësi për të regjistruar kontrollin OLE."
IDS_NOTOLEMODCAPTION "Shto Kontroll"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -25,6 +25,8 @@ STRINGTABLE
IDS_BROWSE "Bläddra"
IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control."
IDS_NOTOLEMODCAPTION "Add Control"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -27,6 +27,8 @@ STRINGTABLE
IDS_BROWSE "Göz At"
IDS_NOTOLEMOD "Kütük, geçerli bir OLE parçası olarak görünmüyor. OLE denetimi saklanamıyor."
IDS_NOTOLEMODCAPTION "Denetim Ekle"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -28,6 +28,8 @@ STRINGTABLE
IDS_BROWSE "Огляд"
IDS_NOTOLEMOD "Файл не є модулем управління OLE. Не вдається зареєструвати елемент управління OLE."
IDS_NOTOLEMODCAPTION "Додати елемент управління"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -30,6 +30,8 @@ STRINGTABLE
IDS_BROWSE "浏览"
IDS_NOTOLEMOD "本文件不像是一个有效的 OLE 模型. 不能注册 OLE 控件."
IDS_NOTOLEMODCAPTION "添加控件"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE
@ -108,6 +110,8 @@ STRINGTABLE
IDS_BROWSE "瀏覽"
IDS_NOTOLEMOD "本檔案不像是一個有效的 OLE 模型. 不能註冊 OLE 控件."
IDS_NOTOLEMODCAPTION "添加控件"
IDS_VERBMENU_OBJECT "&Object"
IDS_VERBMENU_CONVERT "&Convert..."
}
STRINGTABLE

View file

@ -87,35 +87,154 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
/***********************************************************************
* OleUIAddVerbMenuA (OLEDLG.1)
*/
BOOL WINAPI OleUIAddVerbMenuA(
LPOLEOBJECT lpOleObj, LPCSTR lpszShortType,
HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
BOOL bAddConvert, UINT idConvert, HMENU *lphMenu)
BOOL WINAPI OleUIAddVerbMenuA(IOleObject *object, LPCSTR shorttype,
HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
BOOL addConvert, UINT idConvert, HMENU *lphMenu)
{
FIXME("(%p, %s, %p, %d, %d, %d, %d, %d, %p): stub\n",
lpOleObj, debugstr_a(lpszShortType),
hMenu, uPos, uIDVerbMin, uIDVerbMax,
bAddConvert, idConvert, lphMenu
);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
WCHAR *shorttypeW = NULL;
BOOL ret;
TRACE("(%p, %s, %p, %d, %d, %d, %d, %d, %p)\n", object, debugstr_a(shorttype),
hMenu, uPos, uIDVerbMin, uIDVerbMax, addConvert, idConvert, lphMenu);
if (shorttype)
{
INT len = MultiByteToWideChar(CP_ACP, 0, shorttype, -1, NULL, 0);
shorttypeW = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR));
if (shorttypeW)
MultiByteToWideChar(CP_ACP, 0, shorttype, -1, shorttypeW, len);
}
ret = OleUIAddVerbMenuW(object, shorttypeW, hMenu, uPos, uIDVerbMin, uIDVerbMax,
addConvert, idConvert, lphMenu);
HeapFree(GetProcessHeap(), 0, shorttypeW);
return ret;
}
static inline BOOL is_verb_in_range(const OLEVERB *verb, UINT idmin, UINT idmax)
{
if (idmax == 0) return TRUE;
return (verb->lVerb + idmin <= idmax);
}
static HRESULT get_next_insertable_verb(IEnumOLEVERB *enumverbs, UINT idmin, UINT idmax, OLEVERB *verb)
{
memset(verb, 0, sizeof(*verb));
while (IEnumOLEVERB_Next(enumverbs, 1, verb, NULL) == S_OK) {
if (is_verb_in_range(verb, idmin, idmax) && (verb->grfAttribs & OLEVERBATTRIB_ONCONTAINERMENU))
return S_OK;
CoTaskMemFree(verb->lpszVerbName);
memset(verb, 0, sizeof(*verb));
}
return S_FALSE;
}
static void insert_verb_to_menu(HMENU menu, UINT idmin, const OLEVERB *verb)
{
InsertMenuW(menu, ~0, verb->fuFlags | MF_BYPOSITION | MF_STRING, verb->lVerb + idmin, verb->lpszVerbName);
}
/***********************************************************************
* OleUIAddVerbMenuW (OLEDLG.14)
*/
BOOL WINAPI OleUIAddVerbMenuW(
LPOLEOBJECT lpOleObj, LPCWSTR lpszShortType,
HMENU hMenu, UINT uPos, UINT uIDVerbMin, UINT uIDVerbMax,
BOOL bAddConvert, UINT idConvert, HMENU *lphMenu)
BOOL WINAPI OleUIAddVerbMenuW(IOleObject *object, LPCWSTR shorttype,
HMENU hMenu, UINT uPos, UINT idmin, UINT idmax, BOOL addConvert, UINT idConvert, HMENU *ret_submenu)
{
FIXME("(%p, %s, %p, %d, %d, %d, %d, %d, %p): stub\n",
lpOleObj, debugstr_w(lpszShortType),
hMenu, uPos, uIDVerbMin, uIDVerbMax,
bAddConvert, idConvert, lphMenu
);
SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
static const WCHAR spaceW[] = {' ',0};
IEnumOLEVERB *enumverbs = NULL;
WCHAR *rootname, *objecttype;
LPOLESTR usertype = NULL;
OLEVERB firstverb, verb;
WCHAR resstrW[32]; /* should be enough */
BOOL singleverb;
HMENU submenu;
TRACE("(%p, %s, %p, %d, %d, %d, %d, %d, %p)\n", object, debugstr_w(shorttype),
hMenu, uPos, idmin, idmax, addConvert, idConvert, ret_submenu);
if (ret_submenu)
*ret_submenu = NULL;
if (!hMenu || !ret_submenu)
return FALSE;
/* check if we can get verbs at all */
if (object)
IOleObject_EnumVerbs(object, &enumverbs);
LoadStringW(OLEDLG_hInstance, IDS_VERBMENU_OBJECT, resstrW, sizeof(resstrW)/sizeof(WCHAR));
/* no object, or object without enumeration support */
if (!object || (object && !enumverbs)) {
InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_STRING|MF_GRAYED, idmin, resstrW);
return FALSE;
}
/* root entry string */
if (!shorttype && (IOleObject_GetUserType(object, USERCLASSTYPE_SHORT, &usertype) == S_OK))
objecttype = usertype;
else
objecttype = (WCHAR*)shorttype;
rootname = CoTaskMemAlloc((strlenW(objecttype) + strlenW(resstrW) + 2)*sizeof(WCHAR));
strcpyW(rootname, objecttype);
strcatW(rootname, spaceW);
strcatW(rootname, resstrW);
CoTaskMemFree(usertype);
/* iterate through verbs */
/* find first suitable verb */
get_next_insertable_verb(enumverbs, idmin, idmax, &firstverb);
singleverb = get_next_insertable_verb(enumverbs, idmin, idmax, &verb) != S_OK;
if (singleverb && !addConvert) {
WCHAR *str = CoTaskMemAlloc((strlenW(rootname) + strlenW(firstverb.lpszVerbName) + 2)*sizeof(WCHAR));
strcpyW(str, firstverb.lpszVerbName);
strcatW(str, spaceW);
strcatW(str, rootname);
RemoveMenu(hMenu, uPos, MF_BYPOSITION);
InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_STRING, idmin, str);
CoTaskMemFree(firstverb.lpszVerbName);
CoTaskMemFree(rootname);
CoTaskMemFree(str);
IEnumOLEVERB_Release(enumverbs);
return TRUE;
}
submenu = CreatePopupMenu();
insert_verb_to_menu(submenu, idmin, &firstverb);
CoTaskMemFree(firstverb.lpszVerbName);
if (!singleverb) {
insert_verb_to_menu(submenu, idmin, &verb);
CoTaskMemFree(verb.lpszVerbName);
}
while (get_next_insertable_verb(enumverbs, idmin, idmax, &verb) == S_OK) {
insert_verb_to_menu(submenu, idmin, &verb);
CoTaskMemFree(verb.lpszVerbName);
}
/* convert verb is at the bottom of a popup, separated from verbs */
if (addConvert) {
LoadStringW(OLEDLG_hInstance, IDS_VERBMENU_CONVERT, resstrW, sizeof(resstrW)/sizeof(WCHAR));
InsertMenuW(submenu, ~0, MF_BYPOSITION|MF_SEPARATOR, 0, NULL);
InsertMenuW(submenu, ~0, MF_BYPOSITION|MF_STRING, idConvert, resstrW);
}
if (submenu)
*ret_submenu = submenu;
/* now submenu is ready, add root entry to original menu, attach submenu */
InsertMenuW(hMenu, uPos, MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT_PTR)submenu, rootname);
IEnumOLEVERB_Release(enumverbs);
CoTaskMemFree(rootname);
return TRUE;
}
/***********************************************************************

View file

@ -693,7 +693,7 @@ UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW ps)
HRSRC hrsrc;
if(name == NULL) return OLEUI_ERR_LPSZTEMPLATEINVALID;
hrsrc = FindResourceW(hInst, name, MAKEINTRESOURCEW(RT_DIALOG));
hrsrc = FindResourceW(hInst, name, (LPWSTR)RT_DIALOG);
if(!hrsrc) return OLEUI_ERR_FINDTEMPLATEFAILURE;
dlg_templ = LoadResource(hInst, hrsrc);
if(!dlg_templ) return OLEUI_ERR_LOADTEMPLATEFAILURE;

View file

@ -41,6 +41,10 @@
#define IDC_FILELBL 1010
#define IDC_FILE 1011
/* String ids for verb menu */
#define IDS_VERBMENU_CONVERT 0x130
#define IDS_VERBMENU_OBJECT 0x135
/* String ids for Paste Special */
#define IDS_PS_PASTE_DATA 0x190
#define IDS_PS_PASTE_OBJECT 0x191

View file

@ -149,7 +149,7 @@ reactos/dll/win32/ole32 # Synced to WineStaging-1.7.47
reactos/dll/win32/oleacc # Synced to WineStaging-1.7.47
reactos/dll/win32/oleaut32 # Synced to WineStaging-1.7.47
reactos/dll/win32/olecli32 # Synced to WineStaging-1.7.37
reactos/dll/win32/oledlg # Synced to WineStaging-1.7.37
reactos/dll/win32/oledlg # Synced to WineStaging-1.7.47
reactos/dll/win32/olepro32 # Synced to WineStaging-1.7.37
reactos/dll/win32/olesvr32 # Synced to WineStaging-1.7.37
reactos/dll/win32/olethk32 # Synced to WineStaging-1.7.37