mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
156 lines
4.9 KiB
C#
156 lines
4.9 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.MetadataEditProperty
|
|
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
|
|
// Assembly location: C:\Program Files\Zune\ZuneShell.dll
|
|
|
|
using Microsoft.Zune.ErrorMapperApi;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class MetadataEditProperty : INotifyPropertyChangedImpl
|
|
{
|
|
private PropertyDescriptor _descriptor;
|
|
private string _originalValue;
|
|
private string _currentValue;
|
|
private bool _modified;
|
|
private bool _valid = true;
|
|
private object _state;
|
|
private HRESULT _externalError = HRESULT._S_OK;
|
|
|
|
internal MetadataEditProperty(PropertyDescriptor descriptor, string originalValue)
|
|
{
|
|
this._descriptor = descriptor;
|
|
this._originalValue = originalValue;
|
|
this._currentValue = originalValue;
|
|
this.UpdateValidAndModified();
|
|
}
|
|
|
|
internal void SetValue(string value, bool propagate)
|
|
{
|
|
if (!(this._currentValue != value))
|
|
return;
|
|
this._currentValue = value;
|
|
this.NotifyPropertyChanged("Value", propagate);
|
|
this.UpdateValidAndModified();
|
|
}
|
|
|
|
public string OriginalValue
|
|
{
|
|
get => this._originalValue;
|
|
set
|
|
{
|
|
if (this._originalValue != value)
|
|
{
|
|
this._originalValue = value;
|
|
this.NotifyPropertyChanged(nameof(OriginalValue), true);
|
|
}
|
|
this.Value = this._originalValue;
|
|
}
|
|
}
|
|
|
|
public string Value
|
|
{
|
|
get => this._currentValue;
|
|
set => this.SetValue(value, true);
|
|
}
|
|
|
|
public bool Valid
|
|
{
|
|
get => this._valid;
|
|
internal set
|
|
{
|
|
if (this._valid == value)
|
|
return;
|
|
this._valid = value;
|
|
this.NotifyPropertyChanged(nameof(Valid), true);
|
|
this.NotifyPropertyChanged("ErrorMessage", true);
|
|
}
|
|
}
|
|
|
|
public bool Required => this._descriptor.IsRequired(this._state);
|
|
|
|
public bool Modified
|
|
{
|
|
get => this._modified;
|
|
internal set
|
|
{
|
|
if (this._modified == value)
|
|
return;
|
|
this._modified = value;
|
|
this.NotifyPropertyChanged(nameof(Modified), true);
|
|
}
|
|
}
|
|
|
|
public PropertyDescriptor Descriptor => this._descriptor;
|
|
|
|
public HRESULT ExternalError
|
|
{
|
|
get => this._externalError;
|
|
set
|
|
{
|
|
if (this._externalError.Int == value.Int)
|
|
return;
|
|
this._externalError = value;
|
|
this.NotifyPropertyChanged(nameof(ExternalError), true);
|
|
this.UpdateValid();
|
|
}
|
|
}
|
|
|
|
public string ErrorMessage
|
|
{
|
|
get
|
|
{
|
|
string str = null;
|
|
if (this._externalError.IsError)
|
|
{
|
|
ErrorMapperResult descriptionAndUrl = ErrorMapperApi.GetMappedErrorDescriptionAndUrl(this._externalError.Int);
|
|
if (descriptionAndUrl != null)
|
|
str = descriptionAndUrl.Description;
|
|
}
|
|
else if (!this.Valid)
|
|
str = this._descriptor.DefaultError;
|
|
return str;
|
|
}
|
|
}
|
|
|
|
public object State
|
|
{
|
|
get => this._state;
|
|
set
|
|
{
|
|
if (this._state == value)
|
|
return;
|
|
this._state = value;
|
|
this.NotifyPropertyChanged(nameof(State), true);
|
|
this.OnStateChanged();
|
|
}
|
|
}
|
|
|
|
public string OverlayContent => this._descriptor.GetOverlayString(this._state);
|
|
|
|
public string LabelContent => this._descriptor.GetLabelString(this._state);
|
|
|
|
public object ConvertToData() => this._descriptor.ConvertFromString(this._currentValue, this._state);
|
|
|
|
public void ConvertFromData(object data) => this.OriginalValue = this._descriptor.ConvertToString(data, this._state);
|
|
|
|
private void OnStateChanged()
|
|
{
|
|
this.UpdateValid();
|
|
this.NotifyPropertyChanged("OverlayContent", true);
|
|
this.NotifyPropertyChanged("LabelContent", true);
|
|
}
|
|
|
|
private void UpdateValidAndModified()
|
|
{
|
|
this.Modified = this._currentValue != this._originalValue;
|
|
if (this.Modified && this._externalError.IsError)
|
|
this._externalError = HRESULT._S_OK;
|
|
this.UpdateValid();
|
|
}
|
|
|
|
private void UpdateValid() => this.Valid = this._descriptor.IsValid(this._currentValue, this._state) && this._externalError.IsSuccess;
|
|
}
|
|
}
|