Skip to content

Commit

Permalink
refactor: 使用 wil::notify_property_changed_base 简化代码
Browse files Browse the repository at this point in the history
  • Loading branch information
Blinue committed Apr 11, 2024
1 parent f75352d commit 4cfb581
Show file tree
Hide file tree
Showing 27 changed files with 190 additions and 306 deletions.
46 changes: 23 additions & 23 deletions src/Magpie.App/AboutViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ AboutViewModel::AboutViewModel() {
}

that->_logo = std::move(bitmap);
that->_propertyChangedEvent(*that, PropertyChangedEventArgs(L"Logo"));
that->RaisePropertyChanged(L"Logo");
})(this);
}

Expand Down Expand Up @@ -99,7 +99,7 @@ bool AboutViewModel::IsCheckForPreviewUpdates() const noexcept {

void AboutViewModel::IsCheckForPreviewUpdates(bool value) {
AppSettings::Get().IsCheckForPreviewUpdates(value);
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsCheckForPreviewUpdates"));
RaisePropertyChanged(L"IsCheckForPreviewUpdates");
}

bool AboutViewModel::IsCheckForUpdatesButtonEnabled() const noexcept {
Expand All @@ -117,7 +117,7 @@ bool AboutViewModel::IsAutoCheckForUpdates() const noexcept {

void AboutViewModel::IsAutoCheckForUpdates(bool value) {
AppSettings::Get().IsAutoCheckForUpdates(value);
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsAutoCheckForUpdates"));
RaisePropertyChanged(L"IsAutoCheckForUpdates");
}

bool AboutViewModel::IsAnyUpdateStatus() const noexcept {
Expand All @@ -140,7 +140,7 @@ void AboutViewModel::IsErrorWhileChecking(bool value) {
}
}

_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsErrorWhileChecking"));
RaisePropertyChanged(L"IsErrorWhileChecking");
}

bool AboutViewModel::IsNoUpdate() const noexcept {
Expand Down Expand Up @@ -189,7 +189,7 @@ void AboutViewModel::IsUpdateCardOpen(bool value) {
}
}

_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsUpdateCardOpen"));
RaisePropertyChanged(L"IsUpdateCardOpen");
}

bool AboutViewModel::IsUpdateCardClosable() const noexcept {
Expand Down Expand Up @@ -259,23 +259,23 @@ void AboutViewModel::Retry() {
}

void AboutViewModel::_UpdateService_StatusChanged(UpdateStatus status) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsCheckingForUpdates"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsCheckForUpdatesButtonEnabled"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsAnyUpdateStatus"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsErrorWhileChecking"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsNoUpdate"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsAvailable"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsDownloading"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsErrorWhileDownloading"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsInstalling"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsDownloadingOrLater"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsUpdateCardOpen"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsUpdateCardClosable"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsCancelButtonVisible"));
RaisePropertyChanged(L"IsCheckingForUpdates");
RaisePropertyChanged(L"IsCheckForUpdatesButtonEnabled");
RaisePropertyChanged(L"IsAnyUpdateStatus");
RaisePropertyChanged(L"IsErrorWhileChecking");
RaisePropertyChanged(L"IsNoUpdate");
RaisePropertyChanged(L"IsAvailable");
RaisePropertyChanged(L"IsDownloading");
RaisePropertyChanged(L"IsErrorWhileDownloading");
RaisePropertyChanged(L"IsInstalling");
RaisePropertyChanged(L"IsDownloadingOrLater");
RaisePropertyChanged(L"IsUpdateCardOpen");
RaisePropertyChanged(L"IsUpdateCardClosable");
RaisePropertyChanged(L"IsCancelButtonVisible");

if (status >= UpdateStatus::Available) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"UpdateCardTitle"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"UpdateReleaseNotesLink"));
RaisePropertyChanged(L"UpdateCardTitle");
RaisePropertyChanged(L"UpdateReleaseNotesLink");

if (status == UpdateStatus::Downloading) {
_downloadProgressChangedRevoker = UpdateService::Get().DownloadProgressChanged(
Expand All @@ -286,15 +286,15 @@ void AboutViewModel::_UpdateService_StatusChanged(UpdateStatus status) {
_downloadProgressChangedRevoker.Revoke();

if (status >= UpdateStatus::ErrorWhileDownloading) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsNoDownloadProgress"));
RaisePropertyChanged(L"IsNoDownloadProgress");
}
}
}
}

