mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-07 19:57:07 +02:00
Add SVG Thumbnail Provider for Windows Explorer (#5048)
* Add SVG Thumbnail Provider * Some cleanup * Small settings changes * Update PowerToys.sln Remove Any CPU entries * Fix project configuration issues * Fix bad merge * Update output path for SVG thumbnail provider * Sync with latest
This commit is contained in:
@@ -16,8 +16,15 @@ const CLSID CLSID_SHIMActivateMdPreviewHandler = { 0xE0907A95, 0x6F9A, 0x4D1B, {
|
||||
// 45769bcc-e8fd-42d0-947e-02beef77a1f5
|
||||
const CLSID CLSID_MdPreviewHandler = { 0x45769bcc, 0xe8fd, 0x42d0, { 0x94, 0x7e, 0x02, 0xbe, 0xef, 0x77, 0xa1, 0xf5 } };
|
||||
|
||||
// 9C723B8C-4F5C-4147-9DE4-C2808F9AF66B
|
||||
const CLSID CLSID_SHIMActivateSvgThumbnailProvider = { 0x9C723B8C, 0x4F5C, 0x4147, { 0x9D, 0xE4, 0xC2, 0x80, 0x8F, 0x9A, 0xF6, 0x6B } };
|
||||
|
||||
// 36B27788-A8BB-4698-A756-DF9F11F64F84
|
||||
const CLSID CLSID_SvgThumbnailProvider = { 0x36B27788, 0xA8BB, 0x4698, { 0xA7, 0x56, 0xDF, 0x9F, 0x11, 0xF6, 0x4F, 0x84 } };
|
||||
|
||||
// Pairs of NativeClsid vs ManagedClsid used for preview handlers.
|
||||
const std::vector<std::pair<CLSID, CLSID>> NativeToManagedClsid({
|
||||
{ CLSID_SHIMActivateMdPreviewHandler, CLSID_MdPreviewHandler },
|
||||
{ CLSID_SHIMActivateSvgPreviewHandler, CLSID_SvgPreviewHandler }
|
||||
{ CLSID_SHIMActivateSvgPreviewHandler, CLSID_SvgPreviewHandler },
|
||||
{ CLSID_SHIMActivateSvgThumbnailProvider, CLSID_SvgThumbnailProvider }
|
||||
});
|
||||
@@ -26,6 +26,20 @@ void PowerPreviewModule::destroy()
|
||||
}
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
if (thumbnailProvider != NULL)
|
||||
{
|
||||
// Disable all the active thumbnail providers.
|
||||
if (this->m_enabled && thumbnailProvider->GetToggleSettingState())
|
||||
{
|
||||
thumbnailProvider->DisablePreview();
|
||||
}
|
||||
|
||||
delete thumbnailProvider;
|
||||
}
|
||||
}
|
||||
|
||||
delete this;
|
||||
}
|
||||
|
||||
@@ -67,6 +81,15 @@ bool PowerPreviewModule::get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_siz
|
||||
previewHandler->GetToggleSettingState());
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
settings.add_bool_toggle(
|
||||
thumbnailProvider->GetToggleSettingName(),
|
||||
thumbnailProvider->GetToggleSettingDescription(),
|
||||
thumbnailProvider->GetToggleSettingState());
|
||||
}
|
||||
|
||||
|
||||
return settings.serialize_to_buffer(buffer, buffer_size);
|
||||
}
|
||||
|
||||
@@ -82,6 +105,11 @@ void PowerPreviewModule::set_config(const wchar_t* config)
|
||||
previewHandler->UpdateState(settings, this->m_enabled);
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
thumbnailProvider->UpdateState(settings, this->m_enabled);
|
||||
}
|
||||
|
||||
settings.save_to_settings_file();
|
||||
}
|
||||
catch (std::exception const& e)
|
||||
@@ -106,6 +134,19 @@ void PowerPreviewModule::enable()
|
||||
}
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
if (thumbnailProvider->GetToggleSettingState())
|
||||
{
|
||||
// Enable all the thumbnail providers with initial state set as true.
|
||||
thumbnailProvider->EnableThumbnailProvider();
|
||||
}
|
||||
else
|
||||
{
|
||||
thumbnailProvider->DisableThumbnailProvider();
|
||||
}
|
||||
}
|
||||
|
||||
if (!this->m_enabled)
|
||||
{
|
||||
Trace::EnabledPowerPreview(true);
|
||||
@@ -122,6 +163,11 @@ void PowerPreviewModule::disable()
|
||||
previewHandler->DisablePreview();
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
thumbnailProvider->DisableThumbnailProvider();
|
||||
}
|
||||
|
||||
if (this->m_enabled)
|
||||
{
|
||||
Trace::EnabledPowerPreview(false);
|
||||
@@ -156,6 +202,12 @@ void PowerPreviewModule::init_settings()
|
||||
{
|
||||
previewHandler->LoadState(settings);
|
||||
}
|
||||
|
||||
for (auto thumbnailProvider : this->m_thumbnailProviders)
|
||||
{
|
||||
thumbnailProvider->LoadState(settings);
|
||||
}
|
||||
|
||||
}
|
||||
catch (std::exception const& e)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@ private:
|
||||
bool m_enabled = false;
|
||||
std::wstring m_moduleName;
|
||||
std::vector<FileExplorerPreviewSettings *> m_previewHandlers;
|
||||
std::vector<FileExplorerPreviewSettings*> m_thumbnailProviders;
|
||||
|
||||
public:
|
||||
PowerPreviewModule() :
|
||||
@@ -39,6 +40,16 @@ public:
|
||||
L"{45769bcc-e8fd-42d0-947e-02beef77a1f5}",
|
||||
L"Markdown Preview Handler",
|
||||
new RegistryWrapper())
|
||||
}),
|
||||
m_thumbnailProviders(
|
||||
{ // TODO: MOVE THIS SVG Thumbnail Provider settings object.
|
||||
new FileExplorerPreviewSettings(
|
||||
true,
|
||||
L"svg-thumbnail-toggle-setting",
|
||||
GET_RESOURCE_STRING(IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION),
|
||||
L"{36B27788-A8BB-4698-A756-DF9F11F64F84}",
|
||||
L"SVG Thumbnail Provider",
|
||||
new RegistryWrapper())
|
||||
})
|
||||
{
|
||||
init_settings();
|
||||
|
||||
@@ -95,6 +95,7 @@ BEGIN
|
||||
IDS_PREVPANE_SVG_BOOL_TOGGLE_CONTROLL L"IDS_PREVPANE_SVG_BOOL_TOGGLE_CONTROLL"
|
||||
IDS_PREVPANE_SVG_SETTINGS_DESCRIPTION L"Svg Previewer"
|
||||
IDS_PREVPANE_SVG_SETTINGS_DISPLAYNAME L"SVG Previewer"
|
||||
IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION L"Svg Thumbnail Provider"
|
||||
IDS_EXPLR_SVG_BOOL_TOGGLE_CONTROLL L"EXPLR_SVG_BOOL_TOGGLE_CONTROLL"
|
||||
IDS_EXPLR_SVG_SETTINGS_DESCRIPTION L"Render SVG images"
|
||||
END
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#define IDS_EXPLR_SVG_SETTINGS_DESCRIPTION 214
|
||||
#define IDS_PREVPANE_SVG_SETTINGS_DISPLAYNAME 215
|
||||
#define IDS_PREVPANE_MD_SETTINGS_DISPLAYNAME 216
|
||||
#define IDS_SVG_THUMBNAIL_PROVIDER_SETTINGS_DESCRIPTION 217
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
||||
@@ -14,6 +14,9 @@ namespace PowerPreviewSettings
|
||||
// Relative(HKLM/HKCU) sub key path of Preview Handlers list in registry.
|
||||
static LPCWSTR preview_handlers_subkey = L"Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers";
|
||||
|
||||
// Relative HKCR sub key path of SVG thumbnail provider in registry
|
||||
static LPCWSTR svg_thumbnail_provider_subkey = L".svg\\shellex\\{E357FCCD-A995-4576-B01F-234630154E96}";
|
||||
|
||||
// Base Settings Class Implementation
|
||||
FileExplorerPreviewSettings::FileExplorerPreviewSettings(bool toggleSettingEnabled, const std::wstring& toggleSettingName, const std::wstring& toggleSettingDescription, LPCWSTR clsid, const std::wstring& registryValueData, RegistryWrapperIface* registryWrapper) :
|
||||
m_toggleSettingEnabled(toggleSettingEnabled),
|
||||
@@ -127,4 +130,16 @@ namespace PowerPreviewSettings
|
||||
// Delete the registry key to disable preview.
|
||||
return this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, preview_handlers_subkey, this->GetCLSID());
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::EnableThumbnailProvider()
|
||||
{
|
||||
// Add registry value to enable thumbnail provider.
|
||||
return this->m_registryWrapper->SetRegistryValue(HKEY_CURRENT_USER, svg_thumbnail_provider_subkey, this->GetCLSID(), REG_SZ, (LPBYTE)this->GetRegistryValueData().c_str(), (DWORD)(this->GetRegistryValueData().length() * sizeof(wchar_t)));
|
||||
}
|
||||
|
||||
LONG FileExplorerPreviewSettings::DisableThumbnailProvider()
|
||||
{
|
||||
// Delete the registry key to disable thumbnail provider.
|
||||
return this->m_registryWrapper->DeleteRegistryValue(HKEY_CURRENT_USER, svg_thumbnail_provider_subkey, this->GetCLSID());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,24 +7,24 @@
|
||||
|
||||
namespace PowerPreviewSettings
|
||||
{
|
||||
// PowerToy Windows Explore File Preview Settings.
|
||||
class FileExplorerPreviewSettings
|
||||
{
|
||||
private:
|
||||
bool m_toggleSettingEnabled;
|
||||
// PowerToy Windows Explorer File Preview Settings.
|
||||
class FileExplorerPreviewSettings
|
||||
{
|
||||
private:
|
||||
bool m_toggleSettingEnabled;
|
||||
std::wstring m_toggleSettingName;
|
||||
std::wstring m_toggleSettingDescription;
|
||||
std::wstring m_registryValueData;
|
||||
std::wstring m_registryValueData;
|
||||
RegistryWrapperIface * m_registryWrapper;
|
||||
LPCWSTR m_clsid;
|
||||
LPCWSTR m_clsid;
|
||||
|
||||
public:
|
||||
public:
|
||||
FileExplorerPreviewSettings(bool toggleSettingEnabled, const std::wstring& toggleSettingName, const std::wstring& toggleSettingDescription, LPCWSTR clsid, const std::wstring& registryValueData, RegistryWrapperIface* registryWrapper);
|
||||
~ FileExplorerPreviewSettings();
|
||||
|
||||
virtual bool GetToggleSettingState() const;
|
||||
virtual bool GetToggleSettingState() const;
|
||||
virtual void UpdateToggleSettingState(bool state);
|
||||
virtual std::wstring GetToggleSettingName() const;
|
||||
virtual std::wstring GetToggleSettingName() const;
|
||||
virtual std::wstring GetToggleSettingDescription() const;
|
||||
virtual LPCWSTR GetCLSID() const;
|
||||
virtual std::wstring GetRegistryValueData() const;
|
||||
@@ -32,5 +32,7 @@ namespace PowerPreviewSettings
|
||||
virtual void UpdateState(PowerToysSettings::PowerToyValues& settings, bool enabled);
|
||||
virtual LONG EnablePreview();
|
||||
virtual LONG DisablePreview();
|
||||
};
|
||||
virtual LONG EnableThumbnailProvider();
|
||||
virtual LONG DisableThumbnailProvider();
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user