[ros-diffs] [janderwald] 30307: - readd MFT_SEPERATOR to background context menu - add shell new implementation

janderwald at svn.reactos.org janderwald at svn.reactos.org
Fri Nov 9 20:49:18 CET 2007


Author: janderwald
Date: Fri Nov  9 22:49:18 2007
New Revision: 30307

URL: http://svn.reactos.org/svn/reactos?rev=30307&view=rev
Log:
- readd MFT_SEPERATOR to background context menu
- add shell new implementation


Added:
    trunk/reactos/dll/win32/shell32/shv_item_new.c   (with props)
Modified:
    trunk/reactos/dll/win32/shell32/lang/bg-BG.rc
    trunk/reactos/dll/win32/shell32/lang/ca-ES.rc
    trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc
    trunk/reactos/dll/win32/shell32/lang/da-DK.rc
    trunk/reactos/dll/win32/shell32/lang/de-DE.rc
    trunk/reactos/dll/win32/shell32/lang/en-US.rc
    trunk/reactos/dll/win32/shell32/lang/eo-EO.rc
    trunk/reactos/dll/win32/shell32/lang/es-ES.rc
    trunk/reactos/dll/win32/shell32/lang/fi-FI.rc
    trunk/reactos/dll/win32/shell32/lang/fr-FR.rc
    trunk/reactos/dll/win32/shell32/lang/hu-HU.rc
    trunk/reactos/dll/win32/shell32/lang/it-IT.rc
    trunk/reactos/dll/win32/shell32/lang/ja-JP.rc
    trunk/reactos/dll/win32/shell32/lang/ko-KO.rc
    trunk/reactos/dll/win32/shell32/lang/nb-NO.rc
    trunk/reactos/dll/win32/shell32/lang/nl-NL.rc
    trunk/reactos/dll/win32/shell32/lang/pl-PL.rc
    trunk/reactos/dll/win32/shell32/lang/pt-BR.rc
    trunk/reactos/dll/win32/shell32/lang/pt-PT.rc
    trunk/reactos/dll/win32/shell32/lang/ru-RU.rc
    trunk/reactos/dll/win32/shell32/lang/sk-SK.rc
    trunk/reactos/dll/win32/shell32/lang/sl-SI.rc
    trunk/reactos/dll/win32/shell32/lang/sv-SE.rc
    trunk/reactos/dll/win32/shell32/lang/tr-TR.rc
    trunk/reactos/dll/win32/shell32/lang/uk-UA.rc
    trunk/reactos/dll/win32/shell32/lang/wa-WA.rc
    trunk/reactos/dll/win32/shell32/lang/zh-CN.rc
    trunk/reactos/dll/win32/shell32/lang/zh-TW.rc
    trunk/reactos/dll/win32/shell32/shell32.rbuild
    trunk/reactos/dll/win32/shell32/shell32_main.h
    trunk/reactos/dll/win32/shell32/shv_bg_cmenu.c

Modified: trunk/reactos/dll/win32/shell32/lang/bg-BG.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/bg-BG.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/bg-BG.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/bg-BG.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Ïîñòàâÿíå",             FCIDM_SHVIEW_INSERT
 		MENUITEM "Ïîñòàâÿíå êàòî âðúçêà", FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Ñâîéñòâà",              FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/ca-ES.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ca-ES.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ca-ES.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/ca-ES.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/cs-CZ.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "V&ložit",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Vložit zást&upce",       FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "&Vlastnosti",            FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/da-DK.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/da-DK.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/da-DK.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/da-DK.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/de-DE.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/de-DE.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/de-DE.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/de-DE.rc Fri Nov  9 22:49:18 2007
@@ -56,6 +56,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Einfügen",                  FCIDM_SHVIEW_INSERT
 		MENUITEM "Einfügen als Verweis",      FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "&Eigenschaften",            FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/en-US.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/en-US.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/en-US.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/en-US.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/eo-EO.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/eo-EO.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/eo-EO.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/eo-EO.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/es-ES.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/es-ES.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/es-ES.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/es-ES.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Pegar",                       FCIDM_SHVIEW_INSERT
 		MENUITEM "Pegar acceso directo",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Propiedades",                 FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/fi-FI.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fi-FI.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/fi-FI.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/fi-FI.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Liitä",                        FCIDM_SHVIEW_INSERT
 		MENUITEM "Liitä Linkiksi",               FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Ominaisuudet",                 FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/fr-FR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/fr-FR.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/fr-FR.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/fr-FR.rc Fri Nov  9 22:49:18 2007
