mirror of
https://github.com/ReneLergner/WPinternals.git
synced 2026-06-14 03:16:40 +10:00
215 lines
6.8 KiB
C#
215 lines
6.8 KiB
C#
// Copyright (c) 2018, Rene Lergner - wpinternals.net - @Heathcliff74xda
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
|
// copy of this software and associated documentation files (the "Software"),
|
|
// to deal in the Software without restriction, including without limitation
|
|
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
// and/or sell copies of the Software, and to permit persons to whom the
|
|
// Software is furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
// DEALINGS IN THE SOFTWARE.
|
|
|
|
using System;
|
|
using System.Threading;
|
|
|
|
namespace WPinternals
|
|
{
|
|
internal class BusyViewModel : ContextViewModel
|
|
{
|
|
private ulong MaxProgressValue = 0;
|
|
internal ProgressUpdater ProgressUpdater = null;
|
|
|
|
// UIContext can be passed to BusyViewModel, when it needs to update progress-controls and it is created on a worker-thread.
|
|
internal BusyViewModel(string Message, string SubMessage = null, ulong? MaxProgressValue = null, SynchronizationContext UIContext = null, bool ShowAnimation = true, bool ShowRebootHelp = false)
|
|
{
|
|
LogFile.Log(Message);
|
|
|
|
if (UIContext == null)
|
|
this.UIContext = SynchronizationContext.Current;
|
|
else
|
|
this.UIContext = UIContext;
|
|
|
|
this.Message = Message;
|
|
this.SubMessage = SubMessage;
|
|
this.ShowAnimation = ShowAnimation;
|
|
this.ShowRebootHelp = ShowRebootHelp;
|
|
if (MaxProgressValue != null)
|
|
{
|
|
ProgressPercentage = 0;
|
|
this.MaxProgressValue = (ulong)MaxProgressValue;
|
|
ProgressUpdater = new ProgressUpdater((ulong)MaxProgressValue, (p, t) =>
|
|
{
|
|
if ((this.UIContext == null) || (this.UIContext == SynchronizationContext.Current))
|
|
{
|
|
ProgressPercentage = p;
|
|
TimeRemaining = t;
|
|
}
|
|
else
|
|
{
|
|
this.UIContext.Post((s) =>
|
|
{
|
|
ProgressPercentage = p;
|
|
TimeRemaining = t;
|
|
}, null);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
internal void SetShowRebootHelp(bool Value)
|
|
{
|
|
ShowRebootHelp = Value;
|
|
}
|
|
|
|
internal void SetProgress(ulong Value)
|
|
{
|
|
if (ProgressUpdater != null)
|
|
UIContext.Post((s) => { ProgressUpdater.SetProgress(Value); }, null);
|
|
}
|
|
|
|
private string _Message = null;
|
|
public string Message
|
|
{
|
|
get
|
|
{
|
|
return _Message;
|
|
}
|
|
set
|
|
{
|
|
_Message = value;
|
|
OnPropertyChanged("Message");
|
|
}
|
|
}
|
|
|
|
private string _SubMessage = null;
|
|
public string SubMessage
|
|
{
|
|
get
|
|
{
|
|
return _SubMessage;
|
|
}
|
|
set
|
|
{
|
|
_SubMessage = value;
|
|
OnPropertyChanged("SubMessage");
|
|
}
|
|
}
|
|
|
|
private int? _ProgressPercentage = null;
|
|
public int? ProgressPercentage
|
|
{
|
|
get
|
|
{
|
|
return _ProgressPercentage;
|
|
}
|
|
set
|
|
{
|
|
if (_ProgressPercentage != value)
|
|
{
|
|
_ProgressPercentage = value;
|
|
OnPropertyChanged("ProgressPercentage");
|
|
OnPropertyChanged("ShowAnimation");
|
|
UpdateProgressText();
|
|
}
|
|
}
|
|
}
|
|
|
|
private TimeSpan? _TimeRemaining = null;
|
|
public TimeSpan? TimeRemaining
|
|
{
|
|
get
|
|
{
|
|
return _TimeRemaining;
|
|
}
|
|
set
|
|
{
|
|
if (_TimeRemaining != value)
|
|
{
|
|
_TimeRemaining = value;
|
|
OnPropertyChanged("TimeRemaining");
|
|
UpdateProgressText();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateProgressText()
|
|
{
|
|
string NewText = null;
|
|
if (ProgressPercentage != null)
|
|
{
|
|
NewText = "Progress: " + ((int)ProgressPercentage).ToString() + "%";
|
|
}
|
|
if (TimeRemaining != null)
|
|
{
|
|
if (NewText == null)
|
|
NewText = "";
|
|
else
|
|
NewText += " - ";
|
|
|
|
NewText += "Estimated time remaining: " + ((TimeSpan)TimeRemaining).ToString(@"h\:mm\:ss");
|
|
}
|
|
ProgressText = NewText;
|
|
}
|
|
|
|
private string _ProgressText = null;
|
|
public string ProgressText
|
|
{
|
|
get
|
|
{
|
|
return _ProgressText;
|
|
}
|
|
set
|
|
{
|
|
if (_ProgressText != value)
|
|
{
|
|
_ProgressText = value;
|
|
OnPropertyChanged("ProgressText");
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _ShowAnimation = true;
|
|
public bool ShowAnimation
|
|
{
|
|
get
|
|
{
|
|
return (_ProgressPercentage == null) && _ShowAnimation;
|
|
}
|
|
set
|
|
{
|
|
if (_ShowAnimation != value)
|
|
{
|
|
_ShowAnimation = value;
|
|
OnPropertyChanged("ShowAnimation");
|
|
}
|
|
}
|
|
}
|
|
|
|
private bool _ShowRebootHelp = false;
|
|
public bool ShowRebootHelp
|
|
{
|
|
get
|
|
{
|
|
return _ShowRebootHelp;
|
|
}
|
|
set
|
|
{
|
|
if (_ShowRebootHelp != value)
|
|
{
|
|
_ShowRebootHelp = value;
|
|
OnPropertyChanged("ShowRebootHelp");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|