2020-03-11 15:53:49 -07:00
|
|
|
#include "pch.h"
|
|
|
|
|
#include <interface/lowlevel_keyboard_event_data.h>
|
|
|
|
|
#include <interface/win_hook_event_data.h>
|
|
|
|
|
#include <settings_objects.h>
|
|
|
|
|
#include <common.h>
|
|
|
|
|
#include "powerpreview.h"
|
|
|
|
|
#include "trace.h"
|
|
|
|
|
#include "settings.h"
|
|
|
|
|
#include "resource.h"
|
|
|
|
|
|
|
|
|
|
// Destroy the powertoy and free memory.
|
|
|
|
|
void PowerPreviewModule::destroy()
|
|
|
|
|
{
|
|
|
|
|
Trace::Destroyed();
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
2020-03-11 15:53:49 -07:00
|
|
|
{
|
|
|
|
|
if (previewHandler != NULL)
|
|
|
|
|
{
|
2020-03-24 16:23:27 -07:00
|
|
|
// Disable all the active preview handlers.
|
|
|
|
|
if (this->m_enabled && previewHandler->GetToggleSettingState())
|
|
|
|
|
{
|
|
|
|
|
previewHandler->DisablePreview();
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-11 15:53:49 -07:00
|
|
|
delete previewHandler;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
delete this;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Return the display name of the powertoy, this will be cached.
|
|
|
|
|
const wchar_t* PowerPreviewModule::get_name()
|
|
|
|
|
{
|
|
|
|
|
return m_moduleName.c_str();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const wchar_t** PowerPreviewModule::get_events()
|
|
|
|
|
{
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Return JSON with the configuration options.
|
|
|
|
|
bool PowerPreviewModule::get_config(_Out_ wchar_t* buffer, _Out_ int* buffer_size)
|
|
|
|
|
{
|
|
|
|
|
HINSTANCE hinstance = reinterpret_cast<HINSTANCE>(&__ImageBase);
|
|
|
|
|
|
|
|
|
|
// Create a Settings object.
|
|
|
|
|
PowerToysSettings::Settings settings(hinstance, get_name());
|
|
|
|
|
|
|
|
|
|
// General Settings.
|
|
|
|
|
settings.set_description(GET_RESOURCE_STRING(IDS_GENERAL_DESCRIPTION));
|
|
|
|
|
settings.set_icon_key(GET_RESOURCE_STRING(IDS_ICON_KEY_NAME));
|
|
|
|
|
|
|
|
|
|
// Preview Pane: Settings Group Header.
|
|
|
|
|
settings.add_header_szLarge(
|
|
|
|
|
GET_RESOURCE_STRING(IDS_PRVPANE_FILE_PREV_STTNGS_GROUP_HEADER_ID),
|
|
|
|
|
GET_RESOURCE_STRING(IDS_PRVPANE_FILE_PREV_STTNGS_GROUP_DESC),
|
|
|
|
|
GET_RESOURCE_STRING(IDS_PRVPANE_FILE_PREV_STTNGS_GROUP_TEXT));
|
|
|
|
|
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
2020-03-11 15:53:49 -07:00
|
|
|
{
|
|
|
|
|
settings.add_bool_toogle(
|
2020-03-24 16:23:27 -07:00
|
|
|
previewHandler->GetToggleSettingName(),
|
|
|
|
|
previewHandler->GetToggleSettingDescription(),
|
|
|
|
|
previewHandler->GetToggleSettingState());
|
2020-03-11 15:53:49 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return settings.serialize_to_buffer(buffer, buffer_size);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Called by the runner to pass the updated settings values as a serialized JSON.
|
|
|
|
|
void PowerPreviewModule::set_config(const wchar_t* config)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2020-03-24 16:23:27 -07:00
|
|
|
PowerToysSettings::PowerToyValues settings = PowerToysSettings::PowerToyValues::from_json_string(config);
|
2020-03-11 15:53:49 -07:00
|
|
|
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
2020-03-11 15:53:49 -07:00
|
|
|
{
|
2020-03-24 16:23:27 -07:00
|
|
|
previewHandler->UpdateState(settings, this->m_enabled);
|
2020-03-11 15:53:49 -07:00
|
|
|
}
|
|
|
|
|
|
2020-03-24 16:23:27 -07:00
|
|
|
settings.save_to_settings_file();
|
2020-03-11 15:53:49 -07:00
|
|
|
}
|
|
|
|
|
catch (std::exception const& e)
|
|
|
|
|
{
|
|
|
|
|
Trace::SetConfigInvalidJSON(e.what());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Enable preview handlers.
|
|
|
|
|
void PowerPreviewModule::enable()
|
|
|
|
|
{
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
|
|
|
|
{
|
|
|
|
|
if (previewHandler->GetToggleSettingState())
|
|
|
|
|
{
|
|
|
|
|
// Enable all the previews with intial state set as true.
|
|
|
|
|
previewHandler->EnablePreview();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
previewHandler->DisablePreview();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!this->m_enabled)
|
|
|
|
|
{
|
|
|
|
|
Trace::EnabledPowerPreview(true);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-11 15:53:49 -07:00
|
|
|
this->m_enabled = true;
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-24 16:23:27 -07:00
|
|
|
// Disable active preview handlers.
|
2020-03-11 15:53:49 -07:00
|
|
|
void PowerPreviewModule::disable()
|
|
|
|
|
{
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
2020-03-11 15:53:49 -07:00
|
|
|
{
|
|
|
|
|
previewHandler->DisablePreview();
|
|
|
|
|
}
|
2020-03-24 16:23:27 -07:00
|
|
|
|
|
|
|
|
if (this->m_enabled)
|
|
|
|
|
{
|
|
|
|
|
Trace::EnabledPowerPreview(false);
|
|
|
|
|
}
|
|
|
|
|
|
2020-03-11 15:53:49 -07:00
|
|
|
this->m_enabled = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Returns if the powertoys is enabled
|
|
|
|
|
bool PowerPreviewModule::is_enabled()
|
|
|
|
|
{
|
|
|
|
|
return this->m_enabled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Handle incoming event, data is event-specific
|
|
|
|
|
intptr_t PowerPreviewModule::signal_event(const wchar_t* name, intptr_t data)
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Load the settings file.
|
|
|
|
|
void PowerPreviewModule::init_settings()
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
// Load and parse the settings file for this PowerToy.
|
|
|
|
|
PowerToysSettings::PowerToyValues settings =
|
|
|
|
|
PowerToysSettings::PowerToyValues::load_from_settings_file(PowerPreviewModule::get_name());
|
|
|
|
|
|
|
|
|
|
// Load settings states.
|
2020-03-24 16:23:27 -07:00
|
|
|
for (auto previewHandler : this->m_previewHandlers)
|
2020-03-11 15:53:49 -07:00
|
|
|
{
|
|
|
|
|
previewHandler->LoadState(settings);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (std::exception const& e)
|
|
|
|
|
{
|
|
|
|
|
Trace::InitSetErrorLoadingFile(e.what());
|
|
|
|
|
}
|
|
|
|
|
}
|