@@ -58,6 +58,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Coller",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Coller comme un lien",  FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Propriétés",            FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/hu-HU.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/hu-HU.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/hu-HU.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/hu-HU.rc Fri Nov  9 22:49:18 2007
@@ -57,6 +57,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Beillesztés",                  FCIDM_SHVIEW_INSERT
 		MENUITEM "Parancsikon beillesztése",     FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Beállítások",                  FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/it-IT.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/it-IT.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/it-IT.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/it-IT.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Incolla",                      FCIDM_SHVIEW_INSERT
 		MENUITEM "Crea Collegamento",            FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Proprietà",                    FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/ja-JP.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ja-JP.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ja-JP.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/ja-JP.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "“\\‚è•t‚¯",                 FCIDM_SHVIEW_INSERT
 		MENUITEM "ƒVƒ‡[ƒgƒJƒbƒg‚Ì“\\‚è•t‚¯", FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "ƒvƒƒpƒeƒB",                FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/ko-KO.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ko-KO.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ko-KO.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/ko-KO.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/nb-NO.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/nb-NO.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/nb-NO.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/nb-NO.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Lim inn",              FCIDM_SHVIEW_INSERT
 		MENUITEM "Lim inn som snarvei",  FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Egenskaper",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/nl-NL.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/nl-NL.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/nl-NL.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/nl-NL.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/pl-PL.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pl-PL.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pl-PL.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/pl-PL.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "W&klej",                  FCIDM_SHVIEW_INSERT
 		MENUITEM "Wklej s&krót",            FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "W³aœciwoœci",             FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/pt-BR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-BR.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pt-BR.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/pt-BR.rc Fri Nov  9 22:49:18 2007
@@ -56,6 +56,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Co&lar",              FCIDM_SHVIEW_INSERT
 		MENUITEM "Colar a&talho",       FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Propriedades",        FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/pt-PT.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/pt-PT.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/pt-PT.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/pt-PT.rc Fri Nov  9 22:49:18 2007
@@ -56,6 +56,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Co&lar",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Colar a&talho",         FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Propriedades",          FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/ru-RU.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/ru-RU.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/ru-RU.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/ru-RU.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "&Âñòàâèòü",           FCIDM_SHVIEW_INSERT
 		MENUITEM "Âñòàâèòü &ÿðëûê",     FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Ñâî&éñòâà",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/sk-SK.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sk-SK.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sk-SK.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/sk-SK.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/sl-SI.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sl-SI.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sl-SI.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/sl-SI.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/sv-SE.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/sv-SE.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/sv-SE.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/sv-SE.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/tr-TR.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/tr-TR.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/tr-TR.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/tr-TR.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Yapýþtýr",            FCIDM_SHVIEW_INSERT
 		MENUITEM "Kýsayol Yapýþtýr",    FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Özellikler",          FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/uk-UA.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/uk-UA.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/uk-UA.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/uk-UA.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Âñòàâèòè",             FCIDM_SHVIEW_INSERT
 		MENUITEM "Âñòàâèòè Ïîñèëàííÿ",   FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Âëàñòèâîñò³",          FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/wa-WA.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/wa-WA.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/wa-WA.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/wa-WA.rc Fri Nov  9 22:49:18 2007
@@ -54,6 +54,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/zh-CN.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-CN.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/zh-CN.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/zh-CN.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/lang/zh-TW.rc
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/lang/zh-TW.rc?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/lang/zh-TW.rc (original)
+++ trunk/reactos/dll/win32/shell32/lang/zh-TW.rc Fri Nov  9 22:49:18 2007
@@ -55,6 +55,7 @@
 		MENUITEM SEPARATOR
 		MENUITEM "Paste",                FCIDM_SHVIEW_INSERT
 		MENUITEM "Paste as Link",        FCIDM_SHVIEW_INSERTLINK
+		MENUITEM SEPARATOR
 		MENUITEM "Properties",           FCIDM_SHVIEW_PROPERTIES
 	END
 END

Modified: trunk/reactos/dll/win32/shell32/shell32.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32.rbuild?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32.rbuild (original)
+++ trunk/reactos/dll/win32/shell32/shell32.rbuild Fri Nov  9 22:49:18 2007
@@ -69,4 +69,5 @@
 	<file>drive.c</file>
 	<file>recyclebin.c</file>
 	<file>she_ocmenu.c</file>
+	<file>shv_item_new.c</file>
 </module>

Modified: trunk/reactos/dll/win32/shell32/shell32_main.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shell32_main.h?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shell32_main.h (original)
+++ trunk/reactos/dll/win32/shell32/shell32_main.h Fri Nov  9 22:49:18 2007
@@ -82,6 +82,7 @@
 
 LPCLASSFACTORY	IClassFactory_Constructor(REFCLSID);
 IContextMenu2 *	ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *aPidls, UINT uItemCount);
+HRESULT WINAPI INewItem_Constructor(LPSHELLFOLDER pSFParent, REFIID riid, LPVOID *ppv);
 IContextMenu2 * ISvStaticItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *apidl, UINT cidl, HKEY hKey);
 IContextMenu2 *	ISvBgCm_Constructor(LPSHELLFOLDER pSFParent, BOOL bDesktop);
 LPSHELLVIEW	IShellView_Constructor(LPSHELLFOLDER);

Modified: trunk/reactos/dll/win32/shell32/shv_bg_cmenu.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shv_bg_cmenu.c?rev=30307&r1=30306&r2=30307&view=diff
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_bg_cmenu.c (original)
+++ trunk/reactos/dll/win32/shell32/shv_bg_cmenu.c Fri Nov  9 22:49:18 2007
@@ -49,6 +49,7 @@
 	IShellFolder*	pSFParent;
 	LONG		ref;
 	BOOL		bDesktop;
