1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 // MsOfficeDocumentInformation.h: Schnittstelle f�r die Klasse MsOfficeDocumentInformation.
23 //
24 //////////////////////////////////////////////////////////////////////
25 
26 #ifndef _REGISTRATIONCONTEXTINFORMATION_HXX_
27 #define _REGISTRATIONCONTEXTINFORMATION_HXX_
28 
29 #ifdef _MSC_VER
30 #pragma warning(push, 1) /* disable warnings within system headers */
31 #endif
32 #define WIN32_LEAN_AND_MEAN
33 #include <windows.h>
34 #include <msi.h>
35 #ifdef _MSC_VER
36 #pragma warning(pop)
37 #endif
38 
39 #include <string>
40 
41 /** A simple implementation class that returns the
42 	appropriate display names for the Microsoft
43 	Office document types.
44 	Under Windows 9x this class checks if the
45 	document display name is convertable to an ANSI
46 	string and if not returns an english default.
47 	So we avoid garbage if soemone for instance
48 	installs an japanese StarOffice/OpenOffice
49 	under a German Windows 98 for instance.
50 */
51 class RegistrationContextInformation
52 {
53 public:
54 
55 	enum SHELL_COMMAND {New, Open, Print, Printto};
56 	enum OFFICE_APPLICATION {Office, Writer, Calc, Impress};
57 
58 	RegistrationContextInformation(MSIHANDLE hMsi, const std::wstring& OpenOfficeExecutablePath);
59 
60 	/** Word document information
61 		The icon index is the index of the icon
62 		in soffice.exe to be associated with
63 		word document files
64 	*/
65 	std::wstring GetWordDocumentDisplayName() const;
66 	std::wstring GetWordDocumentFileExtension() const;
67 	std::wstring GetWordDocumentDefaultIconEntry() const;
68 	std::wstring GetWordDocumentDefaultShellCommand() const;
69 
70 	/** Word template information
71 		The icon index is the index of the icon
72 		in soffice.exe to be associated with
73 		word template files
74 	*/
75 	std::wstring GetWordTemplateDisplayName() const;
76 	std::wstring GetWordTemplateFileExtension() const;
77 	std::wstring GetWordTemplateDefaultIconEntry() const;
78 	std::wstring GetWordTemplateDefaultShellCommand() const;
79 
80 	/** Rtf document information
81 		The icon index is the index of the icon
82 		in soffice.exe to be associated with
83 		rtf document files
84 	*/
85 	std::wstring GetRtfDocumentDisplayName() const;
86 	std::wstring GetRtfDocumentFileExtension() const;
87 	std::wstring GetRtfDocumentDefaultIconEntry() const;
88 	std::wstring GetRtfDocumentDefaultShellCommand() const;
89 
90 	/** Excel sheet information
91 		The icon index is the index of the icon
92 		in soffice.exe to be associated with
93 		Excel sheets
94 	*/
95 	std::wstring GetExcelSheetDisplayName() const;
96 	std::wstring GetExcelSheetFileExtension() const;
97 	std::wstring GetExcelSheetDefaultIconEntry() const;
98 	std::wstring GetExcelSheetDefaultShellCommand() const;
99 
100 	/** Excel template information
101 		The icon index is the index of the icon
102 		in soffice.exe to be associated with
103 		Excel template files
104 	*/
105 	std::wstring GetExcelTemplateDisplayName() const;
106 	std::wstring GetExcelTemplateFileExtension() const;
107 	std::wstring GetExcelTemplateDefaultIconEntry() const;
108 	std::wstring GetExcelTemplateDefaultShellCommand() const;
109 
110 	/** PowerPoint document information
111 		The icon index is the index of the icon
112 		in soffice.exe to be associated with
113 		PowerPoint document files
114 	*/
115 	std::wstring GetPowerPointDocumentDisplayName() const;
116 	std::wstring GetPowerPointDocumentFileExtension() const;
117 	std::wstring GetPowerPointDocumentDefaultIconEntry() const;
118 	std::wstring GetPowerPointDocumentDefaultShellCommand() const;
119 
120 	/** PowerPoint template information
121 		The icon index is the index of the icon
122 		in soffice.exe to be associated with
123 		PowerPoint template files
124 	*/
125 	std::wstring GetPowerPointTemplateDisplayName() const;
126 	std::wstring GetPowerPointTemplateFileExtension() const;
127 	std::wstring GetPowerPointTemplateDefaultIconEntry() const;
128 	std::wstring GetPowerPointTemplateDefaultShellCommand() const;
129 
130     /** PowerPoint Show information
131     */
132     std::wstring GetPowerPointShowDisplayName() const;
133 	std::wstring GetPowerPointShowFileExtension() const;
134 	std::wstring GetPowerPointShowDefaultIconEntry() const;
135 	std::wstring GetPowerPointShowDefaultShellCommand() const;
136 
137 	/** The string for the "New" command that should appear
138 		in the Explorer context menu when someone right
139 		clicks a Microsoft document
140 	*/
141 	std::wstring ShellNewCommandDisplayName() const;
142 
143 	/** The string for the "Edit" command that should
144 		appear in the Explorer context menu when someone
145 		right clicks a document
146 	*/
147 	std::wstring ShellEditCommandDisplayName() const;
148 
149 	/** A friendly name for the application
150 	*/
151 	std::wstring GetOpenOfficeFriendlyAppName() const;
152 
153 	/** The path to the StarOffice/OpenOffice executable
154 	*/
155 	std::wstring GetOpenOfficeExecutablePath() const;
156 
157 	/** The name of the executable (currently "soffice.exe"
158 		but may change in the future, who knows)
159 	*/
160 	std::wstring GetOpenOfficeExecutableName() const;
161 
162 	/** A command line for the specified shell command
163 	*/
164 	std::wstring GetOpenOfficeCommandline(SHELL_COMMAND ShellCommand,
165                                           OFFICE_APPLICATION OfficeApp) const;
166 
167 private:
168 	bool IsConvertableToAnsi(const std::wstring& String)  const;
169 
170 	void ExtractOpenOfficeExecNameFromPath();
171 
172 private:
173 	MSIHANDLE	 msihandle_;
174 	bool		 m_IsWin9x;
175 	std::wstring m_OOExecPath;
176 	std::wstring m_OOExecName;
177 };
178 
179 #endif
180