* Added get_key to powertoysmodule interface

* Replace get_name with get_key

* Implement get_key function in modules

* Make key global constant in each module

* Update settings v1 to use key to load and save files

* Fixed fancyzones and preview pane unit tests

* Removed setings unit test as the case is not covered anymore

* Add constant files for modules and use it to reference module key

* Add constant string files to colorpicker, launcher and shortcut guide

* correct sunction signature in settings helper

* Fix powerpreview merge conflicts

* nit fix with include statement location

* add check for fields in from_json_string

* Updated preview pane tests with correct from_json_string signature

* Correct Image resizer naming

* Roll back changes for adding check for property and version

* Fix image resizer not working
This commit is contained in:
Divyansh Srivastava 2020-10-19 16:07:02 -07:00 коммит произвёл GitHub
Родитель 8b759094f7
Коммит 280d1907d8
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
37 изменённых файлов: 290 добавлений и 123 удалений

Просмотреть файл

@ -53,11 +53,12 @@ namespace UnitTestsCommonLib
private:
const std::wstring m_json = L"{\"name\":\"Module Name\",\"properties\" : {\"bool_toggle_true\":{\"value\":true},\"bool_toggle_false\":{\"value\":false},\"color_picker\" : {\"value\":\"#ff8d12\"},\"int_spinner\" : {\"value\":10},\"string_text\" : {\"value\":\"a quick fox\"}},\"version\" : \"1.0\" }";
const std::wstring m_moduleName = L"Module Name";
const std::wstring m_moduleKey = L"Module Key";
public:
TEST_METHOD (LoadFromJsonBoolTrue)
{
PowerToyValues values = PowerToyValues::from_json_string(m_json);
PowerToyValues values = PowerToyValues::from_json_string(m_json, m_moduleKey);
auto value = values.get_bool_value(L"bool_toggle_true");
Assert::IsTrue(value.has_value());
Assert::AreEqual(true, *value);
@ -65,7 +66,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromJsonBoolFalse)
{
PowerToyValues values = PowerToyValues::from_json_string(m_json);
PowerToyValues values = PowerToyValues::from_json_string(m_json, m_moduleKey);
auto value = values.get_bool_value(L"bool_toggle_false");
Assert::IsTrue(value.has_value());
Assert::AreEqual(false, *value);
@ -73,7 +74,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromJsonInt)
{
PowerToyValues values = PowerToyValues::from_json_string(m_json);
PowerToyValues values = PowerToyValues::from_json_string(m_json, m_moduleKey);
auto value = values.get_int_value(L"int_spinner");
Assert::IsTrue(value.has_value());
Assert::AreEqual(10, *value);
@ -81,7 +82,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromJsonString)
{
PowerToyValues values = PowerToyValues::from_json_string(m_json);
PowerToyValues values = PowerToyValues::from_json_string(m_json, m_moduleKey);
auto value = values.get_string_value(L"string_text");
Assert::IsTrue(value.has_value());
@ -91,7 +92,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromJsonColorPicker)
{
PowerToyValues values = PowerToyValues::from_json_string(m_json);
PowerToyValues values = PowerToyValues::from_json_string(m_json, m_moduleKey);
auto value = values.get_string_value(L"color_picker");
Assert::IsTrue(value.has_value());
@ -101,19 +102,19 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromEmptyString)
{
auto func = [] { PowerToyValues values = PowerToyValues::from_json_string(L""); };
auto func = [] { PowerToyValues values = PowerToyValues::from_json_string(L"", L"Module Key"); };
Assert::ExpectException<winrt::hresult_error>(func);
}
TEST_METHOD (LoadFromInvalidString_NameMissed)
{
auto func = [] { PowerToyValues values = PowerToyValues::from_json_string(L"{\"properties\" : {\"bool_toggle_true\":{\"value\":true},\"bool_toggle_false\":{\"value\":false},\"color_picker\" : {\"value\":\"#ff8d12\"},\"int_spinner\" : {\"value\":10},\"string_text\" : {\"value\":\"a quick fox\"}},\"version\" : \"1.0\" }"); };
auto func = [] { PowerToyValues values = PowerToyValues::from_json_string(L"{\"properties\" : {\"bool_toggle_true\":{\"value\":true},\"bool_toggle_false\":{\"value\":false},\"color_picker\" : {\"value\":\"#ff8d12\"},\"int_spinner\" : {\"value\":10},\"string_text\" : {\"value\":\"a quick fox\"}},\"version\" : \"1.0\" }", L"Module Key"); };
Assert::ExpectException<winrt::hresult_error>(func);
}
TEST_METHOD (LoadFromInvalidString_VersionMissed)
{
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {}}");
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {}}", L"Module Key");
const std::wstring expectedStr = L"{\"name\" : \"Module Name\", \"properties\" : {},\"version\" : \"1.0\"}";
const auto expected = json::JsonObject::Parse(expectedStr);
const auto actual = json::JsonObject::Parse(values.serialize());
@ -123,7 +124,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromInvalidString_PropertiesMissed)
{
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"version\" : \"1.0\" }");
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"version\" : \"1.0\" }", L"Module Key");
const std::wstring expectedStr = L"{\"name\":\"Module Name\",\"version\" : \"1.0\" }";
const auto expected = json::JsonObject::Parse(expectedStr);
const auto actual = json::JsonObject::Parse(values.serialize());
@ -133,7 +134,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromValidString_EmptyProperties)
{
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {}, \"version\" : \"1.0\" }");
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {}, \"version\" : \"1.0\" }", L"Module Key");
const std::wstring expectedStr = L"{\"name\":\"Module Name\",\"properties\" : {},\"version\" : \"1.0\" }";
const auto expected = json::JsonObject::Parse(expectedStr);
const auto actual = json::JsonObject::Parse(values.serialize());
@ -143,7 +144,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (LoadFromValidString_ChangedVersion)
{
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {},\"version\" : \"2.0\"}");
PowerToyValues values = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\",\"properties\" : {},\"version\" : \"2.0\"}", L"Module Key");
const std::wstring expectedStr = L"{\"name\" : \"Module Name\", \"properties\" : {},\"version\" : \"1.0\"}"; //version from input json is ignored
const auto expected = json::JsonObject::Parse(expectedStr);
@ -154,7 +155,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (CreateWithName)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const std::wstring expectedStr = L"{\"name\":\"Module Name\",\"properties\" : {},\"version\" : \"1.0\" }";
const auto expected = json::JsonObject::Parse(expectedStr);
@ -165,7 +166,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyBoolPositive)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property<bool>(L"positive_bool_value", true);
auto value = values.get_bool_value(L"positive_bool_value");
@ -175,7 +176,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyBoolNegative)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property<bool>(L"negative_bool_value", false);
auto value = values.get_bool_value(L"negative_bool_value");
@ -185,7 +186,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyIntPositive)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const int intVal = 4392854;
values.add_property<int>(L"integer", intVal);
@ -196,7 +197,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyIntNegative)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const int intVal = -4392854;
values.add_property<int>(L"integer", intVal);
@ -207,7 +208,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyIntZero)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const int intVal = 0;
values.add_property<int>(L"integer", intVal);
@ -218,7 +219,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyStringEmpty)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const std::wstring stringVal = L"";
values.add_property<std::wstring>(L"stringval", stringVal);
@ -229,7 +230,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyString)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const std::wstring stringVal = L"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
values.add_property<std::wstring>(L"stringval", stringVal);
@ -240,7 +241,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyJsonEmpty)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const auto json = json::JsonObject();
values.add_property<json::JsonObject>(L"jsonval", json);
@ -251,7 +252,7 @@ namespace UnitTestsCommonLib
TEST_METHOD (AddPropertyJsonObject)
{
PowerToyValues values(m_moduleName);
PowerToyValues values(m_moduleName, m_moduleKey);
const auto json = json::JsonObject::Parse(m_json);
values.add_property<json::JsonObject>(L"jsonval", json);

Просмотреть файл

@ -23,11 +23,11 @@ namespace PTSettingsHelper
return result;
}
std::wstring get_module_save_folder_location(std::wstring_view powertoy_name)
std::wstring get_module_save_folder_location(std::wstring_view powertoy_key)
{
std::wstring result = get_root_save_folder_location();
result += L"\\";
result += powertoy_name;
result += powertoy_key;
std::filesystem::path save_path(result);
if (!std::filesystem::exists(save_path))
{
@ -36,9 +36,9 @@ namespace PTSettingsHelper
return result;
}
std::wstring get_module_save_file_location(std::wstring_view powertoy_name)
std::wstring get_module_save_file_location(std::wstring_view powertoy_key)
{
return get_module_save_folder_location(powertoy_name) + settings_filename;
return get_module_save_folder_location(powertoy_key) + settings_filename;
}
std::wstring get_powertoys_general_save_file_location()
@ -46,15 +46,15 @@ namespace PTSettingsHelper
return get_root_save_folder_location() + settings_filename;
}
void save_module_settings(std::wstring_view powertoy_name, json::JsonObject& settings)
void save_module_settings(std::wstring_view powertoy_key, json::JsonObject& settings)
{
const std::wstring save_file_location = get_module_save_file_location(powertoy_name);
const std::wstring save_file_location = get_module_save_file_location(powertoy_key);
json::to_file(save_file_location, settings);
}
json::JsonObject load_module_settings(std::wstring_view powertoy_name)
json::JsonObject load_module_settings(std::wstring_view powertoy_key)
{
const std::wstring save_file_location = get_module_save_file_location(powertoy_name);
const std::wstring save_file_location = get_module_save_file_location(powertoy_key);
auto saved_settings = json::from_file(save_file_location);
return saved_settings.has_value() ? std::move(*saved_settings) : json::JsonObject{};
}