+    IContextMenu2 * icm_new;
 } BgCmImpl;
 
 static const IContextMenu2Vtbl cmvt;
@@ -183,6 +184,7 @@
     MENUITEMINFOW mii;
     HRESULT hr;
 
+    IContextMenu2 * icm;
     BgCmImpl *This = (BgCmImpl *)iface;
 
     TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",
@@ -218,6 +220,24 @@
       mii.fType = 0;
       SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERT, FALSE, &mii);
       SetMenuItemInfoW(hMenu, FCIDM_SHVIEW_INSERTLINK, FALSE, &mii);
+    }
+
+    /*
+     * FIXME
+     * load other shell extensions
+     */
+    
+    if (SUCCEEDED(INewItem_Constructor(This->pSFParent, &IID_IContextMenu2, (LPVOID*)&icm)))
+    {
+        if (SUCCEEDED(IContextMenu_QueryContextMenu(icm, hMenu, 10, idCmdFirst, idCmdLast, uFlags)))
+        {
+            This->icm_new = icm;
+            _InsertMenuItem(hMenu, 11, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED);
+        }
+        else
+        {
+            This->icm_new = NULL;
+        }
     }
 
     if (This->bDesktop)
@@ -389,6 +409,10 @@
 		break;
 
 	      default:
+
+              if (This->icm_new && SUCCEEDED(IContextMenu2_InvokeCommand(This->icm_new, lpcmi)))
+                  return S_OK;
+
 	        /* if it's an id just pass it to the parent shv */
 	        if (hWndSV) SendMessageA(hWndSV, WM_COMMAND, MAKEWPARAM(LOWORD(lpcmi->lpVerb), 0),0 );
 		break;
@@ -448,6 +472,11 @@
 
 	TRACE("ISVBgCm_fnHandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam);
 
+    if (This->icm_new)
+    {
+        IContextMenu2_HandleMenuMsg(This->icm_new, uMsg, wParam, lParam);
+    }
+
 	return E_NOTIMPL;
 }
 

