diff --git a/reactos/dll/win32/oledlg/insobjdlg.c b/reactos/dll/win32/oledlg/insobjdlg.c
index 8928b35acc4..e945a077d24 100644
--- a/reactos/dll/win32/oledlg/insobjdlg.c
+++ b/reactos/dll/win32/oledlg/insobjdlg.c
@@ -57,7 +57,7 @@ typedef struct
} InsertObjectDlgInfo;
-INT_PTR CALLBACK UIInsertObjectDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
+static INT_PTR CALLBACK UIInsertObjectDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static LRESULT UIINSOBJDLG_OnWMCommand(HWND hwnd, WPARAM wParam, LPARAM lParam);
static void UIINSERTOBJECTDLG_InitDialog(InsertObjectDlgInfo* pdlgInfo);
static void UIINSERTOBJECTDLG_SelectCreateCtrl(InsertObjectDlgInfo* pdlgInfo);
diff --git a/reactos/dll/win32/oledlg/oledlg.rbuild b/reactos/dll/win32/oledlg/oledlg.rbuild
index 1e8996256f2..ee1bfd4a164 100644
--- a/reactos/dll/win32/oledlg/oledlg.rbuild
+++ b/reactos/dll/win32/oledlg/oledlg.rbuild
@@ -17,6 +17,7 @@
ntdll
insobjdlg.c
oledlg_main.c
+ pastespl.c
rsrc.rc
oledlg.spec
diff --git a/reactos/dll/win32/oledlg/oledlg_De.rc b/reactos/dll/win32/oledlg/oledlg_De.rc
index 501b2129bd6..b2ae5faf43a 100644
--- a/reactos/dll/win32/oledlg/oledlg_De.rc
+++ b/reactos/dll/win32/oledlg/oledlg_De.rc
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_GERMAN, SUBLANG_DEFAULT
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
@@ -53,3 +53,43 @@ STRINGTABLE DISCARDABLE
IDS_NOTOLEMOD "Die Datei ist offenbar kein gltiges OLE - Steuermodul. Die OLE - Steuerung konnte nicht registiert werden."
IDS_NOTOLEMODCAPTION "Steuerung hinzufgen"
}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Inhalte einfgen"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Quelle:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "&Einfgen", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "&Verknpfung einfgen", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&Als:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14
+ CONTROL "Abbrechen", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14
+ CONTROL "&Hilfe", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14
+ CONTROL "Als Symbol &darstellen", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
+ CONTROL "&Symbol ndern...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< result text goes here >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "Ergebnis", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA "Fgt den Inhalt der Zwischenablage in Ihr Dokument als %s ein."
+ IDS_PS_PASTE_OBJECT "Fgt den Inhalt der Zwischenablage so in Ihr Dokument ein dass Sie es mit %s aktivieren knnen."
+ IDS_PS_PASTE_OBJECT_AS_ICON "Fgt den Inhalt der Zwischenablage so in Ihr Dokument ein dass Sie es mit %s aktivieren knnen. Wird als Symbol dargestellt."
+ IDS_PS_PASTE_LINK_DATA "Fgt den Inhalt der Zwischenablage in Ihr Dokument als %s ein. Die Daten sind mit der Ursprungsdatei verknpft so dass nderungen an dieser in Ihrem Dokument erscheinen."
+ IDS_PS_PASTE_LINK_OBJECT "Fgt ein Bild des Zwischenablagen-Inhalts in Ihr Dokument ein. Das Bild ist mit der Ursprungsdatei verknpft so dass nderungen an dieser in Ihrem Dokument erscheinen."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Fgt eine Verknpfung ein die auf den Ort des Zwischenablagen-Inhalts zeigt. Die Verknpfung ist mit der Ursprungsdatei verknpft so dass nderungen an dieser in Ihrem Dokument erscheinen."
+ IDS_PS_NON_OLE "Fgt den Inhalt der Zwischenablage in Ihr Dokument als ein."
+ IDS_PS_UNKNOWN_TYPE "Unbekannter Typ"
+ IDS_PS_UNKNOWN_SRC "Unbekannte Quelle"
+ IDS_PS_UNKNOWN_APP "dem Erzeugerprogramm"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_En.rc b/reactos/dll/win32/oledlg/oledlg_En.rc
index 9d746f677b7..5b89a252c52 100644
--- a/reactos/dll/win32/oledlg/oledlg_En.rc
+++ b/reactos/dll/win32/oledlg/oledlg_En.rc
@@ -53,3 +53,43 @@ STRINGTABLE DISCARDABLE
IDS_NOTOLEMOD "File does not appear to be a valid OLE module. Unable to register OLE control."
IDS_NOTOLEMODCAPTION "Add Control"
}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Paste Special"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Source:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "&Paste", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "Paste &Link", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&As:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14
+ CONTROL "Cancel", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14
+ CONTROL "&Help", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14
+ CONTROL "&Display As Icon", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
+ CONTROL "Change &Icon...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< result text goes here >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "Result", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA "Inserts the contents of the clipboard into your document as %s."
+ IDS_PS_PASTE_OBJECT "Inserts the contents of the clipboard into your document so that you can activate it using %s."
+ IDS_PS_PASTE_OBJECT_AS_ICON "Inserts the contents of the clipboard into your document so that you can activate it using %s. It will be displayed as an icon."
+ IDS_PS_PASTE_LINK_DATA "Inserts the contents of the clipboard into your document as %s. The data is linked to the source file so that changes to the file will be reflected in your document."
+ IDS_PS_PASTE_LINK_OBJECT "Inserts a picture of the clipboard contents into your document. The picture is linked to the source file so that changes to the file will be reflected in your document."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Inserts a shortcut which points to the location of the clipboard contents. The shortcut is linked to the source file so that changes to the file will be reflected in your document."
+ IDS_PS_NON_OLE "Inserts the contents of the clipboard into your document."
+ IDS_PS_UNKNOWN_TYPE "Unknown Type"
+ IDS_PS_UNKNOWN_SRC "Unknown Source"
+ IDS_PS_UNKNOWN_APP "the program which created it"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_Fr.rc b/reactos/dll/win32/oledlg/oledlg_Fr.rc
index 8cf7f1067ad..41654cb75f4 100644
--- a/reactos/dll/win32/oledlg/oledlg_Fr.rc
+++ b/reactos/dll/win32/oledlg/oledlg_Fr.rc
@@ -2,7 +2,7 @@
* oledlg dll resources
* French language support
*
- * Copyright (C) 2005 Jonathan Ernst
+ * Copyright (C) 2005-2006 Jonathan Ernst
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -30,30 +30,70 @@ BEGIN
LISTBOX IDC_OBJTYPELIST,82,19,131,66,LBS_SORT |
LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL |
WS_TABSTOP
- LTEXT "Type d'objet:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE
+ LTEXT "Type d'objet :",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE
DEFPUSHBUTTON "OK",IDOK,221,7,66,14
PUSHBUTTON "Annuler",IDCANCEL,221,24,66,14
GROUPBOX "Rsultat",IDC_RESULT,7,103,208,41
- CONTROL "Crer Nouveau",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
+ CONTROL "Crer nouveau",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,7,20,62,10
- CONTROL "Crer Contrle",IDC_CREATECONTROL,"Button",
+ CONTROL "Crer le contrle",IDC_CREATECONTROL,"Button",
BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10
- CONTROL "Crer Depuis Fichier",IDC_CREATEFROMFILE,"Button",
+ CONTROL "Crer depuis le fichier",IDC_CREATEFROMFILE,"Button",
BS_AUTORADIOBUTTON,7,37,67,10
LTEXT "",IDC_RESULTDESC,49,112,159,23
PUSHBUTTON "&Ajoute Contrle...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE
- CONTROL "Afficher Comme Icne",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
+ CONTROL "Afficher comme icne",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP | NOT WS_VISIBLE,223,58,64,10
PUSHBUTTON "Parcourir...",IDC_BROWSE,83,53,50,14,NOT WS_VISIBLE
- LTEXT "Fichier:",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE
+ LTEXT "Fichier :",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE
EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
END
STRINGTABLE DISCARDABLE
{
IDS_RESULTOBJDESC "Insrer un nouvel object %s dans votre document"
- IDS_RESULTFILEOBJDESC "Insre le contenu du fichier comme un objet dans votre document afin que vous puissiez l'activer en utilisant le programme avec lequel vous l'avez cr."
+ IDS_RESULTFILEOBJDESC "Insre le contenu du fichier comme un objet dans votre document afin que vous puissiez l'activer en utilisant le programme avec lequel il a t cr."
IDS_BROWSE "Parcourir"
IDS_NOTOLEMOD "Le fichier ne semble pas tre un module OLE valide. Impossible d'enregistrer le contrle OLE."
- IDS_NOTOLEMODCAPTION "Ajouter Contrle"
+ IDS_NOTOLEMODCAPTION "Ajouter un contrle"
+}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Collage spcial"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Source :", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "C&oller", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "Coller le &lien", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&Comme :", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14
+ CONTROL "Annuler", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14
+ CONTROL "Aid&e", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14
+ CONTROL "&Afficher comme icne", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
+ CONTROL "Changer l'&icne...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< le rsultat vient ici >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "Rsultat", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA "Insre le contenu du presse-papiers dans votre document comme %s."
+ IDS_PS_PASTE_OBJECT "Insre le contenu du presse-papiers dans votre document de sorte que vous puissiez l'activer en utilisant %s."
+ IDS_PS_PASTE_OBJECT_AS_ICON "Insre le contenu du presse-papiers dans votre document de sorte que vous puissiez l'activer en utilisant %s. Il sera affich comme une icne."
+ IDS_PS_PASTE_LINK_DATA "Insre le contenu du presse-papiers dans votre document comme %s. Les donnes sont lies au fichier source de sorte que les modifications de celles-ci seront rpercutes dans votre document."
+ IDS_PS_PASTE_LINK_OBJECT "Insre le contenu du presse-papiers dans votre document. L'image est lie au fichier source de sorte que les modifications de celle-ci seront rpercutes dans votre document."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Insre un raccourci qui pointe vers l'emplacement du contenu du presse-papiers. Le raccourci est li au fichier source de sorte que les modifications de celui-ci seront rpercutes dans votre document."
+ IDS_PS_NON_OLE "Insre le contenu du presse-papiers dans votre document."
+ IDS_PS_UNKNOWN_TYPE "Type inconnu"
+ IDS_PS_UNKNOWN_SRC "Source inconnue"
+ IDS_PS_UNKNOWN_APP "le programme avec lequel il a t cr"
}
diff --git a/reactos/dll/win32/oledlg/oledlg_It.rc b/reactos/dll/win32/oledlg/oledlg_It.rc
index 3fa660267ee..d6135cb7408 100644
--- a/reactos/dll/win32/oledlg/oledlg_It.rc
+++ b/reactos/dll/win32/oledlg/oledlg_It.rc
@@ -17,7 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_ITALIAN, SUBLANG_DEFAULT
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
diff --git a/reactos/dll/win32/oledlg/oledlg_Ko.rc b/reactos/dll/win32/oledlg/oledlg_Ko.rc
index b29ef980f8c..1182cbf5689 100644
--- a/reactos/dll/win32/oledlg/oledlg_Ko.rc
+++ b/reactos/dll/win32/oledlg/oledlg_Ko.rc
@@ -16,7 +16,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
+LANGUAGE LANG_KOREAN, SUBLANG_NEUTRAL
UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
@@ -53,3 +53,43 @@ STRINGTABLE DISCARDABLE
IDS_NOTOLEMOD " ùٸ OLE ƴѰŷ Դϴ. OLEƮ Ҽ ϴ."
IDS_NOTOLEMODCAPTION "Ʈ ϱ"
}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Ưϰ ٿֱ"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT ":", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "ٿֱ(&P)", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "ũ ٿֱ(&L)", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&As:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "Ȯ", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14
+ CONTROL "", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14
+ CONTROL "(&H)", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14
+ CONTROL " (&D)", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
+ CONTROL " ٲٱ(&I)...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< ؽƮ ٰ >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA " %s Ŭ ϱ."
+ IDS_PS_PASTE_OBJECT " Ŭ ÷ϸ %s ؼ ̰ ֽϴ."
+ IDS_PS_PASTE_OBJECT_AS_ICON " Ŭ ÷ϸ %s ؼ ̰ ֽϴ. ̰ Ÿ ̴ϴ."
+ IDS_PS_PASTE_LINK_DATA " %s Ŭ ϱ. ʹ Ͽ Ǿ ־ ٲ ٲ̴ϴ."
+ IDS_PS_PASTE_LINK_OBJECT " Ŭ忡 ִ ֽϴ. Ͽ Ǿ ־ ٲ ٲ̴ϴ."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON " Ŭ忡 ִ ֽϴ. Ͽ Ǿ ־ ٲ ٲ̴ϴt."
+ IDS_PS_NON_OLE " Ŭ ϱ."
+ IDS_PS_UNKNOWN_TYPE "˼ "
+ IDS_PS_UNKNOWN_SRC "˼ "
+ IDS_PS_UNKNOWN_APP " α α ϴ"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_Nl.rc b/reactos/dll/win32/oledlg/oledlg_Nl.rc
index afd737630c6..62eb5d11e64 100644
--- a/reactos/dll/win32/oledlg/oledlg_Nl.rc
+++ b/reactos/dll/win32/oledlg/oledlg_Nl.rc
@@ -17,7 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_DUTCH, SUBLANG_DEFAULT
+LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
@@ -33,7 +33,7 @@ BEGIN
GROUPBOX "Resultaat",IDC_RESULT,7,103,208,41
CONTROL "Nieuw",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
WS_GROUP,7,20,62,10
- CONTROL "Creëren",IDC_CREATECONTROL,"Button",
+ CONTROL "Creren",IDC_CREATECONTROL,"Button",
BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10
CONTROL "Bestand gebruiken",IDC_CREATEFROMFILE,"Button",
BS_AUTORADIOBUTTON,7,37,67,10
diff --git a/reactos/dll/win32/oledlg/oledlg_No.rc b/reactos/dll/win32/oledlg/oledlg_No.rc
index fe7bf570559..e56c721cc81 100644
--- a/reactos/dll/win32/oledlg/oledlg_No.rc
+++ b/reactos/dll/win32/oledlg/oledlg_No.rc
@@ -1,5 +1,5 @@
/*
- * Copyright 2005 Alexander N. Srnes
+ * Copyright 2005-2006 Alexander N. Srnes
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -53,3 +53,43 @@ STRINGTABLE DISCARDABLE
IDS_NOTOLEMOD "Filen ser ikke ut til vre en gyldig OLE-modul. Kunne ikke registrere OLE-kontroller."
IDS_NOTOLEMODCAPTION "Legg til kontroller"
}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 293, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Lim inn spesiell"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Kilde:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "Lim in&n", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "Lim inn kob&ling", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&Som:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 224, 6, 66, 14
+ CONTROL "Avbryt", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 23, 66, 14
+ CONTROL "&Hjelp", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 42, 66, 14
+ CONTROL "&Vis som ikon", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 66, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 224, 75, 66, 44
+ CONTROL "Endre &ikon . . .", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 224, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< resultatet kommer her >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "Resultat", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Rediger", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA "Setter innholdet fra utklippstavlen inn i dokumentet som %s."
+ IDS_PS_PASTE_OBJECT "Setter innholdet fra utklippstavlen inn i dokumentet s du kan aktivere det med %s."
+ IDS_PS_PASTE_OBJECT_AS_ICON "Setter innholdet fra utklippstavlen inn i dokumentet s du kan aktivere det med %s. Det vises som et ikon."
+ IDS_PS_PASTE_LINK_DATA "Setter innholdet fra utklippstavlen inn i dokumentet som %s. Det kobles til kildefilen s endrer i denne ogs skjer i dokumentet."
+ IDS_PS_PASTE_LINK_OBJECT "Setter inn et bilde av utklippstavleinnholdet i dokumentet. Bildet kobles til kildefilen s endringer i denne ogs skjer i dokumentet ."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Setter inn en snarvei som peker til plasseringen av innholdet p utklippstavlen. Snarveien kobles til kildefilen s endringer i denne ogs skjer i dokumentet."
+ IDS_PS_NON_OLE "Setter innholdet fra utklippstavlen inn i dokumentet."
+ IDS_PS_UNKNOWN_TYPE "Ukjent type"
+ IDS_PS_UNKNOWN_SRC "Ukjent kilde"
+ IDS_PS_UNKNOWN_APP "programmet som laget det"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_Pl.rc b/reactos/dll/win32/oledlg/oledlg_Pl.rc
new file mode 100644
index 00000000000..36aaaa4846b
--- /dev/null
+++ b/reactos/dll/win32/oledlg/oledlg_Pl.rc
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2003 Ulrich Czekalla for CodeWeavers
+ * Copyright 2006 Mikolaj Zalewski
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
+
+UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 310, 151
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Wstaw objekt"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LISTBOX IDC_OBJTYPELIST,82,19,131,66,LBS_SORT |
+ LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL |
+ WS_TABSTOP
+ LTEXT "Typ obiektu:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE
+ DEFPUSHBUTTON "OK",IDOK,229,7,66,14
+ PUSHBUTTON "Anuluj",IDCANCEL,229,24,66,14
+ GROUPBOX "Wynik",IDC_RESULT,7,103,208,41
+ CONTROL "Utwrz nowy",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,7,20,62,10
+ CONTROL "Utwrz kontrolk",IDC_CREATECONTROL,"Button",
+ BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,72,10
+ CONTROL "Utwrz z pliku",IDC_CREATEFROMFILE,"Button",
+ BS_AUTORADIOBUTTON,7,37,67,10
+ LTEXT "",IDC_RESULTDESC,49,112,159,23
+ PUSHBUTTON "&Dodaj kontrolk...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE
+ CONTROL "Wywietlaj jako ikon",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP | NOT WS_VISIBLE,223,58,84,10
+ PUSHBUTTON "Przegldaj...",IDC_BROWSE,83,53,50,14,NOT WS_VISIBLE
+ LTEXT "Plik:",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE
+ EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_RESULTOBJDESC "Wstaw nowy objekt %s do dokumentu"
+ IDS_RESULTFILEOBJDESC "Wstaw zawarto pliku jako obiekt do dokumentu. Bdzie mona go aktywowa uywajc programu, ktry go stworzy."
+ IDS_BROWSE "Przegldaj"
+ IDS_NOTOLEMOD "Plik nie wydaje si by poprawnym moduem OLE. Nie udao si zarejestrowa kontrolki OLE."
+ IDS_NOTOLEMODCAPTION "Dodaj kontrolk"
+}
+
+IDD_PASTESPECIAL4 DIALOG DISCARDABLE 3, 15, 309, 140
+STYLE DS_MODALFRAME | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Wklej specjalnie"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "rdo:", -1, 6, 9, 30, 8, WS_VISIBLE | WS_GROUP
+ CONTROL "&Wklej", IDC_PS_PASTE, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE,
+ 6, 38, 55, 10
+ CONTROL "Wklej &cz", IDC_PS_PASTELINK, "Button", BS_AUTORADIOBUTTON | WS_VISIBLE,
+ 6, 63, 55, 10
+ LTEXT "&Jako:", -1, 65, 25, 16, 8, WS_VISIBLE | WS_GROUP
+ LISTBOX IDC_PS_PASTELIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_PASTELINKLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | NOT WS_VISIBLE
+ LISTBOX IDC_PS_DISPLAYLIST, 65, 36, 153, 57, LBS_NOTIFY | LBS_USETABSTOPS | WS_VSCROLL | WS_BORDER | WS_VISIBLE
+ CONTROL "OK", IDOK, "Button", BS_DEFPUSHBUTTON | WS_TABSTOP | WS_GROUP | WS_VISIBLE, 232, 6, 66, 14
+ CONTROL "Anuluj", IDCANCEL, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 232, 23, 66, 14
+ CONTROL "&Pomoc", IDC_OLEUIHELP, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 232, 42, 66, 14
+ CONTROL "W&ywietlaj jako ikon", IDC_PS_DISPLAYASICON, "Button", BS_AUTOCHECKBOX | WS_TABSTOP | WS_VISIBLE, 224, 59, 84, 14
+ CONTROL "", IDC_PS_ICONDISPLAY, "Static", SS_ICON | WS_VISIBLE, 232, 75, 66, 44
+ CONTROL "Zmie &ikon...", IDC_PS_CHANGEICON, "Button", BS_PUSHBUTTON | WS_TABSTOP | WS_VISIBLE, 232, 123, 66, 14
+ CONTROL "", IDC_PS_RESULTIMAGE, "Static", SS_ICON | WS_VISIBLE, 8, 101, 42, 34
+ CONTROL "<< result text goes here >>", IDC_PS_RESULTTEXT, "Static", SS_NOPREFIX | WS_VISIBLE, 54, 100, 159, 35
+ CONTROL "Wynik", -1, "Button", BS_GROUPBOX | WS_GROUP | WS_VISIBLE, 6, 90, 212, 48
+ CONTROL "", IDC_PS_SOURCETEXT, "Edit", ES_READONLY | ES_AUTOHSCROLL | WS_VISIBLE, 37, 9, 180, 8
+END
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_PS_PASTE_DATA "Wstawia zawarto schowka do documentu jako %s."
+ IDS_PS_PASTE_OBJECT "Wstawia zawarto schowka do dokumentu, tak aby mg by aktywowany za pomoc %s."
+ IDS_PS_PASTE_OBJECT_AS_ICON "Wstawia zawarto schowka do dokumentu, tak aby mg by aktywowany za pomoc %s. Bdzie wywietlany jako ikona."
+ IDS_PS_PASTE_LINK_DATA "Wstawia zawarto schowka do documentu jako %s. Dane bd poczone z plikiem rdowym, dziki czemu zmiany w pliku bd odzwierciedlone w dokumencie."
+ IDS_PS_PASTE_LINK_OBJECT "Wstawia zawarto schowka do documentu jako obraz. Obraz bdzie poczony z plikiem rdowym, dziki czemu zmiany w pliku bd odzwierciedlone w dokumencie."
+ IDS_PS_PASTE_LINK_OBJECT_AS_ICON "Wstawia do documentu skrt do zawartoci schowka. Skrt bdzie poczony z plikiem rdowym, dziki czemu zmiany w pliku bd odzwierciedlone w dokumencie."
+ IDS_PS_NON_OLE "Wstawia zawarto schowka do dokumentu"
+ IDS_PS_UNKNOWN_TYPE "Nieznany typ"
+ IDS_PS_UNKNOWN_SRC "Nieznane rdo"
+ IDS_PS_UNKNOWN_APP "program ktry go stworzy"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_Pt.rc b/reactos/dll/win32/oledlg/oledlg_Pt.rc
index 40c7539212b..69cd06a4629 100644
--- a/reactos/dll/win32/oledlg/oledlg_Pt.rc
+++ b/reactos/dll/win32/oledlg/oledlg_Pt.rc
@@ -1,5 +1,6 @@
/*
* Copyright 2004 Marcelo Duarte
+ * Copyright 2006 Amrico Jos Melo
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -16,7 +17,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-LANGUAGE LANG_PORTUGUESE, SUBLANG_DEFAULT
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
@@ -45,6 +46,38 @@ BEGIN
EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
END
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+
+UIINSERTOBJECT DIALOG DISCARDABLE 0, 0, 294, 151
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Inserir objecto"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LISTBOX IDC_OBJTYPELIST,82,19,131,66,LBS_SORT |
+ LBS_NOINTEGRALHEIGHT | WS_VISIBLE | WS_VSCROLL |
+ WS_TABSTOP
+ LTEXT "Tipo de objecto:",IDC_OBJTYPELBL,82,7,53,8,WS_VISIBLE
+ DEFPUSHBUTTON "OK",IDOK,221,7,66,14
+ PUSHBUTTON "Cancelar",IDCANCEL,221,24,66,14
+ GROUPBOX "Resultado",IDC_RESULT,7,103,208,41
+ CONTROL "Criar novo",IDC_CREATENEW,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,7,20,62,10
+ CONTROL "Criar controlo",IDC_CREATECONTROL,"Button",
+ BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,54,62,10
+ CONTROL "Criar do ficheiro",IDC_CREATEFROMFILE,"Button",
+ BS_AUTORADIOBUTTON,7,37,67,10
+ LTEXT "",IDC_RESULTDESC,49,112,159,23
+ PUSHBUTTON "&Adicionar Controlo...",IDC_ADDCONTROL,81,88,63,14,NOT WS_VISIBLE
+ CONTROL "Mostrar como cone",IDC_ASICON,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP | NOT WS_VISIBLE,223,58,64,10
+ PUSHBUTTON "Procurar...",IDC_BROWSE,83,53,50,14,NOT WS_VISIBLE
+ LTEXT "Ficheiro:",IDC_FILELBL,83,27,20,8, NOT WS_VISIBLE
+ EDITTEXT IDC_FILE,83,37,132,13,ES_AUTOHSCROLL | NOT WS_VISIBLE
+END
+
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
+
STRINGTABLE DISCARDABLE
{
IDS_RESULTOBJDESC "Inserir um novo objeto %s no documento"
@@ -53,3 +86,14 @@ STRINGTABLE DISCARDABLE
IDS_NOTOLEMOD "O arquivo no parece ser um mdulo OLE vlido. Impossvel registrar o controle OLE."
IDS_NOTOLEMODCAPTION "Adicionar Controle"
}
+
+LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
+
+STRINGTABLE DISCARDABLE
+{
+ IDS_RESULTOBJDESC "Inserir novo objecto %s no documento"
+ IDS_RESULTFILEOBJDESC "Inserir contedo do ficheiro como um objecto no documento de modo que opossa activar usando o programa que o criou."
+ IDS_BROWSE "Procurar"
+ IDS_NOTOLEMOD "O ficheiro no parece ser um mdulo OLE vlido. Impossvel registrar o controlo OLE."
+ IDS_NOTOLEMODCAPTION "Adicionar Controlo"
+}
diff --git a/reactos/dll/win32/oledlg/oledlg_main.c b/reactos/dll/win32/oledlg/oledlg_main.c
index c7daf5f83d4..6033231ea6f 100644
--- a/reactos/dll/win32/oledlg/oledlg_main.c
+++ b/reactos/dll/win32/oledlg/oledlg_main.c
@@ -18,7 +18,6 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#define COM_NO_WINDOWS_H
#include
#include "windef.h"
@@ -27,24 +26,69 @@
#include "wingdi.h"
#include "winuser.h"
#include "oledlg.h"
-#include "wine/debug.h"
#include "ole2.h"
+#include "oledlg_private.h"
+
+#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(ole);
HINSTANCE OLEDLG_hInstance = 0;
+UINT cf_embed_source;
+UINT cf_embedded_object;
+UINT cf_link_source;
+UINT cf_object_descriptor;
+UINT cf_link_src_descriptor;
+UINT cf_ownerlink;
+UINT cf_filename;
+UINT cf_filenamew;
+
+UINT oleui_msg_help;
+UINT oleui_msg_enddialog;
+
+static void register_clipboard_formats(void)
+{
+ /* These used to be declared in olestd.h, but that seems to have been removed from the api */
+ static const WCHAR CF_EMBEDSOURCEW[] = { 'E','m','b','e','d',' ','S','o','u','r','c','e',0 };
+ static const WCHAR CF_EMBEDDEDOBJECTW[] = { 'E','m','b','e','d','d','e','d',' ','O','b','j','e','c','t',0 };
+ static const WCHAR CF_LINKSOURCEW[] = { 'L','i','n','k',' ','S','o','u','r','c','e',0 };
+ static const WCHAR CF_OBJECTDESCRIPTORW[] = { 'O','b','j','e','c','t',' ','D','e','s','c','r','i','p','t','o','r',0 };
+ static const WCHAR CF_LINKSRCDESCRIPTORW[] = { 'L','i','n','k',' ','S','o','u','r','c','e',' ','D','e','s','c','r','i','p','t','o','r',0 };
+ static const WCHAR CF_OWNERLINKW[] = { 'O','w','n','e','r','L','i','n','k',0 };
+ static const WCHAR CF_FILENAMEW[] = { 'F','i','l','e','N','a','m','e',0 };
+ static const WCHAR CF_FILENAMEWW[] = { 'F','i','l','e','N','a','m','e','W',0 };
+
+ /* Load in the same order as native to make debugging easier */
+ cf_object_descriptor = RegisterClipboardFormatW(CF_OBJECTDESCRIPTORW);
+ cf_link_src_descriptor = RegisterClipboardFormatW(CF_LINKSRCDESCRIPTORW);
+ cf_embed_source = RegisterClipboardFormatW(CF_EMBEDSOURCEW);
+ cf_embedded_object = RegisterClipboardFormatW(CF_EMBEDDEDOBJECTW);
+ cf_link_source = RegisterClipboardFormatW(CF_LINKSOURCEW);
+ cf_ownerlink = RegisterClipboardFormatW(CF_OWNERLINKW);
+ cf_filename = RegisterClipboardFormatW(CF_FILENAMEW);
+ cf_filenamew = RegisterClipboardFormatW(CF_FILENAMEWW);
+}
+
+static void register_messages(void)
+{
+ oleui_msg_help = RegisterWindowMessageW(SZOLEUI_MSG_HELPW);
+ oleui_msg_enddialog = RegisterWindowMessageW(SZOLEUI_MSG_ENDDIALOGW);
+}
+
/***********************************************************************
* DllMain
*/
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad)
{
- TRACE("%p 0x%lx %p\n", hinstDLL, fdwReason, fImpLoad);
+ TRACE("%p 0x%x %p\n", hinstDLL, fdwReason, fImpLoad);
switch(fdwReason) {
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
OLEDLG_hInstance = hinstDLL;
+ register_clipboard_formats();
+ register_messages();
break;
case DLL_PROCESS_DETACH:
@@ -112,26 +156,6 @@ UINT WINAPI OleUIInsertObjectW(LPOLEUIINSERTOBJECTW lpOleUIInsertObject)
return OLEUI_FALSE;
}
-/***********************************************************************
- * OleUIPasteSpecialA (OLEDLG.4)
- */
-UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA lpOleUIPasteSpecial)
-{
- FIXME("(%p): stub\n", lpOleUIPasteSpecial);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return OLEUI_FALSE;
-}
-
-/***********************************************************************
- * OleUIPasteSpecialW (OLEDLG.22)
- */
-UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW lpOleUIPasteSpecial)
-{
- FIXME("(%p): stub\n", lpOleUIPasteSpecial);
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return OLEUI_FALSE;
-}
-
/***********************************************************************
* OleUIEditLinksA (OLEDLG.5)
*/
diff --git a/reactos/dll/win32/oledlg/oledlg_private.h b/reactos/dll/win32/oledlg/oledlg_private.h
new file mode 100644
index 00000000000..4ff3bb6f9f8
--- /dev/null
+++ b/reactos/dll/win32/oledlg/oledlg_private.h
@@ -0,0 +1,38 @@
+/*
+ * oledlg internal header file
+ *
+ * Copyright (C) 2006 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef __OLEDLG_PRIVATE_H__
+#define __OLEDLG_PRIVATE_H__
+
+extern HINSTANCE OLEDLG_hInstance;
+
+extern UINT cf_embed_source;
+extern UINT cf_embedded_object;
+extern UINT cf_link_source;
+extern UINT cf_object_descriptor;
+extern UINT cf_link_src_descriptor;
+extern UINT cf_ownerlink;
+extern UINT cf_filename;
+extern UINT cf_filenamew;
+
+extern UINT oleui_msg_help;
+extern UINT oleui_msg_enddialog;
+
+#endif /* __OLEDLG_PRIVATE_H__ */
diff --git a/reactos/dll/win32/oledlg/oledlg_ros.diff b/reactos/dll/win32/oledlg/oledlg_ros.diff
index 878d24e9aa4..630e4f60478 100644
--- a/reactos/dll/win32/oledlg/oledlg_ros.diff
+++ b/reactos/dll/win32/oledlg/oledlg_ros.diff
@@ -58,8 +58,8 @@ Index: rsrc.rc
===================================================================
--- rsrc.rc (revision 25690)
+++ rsrc.rc (revision working copy)
-@@ -44,3 +44,4 @@
- #include "oledlg_No.rc"
+@@ -47,3 +47,4 @@
+ #include "oledlg_Pl.rc"
#include "oledlg_Pt.rc"
#include "oledlg_Tr.rc"
+#include "oledlg_Uk.rc"
diff --git a/reactos/dll/win32/oledlg/pastespl.c b/reactos/dll/win32/oledlg/pastespl.c
new file mode 100644
index 00000000000..64507e7f9a4
--- /dev/null
+++ b/reactos/dll/win32/oledlg/pastespl.c
@@ -0,0 +1,722 @@
+/*
+ * OleUIPasteSpecial implementation
+ *
+ * Copyright 2006 Huw Davies
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+#define NONAMELESSSTRUCT
+#define NONAMELESSUNION
+
+#include
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "wingdi.h"
+#include "winuser.h"
+#include "winnls.h"
+#include "oledlg.h"
+
+#include "oledlg_private.h"
+#include "resource.h"
+
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+typedef struct
+{
+ OLEUIPASTESPECIALW *ps;
+ DWORD flags;
+ WCHAR *source_name;
+ WCHAR *link_source_name;
+ WCHAR *type_name;
+ WCHAR *link_type_name;
+ LPOLESTR app_name;
+} ps_struct_t;
+
+static const struct ps_flag
+{
+ DWORD flag;
+ const char *name;
+} ps_flags[] = {
+#define PS_FLAG_ENTRY(p) {p, #p}
+ PS_FLAG_ENTRY(PSF_SHOWHELP),
+ PS_FLAG_ENTRY(PSF_SELECTPASTE),
+ PS_FLAG_ENTRY(PSF_SELECTPASTELINK),
+ PS_FLAG_ENTRY(PSF_CHECKDISPLAYASICON),
+ PS_FLAG_ENTRY(PSF_DISABLEDISPLAYASICON),
+ PS_FLAG_ENTRY(PSF_HIDECHANGEICON),
+ PS_FLAG_ENTRY(PSF_STAYONCLIPBOARDCHANGE),
+ PS_FLAG_ENTRY(PSF_NOREFRESHDATAOBJECT),
+ {-1, NULL}
+#undef PS_FLAG_ENTRY
+};
+
+static void dump_ps_flags(DWORD flags)
+{
+ char flagstr[1000] = "";
+
+ const struct ps_flag *flag = ps_flags;
+ for( ; flag->name; flag++) {
+ if(flags & flag->flag) {
+ strcat(flagstr, flag->name);
+ strcat(flagstr, "|");
+ }
+ }
+ TRACE("flags %08x %s\n", flags, flagstr);
+}
+
+static void dump_pastespecial(LPOLEUIPASTESPECIALW ps)
+{
+ UINT i;
+ dump_ps_flags(ps->dwFlags);
+ TRACE("hwnd %p caption %s hook %p custdata %lx\n",
+ ps->hWndOwner, debugstr_w(ps->lpszCaption), ps->lpfnHook, ps->lCustData);
+ if(IS_INTRESOURCE(ps->lpszTemplate))
+ TRACE("hinst %p template %04x hresource %p\n", ps->hInstance, (WORD)(ULONG_PTR)ps->lpszTemplate, ps->hResource);
+ else
+ TRACE("hinst %p template %s hresource %p\n", ps->hInstance, debugstr_w(ps->lpszTemplate), ps->hResource);
+ TRACE("dataobj %p arrpasteent %p cpasteent %d arrlinktype %p clinktype %d\n",
+ ps->lpSrcDataObj, ps->arrPasteEntries, ps->cPasteEntries,
+ ps->arrLinkTypes, ps->cLinkTypes);
+ TRACE("cclsidex %d lpclsidex %p nselect %d flink %d hmetapict %p size(%d,%d)\n",
+ ps->cClsidExclude, ps->lpClsidExclude, ps->nSelectedIndex, ps->fLink,
+ ps->hMetaPict, ps->sizel.cx, ps->sizel.cy);
+ for(i = 0; i < ps->cPasteEntries; i++)
+ {
+ TRACE("arrPasteEntries[%d]: cFormat %08x pTargetDevice %p dwAspect %d lindex %d tymed %d\n",
+ i, ps->arrPasteEntries[i].fmtetc.cfFormat, ps->arrPasteEntries[i].fmtetc.ptd,
+ ps->arrPasteEntries[i].fmtetc.dwAspect, ps->arrPasteEntries[i].fmtetc.lindex,
+ ps->arrPasteEntries[i].fmtetc.tymed);
+ TRACE("\tformat name %s result text %s flags %04x\n", debugstr_w(ps->arrPasteEntries[i].lpstrFormatName),
+ debugstr_w(ps->arrPasteEntries[i].lpstrResultText), ps->arrPasteEntries[i].dwFlags);
+ }
+ for(i = 0; i < ps->cLinkTypes; i++)
+ TRACE("arrLinkTypes[%d] %08x\n", i, ps->arrLinkTypes[i]);
+ for(i = 0; i < ps->cClsidExclude; i++)
+ TRACE("lpClsidExclude[%d] %s\n", i, debugstr_guid(&ps->lpClsidExclude[i]));
+
+}
+
+static inline WCHAR *strdupAtoW(const char *str)
+{
+ DWORD len;
+ WCHAR *ret;
+ if(!str) return NULL;
+ len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
+ ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
+ return ret;
+}
+
+static inline WCHAR *strdupW(const WCHAR *str)
+{
+ DWORD len;
+ WCHAR *ret;
+ if(!str) return NULL;
+ len = lstrlenW(str) + 1;
+ ret = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ memcpy(ret, str, len * sizeof(WCHAR));
+ return ret;
+}
+
+static void get_descriptors(HWND hdlg, ps_struct_t *ps_struct)
+{
+ FORMATETC fmtetc;
+ STGMEDIUM stg;
+
+ fmtetc.tymed = TYMED_HGLOBAL;
+ fmtetc.dwAspect = DVASPECT_CONTENT;
+ fmtetc.ptd = NULL;
+ fmtetc.lindex = -1;
+
+ fmtetc.cfFormat = cf_object_descriptor;
+ if(IDataObject_GetData(ps_struct->ps->lpSrcDataObj, &fmtetc, &stg) == S_OK)
+ {
+ OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
+ if(obj_desc->dwSrcOfCopy)
+ ps_struct->source_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
+ if(obj_desc->dwFullUserTypeName)
+ ps_struct->type_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
+ OleRegGetUserType(&obj_desc->clsid, USERCLASSTYPE_APPNAME, &ps_struct->app_name);
+ /* Get the icon here. If dwDrawAspect & DVASCPECT_ICON call GetData(CF_METAFILEPICT), otherwise
+ native calls OleGetIconFromClass(obj_desc->clsid) */
+ GlobalUnlock(stg.u.hGlobal);
+ GlobalFree(stg.u.hGlobal);
+ }
+ else
+ {
+ /* Try to get some data using some of the other clipboard formats */
+ }
+
+ fmtetc.cfFormat = cf_link_src_descriptor;
+ if(IDataObject_GetData(ps_struct->ps->lpSrcDataObj, &fmtetc, &stg) == S_OK)
+ {
+ OBJECTDESCRIPTOR *obj_desc = GlobalLock(stg.u.hGlobal);
+ if(obj_desc->dwSrcOfCopy)
+ ps_struct->link_source_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwSrcOfCopy));
+ if(obj_desc->dwFullUserTypeName)
+ ps_struct->link_type_name = strdupW((WCHAR*)((char*)obj_desc + obj_desc->dwFullUserTypeName));
+ GlobalUnlock(stg.u.hGlobal);
+ GlobalFree(stg.u.hGlobal);
+ }
+
+ if(ps_struct->source_name == NULL && ps_struct->link_source_name == NULL)
+ {
+ WCHAR buf[200];
+ LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_SRC, buf, sizeof(buf)/sizeof(WCHAR));
+ ps_struct->source_name = strdupW(buf);
+ }
+
+ if(ps_struct->type_name == NULL && ps_struct->link_type_name == NULL)
+ {
+ WCHAR buf[200];
+ LoadStringW(OLEDLG_hInstance, IDS_PS_UNKNOWN_TYPE, buf, sizeof(buf)/sizeof(WCHAR));
+ ps_struct->type_name = strdupW(buf);
+ }
+}
+
+static BOOL add_entry_to_lb(HWND hdlg, UINT id, OLEUIPASTEENTRYW *pe)
+{
+ HWND hwnd = GetDlgItem(hdlg, id);
+ BOOL ret = FALSE;
+
+ /* FIXME %s handling */
+
+ /* Note that this suffers from the same bug as native, in that if a new string
+ is a substring of an already added string, then the FINDSTRING will succeed
+ this is probably not what we want */
+ if(SendMessageW(hwnd, LB_FINDSTRING, 0, (LPARAM)pe->lpstrFormatName) == -1)
+ {
+ LRESULT pos = SendMessageW(hwnd, LB_ADDSTRING, 0, (LPARAM)pe->lpstrFormatName);
+ SendMessageW(hwnd, LB_SETITEMDATA, pos, (LPARAM)pe);
+ ret = TRUE;
+ }
+ return ret;
+}
+
+static DWORD init_pastelist(HWND hdlg, OLEUIPASTESPECIALW *ps)
+{
+ IEnumFORMATETC *penum;
+ HRESULT hr;
+ FORMATETC fmts[20];
+ DWORD fetched, items_added = 0;
+
+ hr = IDataObject_EnumFormatEtc(ps->lpSrcDataObj, DATADIR_GET, &penum);
+ if(FAILED(hr))
+ {
+ WARN("Unable to create IEnumFORMATETC\n");
+ return 0;
+ }
+
+ /* The native version grabs only the first 20 fmts and we do the same */
+ hr = IEnumFORMATETC_Next(penum, sizeof(fmts)/sizeof(fmts[0]), fmts, &fetched);
+ TRACE("got %d formats hr %08x\n", fetched, hr);
+
+ if(SUCCEEDED(hr))
+ {
+ DWORD src_fmt, req_fmt;
+ for(req_fmt = 0; req_fmt < ps->cPasteEntries; req_fmt++)
+ {
+ /* This is used by update_structure() to set nSelectedIndex on exit */
+ ps->arrPasteEntries[req_fmt].dwScratchSpace = req_fmt;
+ TRACE("req_fmt %x\n", ps->arrPasteEntries[req_fmt].fmtetc.cfFormat);
+ for(src_fmt = 0; src_fmt < fetched; src_fmt++)
+ {
+ TRACE("\tenum'ed fmt %x\n", fmts[src_fmt].cfFormat);
+ if(ps->arrPasteEntries[req_fmt].fmtetc.cfFormat == fmts[src_fmt].cfFormat)
+ {
+ add_entry_to_lb(hdlg, IDC_PS_PASTELIST, ps->arrPasteEntries + req_fmt);
+ items_added++;
+ break;
+ }
+ }
+ }
+ }
+
+ IEnumFORMATETC_Release(penum);
+ EnableWindow(GetDlgItem(hdlg, IDC_PS_PASTE), items_added ? TRUE : FALSE);
+ return items_added;
+}
+
+static DWORD init_linklist(HWND hdlg, OLEUIPASTESPECIALW *ps)
+{
+ HRESULT hr;
+ DWORD supported_mask = 0;
+ DWORD items_added = 0;
+ int link, req_fmt;
+ FORMATETC fmt = {0, NULL, DVASPECT_CONTENT, -1, -1};
+
+ for(link = 0; link < ps->cLinkTypes && link < PS_MAXLINKTYPES; link++)
+ {
+ fmt.cfFormat = ps->arrLinkTypes[link];
+ hr = IDataObject_QueryGetData(ps->lpSrcDataObj, &fmt);
+ if(hr == S_OK)
+ supported_mask |= 1 << link;
+ }
+ TRACE("supported_mask %02x\n", supported_mask);
+ for(req_fmt = 0; req_fmt < ps->cPasteEntries; req_fmt++)
+ {
+ DWORD linktypes;
+ if(ps->arrPasteEntries[req_fmt].dwFlags & OLEUIPASTE_LINKANYTYPE)
+ linktypes = 0xff;
+ else
+ linktypes = ps->arrPasteEntries[req_fmt].dwFlags & 0xff;
+
+ if(linktypes & supported_mask)
+ {
+ add_entry_to_lb(hdlg, IDC_PS_PASTELINKLIST, ps->arrPasteEntries + req_fmt);
+ items_added++;
+ }
+ }
+
+ EnableWindow(GetDlgItem(hdlg, IDC_PS_PASTELINK), items_added ? TRUE : FALSE);
+ return items_added;
+}
+
+/* copies src_list_id into the display list */
+static void update_display_list(HWND hdlg, UINT src_list_id)
+{
+ LONG count, i, old_pos;
+ WCHAR txt[256];
+ LONG item_data;
+ HWND display_list = GetDlgItem(hdlg, IDC_PS_DISPLAYLIST);
+ HWND list = GetDlgItem(hdlg, src_list_id);
+
+ old_pos = SendMessageW(display_list, LB_GETCURSEL, 0, 0);
+ if(old_pos == -1) old_pos = 0;
+
+ SendMessageW(display_list, WM_SETREDRAW, 0, 0);
+ SendMessageW(display_list, LB_RESETCONTENT, 0, 0);
+ count = SendMessageW(list, LB_GETCOUNT, 0, 0);
+ for(i = 0; i < count; i++)
+ {
+ SendMessageW(list, LB_GETTEXT, i, (LPARAM)txt);
+ item_data = SendMessageW(list, LB_GETITEMDATA, i, 0);
+ SendMessageW(display_list, LB_INSERTSTRING, i, (LPARAM)txt);
+ SendMessageW(display_list, LB_SETITEMDATA, i, item_data);
+ }
+ old_pos = max(old_pos, count);
+ SendMessageW(display_list, LB_SETCURSEL, 0, 0);
+ SendMessageW(display_list, WM_SETREDRAW, 1, 0);
+ if(GetForegroundWindow() == hdlg)
+ SetFocus(display_list);
+}
+
+static void init_lists(HWND hdlg, ps_struct_t *ps_struct)
+{
+ DWORD pastes_added = init_pastelist(hdlg, ps_struct->ps);
+ DWORD links_added = init_linklist(hdlg, ps_struct->ps);
+ UINT check_id, list_id;
+
+ if((ps_struct->flags & (PSF_SELECTPASTE | PSF_SELECTPASTELINK)) == 0)
+ ps_struct->flags |= PSF_SELECTPASTE;
+
+ if(!pastes_added && !links_added)
+ ps_struct->flags &= ~(PSF_SELECTPASTE | PSF_SELECTPASTELINK);
+ else if(!pastes_added && (ps_struct->flags & PSF_SELECTPASTE))
+ {
+ ps_struct->flags &= ~PSF_SELECTPASTE;
+ ps_struct->flags |= PSF_SELECTPASTELINK;
+ }
+ else if(!links_added && (ps_struct->flags & PSF_SELECTPASTELINK))
+ {
+ ps_struct->flags &= ~PSF_SELECTPASTELINK;
+ ps_struct->flags |= PSF_SELECTPASTE;
+ }
+
+ check_id = 0;
+ list_id = 0;
+ if(ps_struct->flags & PSF_SELECTPASTE)
+ {
+ check_id = IDC_PS_PASTE;
+ list_id = IDC_PS_PASTELIST;
+ }
+ else if(ps_struct->flags & PSF_SELECTPASTELINK)
+ {
+ check_id = IDC_PS_PASTELINK;
+ list_id = IDC_PS_PASTELINKLIST;
+ }
+
+ CheckRadioButton(hdlg, IDC_PS_PASTE, IDC_PS_PASTELINK, check_id);
+
+ if(list_id)
+ update_display_list(hdlg, list_id);
+ else
+ EnableWindow(GetDlgItem(hdlg, IDOK), 0);
+}
+
+static void update_src_text(HWND hdlg, ps_struct_t *ps_struct)
+{
+ WCHAR *str;
+
+ if(ps_struct->flags & PSF_SELECTPASTE)
+ {
+ if(ps_struct->source_name)
+ str = ps_struct->source_name;
+ else
+ str = ps_struct->link_source_name;
+
+ }
+ else
+ {
+ if(ps_struct->link_source_name)
+ str = ps_struct->link_source_name;
+ else
+ str = ps_struct->source_name;
+
+ }
+ SetDlgItemTextW(hdlg, IDC_PS_SOURCETEXT, str);
+}
+
+static void update_as_icon(HWND hdlg, ps_struct_t *ps_struct)
+{
+ HWND icon_display = GetDlgItem(hdlg, IDC_PS_ICONDISPLAY);
+ HWND display_as_icon = GetDlgItem(hdlg, IDC_PS_DISPLAYASICON);
+ HWND change_icon = GetDlgItem(hdlg, IDC_PS_CHANGEICON);
+
+ /* FIXME. No as icon handling */
+ ps_struct->flags &= ~PSF_CHECKDISPLAYASICON;
+
+ CheckDlgButton(hdlg, IDC_PS_DISPLAYASICON, ps_struct->flags & PSF_CHECKDISPLAYASICON);
+ EnableWindow(display_as_icon, 0);
+ ShowWindow(icon_display, SW_HIDE);
+ EnableWindow(icon_display, 0);
+ ShowWindow(change_icon, SW_HIDE);
+ EnableWindow(change_icon, 0);
+}
+
+static void update_result_text(HWND hdlg, ps_struct_t *ps_struct)
+{
+ WCHAR resource_txt[200];
+ UINT res_id;
+ OLEUIPASTEENTRYW *pent;
+ LONG cur_sel;
+ static const WCHAR percent_s[] = {'%','s',0};
+ WCHAR *result_txt, *ptr;
+
+ cur_sel = SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETCURSEL, 0, 0);
+ if(cur_sel == -1) return;
+ pent = (OLEUIPASTEENTRYW*)SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETITEMDATA, cur_sel, 0);
+
+ if(ps_struct->flags & PSF_SELECTPASTE)
+ {
+ if(ps_struct->flags & PSF_CHECKDISPLAYASICON)
+ res_id = IDS_PS_PASTE_OBJECT_AS_ICON;
+ else
+ res_id = IDS_PS_PASTE_DATA;
+ }
+ else
+ {
+ if(ps_struct->flags & PSF_CHECKDISPLAYASICON)
+ res_id = IDS_PS_PASTE_LINK_OBJECT_AS_ICON;
+ else
+ res_id = IDS_PS_PASTE_LINK_DATA;
+ }
+
+ LoadStringW(OLEDLG_hInstance, res_id, resource_txt, sizeof(resource_txt)/sizeof(WCHAR));
+ if((ptr = strstrW(resource_txt, percent_s)))
+ {
+ /* FIXME handle %s in ResultText. Sub appname if IDS_PS_PASTE_OBJECT{_AS_ICON}. Else sub appropiate type name */
+ size_t result_txt_len = strlenW(pent->lpstrResultText);
+ ptrdiff_t offs = (char*)ptr - (char*)resource_txt;
+ result_txt = HeapAlloc(GetProcessHeap(), 0, (strlenW(resource_txt) + result_txt_len - 1) * sizeof(WCHAR));
+ memcpy(result_txt, resource_txt, offs);
+ memcpy((char*)result_txt + offs, pent->lpstrResultText, result_txt_len * sizeof(WCHAR));
+ memcpy((char*)result_txt + offs + result_txt_len * sizeof(WCHAR), ptr + 2, (strlenW(ptr + 2) + 1) * sizeof(WCHAR));
+ }
+ else
+ result_txt = resource_txt;
+
+ SetDlgItemTextW(hdlg, IDC_PS_RESULTTEXT, result_txt);
+
+ if(result_txt != resource_txt)
+ HeapFree(GetProcessHeap(), 0, result_txt);
+
+}
+
+static void selection_change(HWND hdlg, ps_struct_t *ps_struct)
+{
+ update_as_icon(hdlg, ps_struct);
+ update_result_text(hdlg, ps_struct);
+}
+
+static void mode_change(HWND hdlg, ps_struct_t *ps_struct, UINT id)
+{
+ if(id == IDC_PS_PASTE)
+ {
+ ps_struct->flags &= ~PSF_SELECTPASTELINK;
+ ps_struct->flags |= PSF_SELECTPASTE;
+ }
+ else
+ {
+ ps_struct->flags &= ~PSF_SELECTPASTE;
+ ps_struct->flags |= PSF_SELECTPASTELINK;
+ }
+
+ update_src_text(hdlg, ps_struct);
+ update_display_list(hdlg, id == IDC_PS_PASTE ? IDC_PS_PASTELIST : IDC_PS_PASTELINKLIST);
+ selection_change(hdlg, ps_struct);
+}
+
+static void post_help_msg(HWND hdlg, ps_struct_t *ps_struct)
+{
+ PostMessageW(ps_struct->ps->hWndOwner, oleui_msg_help, (WPARAM)hdlg, IDD_PASTESPECIAL);
+}
+
+static void send_end_dialog_msg(HWND hdlg, ps_struct_t *ps_struct, UINT id)
+{
+ SendMessageW(hdlg, oleui_msg_enddialog, id, 0);
+}
+
+static void update_structure(HWND hdlg, ps_struct_t *ps_struct)
+{
+ LONG cur_sel = SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETCURSEL, 0, 0);
+ if(cur_sel != -1)
+ {
+ OLEUIPASTEENTRYW *pent;
+ pent = (OLEUIPASTEENTRYW *)SendMessageW(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST), LB_GETITEMDATA, cur_sel, 0);
+ ps_struct->ps->nSelectedIndex = pent->dwScratchSpace;
+ }
+ ps_struct->ps->dwFlags = ps_struct->flags;
+ ps_struct->ps->fLink = (ps_struct->flags & PSF_SELECTPASTELINK) ? TRUE : FALSE;
+}
+
+static void free_structure(ps_struct_t *ps_struct)
+{
+ HeapFree(GetProcessHeap(), 0, ps_struct->type_name);
+ HeapFree(GetProcessHeap(), 0, ps_struct->source_name);
+ HeapFree(GetProcessHeap(), 0, ps_struct->link_type_name);
+ HeapFree(GetProcessHeap(), 0, ps_struct->link_source_name);
+ CoTaskMemFree(ps_struct->app_name);
+ HeapFree(GetProcessHeap(), 0, ps_struct);
+}
+
+static INT_PTR CALLBACK ps_dlg_proc(HWND hdlg, UINT msg, WPARAM wp, LPARAM lp)
+{
+ /* native uses prop name "Structure", but we're not compatible
+ with that so we'll prepend "Wine_". */
+ static const WCHAR prop_name[] = {'W','i','n','e','_','S','t','r','u','c','t','u','r','e',0};
+ ps_struct_t *ps_struct;
+
+ TRACE("(%p, %04x, %08x, %08lx)\n", hdlg, msg, wp, lp);
+
+ ps_struct = GetPropW(hdlg, prop_name);
+
+ if(msg != WM_INITDIALOG)
+ {
+ if(!ps_struct)
+ return 0;
+
+ if(ps_struct->ps->lpfnHook)
+ {
+ INT_PTR ret = ps_struct->ps->lpfnHook(hdlg, msg, wp, lp);
+ if(ret) return ret;
+ }
+ }
+
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+ {
+ ps_struct = HeapAlloc(GetProcessHeap(), 0, sizeof(*ps_struct));
+ ps_struct->ps = (OLEUIPASTESPECIALW*)lp;
+ ps_struct->type_name = NULL;
+ ps_struct->source_name = NULL;
+ ps_struct->link_type_name = NULL;
+ ps_struct->link_source_name = NULL;
+ ps_struct->app_name = NULL;
+ ps_struct->flags = ps_struct->ps->dwFlags;
+
+ SetPropW(hdlg, prop_name, ps_struct);
+
+ if(!(ps_struct->ps->dwFlags & PSF_SHOWHELP))
+ {
+ ShowWindow(GetDlgItem(hdlg, IDC_OLEUIHELP), SW_HIDE);
+ EnableWindow(GetDlgItem(hdlg, IDC_OLEUIHELP), 0);
+ }
+
+ if(ps_struct->ps->lpszCaption)
+ SetWindowTextW(hdlg, ps_struct->ps->lpszCaption);
+
+ get_descriptors(hdlg, ps_struct);
+
+ init_lists(hdlg, ps_struct);
+
+ update_src_text(hdlg, ps_struct);
+
+ selection_change(hdlg, ps_struct);
+
+ SetFocus(GetDlgItem(hdlg, IDC_PS_DISPLAYLIST));
+
+ if(ps_struct->ps->lpfnHook)
+ ps_struct->ps->lpfnHook(hdlg, msg, 0, 0);
+ return FALSE; /* use new focus */
+ }
+ case WM_COMMAND:
+ switch(LOWORD(wp))
+ {
+ case IDC_PS_DISPLAYLIST:
+ switch(HIWORD(wp))
+ {
+ case LBN_SELCHANGE:
+ selection_change(hdlg, ps_struct);
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ case IDC_PS_PASTE:
+ case IDC_PS_PASTELINK:
+ switch(HIWORD(wp))
+ {
+ case BN_CLICKED:
+ mode_change(hdlg, ps_struct, LOWORD(wp));
+ return FALSE;
+
+ default:
+ return FALSE;
+ }
+ case IDC_OLEUIHELP:
+ switch(HIWORD(wp))
+ {
+ case BN_CLICKED:
+ post_help_msg(hdlg, ps_struct);
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ case IDOK:
+ case IDCANCEL:
+ switch(HIWORD(wp))
+ {
+ case BN_CLICKED:
+ send_end_dialog_msg(hdlg, ps_struct, LOWORD(wp));
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ }
+ return FALSE;
+ default:
+ if(msg == oleui_msg_enddialog)
+ {
+ if(wp == IDOK)
+ update_structure(hdlg, ps_struct);
+ EndDialog(hdlg, wp);
+ /* native does its cleanup in WM_DESTROY */
+ RemovePropW(hdlg, prop_name);
+ free_structure(ps_struct);
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+}
+
+/***********************************************************************
+ * OleUIPasteSpecialA (OLEDLG.4)
+ */
+UINT WINAPI OleUIPasteSpecialA(LPOLEUIPASTESPECIALA psA)
+{
+ OLEUIPASTESPECIALW ps;
+ UINT ret;
+ TRACE("(%p)\n", psA);
+
+ memcpy(&ps, psA, psA->cbStruct);
+
+ ps.lpszCaption = strdupAtoW(psA->lpszCaption);
+ if(!IS_INTRESOURCE(ps.lpszTemplate))
+ ps.lpszTemplate = strdupAtoW(psA->lpszTemplate);
+
+ if(psA->cPasteEntries > 0)
+ {
+ DWORD size = psA->cPasteEntries * sizeof(ps.arrPasteEntries[0]);
+ UINT i;
+
+ ps.arrPasteEntries = HeapAlloc(GetProcessHeap(), 0, size);
+ memcpy(ps.arrPasteEntries, psA->arrPasteEntries, size);
+ for(i = 0; i < psA->cPasteEntries; i++)
+ {
+ ps.arrPasteEntries[i].lpstrFormatName =
+ strdupAtoW(psA->arrPasteEntries[i].lpstrFormatName);
+ ps.arrPasteEntries[i].lpstrResultText =
+ strdupAtoW(psA->arrPasteEntries[i].lpstrResultText);
+ }
+ }
+
+ ret = OleUIPasteSpecialW(&ps);
+
+ if(psA->cPasteEntries > 0)
+ {
+ UINT i;
+ for(i = 0; i < psA->cPasteEntries; i++)
+ {
+ HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.arrPasteEntries[i].lpstrFormatName);
+ HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.arrPasteEntries[i].lpstrResultText);
+ }
+ HeapFree(GetProcessHeap(), 0, ps.arrPasteEntries);
+ }
+ if(!IS_INTRESOURCE(ps.lpszTemplate))
+ HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.lpszTemplate);
+ HeapFree(GetProcessHeap(), 0, (WCHAR*)ps.lpszCaption);
+
+ /* Copy back the output fields */
+ psA->dwFlags = ps.dwFlags;
+ psA->lpSrcDataObj = ps.lpSrcDataObj;
+ psA->nSelectedIndex = ps.nSelectedIndex;
+ psA->fLink = ps.fLink;
+ psA->hMetaPict = ps.hMetaPict;
+ psA->sizel = ps.sizel;
+
+ return ret;
+}
+
+/***********************************************************************
+ * OleUIPasteSpecialW (OLEDLG.22)
+ */
+UINT WINAPI OleUIPasteSpecialW(LPOLEUIPASTESPECIALW ps)
+{
+ LPCDLGTEMPLATEW dlg_templ = (LPCDLGTEMPLATEW)ps->hResource;
+ UINT ret;
+
+ TRACE("(%p)\n", ps);
+
+ if(TRACE_ON(ole)) dump_pastespecial(ps);
+
+ if(!ps->lpSrcDataObj)
+ OleGetClipboard(&ps->lpSrcDataObj);
+
+ if(ps->hInstance || !ps->hResource)
+ {
+ HINSTANCE hInst = ps->hInstance ? ps->hInstance : OLEDLG_hInstance;
+ const WCHAR *name = ps->hInstance ? ps->lpszTemplate : MAKEINTRESOURCEW(IDD_PASTESPECIAL4);
+ HRSRC hrsrc;
+
+ if(name == NULL) return OLEUI_ERR_LPSZTEMPLATEINVALID;
+ hrsrc = FindResourceW(hInst, name, MAKEINTRESOURCEW(RT_DIALOG));
+ if(!hrsrc) return OLEUI_ERR_FINDTEMPLATEFAILURE;
+ dlg_templ = LoadResource(hInst, hrsrc);
+ if(!dlg_templ) return OLEUI_ERR_LOADTEMPLATEFAILURE;
+ }
+
+ ret = DialogBoxIndirectParamW(OLEDLG_hInstance, dlg_templ, ps->hWndOwner, ps_dlg_proc, (LPARAM)ps);
+
+ return ret;
+}
diff --git a/reactos/dll/win32/oledlg/resource.h b/reactos/dll/win32/oledlg/resource.h
index b0f59325b10..518f7ba6255 100644
--- a/reactos/dll/win32/oledlg/resource.h
+++ b/reactos/dll/win32/oledlg/resource.h
@@ -38,3 +38,15 @@
#define IDC_BROWSE 1009
#define IDC_FILELBL 1010
#define IDC_FILE 1011
+
+/* String ids for Paste Special */
+#define IDS_PS_PASTE_DATA 0x190
+#define IDS_PS_PASTE_OBJECT 0x191
+#define IDS_PS_PASTE_OBJECT_AS_ICON 0x192
+#define IDS_PS_PASTE_LINK_DATA 0x193
+#define IDS_PS_PASTE_LINK_OBJECT 0x194
+#define IDS_PS_PASTE_LINK_OBJECT_AS_ICON 0x195
+#define IDS_PS_NON_OLE 0x196
+#define IDS_PS_UNKNOWN_TYPE 0x197
+#define IDS_PS_UNKNOWN_SRC 0x198
+#define IDS_PS_UNKNOWN_APP 0x199
diff --git a/reactos/dll/win32/oledlg/rsrc.rc b/reactos/dll/win32/oledlg/rsrc.rc
index d01386f6b94..8b4bc4b7da6 100644
--- a/reactos/dll/win32/oledlg/rsrc.rc
+++ b/reactos/dll/win32/oledlg/rsrc.rc
@@ -22,6 +22,8 @@
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
+#include "oledlg.h"
+
#include "resource.h"
/*
@@ -42,6 +44,7 @@
#include "oledlg_Ko.rc"
#include "oledlg_Nl.rc"
#include "oledlg_No.rc"
+#include "oledlg_Pl.rc"
#include "oledlg_Pt.rc"
#include "oledlg_Tr.rc"
#include "oledlg_Uk.rc"