Просмотреть файл

@ -1,6 +1,7 @@
#include "pch.h"
#include "settings_objects.h"
#include "settings_helpers.h"
#include <winrt/base.h>
namespace PowerToysSettings
{
@ -277,27 +278,33 @@ namespace PowerToysSettings
return L"RESOURCE ID NOT FOUND: " + std::to_wstring(resource_id);
}
PowerToyValues::PowerToyValues(std::wstring_view powertoy_name)
PowerToyValues::PowerToyValues(std::wstring_view powertoy_name, std::wstring_view powertoy_key)
{
_name = powertoy_name;
_key = powertoy_key;
set_version();
m_json.SetNamedValue(L"name", json::value(powertoy_name));
m_json.SetNamedValue(L"properties", json::JsonObject{});
}
PowerToyValues PowerToyValues::from_json_string(std::wstring_view json)
PowerToyValues PowerToyValues::from_json_string(std::wstring_view json, std::wstring_view powertoy_key)
{
PowerToyValues result = PowerToyValues();
json::JsonObject jsonObject = json::JsonValue::Parse(json).GetObjectW();
if (!jsonObject.HasKey(L"name"))
{
throw winrt::hresult_error(E_NOT_SET, L"name field not set");
}
result.m_json = json::JsonValue::Parse(json).GetObjectW();
result._name = result.m_json.GetNamedString(L"name");
result._key = powertoy_key;
return result;
}
PowerToyValues PowerToyValues::load_from_settings_file(std::wstring_view powertoy_name)
PowerToyValues PowerToyValues::load_from_settings_file(std::wstring_view powertoy_key)
{
PowerToyValues result = PowerToyValues();
result.m_json = PTSettingsHelper::load_module_settings(powertoy_name);
result._name = powertoy_name;
result.m_json = PTSettingsHelper::load_module_settings(powertoy_key);
result._key = powertoy_key;
return result;
}
@ -357,7 +364,7 @@ namespace PowerToysSettings
void PowerToyValues::save_to_settings_file()
{
set_version();
PTSettingsHelper::save_module_settings(_name, m_json);
PTSettingsHelper::save_module_settings(_key, m_json);
}
void PowerToyValues::set_version()

Просмотреть файл