Added: trunk/reactos/dll/win32/shell32/shv_item_new.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/shv_item_new.c?rev=30307&view=auto
==============================================================================
--- trunk/reactos/dll/win32/shell32/shv_item_new.c (added)
+++ trunk/reactos/dll/win32/shell32/shv_item_new.c Fri Nov  9 22:49:18 2007
@@ -1,0 +1,828 @@
+/*
+ * PROJECT:     shell32
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        dll/win32/shell32/shv_item_new.c
+ * PURPOSE:     provides new shell item service
+ * PROGRAMMERS: Johannes Anderwald (janderwald at reactos.org)
+ */
+
+#include <string.h>
+
+#define COBJMACROS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+//#define YDEBUG
+#include "wine/debug.h"
+
+#include "windef.h"
+#include "wingdi.h"
+#include "pidl.h"
+#include "shlobj.h"
+#include "shtypes.h"
+#include "shell32_main.h"
+#include "shellfolder.h"
+#include "undocshell.h"
+#include "shlwapi.h"
+#include "stdio.h"
+#include "winuser.h"
+#include "shresdef.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(shell);
+
+typedef enum
+{
+   SHELLNEW_TYPE_COMMAND = 1,
+   SHELLNEW_TYPE_DATA = 2,
+   SHELLNEW_TYPE_FILENAME = 4,
+   SHELLNEW_TYPE_NULLFILE = 8
+}SHELLNEW_TYPE;
+
+
+typedef struct __SHELLNEW_ITEM__
+{
+  SHELLNEW_TYPE Type;
+  LPWSTR szExt;
+  LPWSTR szTarget;
+  LPWSTR szDesc;
+  LPWSTR szIcon;
+  struct __SHELLNEW_ITEM__ * Next;
+}SHELLNEW_ITEM, *PSHELLNEW_ITEM;
+
+typedef struct
+{
+    const IContextMenu2Vtbl *lpVtblContextMenu;
+    LPSHELLFOLDER pSFParent;
+    PSHELLNEW_ITEM s_SnHead;
+}INewMenuImpl;
+
+static const GUID CLSID_NewMenu = {0xD969A300, 0xE7FF, 0x11d0, {0xA9, 0x3B, 0x00, 0xA0, 0xC9, 0x0F, 0x27, 0x19} };
+static const IContextMenu2Vtbl cmvt;
+static WCHAR szNew[100];
+
+
+static
+BOOL
+GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult)
+{
+  HKEY hKey;
+  DWORD dwDesc, dwError;
+  WCHAR szDesc[100];
+
+  static const WCHAR szFriendlyTypeName[] = { '\\','F','r','i','e','n','d','l','y','T','y','p','e','N','a','m','e',0 };
+
+  TRACE("GetKeyDescription: keyname %s\n", debugstr_w(szKeyName));
+
+  if (RegOpenKeyExW(HKEY_CLASSES_ROOT,szKeyName,0, KEY_READ | KEY_QUERY_VALUE,&hKey) != ERROR_SUCCESS)
+      return FALSE;
+
+  if (RegLoadMUIStringW(hKey,szFriendlyTypeName,szResult,MAX_PATH,&dwDesc,0,NULL) == ERROR_SUCCESS)
+  {
+      TRACE("result %s\n", debugstr_w(szResult));
+      RegCloseKey(hKey);
+      return TRUE;
+  }
+  /* fetch default value */
+  dwDesc = sizeof(szDesc);
+  dwError = RegGetValueW(hKey,NULL,NULL, RRF_RT_REG_SZ,NULL,szDesc,&dwDesc);
+  if(dwError == ERROR_SUCCESS)
+  {
+     if (wcsncmp(szDesc, szKeyName, dwDesc / sizeof(WCHAR)))
+     {
+        /* recurse for to a linked key */
+        if (!GetKeyDescription(szDesc, szResult))
+        {
+           /* use description */
+           wcscpy(szResult, szDesc);
+        }
+     }
+     else
+     {
+        /* use default value as description */
+        wcscpy(szResult, szDesc);
+     }
+  }
+  else
+  {
+     /* registry key w/o default key?? */
+     TRACE("RegGetValue failed with %x\n", dwError);
+     wcscpy(szResult, szKeyName);
+  }
+
+  RegCloseKey(hKey);
+  return TRUE;
+}
+
+
+PSHELLNEW_ITEM LoadItem(LPWSTR szKeyName)
+{
+  HKEY hKey;
+  DWORD dwIndex;
+  WCHAR szName[MAX_PATH];
+  WCHAR szCommand[MAX_PATH];
+  WCHAR szDesc[MAX_PATH] = {0};
+  WCHAR szIcon[MAX_PATH] = {0};
+  DWORD dwName, dwCommand;
+  LONG result;
+  PSHELLNEW_ITEM pNewItem;
+  
+  static const WCHAR szShellNew[] = { '\\','S','h','e','l','l','N','e','w',0 };
+  static const WCHAR szCmd[] = { 'C','o','m','m','a','n','d',0 };
+  static const WCHAR szData[] = { 'D','a','t','a',0 };
+  static const WCHAR szFileName[] = { 'F','i','l','e','N','a','m','e', 0 };
+  static const WCHAR szNullFile[] = { 'N','u','l','l','F','i','l','e', 0 };
+
+
+  wcscpy(szName, szKeyName);
+  GetKeyDescription(szKeyName, szDesc);
+  wcscat(szName, szShellNew);
+  result = RegOpenKeyExW(HKEY_CLASSES_ROOT,szName,0,KEY_READ,&hKey);
+
+  //TRACE("LoadItem dwName %d keyname %s szName %s szDesc %s szIcon %s\n", dwName, debugstr_w(szKeyName), debugstr_w(szName), debugstr_w(szDesc), debugstr_w(szIcon));
+
+  if (result != ERROR_SUCCESS)
+  {
+     return NULL;
+  }
+
+  dwIndex = 0;
+  pNewItem = NULL;
+
+  do
+  {
+     dwName = MAX_PATH;
+     dwCommand = MAX_PATH;
+     result = RegEnumValueW(hKey,dwIndex,szName,&dwName,NULL,NULL,(LPBYTE)szCommand, &dwCommand);
+     if (result == ERROR_SUCCESS)
+     {
+         long type = -1;
+         LPWSTR szTarget = szCommand;
+         //TRACE("szName %s szCommand %s\n", debugstr_w(szName), debugstr_w(szCommand));
+         if (!wcsicmp(szName, szCmd))
+         {
+            type = SHELLNEW_TYPE_COMMAND;
+         }else if (!wcsicmp(szName, szData))
+         {
+             type = SHELLNEW_TYPE_DATA;
+         }
+         else if (!wcsicmp(szName, szFileName))
+         {
+            type = SHELLNEW_TYPE_FILENAME;
+         }
+         else if (!wcsicmp(szName, szNullFile))
+         {
+            type = SHELLNEW_TYPE_NULLFILE;
+            szTarget = NULL;
+         }
+         if (type != -1)
+         {
+            pNewItem = HeapAlloc(GetProcessHeap(), 0, sizeof(SHELLNEW_ITEM));
+            pNewItem->Type = type;
+            if (szTarget)
+                pNewItem->szTarget = wcsdup(szTarget);
+            else
+                pNewItem->szTarget = NULL;
+
+            pNewItem->szDesc = wcsdup(szDesc);
+            pNewItem->szIcon = wcsdup(szIcon);
+            pNewItem->szExt = wcsdup(szKeyName);
+            pNewItem->Next = NULL;
+            break;
+         }
+     }
+     dwIndex++;
+  }while(result != ERROR_NO_MORE_ITEMS);
+  RegCloseKey(hKey);
+  return pNewItem;
+}
+
+
+BOOL
+LoadShellNewItems(INewMenuImpl * This)
+{
+  DWORD dwIndex;
+  WCHAR szName[MAX_PATH];
+  LONG result;
+  PSHELLNEW_ITEM pNewItem;
+  PSHELLNEW_ITEM pCurItem = NULL;
+  static WCHAR szLnk[] = { '.','l','n','k',0 };
+
+  /* insert do new folder action */
+  if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szNew, sizeof(szNew) / sizeof(WCHAR)))
+      szNew[0] = 0;
+  szNew[199] = 0;
+
+  dwIndex = 0;
+  do
+  {
+     result = RegEnumKeyW(HKEY_CLASSES_ROOT,dwIndex,szName,MAX_PATH);
+     if (result == ERROR_SUCCESS)
+     {
+        pNewItem = LoadItem(szName);
+        if (pNewItem)
+        {
+            if (!wcsicmp(pNewItem->szExt, szLnk))
+            {
+                if (This->s_SnHead)
+                {
+                    pNewItem->Next = This->s_SnHead;
+                    This->s_SnHead = pNewItem;
+                }
+                else
+                {
+                   This->s_SnHead = pCurItem = pNewItem;
+                }
+            }
+            else
+            {
+                if (pCurItem)
+                {
+                   pCurItem->Next = pNewItem;
+                   pCurItem = pNewItem;
+                }
+                else
+                {
+                   pCurItem = This->s_SnHead = pNewItem;
+                }
+            }
+        }
+     }
+     dwIndex++;
+  }while(result != ERROR_NO_MORE_ITEMS);
+
+  if (This->s_SnHead == NULL)
+      return FALSE;
+  else
+      return TRUE;
+}
+
+UINT
+InsertShellNewItems(HMENU hMenu, UINT idFirst, UINT idMenu, INewMenuImpl * This)
+{
+  MENUITEMINFOW mii;
+  PSHELLNEW_ITEM pCurItem;
+  UINT i;
+  WCHAR szBuffer[100];
+
+  if (This->s_SnHead == NULL)
+  {
+    if (!LoadShellNewItems(This))
+        return 0;
+  }
+
+  ZeroMemory(&mii, sizeof(mii));
+  mii.cbSize = sizeof(mii);
+
+  /* insert do new shortcut action */
+  if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEWFOLDER, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+      szBuffer[0] = 0;
+  szBuffer[199] = 0;
+  mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA;
+  mii.fType = MFT_STRING;
+  mii.dwTypeData = szNew;
+  mii.cch = strlenW(mii.dwTypeData);
+  mii.wID = idFirst++;
+  InsertMenuItemW(hMenu, idMenu++, TRUE, &mii);
+
+  /* insert do new shortcut action */
+  if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEWLINK, szBuffer, sizeof(szBuffer) / sizeof(szBuffer[0])))
+      szBuffer[0] = 0;
+  szBuffer[199] = 0;
+  mii.dwTypeData = szBuffer;
+  mii.cch = strlenW(mii.dwTypeData);
+  mii.wID = idFirst++;
+  InsertMenuItemW(hMenu, idMenu++, TRUE, &mii);
+  
+  /* insert seperator for custom new action */
+  mii.fMask = MIIM_TYPE | MIIM_ID;
+  mii.fType = MFT_SEPARATOR;
+  mii.wID = -1;
+  InsertMenuItemW(hMenu, idMenu++, TRUE, &mii);
+
+  mii.fMask = MIIM_ID | MIIM_TYPE | MIIM_STATE | MIIM_DATA;
+  /*
+   * FIXME 
+   * implement loading of icons
+   * and using MFT_OWNERDRAWN
+   */
+  mii.fType = MFT_STRING;
+  mii.fState = MFS_ENABLED;
+
+  pCurItem = This->s_SnHead;
+  i = 0;
+
+  while(pCurItem)
+  {
+    if (i >= 1)
+    {
+       TRACE("szDesc %s\n", debugstr_w(pCurItem->szDesc));
+       mii.dwTypeData = pCurItem->szDesc;
+       mii.cch = strlenW(mii.dwTypeData);
+       mii.wID = idFirst++;
+       InsertMenuItemW(hMenu, idMenu++, TRUE, &mii);
+    }
+    pCurItem = pCurItem->Next;
+    i++;
+  }
+  return (i+2);
+}
+
+HRESULT
+DoShellNewCmd(INewMenuImpl * This, LPCMINVOKECOMMANDINFO lpcmi)
+{
+  PSHELLNEW_ITEM pCurItem = This->s_SnHead;
+  IPersistFolder3 * psf;
+  LPITEMIDLIST pidl;
+  STRRET strTemp;
+  WCHAR szTemp[MAX_PATH];
+  WCHAR szBuffer[MAX_PATH];
+  WCHAR szPath[MAX_PATH];
+  STARTUPINFOW sInfo;
+  PROCESS_INFORMATION pi;
+  UINT i, target;
+  HANDLE hFile;
+  DWORD dwWritten, dwError;
+
+  static const WCHAR szP1[] = { '%', '1', 0 };
+  static const WCHAR szFormat[] = {'%','s',' ','(','%','d',')','%','s',0 };
+
+  i = 1;
+  target = LOWORD(lpcmi->lpVerb);
+
+  while(pCurItem)
+  {
+    if (i == target)
+        break;
+
+    pCurItem = pCurItem->Next;
+    i++;
+  }
+
+  if (!pCurItem)
+      return E_UNEXPECTED;
+
+  if (IShellFolder2_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&psf) != S_OK)
+  {
+      ERR("Failed to get interface IID_IPersistFolder2\n");
+      return E_FAIL;
+  }
+  if (IPersistFolder2_GetCurFolder(psf, &pidl) != S_OK)
+  {
+      ERR("IPersistFolder2_GetCurFolder failed\n");
+      return E_FAIL;
+  }
+
+  if (IShellFolder2_GetDisplayNameOf(This->pSFParent, pidl, SHGDN_FORPARSING, &strTemp) != S_OK)
+  {
+      ERR("IShellFolder_GetDisplayNameOf failed\n");
+      return E_FAIL;
+  }
+  StrRetToBufW(&strTemp, pidl, szPath, MAX_PATH);
+
+  switch(pCurItem->Type)
+  {
+     case SHELLNEW_TYPE_COMMAND:
+     {
+         LPWSTR ptr;
+         LPWSTR szCmd;
+
+         if (!ExpandEnvironmentStringsW(pCurItem->szTarget, szBuffer, MAX_PATH))
+         {
+             TRACE("ExpandEnvironmentStrings failed\n");
+             break;
+         }
+
+         ptr = wcsstr(szBuffer, szP1);
+         if (ptr)
+         {
+            ptr[1] = 's';
+            sprintfW(szTemp, szBuffer, szPath);
+            ptr = szTemp;
+         }
+         else
+         {
+            ptr = szBuffer;
+         }
+
+         ZeroMemory(&sInfo, sizeof(sInfo));
+         sInfo.cb = sizeof(sizeof(sInfo));
+         szCmd = wcsdup(ptr);
+         if (!szCmd)
+             break;
+         if (CreateProcessW(NULL, szCmd, NULL, NULL,FALSE,0,NULL,NULL,&sInfo, &pi))
+         {
+           CloseHandle( pi.hProcess );
+           CloseHandle( pi.hThread );
+         }
+         free(szCmd);
+        break;
+     }
+     case SHELLNEW_TYPE_DATA:
+     case SHELLNEW_TYPE_FILENAME:
+     case SHELLNEW_TYPE_NULLFILE:
+     {
+        i = 2;
+
+        PathAddBackslashW(szPath);
+        wcscat(szPath, szNew);
+        wcscat(szPath, L" ");
+        wcscat(szPath, pCurItem->szDesc);
+        wcscpy(szBuffer, szPath);
+        wcscat(szBuffer, pCurItem->szExt);
+        do
+        {
+            hFile = CreateFileW(szBuffer, GENERIC_WRITE, 0, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
+            if (hFile != INVALID_HANDLE_VALUE)
+                break;
+            dwError = GetLastError();
+
+            TRACE("FileName %s szBuffer %s i %u error %x\n", debugstr_w(szBuffer), debugstr_w(szPath), i, dwError);
+            sprintfW(szBuffer, szFormat, szPath, i, pCurItem->szExt);
+            i++;
+        }while(hFile == INVALID_HANDLE_VALUE && dwError == ERROR_FILE_EXISTS);
+
+        if (hFile == INVALID_HANDLE_VALUE)
+            return E_FAIL;
+
+        if (pCurItem->Type == SHELLNEW_TYPE_DATA)
+        {
+            i = WideCharToMultiByte(CP_ACP, 0, pCurItem->szTarget, -1, (LPSTR)szTemp, MAX_PATH*2, NULL, NULL);
+            if (i)
+            {
+                WriteFile(hFile, (LPCVOID)szTemp, i, &dwWritten, NULL);
+            }
+        }
+        CloseHandle(hFile);
+        if (pCurItem->Type == SHELLNEW_TYPE_FILENAME)
+        {
+            if (!CopyFileW(pCurItem->szTarget, szBuffer, FALSE))
+                break;
+        }
+        TRACE("Notifying fs %s\n", debugstr_w(szBuffer));
+        SHChangeNotify(SHCNE_CREATE, SHCNF_PATHW, (LPCVOID)szBuffer, NULL);
+        break;
+     }
+  }
+  return S_OK;
+}
+/**************************************************************************
+* DoMeasureItem
+*/
+HRESULT
+DoMeasureItem(INewMenuImpl *This, HWND hWnd, MEASUREITEMSTRUCT * lpmis)
+{
+   PSHELLNEW_ITEM pCurItem;
+   PSHELLNEW_ITEM pItem;
+   UINT i;
+   HDC hDC;
+   SIZE size;
+   
+   TRACE("DoMeasureItem entered with id %x\n", lpmis->itemID);
+   
+   pCurItem = This->s_SnHead;
+
+   i = 1;
+   pItem = NULL;
+   while(pCurItem)
+   {
+      if (i == lpmis->itemID)
+      {
+         pItem = pCurItem;
+         break;
+      }
+      pCurItem = pCurItem->Next;
+      i++;
+   }
+
+   if (!pItem)
+   {
+       TRACE("DoMeasureItem no item found\n");    
+       return E_FAIL;
+   }
+   hDC = GetDC(hWnd);
+   GetTextExtentPoint32W(hDC, pCurItem->szDesc, strlenW(pCurItem->szDesc), &size);
+   lpmis->itemWidth = size.cx + 32;
+   lpmis->itemHeight = max(size.cy, 20);
+   ReleaseDC (hWnd, hDC);
+   return S_OK;
+}
+/**************************************************************************
+* DoDrawItem
+*/
+HRESULT
+DoDrawItem(INewMenuImpl *This, HWND hWnd, DRAWITEMSTRUCT * drawItem)
+{
+   PSHELLNEW_ITEM pCurItem;
+   PSHELLNEW_ITEM pItem;
+   UINT i;
+   pCurItem = This->s_SnHead;
+
+   TRACE("DoDrawItem entered with id %x\n", drawItem->itemID);
+
+   i = 1;
+   pItem = NULL;
+   while(pCurItem)
+   {
+      if (i == drawItem->itemID)
+      {
+         pItem = pCurItem;
+         break;
+      }
+      pCurItem = pCurItem->Next;
+      i++;
+   }
+
+   if (!pItem)
+      return E_FAIL;
+   
+   drawItem->rcItem.left += 20;
+   
+   DrawTextW(drawItem->hDC, pCurItem->szDesc, wcslen(pCurItem->szDesc), &drawItem->rcItem, 0);
+   return S_OK;
+}
+
+/**************************************************************************
+* DoNewFolder
+*/
+static void DoNewFolder(
+	INewMenuImpl *This,
+	IShellView *psv)
+{
+	ISFHelper * psfhlp;
+	WCHAR wszName[MAX_PATH];
+
+	IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlp);
+	if (psfhlp)
+	{
+	  LPITEMIDLIST pidl;
+	  ISFHelper_GetUniqueName(psfhlp, wszName, MAX_PATH);
+	  ISFHelper_AddFolder(psfhlp, 0, wszName, &pidl);
+
+	  if(psv)
+	  {
+	    /* if we are in a shellview do labeledit */
+	    IShellView_SelectItem(psv,
+                    pidl,(SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE
+                    |SVSI_FOCUSED|SVSI_SELECT));
+	  }
+	  SHFree(pidl);
+
+	  ISFHelper_Release(psfhlp);
+	}
+}
+
+
+#if 0
+static inline INewMenuImpl *impl_from_IShellExtInit( IShellExtInit *iface )
+{
+    return (INewMenuImpl *)((char*)iface - FIELD_OFFSET(INewMenuImpl, lpvtblShellExtInit));
+}
+#endif
+
+static inline INewMenuImpl *impl_from_IContextMenu( IContextMenu2 *iface )
+{
+    return (INewMenuImpl *)((char*)iface - FIELD_OFFSET(INewMenuImpl, lpVtblContextMenu));
+}
+
+static HRESULT WINAPI INewItem_fnQueryInterface(INewMenuImpl * This, REFIID riid, LPVOID *ppvObj)
+{
+	TRACE("(%p)->(\n\tIID:\t%s,%p)\n",This,debugstr_guid(riid),ppvObj);
+
+	*ppvObj = NULL;
+
+     if(IsEqualIID(riid, &IID_IUnknown) ||
+        IsEqualIID(riid, &IID_IContextMenu) ||
+        IsEqualIID(riid, &IID_IContextMenu2))
+	{
+	  *ppvObj = &This->lpVtblContextMenu;
+	}
+#if 0
+	else if(IsEqualIID(riid, &IID_IShellExtInit))
+	{
+	  *ppvObj = &This->lpvtblShellExtInit;
+	}
+#endif
+
+	if(*ppvObj)
+	{
+	  IUnknown_AddRef((IUnknown*)*ppvObj);
+	  TRACE("-- Interface: (%p)->(%p)\n",ppvObj,*ppvObj);
+	  return S_OK;
+	}
+	TRACE("-- Interface: E_NOINTERFACE\n");
+	return E_NOINTERFACE;
+}
+
+static ULONG WINAPI INewItem_fnAddRef(INewMenuImpl *iface)
+{
+    /* INewItem service is singleton */
+    return 2;
+}
+
+static ULONG WINAPI INewItem_fnRelease(INewMenuImpl *This)
+{
+    /* INewItem service is singleton */
+    return 1;
+}
+
+static
+HRESULT
+WINAPI
+INewItem_IContextMenu_fnQueryInterface( IContextMenu2* iface, REFIID riid, void** ppvObject )
+{
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+    return INewItem_fnQueryInterface(This, riid, ppvObject);
+}
+
+static
+ULONG
+WINAPI
+INewItem_IContextMenu_fnAddRef(IContextMenu2 *iface)
+{
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+    return INewItem_fnAddRef(This);
+}
+
+static
+ULONG
+WINAPI
+INewItem_IContextMenu_fnRelease(IContextMenu2 *iface)
+{
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+    return INewItem_fnRelease(This);
+}
+
+static
+HRESULT
+WINAPI
+INewItem_IContextMenu_fnQueryContextMenu(IContextMenu2 *iface,
+	                                            HMENU hmenu,
+	                                            UINT indexMenu,
+	                                            UINT idCmdFirst,
+	                                            UINT idCmdLast,
+	                                            UINT uFlags)
+{
+    WCHAR szBuffer[200];
+    MENUITEMINFOW mii;
+    HMENU hSubMenu;
+    int id = 1;
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+
+    TRACE("%p %p %u %u %u %u\n", This,
+          hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags );
+
+    if (!LoadStringW(shell32_hInstance, FCIDM_SHVIEW_NEW, szBuffer, 200))
+    {
+        szBuffer[0] = 0;
+    }
+    szBuffer[199] = 0;
+
+    hSubMenu = CreateMenu();
+    memset( &mii, 0, sizeof(mii) );
+    mii.cbSize = sizeof (mii);
+    mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE;
+    mii.fType = MFT_STRING;
+    mii.wID = idCmdFirst + id++;
+    mii.dwTypeData = szBuffer;
+    mii.cch = strlenW( mii.dwTypeData );
+    mii.fState = MFS_ENABLED;
+
+    if (hSubMenu)
+    {
+        id += InsertShellNewItems( hSubMenu, idCmdFirst, 0, This);
+        mii.fMask |= MIIM_SUBMENU;
+        mii.hSubMenu = hSubMenu;
+    }
+
+
+    if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii ))
+        return E_FAIL;
+
+    return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id );
+}
+
+static
+HRESULT
+WINAPI
+INewItem_IContextMenu_fnInvokeCommand( IContextMenu2* iface, 
+                                              LPCMINVOKECOMMANDINFO lpici )
+{
+	LPSHELLBROWSER	lpSB;
+	LPSHELLVIEW lpSV = NULL;
+    HRESULT hr;
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+
+	if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER,0,0)))
+	{
+	  IShellBrowser_QueryActiveShellView(lpSB, &lpSV);
+    }
+
+    if (LOWORD(lpici->lpVerb) == 0)
+    {
+        DoNewFolder(This, lpSV);
+    }
+
+    hr = DoShellNewCmd(This, lpici);
+    if (SUCCEEDED(hr) && lpSV)
+    {
+        IShellView_Refresh(lpSV);
+    }
+
+    TRACE("INewItem_IContextMenu_fnInvokeCommand %x\n", hr);
+    return hr;
+}
+
+static
+HRESULT
+WINAPI
+INewItem_IContextMenu_fnGetCommandString( IContextMenu2* iface,
+                                                 UINT_PTR idCmd,
+                                                 UINT uType,
+                                                 UINT* pwReserved,
+                                                 LPSTR pszName,
+                                                 UINT cchMax )
+{
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+
+    FIXME("%p %lu %u %p %p %u\n", This,
+          idCmd, uType, pwReserved, pszName, cchMax );
+
+    return E_NOTIMPL;
+}
+
+static 
+HRESULT 
+WINAPI 
+INewItem_IContextMenu_fnHandleMenuMsg(IContextMenu2 *iface,
+	                     UINT uMsg,
+	                     WPARAM wParam,
+	                     LPARAM lParam)
+{
+    INewMenuImpl *This = impl_from_IContextMenu(iface);
+    DRAWITEMSTRUCT * lpids = (DRAWITEMSTRUCT*) lParam;
+    MEASUREITEMSTRUCT *lpmis = (MEASUREITEMSTRUCT*) lParam;
+
+	TRACE("INewItem_IContextMenu_fnHandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam);
+
+#if 0
+    switch(uMsg)
+    {
+       case WM_MEASUREITEM:
+             return DoMeasureItem(This, (HWND)wParam, lpmis);
+          break;
+       case WM_DRAWITEM:
+             return DoDrawItem(This, (HWND)wParam, lpids);
+          break;
+    }
+#else
+    return S_OK;
+#endif
+
+	return E_UNEXPECTED;
+}
+
+static const IContextMenu2Vtbl cmvt =
+{
+	INewItem_IContextMenu_fnQueryInterface,
+	INewItem_IContextMenu_fnAddRef,
+	INewItem_IContextMenu_fnRelease,
+	INewItem_IContextMenu_fnQueryContextMenu,
+	INewItem_IContextMenu_fnInvokeCommand,
+	INewItem_IContextMenu_fnGetCommandString,
+	INewItem_IContextMenu_fnHandleMenuMsg
+};
+
+HRESULT WINAPI INewItem_Constructor(LPSHELLFOLDER pSFParent, REFIID riid, LPVOID *ppv)
+{
+    INewMenuImpl * ow;
+    HRESULT res;
+    static INewMenuImpl *cached_ow;
+
+    if (!cached_ow)
+    {
+	    ow = LocalAlloc(LMEM_ZEROINIT, sizeof(INewMenuImpl));
+	    if (!ow)
+        {
+            return E_OUTOFMEMORY;
+        }
+
+        ow->lpVtblContextMenu = &cmvt;
+        ow->s_SnHead = NULL;
+
+        if (InterlockedCompareExchangePointer((void *)&cached_ow, ow, NULL) != NULL)
+        {
+            /* some other thread already been here */
+            LocalFree( ow );
+        }
+    }
+
+    TRACE("(%p)->()\n",cached_ow);
+    if (cached_ow->pSFParent)
+    {
+        IShellFolder_Release(cached_ow->pSFParent);
+    }
+    cached_ow->pSFParent = pSFParent;
+    IShellFolder_AddRef(pSFParent);
+
+    res = INewItem_fnQueryInterface( cached_ow, riid, ppv );
+    return res;
+}

Propchange: trunk/reactos/dll/win32/shell32/shv_item_new.c
------------------------------------------------------------------------------
    svn:eol-style = native




More information about the Ros-diffs mailing list