void AboutViewModel::_UpdateService_DownloadProgressChanged(double) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsNoDownloadProgress"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"DownloadProgress"));
RaisePropertyChanged(L"IsNoDownloadProgress");
RaisePropertyChanged(L"DownloadProgress");
}

}
12 changes: 2 additions & 10 deletions src/Magpie.App/AboutViewModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,10 @@

namespace winrt::Magpie::App::implementation {

struct AboutViewModel : AboutViewModelT<AboutViewModel> {
struct AboutViewModel : AboutViewModelT<AboutViewModel>,
wil::notify_property_changed_base<AboutViewModel> {
AboutViewModel();

event_token PropertyChanged(PropertyChangedEventHandler const& handler) {
return _propertyChangedEvent.add(handler);
}

void PropertyChanged(event_token const& token) noexcept {
_propertyChangedEvent.remove(token);
}

Imaging::SoftwareBitmapSource Logo() const noexcept {
return _logo;
}
Expand Down Expand Up @@ -73,7 +66,6 @@ struct AboutViewModel : AboutViewModelT<AboutViewModel> {
void _UpdateService_StatusChanged(UpdateStatus status);
void _UpdateService_DownloadProgressChanged(double);

event<PropertyChangedEventHandler> _propertyChangedEvent;
WinRTUtils::EventRevoker _updateStatusChangedRevoker;
WinRTUtils::EventRevoker _downloadProgressChangedRevoker;
WinRTUtils::EventRevoker _showOnHomePageChangedRevoker;
Expand Down
4 changes: 2 additions & 2 deletions src/Magpie.App/CandidateWindowItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ fire_and_forget CandidateWindowItem::_ResolveWindow(bool resolveIcon, bool resol
}
// 即使 defaultProfileName 为空也通知 DefaultProfileName 已更改
// 这是为了正确设置 CandidateWindowIndex
that->_propertyChangedEvent(*that, PropertyChangedEventArgs(L"DefaultProfileName"));
that->RaisePropertyChanged(L"DefaultProfileName");

that->_aumid = aumid;
}
Expand Down Expand Up @@ -167,7 +167,7 @@ fire_and_forget CandidateWindowItem::_ResolveWindow(bool resolveIcon, bool resol
strongThis->_icon = std::move(fontIcon);
}

strongThis->_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Icon"));
strongThis->RaisePropertyChanged(L"Icon");
}
}

Expand Down
13 changes: 2 additions & 11 deletions src/Magpie.App/CandidateWindowItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,10 @@

namespace winrt::Magpie::App::implementation {

struct CandidateWindowItem : CandidateWindowItemT<CandidateWindowItem> {
struct CandidateWindowItem : CandidateWindowItemT<CandidateWindowItem>,
wil::notify_property_changed_base<CandidateWindowItem> {
CandidateWindowItem(uint64_t hWnd, uint32_t dpi, bool isLightTheme, CoreDispatcher const& dispatcher);

event_token PropertyChanged(PropertyChangedEventHandler const& handler) {
return _propertyChangedEvent.add(handler);
}

void PropertyChanged(event_token const& token) noexcept {
_propertyChangedEvent.remove(token);
}

hstring Title() const noexcept {
return _title;
}
Expand All @@ -39,8 +32,6 @@ struct CandidateWindowItem : CandidateWindowItemT<CandidateWindowItem> {
private:
fire_and_forget _ResolveWindow(bool resolveIcon, bool resolveName, HWND hWnd, bool isLightTheme, uint32_t dpi, CoreDispatcher dispatcher);

event<PropertyChangedEventHandler> _propertyChangedEvent;

hstring _title;
Controls::IconElement _icon{ nullptr };
hstring _defaultProfileName;
Expand Down
33 changes: 7 additions & 26 deletions src/Magpie.App/EffectParametersViewModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,11 @@ struct EffectInfo;

namespace winrt::Magpie::App::implementation {

struct ScalingModeBoolParameter : ScalingModeBoolParameterT<ScalingModeBoolParameter> {
struct ScalingModeBoolParameter : ScalingModeBoolParameterT<ScalingModeBoolParameter>,
wil::notify_property_changed_base<ScalingModeBoolParameter> {
ScalingModeBoolParameter(uint32_t index, const hstring& label, bool initValue)
: _index(index), _label(box_value(label)), _value(initValue) {
}

event_token PropertyChanged(PropertyChangedEventHandler const& handler) {
return _propertyChangedEvent.add(handler);
}

void PropertyChanged(event_token const& token) noexcept {
_propertyChangedEvent.remove(token);
}

uint32_t Index() const noexcept {
return _index;
}
Expand All @@ -33,34 +25,25 @@ struct ScalingModeBoolParameter : ScalingModeBoolParameterT<ScalingModeBoolParam

void Value(bool value) {
_value = value;
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Value"));
RaisePropertyChanged(L"Value");
}

IInspectable Label() const noexcept {
return _label;
}

private:
event<PropertyChangedEventHandler> _propertyChangedEvent;

const uint32_t _index;
IInspectable _label;
bool _value;
};

struct ScalingModeFloatParameter : ScalingModeFloatParameterT<ScalingModeFloatParameter> {
struct ScalingModeFloatParameter : ScalingModeFloatParameterT<ScalingModeFloatParameter>,
wil::notify_property_changed_base<ScalingModeFloatParameter> {
ScalingModeFloatParameter(uint32_t index, const hstring& label, float initValue, float minimum, float maximum, float step)
: _index(index), _label(label), _value(initValue), _minimum(minimum), _maximum(maximum), _step(step) {
}

event_token PropertyChanged(PropertyChangedEventHandler const& handler) {
return _propertyChangedEvent.add(handler);
}

void PropertyChanged(event_token const& token) noexcept {
_propertyChangedEvent.remove(token);
}

uint32_t Index() const noexcept {
return _index;
}
Expand All @@ -71,8 +54,8 @@ struct ScalingModeFloatParameter : ScalingModeFloatParameterT<ScalingModeFloatPa

void Value(double value) {
_value = value;
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Value"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"ValueText"));
RaisePropertyChanged(L"Value");
RaisePropertyChanged(L"ValueText");
}

hstring ValueText() const noexcept {
Expand All @@ -96,8 +79,6 @@ struct ScalingModeFloatParameter : ScalingModeFloatParameterT<ScalingModeFloatPa
}

private:
event<PropertyChangedEventHandler> _propertyChangedEvent;

const uint32_t _index;
const hstring _label;
const double _minimum;
Expand Down
30 changes: 15 additions & 15 deletions src/Magpie.App/HomeViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,8 @@ uint32_t HomeViewModel::Delay() const noexcept {

void HomeViewModel::Delay(uint32_t value) {
AppSettings::Get().CountdownSeconds(value);
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Delay"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerButtonText"));
RaisePropertyChanged(L"Delay");
RaisePropertyChanged(L"TimerButtonText");
}

bool HomeViewModel::IsAutoRestore() const noexcept {
Expand All @@ -100,7 +100,7 @@ void HomeViewModel::IsAutoRestore(bool value) {
}

settings.IsAutoRestore(value);
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsAutoRestore"));
RaisePropertyChanged(L"IsAutoRestore");
}

bool HomeViewModel::IsWndToRestore() const noexcept {
Expand Down Expand Up @@ -144,8 +144,8 @@ inline void HomeViewModel::ShowUpdateCard(bool value) noexcept {
UpdateService::Get().IsShowOnHomePage(false);
}

_propertyChangedEvent(*this, PropertyChangedEventArgs(L"ShowUpdateCard"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"UpdateCardTitle"));
RaisePropertyChanged(L"ShowUpdateCard");
RaisePropertyChanged(L"UpdateCardTitle");
}

hstring HomeViewModel::UpdateCardTitle() const noexcept {
Expand Down Expand Up @@ -187,27 +187,27 @@ void HomeViewModel::RemindMeLater() {

void HomeViewModel::_ScalingService_IsTimerOnChanged(bool value) {
if (!value) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerProgressRingValue"));
RaisePropertyChanged(L"TimerProgressRingValue");
}

_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerProgressRingValue"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerLabelText"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerButtonText"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsTimerOn"));
RaisePropertyChanged(L"TimerProgressRingValue");
RaisePropertyChanged(L"TimerLabelText");
RaisePropertyChanged(L"TimerButtonText");
RaisePropertyChanged(L"IsTimerOn");
}

void HomeViewModel::_ScalingService_TimerTick(double) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerProgressRingValue"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"TimerLabelText"));
RaisePropertyChanged(L"TimerProgressRingValue");
RaisePropertyChanged(L"TimerLabelText");
}

void HomeViewModel::_ScalingService_IsRunningChanged(bool) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsNotRunning"));
RaisePropertyChanged(L"IsNotRunning");
}

void HomeViewModel::_ScalingService_WndToRestoreChanged(HWND) {
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsWndToRestore"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"RestoreWndDesc"));
RaisePropertyChanged(L"IsWndToRestore");
RaisePropertyChanged(L"RestoreWndDesc");
}

}
12 changes: 1 addition & 11 deletions src/Magpie.App/HomeViewModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,9 @@

namespace winrt::Magpie::App::implementation {

struct HomeViewModel : HomeViewModelT<HomeViewModel> {
struct HomeViewModel : HomeViewModelT<HomeViewModel>, wil::notify_property_changed_base<HomeViewModel> {
HomeViewModel();

event_token PropertyChanged(PropertyChangedEventHandler const& handler) {
return _propertyChangedEvent.add(handler);
}

void PropertyChanged(event_token const& token) noexcept {
_propertyChangedEvent.remove(token);
}

bool IsTimerOn() const noexcept;

double TimerProgressRingValue() const noexcept;
Expand Down Expand Up @@ -66,8 +58,6 @@ struct HomeViewModel : HomeViewModelT<HomeViewModel> {

void _ScalingService_WndToRestoreChanged(HWND);

event<PropertyChangedEventHandler> _propertyChangedEvent;

WinRTUtils::EventRevoker _isTimerOnRevoker;
WinRTUtils::EventRevoker _timerTickRevoker;
WinRTUtils::EventRevoker _isRunningChangedRevoker;
Expand Down
12 changes: 6 additions & 6 deletions src/Magpie.App/NewProfileViewModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,9 @@ void NewProfileViewModel::PrepareForOpen(uint32_t dpi, bool isLightTheme, CoreDi
items.reserve(candidateWindows.size());
std::copy(candidateWindows.begin(), candidateWindows.end(), std::insert_iterator(items, items.begin()));
_candidateWindows = single_threaded_vector(std::move(items));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"CandidateWindows"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsNoCandidateWindow"));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"IsAnyCandidateWindow"));
RaisePropertyChanged(L"CandidateWindows");
RaisePropertyChanged(L"IsNoCandidateWindow");
RaisePropertyChanged(L"IsAnyCandidateWindow");

CandidateWindowIndex(-1);
if (_candidateWindows.Size() == 1) {
Expand All @@ -138,14 +138,14 @@ void NewProfileViewModel::PrepareForOpen(uint32_t dpi, bool isLightTheme, CoreDi
}

_profiles = single_threaded_vector(std::move(profiles));
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Profiles"));
RaisePropertyChanged(L"Profiles");

ProfileIndex(0);
}

void NewProfileViewModel::CandidateWindowIndex(int value) {
_candidateWindowIndex = value;
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"CandidateWindowIndex"));
RaisePropertyChanged(L"CandidateWindowIndex");

if (value >= 0) {
Name(_candidateWindows.GetAt(value).as<CandidateWindowItem>().DefaultProfileName());
Expand All @@ -156,7 +156,7 @@ void NewProfileViewModel::CandidateWindowIndex(int value) {

void NewProfileViewModel::Name(const hstring& value) noexcept {
_name = value;
_propertyChangedEvent(*this, PropertyChangedEventArgs(L"Name"));
RaisePropertyChanged(L"Name");

_IsConfirmButtonEnabled(!value.empty() && _candidateWindowIndex >= 0);
}
Expand Down
Loading

0 comments on commit 4cfb581

Please sign in to comment.