summaryrefslogtreecommitdiff
path: root/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'setup_native/source/win32/customactions/reg4msdoc/registrar.cxx')
-rw-r--r--setup_native/source/win32/customactions/reg4msdoc/registrar.cxx808
1 files changed, 0 insertions, 808 deletions
diff --git a/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx b/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx
deleted file mode 100644
index ba6d8bd56..000000000
--- a/setup_native/source/win32/customactions/reg4msdoc/registrar.cxx
+++ /dev/null
@@ -1,808 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-// Registrar.cpp: Implementierung der Klasse Registrar.
-//
-//////////////////////////////////////////////////////////////////////
-
-#include "registrar.hxx"
-
-#include "RegistryValueImpl.hxx"
-#include "windowsregistry.hxx"
-#include "registryexception.hxx"
-
-#include <assert.h>
-#ifdef _MSC_VER
-#pragma warning(disable: 4350 4482)
-#include "strsafe.h"
-#endif
-
-//----------------------------------------------------------
-#ifdef DEBUG
-inline void OutputDebugStringFormat( LPCTSTR pFormat, ... )
-{
- TCHAR buffer[1024];
- va_list args;
-
- va_start( args, pFormat );
- StringCchVPrintf( buffer, sizeof(buffer), pFormat, args );
- OutputDebugString( buffer );
-}
-#else
-static inline void OutputDebugStringFormat( LPCTSTR, ... )
-{
-}
-#endif
-//----------------------------------------------------------
-
-const int MSWORD = 0x1;
-const int MSEXCEL = 0x2;
-const int MSPOWERPOINT = 0x4;
-const int DEFAULT_HTML_EDITOR_FOR_IE = 0x8;
-const int HTML_EDITOR = 0x10;
-const int DEFAULT_SHELL_HTML_EDITOR = 0x20;
-
-namespace /* private */
-{
- const std::wstring HTM_OPENWITHLIST = L".htm\\OpenWithList";
- const std::wstring APPLICATIONS = L"Applications";
- const std::wstring SHELL_EDIT_COMMAND = L"shell\\edit\\command";
- const std::wstring HTML_EDIT = L"HTML Edit";
- const std::wstring HTML_EDIT_DISPLAY_NAME = L"Edit Display Name";
- const std::wstring SHELL_EDIT_COMMAND_BACKUP = L"Shell Edit Cmd";
- const std::wstring DEFAULT_HTML_EDITOR = L"Default HTML Editor";
- const std::wstring MS_IE_DEF_HTML_EDITOR = L"Software\\Microsoft\\Internet Explorer\\Default HTML Editor";
- const std::wstring MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD = L"Software\\Microsoft\\Internet Explorer\\Default HTML Editor\\shell\\edit\\command";
-}
-
-Registrar::Registrar(const RegistrationContextInformation& RegContext) :
- m_ContextInformation(RegContext),
- FORWARD_KEY_PREFIX(L"OpenOffice.org"),//FORWARD_KEY_PREFIX(L"soffice6"),
- DEFAULT_VALUE_NAME(L""),
- BACKUP_VALUE_NAME(L"Backup"),
- PRIVATE_BACKUP_KEY_NAME(L"OpenOffice.org.reg4msdocmsi"),//PRIVATE_BACKUP_KEY_NAME(L"soffice6.bak"),
- REGISTRATION_STATE(L"Reg4MsDocState")
-{
- m_RootKey = WindowsRegistry().GetClassesRootKey();
-}
-
-Registrar::~Registrar()
-{
-}
-
-void Registrar::RegisterForMsWord() const
-{
- assert(m_RootKey.get());
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetWordDocumentFileExtension(),
- m_ContextInformation.GetWordDocumentDisplayName(),
- m_ContextInformation.GetWordDocumentDefaultIconEntry(),
- m_ContextInformation.GetWordDocumentDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Writer);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXWordDocumentFileExtension(),
- m_ContextInformation.GetMOOXWordDocumentDisplayName(),
- m_ContextInformation.GetWordDocumentDefaultIconEntry(),
- m_ContextInformation.GetWordDocumentDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Writer);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetWordTemplateFileExtension(),
- m_ContextInformation.GetWordTemplateDisplayName(),
- m_ContextInformation.GetWordTemplateDefaultIconEntry(),
- m_ContextInformation.GetWordTemplateDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Writer);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetRtfDocumentFileExtension(),
- m_ContextInformation.GetRtfDocumentDisplayName(),
- m_ContextInformation.GetRtfDocumentDefaultIconEntry(),
- m_ContextInformation.GetRtfDocumentDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Writer);
-
- SaveRegisteredFor(MSWORD);
-}
-
-void Registrar::UnregisterForMsWord() const
-{
- assert(m_RootKey.get());
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetWordDocumentFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXWordDocumentFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetWordTemplateFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetRtfDocumentFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- SaveNotRegisteredFor(MSWORD);
-}
-
-bool Registrar::QueryPreselectForMsApplication(const std::wstring& file_extension) const
-{
- bool preselect = false;
-
- // We use HKCR else we would not see that a registration for
- // MS Office applications already exist if we are about to
- // register in HKCU\Software\Classes
- RegistryKey root_key = WindowsRegistry().GetClassesRootKey();
-
- if (!root_key->HasSubKey(file_extension))
- {
- preselect = true;
- OutputDebugStringFormat( TEXT("QueryPreselect: No SubKey found for (%s), preselected!\n"), file_extension.c_str() );
- }
- else
- {
- RegistryKey RegKey = root_key->OpenSubKey(file_extension, false);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- if (REG_SZ == RegVal->GetType() &&
- IsOpenOfficeRegisteredForMsApplication(RegVal->GetDataAsUniString()))
- {
- preselect = true;
- OutputDebugStringFormat( TEXT("QueryPreselect: (%s) registered to Office, preselected!\n"), file_extension.c_str() );
- }
- else if ( (REG_SZ == RegVal->GetType()) && ! root_key->HasSubKey( RegVal->GetDataAsUniString() ) )
- {
- preselect = true;
- OutputDebugStringFormat( TEXT("QueryPreselect: (%s) registered but destination is empty, preselected!\n"), file_extension.c_str() );
- }
- }
- else
- {
- preselect = true;
- OutputDebugStringFormat( TEXT("QueryPreselect: No default found for SubKey (%s), preselected!\n"), file_extension.c_str() );
- }
- }
- return preselect;
-}
-
-bool Registrar::QueryPreselectMsWordRegistration() const
-{
- return QueryPreselectForMsApplication(
- m_ContextInformation.GetWordDocumentFileExtension());
-}
-
-void Registrar::RegisterForMsExcel() const
-{
- assert(m_RootKey.get());
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetExcelSheetFileExtension(),
- m_ContextInformation.GetExcelSheetDisplayName(),
- m_ContextInformation.GetExcelSheetDefaultIconEntry(),
- m_ContextInformation.GetExcelSheetDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Calc);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXExcelSheetFileExtension(),
- m_ContextInformation.GetMOOXExcelSheetDisplayName(),
- m_ContextInformation.GetExcelSheetDefaultIconEntry(),
- m_ContextInformation.GetExcelSheetDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Calc);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetExcelTemplateFileExtension(),
- m_ContextInformation.GetExcelTemplateDisplayName(),
- m_ContextInformation.GetExcelTemplateDefaultIconEntry(),
- m_ContextInformation.GetExcelTemplateDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Calc);
-
- SaveRegisteredFor(MSEXCEL);
-}
-
-void Registrar::UnregisterForMsExcel() const
-{
- assert(m_RootKey.get());
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetExcelSheetFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXExcelSheetFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXPowerPointDocumentFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetExcelTemplateFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- SaveNotRegisteredFor(MSEXCEL);
-}
-
-bool Registrar::QueryPreselectMsExcelRegistration() const
-{
- return QueryPreselectForMsApplication(
- m_ContextInformation.GetExcelSheetFileExtension());
-}
-
-void Registrar::RegisterForMsPowerPoint() const
-{
- assert(m_RootKey.get());
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointDocumentFileExtension(),
- m_ContextInformation.GetPowerPointDocumentDisplayName(),
- m_ContextInformation.GetPowerPointDocumentDefaultIconEntry(),
- m_ContextInformation.GetPowerPointDocumentDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Impress);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetMOOXPowerPointDocumentFileExtension(),
- m_ContextInformation.GetMOOXPowerPointDocumentDisplayName(),
- m_ContextInformation.GetPowerPointDocumentDefaultIconEntry(),
- m_ContextInformation.GetPowerPointDocumentDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Impress);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointShowFileExtension(),
- m_ContextInformation.GetPowerPointShowDisplayName(),
- m_ContextInformation.GetPowerPointShowDefaultIconEntry(),
- m_ContextInformation.GetPowerPointShowDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Impress);
-
- RegisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointTemplateFileExtension(),
- m_ContextInformation.GetPowerPointTemplateDisplayName(),
- m_ContextInformation.GetPowerPointTemplateDefaultIconEntry(),
- m_ContextInformation.GetPowerPointTemplateDefaultShellCommand(),
- m_ContextInformation.ShellNewCommandDisplayName(),
- RegistrationContextInformation::Impress);
-
- SaveRegisteredFor(MSPOWERPOINT);
-}
-
-void Registrar::UnregisterForMsPowerPoint() const
-{
- assert(m_RootKey.get());
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointDocumentFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointShowFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- try
- {
- UnregisterForMsOfficeApplication(
- m_ContextInformation.GetPowerPointTemplateFileExtension());
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- SaveNotRegisteredFor(MSPOWERPOINT);
-}
-
-//-----------------------------------------
-/*
-*/
-bool Registrar::QueryPreselectMsPowerPointRegistration() const
-{
- return QueryPreselectForMsApplication( m_ContextInformation.GetPowerPointDocumentFileExtension()) &&
- QueryPreselectForMsApplication( m_ContextInformation.GetPowerPointShowFileExtension());
-}
-
-//-----------------------------------------
-/** The documentation says we have to
- make the following entries to register
- a html editor for the Internet Explorer
- HKCR\.htm\OpenWithList\App Friendly Name\shell\edit\command
- But the reality shows that this works only
- with Internet Explorer 5.x
- Internet Explorer 6.0 wants the follwoing
- entries:
- HKCR\.htm\OpenWithList\App.exe
- HKCR\Applications\App.ex\shell\edit\command
-*/
-void Registrar::RegisterAsHtmlEditorForInternetExplorer() const
-{
- assert(m_RootKey.get());
-
- std::wstring OOFriendlyAppName = m_ContextInformation.GetOpenOfficeFriendlyAppName();
-
- std::wstring RegKeyName = HTM_OPENWITHLIST + std::wstring(L"\\") + OOFriendlyAppName;
- RegistryKey RegKey = m_RootKey->CreateSubKey(RegKeyName);
-
- RegKey = RegKey->CreateSubKey(SHELL_EDIT_COMMAND);
-
- RegistryValue RegVal(
- new RegistryValueImpl(
- DEFAULT_VALUE_NAME,
- m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open,
- RegistrationContextInformation::Writer)));
-
- RegKey->SetValue(RegVal);
-
- RegKeyName = APPLICATIONS + std::wstring(L"\\") + OOFriendlyAppName;
- RegKey = m_RootKey->CreateSubKey(RegKeyName);
-
- RegVal->SetName(L"FriendlyAppName");
- RegVal->SetValue(OOFriendlyAppName);
- RegKey->SetValue(RegVal);
-
- RegKey = RegKey->CreateSubKey(SHELL_EDIT_COMMAND);
- RegVal->SetName(DEFAULT_VALUE_NAME);
- RegVal->SetValue(
- m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open,
- RegistrationContextInformation::Writer));
- RegKey->SetValue(RegVal);
-
- SaveRegisteredFor(HTML_EDITOR);
-}
-
-void Registrar::UnregisterAsHtmlEditorForInternetExplorer() const
-{
- assert(m_RootKey.get());
-
- try
- {
- std::wstring OOFriendlyAppName = m_ContextInformation.GetOpenOfficeFriendlyAppName();
-
- RegistryKey aRegKey = m_RootKey->OpenSubKey( APPLICATIONS );
- if ( aRegKey->HasSubKey( OOFriendlyAppName ) )
- aRegKey->DeleteSubKeyTree( OOFriendlyAppName );
-
- aRegKey = m_RootKey->OpenSubKey( HTM_OPENWITHLIST );
- if ( aRegKey->HasSubKey( OOFriendlyAppName ) )
- aRegKey->DeleteSubKeyTree( OOFriendlyAppName );
- }
- catch(RegistryKeyNotFoundException&)
- {}
-
- SaveNotRegisteredFor(HTML_EDITOR);
-}
-
-void Registrar::RegisterAsDefaultHtmlEditorForInternetExplorer() const
-{
- assert(m_RootKey.get());
-
- RegistryKey RegistrationRootKey = GetRootKeyForDefHtmlEditorForIERegistration();
-
- RegistryKey RegKey = RegistrationRootKey->CreateSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD);
-
- RegistryValue RegVal = RegistryValue(new RegistryValueImpl(DEFAULT_VALUE_NAME, L""));
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring CmdLine = RegVal->GetDataAsUniString();
-
- if (std::wstring::npos == CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName()))
- {
- RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + DEFAULT_HTML_EDITOR);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- BackupRegKey->CopyValue(RegKey, DEFAULT_VALUE_NAME);
-
- RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR);
- if (RegKey->HasValue(L"Description"))
- BackupRegKey->CopyValue(RegKey, L"Description");
- }
- }
-
- RegVal->SetValue(
- m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open,
- RegistrationContextInformation::Writer));
- RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD);
- RegKey->SetValue(RegVal);
-
- RegVal->SetName(L"Description");
- RegVal->SetValue(m_ContextInformation.GetOpenOfficeFriendlyAppName());
- RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR);
- RegKey->SetValue(RegVal);
-
- SaveRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE);
-}
-
-void Registrar::UnregisterAsDefaultHtmlEditorForInternetExplorer() const
-{
- assert(m_RootKey.get());
-
- RegistryKey RegistrationRootKey = GetRootKeyForDefHtmlEditorForIERegistration();
-
- RegistryKey RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR_SHL_EDIT_CMD);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring CmdLine = RegVal->GetDataAsUniString();
-
- if (std::wstring::npos != CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName()))
- {
- RegistryKey BackupRegKey = m_RootKey->OpenSubKey(PRIVATE_BACKUP_KEY_NAME);
-
- if (BackupRegKey->HasSubKey(DEFAULT_HTML_EDITOR))
- {
- BackupRegKey = BackupRegKey->OpenSubKey(DEFAULT_HTML_EDITOR);
-
- if (BackupRegKey->HasValue(DEFAULT_VALUE_NAME))
- RegKey->CopyValue(BackupRegKey, DEFAULT_VALUE_NAME);
- else
- RegKey->DeleteValue(DEFAULT_VALUE_NAME);
-
- RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR);
-
- if (BackupRegKey->HasValue(L"Description"))
- RegKey->CopyValue(BackupRegKey, L"Description");
- else
- RegKey->DeleteValue(L"Description");
- }
- else
- {
- RegKey->DeleteValue(DEFAULT_VALUE_NAME);
- RegKey = RegistrationRootKey->OpenSubKey(MS_IE_DEF_HTML_EDITOR);
- RegKey->DeleteValue(L"Description");
- }
- }
- }
-
- SaveNotRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE);
-}
-
-void Registrar::RegisterAsDefaultShellHtmlEditor() const
-{
- assert(m_RootKey.get());
-
- RegistryKey RegKey = m_RootKey->CreateSubKey(L".htm");
-
- RegistryValue RegVal = RegistryValue(
- new RegistryValueImpl(DEFAULT_VALUE_NAME, L""));
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring HtmFwdKey = RegVal->GetDataAsUniString();
- if (0 == HtmFwdKey.length() || !m_RootKey->HasSubKey(HtmFwdKey))
- HtmFwdKey = L".htm";
-
- RegKey = m_RootKey->CreateSubKey(HtmFwdKey + L"\\" + SHELL_EDIT_COMMAND);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring CmdLine = RegVal->GetDataAsUniString();
-
- // backup old values if we are not in place
- if (std::wstring::npos == CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName()))
- {
- RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + HTML_EDIT);
- BackupRegKey->CopyValue(RegKey, DEFAULT_VALUE_NAME, SHELL_EDIT_COMMAND_BACKUP);
- }
- }
-
- RegVal->SetValue(
- m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open,
- RegistrationContextInformation::Writer));
-
- RegKey->SetValue(RegVal);
-
- SaveRegisteredFor(DEFAULT_SHELL_HTML_EDITOR);
-}
-
-void Registrar::UnregisterAsDefaultShellHtmlEditor() const
-{
- assert(m_RootKey.get());
-
- try
- {
- RegistryKey RegKey = m_RootKey->OpenSubKey(L".htm");
-
- RegistryValue RegVal = RegistryValue(
- new RegistryValueImpl(DEFAULT_VALUE_NAME, L""));
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring HtmFwdKey = RegVal->GetDataAsUniString();
-
- if (0 == HtmFwdKey.length() || !m_RootKey->HasSubKey(HtmFwdKey))
- HtmFwdKey = L".htm";
-
- RegKey = m_RootKey->OpenSubKey(HtmFwdKey + L"\\" + SHELL_EDIT_COMMAND);
-
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- std::wstring CmdLine = RegVal->GetDataAsUniString();
-
- if (std::wstring::npos != CmdLine.find(m_ContextInformation.GetOpenOfficeExecutableName()))
- {
- RegistryKey BackupRegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME + L"\\" + HTML_EDIT);
-
- if (BackupRegKey->HasValue(SHELL_EDIT_COMMAND_BACKUP))
- RegKey->CopyValue(BackupRegKey, SHELL_EDIT_COMMAND_BACKUP, DEFAULT_VALUE_NAME);
- else
- RegKey->DeleteValue(DEFAULT_VALUE_NAME);
- }
- }
- catch(RegistryKeyNotFoundException&)
- {
- }
-
- SaveNotRegisteredFor(DEFAULT_SHELL_HTML_EDITOR);
-}
-
-void Registrar::SaveRegisteredFor(int State) const
-{
- assert(m_RootKey.get());
-
- int NewState = GetRegisterState();
- NewState |= State;
- SetRegisterState(NewState);
-}
-
-void Registrar::SaveNotRegisteredFor(int State) const
-{
- assert(m_RootKey.get());
-
- int NewState = GetRegisterState();
- NewState &= ~State;
- SetRegisterState(NewState);
-}
-
-int Registrar::GetRegisterState() const
-{
- int State = 0;
-
- RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME);
-
- if (RegKey->HasValue(REGISTRATION_STATE))
- {
- RegistryValue RegVal = RegKey->GetValue(REGISTRATION_STATE);
- if (REG_DWORD == RegVal->GetType())
- State = RegVal->GetDataAsInt();
- }
-
- return State;
-}
-
-void Registrar::SetRegisterState(int NewState) const
-{
- RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME);
- RegistryValue RegVal = RegistryValue(new RegistryValueImpl(REGISTRATION_STATE, NewState));
- RegKey->SetValue(RegVal);
-}
-
-bool Registrar::IsRegisteredFor(int State) const
-{
- assert(m_RootKey.get());
-
- RegistryKey RegKey = m_RootKey->CreateSubKey(PRIVATE_BACKUP_KEY_NAME);
-
- int SavedState = 0;
-
- if (RegKey->HasValue(REGISTRATION_STATE))
- {
- RegistryValue RegVal = RegKey->GetValue(REGISTRATION_STATE);
- if (REG_DWORD == RegVal->GetType())
- SavedState = RegVal->GetDataAsInt();
- }
-
- return ((SavedState & State) == State);
-}
-
-//--------------------------------------
-/** Restore the last registration state (necessary for
- Setup repair) */
-void Registrar::RepairRegistrationState() const
-{
- assert(m_RootKey.get());
-
- if (IsRegisteredFor(MSWORD))
- RegisterForMsWord();
-
- if (IsRegisteredFor(MSEXCEL))
- RegisterForMsExcel();
-
- if (IsRegisteredFor(MSPOWERPOINT))
- RegisterForMsPowerPoint();
-
- if (IsRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE))
- RegisterAsDefaultHtmlEditorForInternetExplorer();
-
- if (IsRegisteredFor(HTML_EDITOR))
- RegisterAsHtmlEditorForInternetExplorer();
-
- if (IsRegisteredFor(DEFAULT_SHELL_HTML_EDITOR))
- RegisterAsDefaultShellHtmlEditor();
-}
-
-/** Unregisters all and delete all Registry keys we have written */
-void Registrar::UnregisterAllAndCleanUpRegistry() const
-{
- assert(m_RootKey.get());
-
- if (IsRegisteredFor(MSWORD))
- UnregisterForMsWord();
-
- if (IsRegisteredFor(MSEXCEL))
- UnregisterForMsExcel();
-
- if (IsRegisteredFor(MSPOWERPOINT))
- UnregisterForMsPowerPoint();
-
- if (IsRegisteredFor(DEFAULT_HTML_EDITOR_FOR_IE))
- UnregisterAsDefaultHtmlEditorForInternetExplorer();
-
- if (IsRegisteredFor(HTML_EDITOR))
- UnregisterAsHtmlEditorForInternetExplorer();
-
- if (IsRegisteredFor(DEFAULT_SHELL_HTML_EDITOR))
- UnregisterAsDefaultShellHtmlEditor();
-
- if (m_RootKey->HasSubKey(PRIVATE_BACKUP_KEY_NAME))
- m_RootKey->DeleteSubKeyTree(PRIVATE_BACKUP_KEY_NAME);
-}
-
-void Registrar::RegisterForMsOfficeApplication(
- const std::wstring& FileExtension,
- const std::wstring& DocumentDisplayName,
- const std::wstring& DefaultIconEntry,
- const std::wstring& DefaultShellCommand,
- const std::wstring& ShellNewCommandDisplayName,
- const RegistrationContextInformation::OFFICE_APPLICATION eOfficeApp) const
-{
- assert(m_RootKey.get());
-
- std::wstring ForwardKeyName = FORWARD_KEY_PREFIX + FileExtension;
-
- RegistryKey ForwardKey = m_RootKey->CreateSubKey(ForwardKeyName);
- RegistryValue RegVal(new RegistryValueImpl(std::wstring(DEFAULT_VALUE_NAME), DocumentDisplayName));
- ForwardKey->SetValue(RegVal);
-
- RegistryKey RegKey = ForwardKey->CreateSubKey(L"DefaultIcon");
- RegVal->SetValue(DefaultIconEntry);
- RegKey->SetValue(RegVal);
-
- RegistryKey RegKeyShell = ForwardKey->CreateSubKey(L"shell");
- RegVal->SetValue(DefaultShellCommand);
- RegKeyShell->SetValue(RegVal);
-
- RegKey = RegKeyShell->CreateSubKey(L"new");
- RegVal->SetValue(ShellNewCommandDisplayName);
- RegKey->SetValue(RegVal);
-
- RegKey = RegKey->CreateSubKey(L"command");
- RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::New, eOfficeApp));
- RegKey->SetValue(RegVal);
-
- RegKey = RegKeyShell->CreateSubKey(L"open\\command");
- RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Open, eOfficeApp));
- RegKey->SetValue(RegVal);
-
- RegKey = RegKeyShell->CreateSubKey(L"print\\command");
- RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Print, eOfficeApp));
- RegKey->SetValue(RegVal);
-
- RegKey = RegKeyShell->CreateSubKey(L"printto\\command");
- RegVal->SetValue(m_ContextInformation.GetOpenOfficeCommandline(RegistrationContextInformation::Printto, eOfficeApp));
- RegKey->SetValue(RegVal);
-
- // set the new forward key under the appropriate extension
- RegKey = m_RootKey->CreateSubKey(FileExtension);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
-
- if (REG_SZ == RegVal->GetType())
- {
- std::wstring str = RegVal->GetDataAsUniString();
- if (!IsOpenOfficeRegisteredForMsApplication(str))
- ForwardKey->CopyValue(RegKey, DEFAULT_VALUE_NAME, BACKUP_VALUE_NAME);
- }
- }
-
- RegVal->SetValue(ForwardKeyName);
- RegKey->SetValue(RegVal);
-}
-
-void Registrar::UnregisterForMsOfficeApplication(const std::wstring& FileExtension) const
-{
- std::wstring FwdRegKeyName = FORWARD_KEY_PREFIX + FileExtension;
-
- if (m_RootKey->HasSubKey(FileExtension))
- {
- RegistryKey RegKey = m_RootKey->OpenSubKey(FileExtension);
-
- if (RegKey->HasValue(DEFAULT_VALUE_NAME))
- {
- RegistryValue RegVal = RegKey->GetValue(DEFAULT_VALUE_NAME);
- if (REG_SZ == RegVal->GetType() &&
- IsOpenOfficeRegisteredForMsApplication(RegVal->GetDataAsUniString()))
- {
- RegistryKey FwdRegKey = m_RootKey->CreateSubKey(FwdRegKeyName);
-
- if (FwdRegKey->HasValue(BACKUP_VALUE_NAME))
- RegKey->CopyValue(FwdRegKey, BACKUP_VALUE_NAME, DEFAULT_VALUE_NAME);
- else
- RegKey->DeleteValue(DEFAULT_VALUE_NAME);
- }
- }
- }
-
- if (m_RootKey->HasSubKey(FwdRegKeyName))
- m_RootKey->DeleteSubKeyTree(FwdRegKeyName);
-}
-
-RegistryKey Registrar::GetRootKeyForDefHtmlEditorForIERegistration() const
-{
- return WindowsRegistry().GetLocalMachineKey();
-}
-
-bool Registrar::IsOpenOfficeRegisteredForMsApplication(const std::wstring& DocumentExtensionDefValue) const
-{
- return (std::wstring::npos != DocumentExtensionDefValue.find(FORWARD_KEY_PREFIX));
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */