mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-02-24 04:00:02 +01:00
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request This PR introduces new UI to allow the users to manually enter their lat/long. <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [x] Closes: #42429 - [x] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [x] **Localization:** All end-user-facing strings can be localized - [x] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #[5979](https://github.com/MicrosoftDocs/windows-dev-docs-pr/pull/5979) --------- Co-authored-by: Niels Laute <niels.laute@live.nl>
48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#pragma once
|
|
#include "LightSwitchSettings.h"
|
|
#include <optional>
|
|
|
|
// Represents runtime-only information (not saved in settings.json)
|
|
struct LightSwitchState
|
|
{
|
|
ScheduleMode lastAppliedMode = ScheduleMode::Off;
|
|
bool isManualOverride = false;
|
|
bool isSystemLightActive = false;
|
|
bool isAppsLightActive = false;
|
|
int lastEvaluatedDay = -1;
|
|
int lastTickMinutes = -1;
|
|
|
|
// Derived, runtime-resolved times
|
|
int effectiveLightMinutes = 0; // the boundary we actually act on
|
|
int effectiveDarkMinutes = 0; // includes offsets if needed
|
|
};
|
|
|
|
// The controller that reacts to settings changes, time ticks, and manual overrides.
|
|
class LightSwitchStateManager
|
|
{
|
|
public:
|
|
LightSwitchStateManager();
|
|
|
|
// Called when settings.json changes or stabilizes.
|
|
void OnSettingsChanged();
|
|
|
|
// Called every minute (from service worker tick).
|
|
void OnTick(int currentMinutes);
|
|
|
|
// Called when manual override is toggled (via shortcut or system change).
|
|
void OnManualOverride();
|
|
|
|
// Initial sync at startup to align internal state with system theme
|
|
void SyncInitialThemeState();
|
|
|
|
// Accessor for current state (optional, for debugging or telemetry)
|
|
const LightSwitchState& GetState() const { return _state; }
|
|
|
|
private:
|
|
LightSwitchState _state;
|
|
std::mutex _stateMutex;
|
|
|
|
void EvaluateAndApplyIfNeeded();
|
|
bool CoordinatesAreValid(const std::wstring& lat, const std::wstring& lon);
|
|
};
|