Files
PowerToys/src/settings-ui/Settings.UI/ViewModels/PowerLauncherPluginViewModel.cs
Jaime Bernardo a63288009a [GPO] Add policies for configuring utilities enabled states (#21411)
* Add GPOWrapper headers and C++/WinRT library

* Check GPO before starting utilities

* Show message on GPO having disabled preview panes.

* Don't generate thumbnails if GPO disabled

* Fix FancyZonesEditor unable to recognize GPOWrapper

* Move settings view models to the settings project

* Use GPO to block enabling utilities in Settings

* Hide context menu entries when gpo disables utilities

* Apply gpo policies when enabling PowerToys on runner

* Add version and metadata to dll

* Add GPOWrapper to the installer

* Fix MSBuild errors on WPF apps by using Projection

* Signing

* Add gpo files and publish them

* Add GPO policies to the bug report tool

* Add some documentation for using GPO

* Mention support to actual lowest supported version of Windows

* Move PowerToys to the root of administrative templates tree

* Save policies on Software\Policies\PowerToys

* Support both machine and user scopes

* Fix documentation to reference computer and user scopes

* Mention incompatibility with outlook in gpo

* Set a better folder structure for gpo assets

* Move PDF Handler warning to the description

* Update doc/gpo/README.md

Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>

* Add actual minimum version of PowerToys to gpo files

* Fix identation

* Remove GPOWrapper Readme

* Add Active Directory instructions to doc

Co-authored-by: Heiko <61519853+htcfreek@users.noreply.github.com>
2022-10-26 14:02:31 +01:00

189 lines
5.4 KiB
C#

// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using Microsoft.PowerToys.Settings.UI.Library;
namespace Microsoft.PowerToys.Settings.UI.ViewModels
{
public class PowerLauncherPluginViewModel : INotifyPropertyChanged
{
private readonly PowerLauncherPluginSettings settings;
private readonly Func<bool> isDark;
public PowerLauncherPluginViewModel(PowerLauncherPluginSettings settings, Func<bool> isDark)
{
if (settings == null)
{
throw new ArgumentNullException(nameof(settings), "PowerLauncherPluginSettings object is null");
}
this.settings = settings;
this.isDark = isDark;
foreach (var item in AdditionalOptions)
{
item.PropertyChanged += (object sender, PropertyChangedEventArgs e) =>
{
NotifyPropertyChanged(nameof(AdditionalOptions));
};
}
}
public string Id { get => settings.Id; }
public string Name { get => settings.Name; }
public string Description { get => settings.Description; }
public string Author { get => settings.Author; }
public bool Disabled
{
get
{
return settings.Disabled;
}
set
{
if (settings.Disabled != value)
{
settings.Disabled = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(ShowNotAccessibleWarning));
NotifyPropertyChanged(nameof(Enabled));
NotifyPropertyChanged(nameof(DisabledOpacity));
NotifyPropertyChanged(nameof(IsGlobalAndEnabled));
NotifyPropertyChanged(nameof(ShowBadgeOnPluginSettingError));
}
}
}
public bool Enabled => !Disabled;
public double DisabledOpacity => Disabled ? 0.5 : 1;
public bool IsGlobalAndEnabled
{
get
{
return IsGlobal && Enabled;
}
}
public bool IsGlobal
{
get
{
return settings.IsGlobal;
}
set
{
if (settings.IsGlobal != value)
{
settings.IsGlobal = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(ShowNotAccessibleWarning));
NotifyPropertyChanged(nameof(IsGlobalAndEnabled));
NotifyPropertyChanged(nameof(ShowBadgeOnPluginSettingError));
}
}
}
public int WeightBoost
{
get
{
return settings.WeightBoost;
}
set
{
if (settings.WeightBoost != value)
{
settings.WeightBoost = value;
NotifyPropertyChanged();
}
}
}
public string ActionKeyword
{
get
{
return settings.ActionKeyword;
}
set
{
if (settings.ActionKeyword != value)
{
settings.ActionKeyword = value;
NotifyPropertyChanged();
NotifyPropertyChanged(nameof(ShowNotAccessibleWarning));
NotifyPropertyChanged(nameof(ShowBadgeOnPluginSettingError));
}
}
}
private IEnumerable<PluginAdditionalOptionViewModel> _additionalOptions;
public IEnumerable<PluginAdditionalOptionViewModel> AdditionalOptions
{
get
{
if (_additionalOptions == null)
{
_additionalOptions = settings.AdditionalOptions.Select(x => new PluginAdditionalOptionViewModel(x)).ToList();
}
return _additionalOptions;
}
}
public bool ShowAdditionalOptions
{
get => AdditionalOptions.Any();
}
public override string ToString()
{
return $"{Name}. {Description}";
}
public string IconPath
{
get
{
var path = isDark() ? settings.IconPathDark : settings.IconPathLight;
path = Path.Combine(Directory.GetCurrentDirectory(), @"modules\launcher\Plugins", path);
return path;
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public bool ShowNotAccessibleWarning
{
get => !Disabled && !IsGlobal && string.IsNullOrWhiteSpace(ActionKeyword);
}
public bool ShowBadgeOnPluginSettingError
{
get => !Disabled && ShowNotAccessibleWarning;
}
}
}