@ -67,9 +67,9 @@ namespace PowerToysSettings
class PowerToyValues
{
public:
PowerToyValues(std::wstring_view powertoy_name);
static PowerToyValues from_json_string(std::wstring_view json);
static PowerToyValues load_from_settings_file(std::wstring_view powertoy_name);
PowerToyValues(std::wstring_view powertoy_name, std::wstring_view powertoy_key);
static PowerToyValues from_json_string(std::wstring_view json, std::wstring_view powertoy_key);
static PowerToyValues load_from_settings_file(std::wstring_view powertoy_key);
template<typename T>
inline void add_property(std::wstring_view name, T value)
@ -92,7 +92,7 @@ namespace PowerToysSettings
const std::wstring m_version = L"1.0";
void set_version();
json::JsonObject m_json;
std::wstring _name;
std::wstring _key;
PowerToyValues() {}
};

Просмотреть файл

@ -103,6 +103,7 @@
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="ColorPickerConstants.h" />
<ClInclude Include="pch.h" />
<None Include="resource.base.h" />
<ClInclude Include="trace.h" />

Просмотреть файл

@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace ColorPickerConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"ColorPicker";
}

Просмотреть файл

@ -6,6 +6,7 @@
#include "Generated Files/resource.h"
#include <common\settings_objects.h>
#include <common\os-detect.h>
#include <colorPicker\ColorPicker\ColorPickerConstants.h>
extern "C" IMAGE_DOS_HEADER __ImageBase;
@ -38,6 +39,9 @@ private:
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
HANDLE m_hProcess;
// Time to wait for process to close after sending WM_CLOSE signal
@ -47,6 +51,7 @@ public:
ColorPicker()
{
app_name = GET_RESOURCE_STRING(IDS_COLORPICKER_NAME);
app_key = ColorPickerConstants::ModuleKey;
}
~ColorPicker()
@ -63,12 +68,18 @@ public:
delete this;
}
// Return the display name of the powertoy, this will be cached by the runner
// Return the localized display name of the powertoy
virtual const wchar_t* get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
virtual bool get_config(wchar_t* buffer, int* buffer_size) override
{
HINSTANCE hinstance = reinterpret_cast<HINSTANCE>(&__ImageBase);
@ -92,7 +103,7 @@ public:
{
// Parse the input JSON string.
PowerToysSettings::PowerToyValues values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
// If you don't need to do any custom processing of the settings, proceed
// to persists the values calling:

Просмотреть файл

@ -12,6 +12,7 @@
#include <lib/FancyZones.h>
#include <lib/FancyZonesData.h>
#include <lib/FancyZonesWinHookEventIDs.h>
#include <lib/FancyZonesData.cpp>
extern "C" IMAGE_DOS_HEADER __ImageBase;
@ -37,12 +38,18 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
class FancyZonesModule : public PowertoyModuleIface
{
public:
// Return the display name of the powertoy, this will be cached
// Return the localized display name of the powertoy
virtual PCWSTR get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
// Return JSON with the configuration options.
// These are the settings shown on the settings page along with their current values.
virtual bool get_config(_Out_ PWSTR buffer, _Out_ int* buffer_size) override
@ -142,7 +149,8 @@ public:
FancyZonesModule()
{
app_name = GET_RESOURCE_STRING(IDS_FANCYZONES);
m_settings = MakeFancyZonesSettings(reinterpret_cast<HINSTANCE>(&__ImageBase), FancyZonesModule::get_name());
app_key = NonLocalizable::FancyZonesStr;
m_settings = MakeFancyZonesSettings(reinterpret_cast<HINSTANCE>(&__ImageBase), FancyZonesModule::get_name(), FancyZonesModule::get_key());
FancyZonesDataInstance().LoadFancyZonesData();
s_instance = this;
}
@ -190,6 +198,8 @@ private:
winrt::com_ptr<IFancyZones> m_app;
winrt::com_ptr<IFancyZonesSettings> m_settings;
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
static inline FancyZonesModule* s_instance;
static inline HHOOK s_llKeyboardHook;

Просмотреть файл

@ -43,9 +43,10 @@ namespace NonLocalizable
struct FancyZonesSettings : winrt::implements<FancyZonesSettings, IFancyZonesSettings>
{
public:
FancyZonesSettings(HINSTANCE hinstance, PCWSTR name)
: m_hinstance(hinstance)
, m_moduleName(name)
FancyZonesSettings(HINSTANCE hinstance, PCWSTR name, PCWSTR key)
: m_hinstance(hinstance),
m_moduleName(name),
m_moduleKey(key)
{
LoadSettings(name, true);
}
@ -64,6 +65,7 @@ private:
IFancyZonesCallback* m_callback{};
const HINSTANCE m_hinstance;
PCWSTR m_moduleName{};
PCWSTR m_moduleKey{};
Settings m_settings;
@ -171,8 +173,8 @@ void FancyZonesSettings::LoadSettings(PCWSTR config, bool fromFile) noexcept
try
{
PowerToysSettings::PowerToyValues values = fromFile ?
PowerToysSettings::PowerToyValues::load_from_settings_file(m_moduleName) :
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::load_from_settings_file(m_moduleKey) :
PowerToysSettings::PowerToyValues::from_json_string(config, m_moduleKey);
for (auto const& setting : m_configBools)
{
@ -244,7 +246,7 @@ void FancyZonesSettings::SaveSettings() noexcept
{
try
{
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
for (auto const& setting : m_configBools)
{
@ -271,7 +273,7 @@ void FancyZonesSettings::SaveSettings() noexcept
}
}
winrt::com_ptr<IFancyZonesSettings> MakeFancyZonesSettings(HINSTANCE hinstance, PCWSTR name) noexcept
winrt::com_ptr<IFancyZonesSettings> MakeFancyZonesSettings(HINSTANCE hinstance, PCWSTR name, PCWSTR key) noexcept
{
return winrt::make_self<FancyZonesSettings>(hinstance, name);
return winrt::make_self<FancyZonesSettings>(hinstance, name, key);
}

Просмотреть файл

@ -49,4 +49,4 @@ interface __declspec(uuid("{BA4E77C4-6F44-4C5D-93D3-CBDE880495C2}")) IFancyZones
IFACEMETHOD_(const Settings*, GetSettings)() const = 0;
};
winrt::com_ptr<IFancyZonesSettings> MakeFancyZonesSettings(HINSTANCE hinstance, PCWSTR config) noexcept;
winrt::com_ptr<IFancyZonesSettings> MakeFancyZonesSettings(HINSTANCE hinstance, PCWSTR name, PCWSTR key) noexcept;

Просмотреть файл

@ -17,11 +17,12 @@ namespace FancyZonesUnitTests
HINSTANCE m_hInst;
winrt::com_ptr<IFancyZonesSettings> m_settings;
const std::wstring_view m_moduleName = L"FancyZonesUnitTests";
const std::wstring_view m_modulekey = L"FancyZonesUnitTests";
TEST_METHOD_INITIALIZE(Init)
{
m_hInst = (HINSTANCE)GetModuleHandleW(nullptr);
m_settings = MakeFancyZonesSettings(m_hInst, m_moduleName.data());
m_settings = MakeFancyZonesSettings(m_hInst, m_moduleName.data(), m_modulekey.data());
Assert::IsTrue(m_settings != nullptr);
}
@ -57,7 +58,8 @@ namespace FancyZonesUnitTests
TEST_CLASS (FancyZonesIZoneWindowHostUnitTests)
{
HINSTANCE m_hInst{};
std::wstring m_settingsLocation = L"FancyZonesUnitTests";
std::wstring m_moduleName = L"FancyZonesUnitTests";
std::wstring m_moduleKey = L"FancyZonesUnitTests";
winrt::com_ptr<IFancyZonesSettings> m_settings = nullptr;
winrt::com_ptr<IZoneWindowHost> m_zoneWindowHost = nullptr;
@ -92,7 +94,7 @@ namespace FancyZonesUnitTests
TEST_METHOD_INITIALIZE(Init)
{
m_hInst = (HINSTANCE)GetModuleHandleW(nullptr);
m_settings = MakeFancyZonesSettings(m_hInst, m_settingsLocation.c_str());
m_settings = MakeFancyZonesSettings(m_hInst, m_moduleName.c_str(), m_moduleKey.c_str());
Assert::IsTrue(m_settings != nullptr);
auto fancyZones = MakeFancyZones(m_hInst, m_settings, nullptr);
@ -104,7 +106,7 @@ namespace FancyZonesUnitTests
TEST_METHOD_CLEANUP(Cleanup)
{
auto settingsFolder = PTSettingsHelper::get_module_save_folder_location(m_settingsLocation);
auto settingsFolder = PTSettingsHelper::get_module_save_folder_location(m_moduleName);
const auto settingsFile = settingsFolder + L"\\settings.json";
std::filesystem::remove(settingsFile);
std::filesystem::remove(settingsFolder);
@ -279,7 +281,8 @@ namespace FancyZonesUnitTests
TEST_CLASS (FancyZonesIFancyZonesCallbackUnitTests)
{
HINSTANCE m_hInst{};
std::wstring m_settingsLocation = L"FancyZonesUnitTests";
std::wstring m_moduleName = L"FancyZonesUnitTests";
std::wstring m_moduleKey = L"FancyZonesUnitTests";
winrt::com_ptr<IFancyZonesSettings> m_settings = nullptr;
winrt::com_ptr<IFancyZonesCallback> m_fzCallback = nullptr;
@ -328,7 +331,7 @@ namespace FancyZonesUnitTests
TEST_METHOD_INITIALIZE(Init)
{
m_hInst = (HINSTANCE)GetModuleHandleW(nullptr);
m_settings = MakeFancyZonesSettings(m_hInst, m_settingsLocation.c_str());
m_settings = MakeFancyZonesSettings(m_hInst, m_moduleName.c_str(), m_moduleKey.c_str());
Assert::IsTrue(m_settings != nullptr);
auto fancyZones = MakeFancyZones(m_hInst, m_settings, nullptr);
@ -346,7 +349,7 @@ namespace FancyZonesUnitTests
sendKeyboardInput(VK_LWIN, true);
sendKeyboardInput(VK_CONTROL, true);
auto settingsFolder = PTSettingsHelper::get_module_save_folder_location(m_settingsLocation);
auto settingsFolder = PTSettingsHelper::get_module_save_folder_location(m_moduleName);
const auto settingsFile = settingsFolder + L"\\settings.json";
std::filesystem::remove(settingsFile);
std::filesystem::remove(settingsFolder);

Просмотреть файл

@ -59,6 +59,7 @@ namespace FancyZonesUnitTests
{
HINSTANCE m_hInst;
PCWSTR m_moduleName = L"FancyZonesUnitTests";
PCWSTR m_moduleKey = L"FancyZonesUnitTests";
std::wstring m_tmpName;
const PowerToysSettings::HotkeyObject m_defaultHotkeyObject = PowerToysSettings::HotkeyObject::from_settings(true, false, false, false, VK_OEM_3);
@ -76,7 +77,7 @@ namespace FancyZonesUnitTests
TEST_METHOD (CreateWithHinstanceDefault)
{
auto actual = MakeFancyZonesSettings({}, m_moduleName);
auto actual = MakeFancyZonesSettings({}, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -85,7 +86,7 @@ namespace FancyZonesUnitTests
TEST_METHOD (CreateWithHinstanceNullptr)
{
auto actual = MakeFancyZonesSettings(nullptr, m_moduleName);
auto actual = MakeFancyZonesSettings(nullptr, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -94,7 +95,7 @@ namespace FancyZonesUnitTests
TEST_METHOD (CreateWithNameEmpty)
{
auto actual = MakeFancyZonesSettings(m_hInst, L"");
auto actual = MakeFancyZonesSettings(m_hInst, L"", m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -106,7 +107,7 @@ namespace FancyZonesUnitTests
//prepare data
const Settings expected;
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -131,7 +132,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -146,7 +147,7 @@ namespace FancyZonesUnitTests
.excludedAppsArray = { L"APP", L"APP1", L"APP2", L"ANOTHER APP" },
};
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -171,7 +172,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -205,7 +206,7 @@ namespace FancyZonesUnitTests
.excludedAppsArray = { L"APP" },
};
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_zoneColor", expected.zoneColor);
values.add_property(L"fancyzones_zoneBorderColor", expected.zoneBorderColor);
values.add_property(L"fancyzones_zoneHighlightColor", expected.zoneHighlightColor);
@ -215,7 +216,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -227,7 +228,7 @@ namespace FancyZonesUnitTests
//prepare data
const Settings expected;
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -249,7 +250,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -261,7 +262,7 @@ namespace FancyZonesUnitTests
//prepare data
const Settings expected;
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -284,7 +285,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -296,7 +297,7 @@ namespace FancyZonesUnitTests
//prepare data
const Settings expected;
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -320,7 +321,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -332,7 +333,7 @@ namespace FancyZonesUnitTests
//prepare data
const Settings expected;
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -356,7 +357,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -366,7 +367,7 @@ namespace FancyZonesUnitTests
TEST_METHOD (CreateWithEmptyJson)
{
json::to_file(m_tmpName, json::JsonObject());
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -377,7 +378,7 @@ namespace FancyZonesUnitTests
{
std::wofstream{ m_tmpName.data(), std::ios::binary } << L"{ \"version\": \"1.0\", \"name\": \"";
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -387,7 +388,7 @@ namespace FancyZonesUnitTests
TEST_METHOD (CreateWithCyrillicSymbolsInJson)
{
std::wofstream{ m_tmpName.data(), std::ios::binary } << L"{ \"version\": \"1.0\", \"name\": \"ФансиЗонс\"}";
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName);
auto actual = MakeFancyZonesSettings(m_hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(actual != nullptr);
auto actualSettings = actual->GetSettings();
@ -399,6 +400,7 @@ namespace FancyZonesUnitTests
{
winrt::com_ptr<IFancyZonesSettings> m_settings = nullptr;
PCWSTR m_moduleName = L"FancyZonesUnitTests";
PCWSTR m_moduleKey = L"FancyZonesUnitTests";
struct FZCallback : public winrt::implements<FZCallback, IFancyZonesCallback>
{
@ -474,7 +476,7 @@ namespace FancyZonesUnitTests
.excludedAppsArray = { L"APP" },
};
PowerToysSettings::PowerToyValues values(m_moduleName);
PowerToysSettings::PowerToyValues values(m_moduleName, m_moduleKey);
values.add_property(L"fancyzones_shiftDrag", expected.shiftDrag);
values.add_property(L"fancyzones_mouseSwitch", expected.mouseSwitch);
values.add_property(L"fancyzones_displayChange_moveWindows", expected.displayChange_moveWindows);
@ -499,7 +501,7 @@ namespace FancyZonesUnitTests
values.save_to_settings_file();
m_settings = MakeFancyZonesSettings(hInst, m_moduleName);
m_settings = MakeFancyZonesSettings(hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(m_settings != nullptr);
}
@ -579,6 +581,7 @@ namespace FancyZonesUnitTests
{
winrt::com_ptr<IFancyZonesSettings> m_settings = nullptr;
PCWSTR m_moduleName = L"FancyZonesUnitTests";
PCWSTR m_moduleKey = L"FancyZonesUnitTests";
std::wstring serializedPowerToySettings(const Settings& settings)
{
@ -622,7 +625,7 @@ namespace FancyZonesUnitTests
{
HINSTANCE hInst = (HINSTANCE)GetModuleHandleW(nullptr);
m_settings = MakeFancyZonesSettings(hInst, m_moduleName);
m_settings = MakeFancyZonesSettings(hInst, m_moduleName, m_moduleKey);
Assert::IsTrue(m_settings != nullptr);
}

Просмотреть файл

@ -0,0 +1,11 @@
#pragma once
#include <string>
namespace ImageResizerConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"Image Resizer";
// Name of the ImageResizer save folder.
inline const std::wstring ModuleSaveFolderKey = L"ImageResizer";
}

Просмотреть файл

@ -162,6 +162,7 @@
<ClInclude Include="HDropIterator.h" />
<ClInclude Include="dllmain.h" />
<None Include="resource.base.h" />
<ClInclude Include="ImageResizerConstants.h" />
<ClInclude Include="Settings.h" />
<ClInclude Include="Generated Files/resource.h" />
<ClInclude Include="ImageResizerExt_i.h" />

Просмотреть файл

@ -5,6 +5,7 @@
#include <common/settings_helpers.h>
#include <filesystem>
#include <commctrl.h>
#include <imageresizer\dll\ImageResizerConstants.h>
namespace
{
@ -44,7 +45,7 @@ namespace
CSettings::CSettings()
{
std::wstring result = PTSettingsHelper::get_module_save_folder_location(L"ImageResizer");
std::wstring result = PTSettingsHelper::get_module_save_folder_location(ImageResizerConstants::ModuleSaveFolderKey);
jsonFilePath = result + std::wstring(c_imageResizerDataFilePath);
Load();
}

Просмотреть файл

@ -7,6 +7,7 @@
#include "Settings.h"
#include "trace.h"
#include <common/common.h>
#include <imageresizer\dll\ImageResizerConstants.h>
CImageResizerExtModule _AtlModule;
HINSTANCE g_hInst_imageResizer = 0;
@ -32,6 +33,8 @@ private:
// Enabled by default
bool m_enabled = true;
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
public:
// Constructor
@ -39,6 +42,7 @@ public:
{
m_enabled = CSettingsInstance().GetEnabled();
app_name = GET_RESOURCE_STRING(IDS_IMAGERESIZER);
app_key = ImageResizerConstants::ModuleKey;
};
// Destroy the powertoy and free memory
@ -47,12 +51,18 @@ public:
delete this;
}
// Return the display name of the powertoy, this will be cached by the runner
// Return the localized display name of the powertoy
virtual const wchar_t* get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
// Return JSON with the configuration options.
virtual bool get_config(wchar_t* buffer, int* buffer_size) override
{

Просмотреть файл

@ -13,7 +13,7 @@
- call powertoy_create() to create the PowerToy.
On the received object, the runner will call:
- get_name() to get the name of the PowerToy,
- get_key() to get the non localized ID of the PowerToy,
- enable() to initialize the PowerToy.
- get_hotkeys() to register the hotkeys the PowerToy uses.
@ -48,8 +48,10 @@ public:
std::strong_ordering operator<=>(const Hotkey&) const = default;
};
/* Returns the name of the PowerToy, this will be cached by the runner. */
/* Returns the localized name of the PowerToy*/
virtual const wchar_t* get_name() = 0;
/* Returns non localized name of the PowerToy, this will be cached by the runner. */
virtual const wchar_t* get_key() = 0;
/* Fills a buffer with the available configuration settings.
* If 'buffer' is a null ptr or the buffer size is not large enough
* sets the required buffer size in 'buffer_size' and return false.

Просмотреть файл

@ -45,6 +45,9 @@ private:
// The PowerToy name that will be shown in the settings.
const std::wstring app_name = GET_RESOURCE_STRING(IDS_KEYBOARDMANAGER);
//contains the non localized key of the powertoy
std::wstring app_key = KeyboardManagerConstants::ModuleName;
// Low level hook handles
static HHOOK hook_handle;
@ -77,7 +80,7 @@ public:
try
{
PowerToysSettings::PowerToyValues settings =
PowerToysSettings::PowerToyValues::load_from_settings_file(get_name());
PowerToysSettings::PowerToyValues::load_from_settings_file(get_key());
auto current_config = settings.get_string_value(KeyboardManagerConstants::ActiveConfigurationSettingName);
if (current_config)
@ -227,12 +230,18 @@ public:
delete this;
}
// Return the display name of the powertoy, this will be cached by the runner
// Return the localized display name of the powertoy
virtual const wchar_t* get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
// Return JSON with the configuration options.
virtual bool get_config(wchar_t* buffer, int* buffer_size) override
{
@ -286,7 +295,7 @@ public:
{
// Parse the input JSON string.
PowerToysSettings::PowerToyValues values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
// If you don't need to do any custom processing of the settings, proceed
// to persists the values calling:

Просмотреть файл

@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace LauncherConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"PowerToys Run";
}

Просмотреть файл

@ -103,6 +103,7 @@
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="LauncherConstants.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="Generated Files\resource.h" />
<None Include="resource.base.h" />

Просмотреть файл

@ -6,6 +6,7 @@
#include "trace.h"
#include "Generated Files/resource.h"
#include <common/os-detect.h>
#include <launcher\Microsoft.Launcher\LauncherConstants.h>
extern "C" IMAGE_DOS_HEADER __ImageBase;
@ -59,6 +60,9 @@ private:
//contains the name of the powerToys
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
// Time to wait for process to close after sending WM_CLOSE signal
static const int MAX_WAIT_MILLISEC = 10000;
@ -76,6 +80,7 @@ public:
Microsoft_Launcher()
{
app_name = GET_RESOURCE_STRING(IDS_LAUNCHER_NAME);
app_key = LauncherConstants::ModuleKey;
init_settings();
SECURITY_ATTRIBUTES sa;
@ -100,12 +105,18 @@ public:
delete this;
}
// Return the display name of the powertoy, this will be cached by the runner
// Return the localized display name of the powertoy
virtual const wchar_t* get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
// Return JSON with the configuration options.
virtual bool get_config(wchar_t* buffer, int* buffer_size) override
{
@ -143,7 +154,7 @@ public:
{
// Parse the input JSON string.
PowerToysSettings::PowerToyValues values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
parse_hotkey(values);
// If you don't need to do any custom processing of the settings, proceed
@ -320,7 +331,7 @@ void Microsoft_Launcher::init_settings()
{
// Load and parse the settings file for this PowerToy.
PowerToysSettings::PowerToyValues settings =
PowerToysSettings::PowerToyValues::load_from_settings_file(get_name());
PowerToysSettings::PowerToyValues::load_from_settings_file(get_key());
parse_hotkey(settings);
}

Просмотреть файл

@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace PowerRenameConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"PowerRename";
}

Просмотреть файл

@ -178,6 +178,7 @@
<ItemGroup>
<ClInclude Include="CLSID.h" />
<ClInclude Include="Generated Files/resource.h" />
<ClInclude Include="PowerRenameConstants.h" />
<ClInclude Include="PowerRenameExt.h" />
<ClInclude Include="pch.h" />
<None Include="resource.base.h" />

Просмотреть файл

@ -7,6 +7,7 @@
#include <common/common.h>
#include "Generated Files/resource.h"
#include <atomic>
#include <dll/PowerRenameConstants.h>
std::atomic<DWORD> g_dwModuleRefCount = 0;
HINSTANCE g_hInst = 0;
@ -155,14 +156,22 @@ private:
// Enabled by default
bool m_enabled = true;
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
public:
// Return the display name of the powertoy, this will be cached
// Return the localized display name of the powertoy
virtual PCWSTR get_name() override
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return app_key.c_str();
}
// Enable the powertoy
virtual void enable()
{
@ -236,7 +245,7 @@ public:
{
// Parse the input JSON string.
PowerToysSettings::PowerToyValues values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
CSettingsInstance().SetPersistState(values.get_bool_value(L"bool_persist_input").value());
CSettingsInstance().SetMRUEnabled(values.get_bool_value(L"bool_mru_enabled").value());
@ -282,6 +291,7 @@ public:
{
init_settings();
app_name = GET_RESOURCE_STRING(IDS_POWERRENAME_APP_NAME);
app_key = PowerRenameConstants::ModuleKey;
}
~PowerRenameModule(){};

Просмотреть файл

@ -7,6 +7,7 @@
#include <commctrl.h>
#include <algorithm>
#include <fstream>
#include <dll\PowerRenameConstants.h>
namespace
{
@ -92,7 +93,7 @@ public:
pushIdx(0),
nextIdx(1),
size(size),
jsonFilePath(PTSettingsHelper::get_module_save_folder_location(L"PowerRename") + filePath),
jsonFilePath(PTSettingsHelper::get_module_save_folder_location(PowerRenameConstants::ModuleKey) + filePath),
registryFilePath(regPath)
{
items.resize(size);
@ -395,7 +396,7 @@ IFACEMETHODIMP CRenameMRU::AddMRUString(_In_ PCWSTR entry)
CSettings::CSettings()
{
std::wstring result = PTSettingsHelper::get_module_save_folder_location(L"PowerRename");
std::wstring result = PTSettingsHelper::get_module_save_folder_location(PowerRenameConstants::ModuleKey);
jsonFilePath = result + std::wstring(c_powerRenameDataFilePath);
UIFlagsFilePath = result + std::wstring(c_powerRenameUIFlagsFilePath);
Load();

Просмотреть файл

@ -10,6 +10,7 @@
// Constructor
PowerPreviewModule::PowerPreviewModule() :
m_moduleName(GET_RESOURCE_STRING(IDS_MODULE_NAME)),
app_key(powerpreviewConstants::ModuleKey),
m_fileExplorerModules(
{ // SVG Preview Handler settings object.
new PreviewHandlerSettings(
@ -55,12 +56,18 @@ void PowerPreviewModule::destroy()
delete this;
}
// Return the display name of the powertoy, this will be cached.
// Return the localized display name of the powertoy
const wchar_t* PowerPreviewModule::get_name()
{
return m_moduleName.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
const wchar_t* PowerPreviewModule::get_key()
{
return app_key.c_str();
}
// Return JSON with the configuration options.
bool PowerPreviewModule::get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_size)
{
@ -96,7 +103,7 @@ void PowerPreviewModule::set_config(const wchar_t* config)
{
try
{
PowerToysSettings::PowerToyValues settings = PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues settings = PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
bool updateSuccess = true;
bool isElevated = is_process_elevated(false);
@ -167,7 +174,7 @@ void PowerPreviewModule::init_settings()
{
// Load and parse the settings file for this PowerToy.
PowerToysSettings::PowerToyValues settings =
PowerToysSettings::PowerToyValues::load_from_settings_file(PowerPreviewModule::get_name());
PowerToysSettings::PowerToyValues::load_from_settings_file(PowerPreviewModule::get_key());
// Load settings states.
for (auto fileExplorerModule : this->m_fileExplorerModules)

Просмотреть файл

@ -6,6 +6,7 @@
#include "thumbnail_provider.h"
#include "preview_handler.h"
#include "registry_wrapper.h"
#include <powerpreview\powerpreviewConstants.h>
using namespace PowerPreviewSettings;
@ -18,6 +19,8 @@ private:
// The PowerToy state.
bool m_enabled = false;
std::wstring m_moduleName;
//contains the non localized key of the powertoy
std::wstring app_key;
std::vector<FileExplorerPreviewSettings*> m_fileExplorerModules;
// Function to check if the registry states need to be updated
@ -40,6 +43,7 @@ public:
virtual void destroy();
virtual const wchar_t* get_name();
virtual const wchar_t* get_key();
virtual bool get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_size);
virtual void set_config(const wchar_t* config);
virtual void enable();

Просмотреть файл

@ -109,6 +109,7 @@
<ItemGroup>
<ClInclude Include="CLSID.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="powerpreviewConstants.h" />
<ClInclude Include="preview_handler.h" />
<ClInclude Include="registry_wrapper.h" />
<ClInclude Include="registry_wrapper_interface.h" />

Просмотреть файл

@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace powerpreviewConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"File Explorer";
}

Просмотреть файл

@ -82,7 +82,7 @@ namespace FileExplorerPreviewSettingsTest
bool defaultState = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(defaultState, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
// Act
previewSettings.LoadState(settings);
@ -97,7 +97,7 @@ namespace FileExplorerPreviewSettingsTest
bool defaultState = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(defaultState, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\"}");
auto settings = PowerToyValues::from_json_string(L"{\"name\":\"Module Name\"}", L"FileExplorerPreviewTests");
// Act
previewSettings.LoadState(settings);
@ -113,7 +113,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(true);
// Add expected data in registry
mockRegistryWrapper->SetMockData(previewSettings.GetRegistryValueData());
@ -134,7 +134,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
ThumbnailProviderSettings thumbnailSettings = GetThumbnailProviderSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(thumbnailSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(thumbnailSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
thumbnailSettings.UpdateToggleSettingState(true);
// Add expected data in registry
mockRegistryWrapper->SetMockData(thumbnailSettings.GetCLSID());
@ -155,7 +155,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(true);
// Act
@ -174,7 +174,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = false;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(true);
// Act
@ -193,7 +193,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(false);
// Act
@ -211,7 +211,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(false);
// Add expected data in registry
mockRegistryWrapper->SetMockData(previewSettings.GetRegistryValueData());
@ -231,7 +231,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
ThumbnailProviderSettings thumbnailSettings = GetThumbnailProviderSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(thumbnailSettings.GetToggleSettingName(), L"true"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(thumbnailSettings.GetToggleSettingName(), L"true"), L"FileExplorerPreviewTests");
thumbnailSettings.UpdateToggleSettingState(false);
// Add expected data in registry
mockRegistryWrapper->SetMockData(thumbnailSettings.GetCLSID());
@ -251,7 +251,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = false;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"true"), L"FileExplorerPreviewTests");
previewSettings.UpdateToggleSettingState(false);
// Act
@ -269,7 +269,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
// Act
previewSettings.UpdateState(settings, enabled, elevated);
@ -285,7 +285,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = false;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
// Act
previewSettings.UpdateState(settings, enabled, elevated);
@ -301,7 +301,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = true;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
// Act
previewSettings.UpdateState(settings, enabled, elevated);
@ -319,7 +319,7 @@ namespace FileExplorerPreviewSettingsTest
bool elevated = false;
RegistryMock* mockRegistryWrapper = new RegistryMock();
PreviewHandlerSettings previewSettings = GetPreviewHandlerSettingsObject(true, mockRegistryWrapper);
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"));
auto settings = PowerToyValues::from_json_string(GetJSONSettings(previewSettings.GetToggleSettingName(), L"false"), L"FileExplorerPreviewTests");
// Act
previewSettings.UpdateState(settings, enabled, elevated);

Просмотреть файл

@ -0,0 +1,8 @@
#pragma once
#include <string>
namespace ShortcutGuideConstants
{
// Name of the powertoy module.
inline const std::wstring ModuleKey = L"Shortcut Guide";
}

Просмотреть файл

@ -7,6 +7,7 @@
#include <common/settings_objects.h>
#include <common/debug_control.h>
#include <sstream>
#include <modules\shortcut_guide\ShortcutGuideConstants.h>
extern "C" IMAGE_DOS_HEADER __ImageBase;
@ -94,14 +95,22 @@ namespace
OverlayWindow::OverlayWindow()
{
app_name = GET_RESOURCE_STRING(IDS_SHORTCUT_GUIDE);
app_key = ShortcutGuideConstants::ModuleKey;
init_settings();
}
// Return the localized display name of the powertoy
const wchar_t* OverlayWindow::get_name()
{
return app_name.c_str();
}
// Return the non localized key of the powertoy, this will be cached by the runner
const wchar_t* OverlayWindow::get_key()
{
return app_key.c_str();
}
bool OverlayWindow::get_config(wchar_t* buffer, int* buffer_size)
{
HINSTANCE hinstance = reinterpret_cast<HINSTANCE>(&__ImageBase);
@ -142,7 +151,7 @@ void OverlayWindow::set_config(const wchar_t* config)
{
// save configuration
PowerToysSettings::PowerToyValues _values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
_values.save_to_settings_file();
Trace::SettingsChanged(pressTime.value, overlayOpacity.value, theme.value);
@ -331,7 +340,7 @@ void OverlayWindow::init_settings()
try
{
PowerToysSettings::PowerToyValues settings =
PowerToysSettings::PowerToyValues::load_from_settings_file(OverlayWindow::get_name());
PowerToysSettings::PowerToyValues::load_from_settings_file(OverlayWindow::get_key());
if (const auto val = settings.get_int_value(pressTime.name))
{
pressTime.value = *val;

Просмотреть файл

@ -17,6 +17,7 @@ public:
OverlayWindow();
virtual const wchar_t* get_name() override;
virtual const wchar_t* get_key() override;
virtual bool get_config(wchar_t* buffer, int* buffer_size) override;
virtual void set_config(const wchar_t* config) override;
@ -37,6 +38,8 @@ public:
private:
std::wstring app_name;
//contains the non localized key of the powertoy
std::wstring app_key;
std::unique_ptr<TargetState> target_state;
std::unique_ptr<D2DOverlayWindow> winkey_popup;
bool _enabled = false;

Просмотреть файл

@ -109,6 +109,7 @@
<ClInclude Include="keyboard_state.h" />
<ClInclude Include="Generated Files/resource.h" />
<None Include="resource.base.h" />
<ClInclude Include="ShortcutGuideConstants.h" />
<ClInclude Include="shortcut_guide.h" />
<ClInclude Include="pch.h" />
<ClInclude Include="target_state.h" />

Просмотреть файл

@ -136,7 +136,7 @@ int runner(bool isProcessElevated)
try
{
auto module = load_powertoy(moduleSubdir);
modules().emplace(module->get_name(), std::move(module));
modules().emplace(module->get_key(), std::move(module));
}
catch (...)
{

Просмотреть файл

@ -49,7 +49,7 @@ PowertoyModule::PowertoyModule(PowertoyModuleIface* module, HMODULE handle) :
void PowertoyModule::update_hotkeys()
{
CentralizedKeyboardHook::ClearModuleHotkeys(module->get_name());
CentralizedKeyboardHook::ClearModuleHotkeys(module->get_key());
size_t hotkeyCount = module->get_hotkeys(nullptr, 0);
std::vector<PowertoyModuleIface::Hotkey> hotkeys(hotkeyCount);
@ -59,7 +59,7 @@ void PowertoyModule::update_hotkeys()
for (size_t i = 0; i < hotkeyCount; i++)
{
CentralizedKeyboardHook::SetHotkeyAction(module->get_name(), hotkeys[i], [modulePtr, i] {
CentralizedKeyboardHook::SetHotkeyAction(module->get_key(), hotkeys[i], [modulePtr, i] {
return modulePtr->on_hotkey(i);
});
}

Просмотреть файл

@ -66,12 +66,18 @@ public:
delete this;
}
// Return the display name of the powertoy, this will be cached by the runner
// Return the localized display name of the powertoy
virtual const wchar_t* get_name() override
{
return MODULE_NAME;
}
// Return the non localized key of the powertoy, this will be cached by the runner
virtual const wchar_t* get_key() override
{
return MODULE_NAME;
}
// Return JSON with the configuration options.
virtual bool get_config(wchar_t* buffer, int* buffer_size) override
{
@ -158,7 +164,7 @@ public:
{
// Parse the input JSON string.
PowerToysSettings::PowerToyValues values =
PowerToysSettings::PowerToyValues::from_json_string(config);
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
// Update a bool property.
//if (auto v = values.get_bool_value(L"bool_toggle_1")) {
@ -218,7 +224,7 @@ void $safeprojectname$::init_settings()
{
// Load and parse the settings file for this PowerToy.
PowerToysSettings::PowerToyValues settings =
PowerToysSettings::PowerToyValues::load_from_settings_file($safeprojectname$::get_name());
PowerToysSettings::PowerToyValues::load_from_settings_file($safeprojectname$::get_key());
// Load a bool property.
//if (auto v = settings.get_bool_value(L"bool_toggle_1")) {