mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
249 lines
8.8 KiB
C#
249 lines
8.8 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.NotificationArea
|
|
// 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.Iris;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class NotificationArea : ModelItem
|
|
{
|
|
private bool _paused;
|
|
private List<Notification> _notificationList;
|
|
private Notification _currentNotification;
|
|
private Notification _overrideNotification;
|
|
private Timer _timer;
|
|
private static NotificationArea _singletonInstance;
|
|
|
|
private NotificationArea(IModelItemOwner owner)
|
|
: base(owner)
|
|
=> this._notificationList = new List<Notification>();
|
|
|
|
protected override void OnDispose(bool disposing)
|
|
{
|
|
if (disposing)
|
|
{
|
|
if (this._timer != null)
|
|
this._timer.Tick -= new EventHandler(this.OnTick);
|
|
for (int index = 0; index < this._notificationList.Count; ++index)
|
|
{
|
|
if (this._notificationList[index] != null)
|
|
this._notificationList[index].Dispose();
|
|
}
|
|
this._currentNotification = null;
|
|
if (this._overrideNotification != null)
|
|
{
|
|
this._overrideNotification.Dispose();
|
|
this._overrideNotification = null;
|
|
}
|
|
}
|
|
base.OnDispose(disposing);
|
|
_singletonInstance = null;
|
|
}
|
|
|
|
public static NotificationArea Instance
|
|
{
|
|
get
|
|
{
|
|
if (_singletonInstance == null)
|
|
_singletonInstance = new NotificationArea(ZuneShell.DefaultInstance);
|
|
return _singletonInstance;
|
|
}
|
|
}
|
|
|
|
public Notification CurrentNotification
|
|
{
|
|
private set
|
|
{
|
|
if (this._currentNotification == value)
|
|
return;
|
|
this._currentNotification = value;
|
|
if (this._currentNotification != null)
|
|
this.TickTimer.Interval = this._currentNotification.DisplayTime;
|
|
if (this._overrideNotification != null)
|
|
return;
|
|
this.FirePropertyChanged(nameof(CurrentNotification));
|
|
}
|
|
get => this._overrideNotification != null ? this._overrideNotification : this._currentNotification;
|
|
}
|
|
|
|
public bool NotificationsReady => this._notificationList.Count > 0;
|
|
|
|
public int NotificationCount => this._notificationList.Count;
|
|
|
|
private Timer TickTimer
|
|
{
|
|
get
|
|
{
|
|
if (this._timer == null)
|
|
{
|
|
this._timer = new Timer(this, "Notification Area Change Timer");
|
|
this._timer.Interval = 600000;
|
|
this._timer.AutoRepeat = true;
|
|
this._timer.Tick += new EventHandler(this.OnTick);
|
|
}
|
|
return this._timer;
|
|
}
|
|
}
|
|
|
|
public void Add(Notification notification)
|
|
{
|
|
if (notification == null || this._notificationList.Contains(notification))
|
|
return;
|
|
if (!this.NotificationsReady)
|
|
{
|
|
this._notificationList.Add(notification);
|
|
if (!this.Paused)
|
|
this.TickTimer.Start();
|
|
}
|
|
else
|
|
{
|
|
int index = this._notificationList.IndexOf(this._currentNotification);
|
|
if (index >= 0 && index < this._notificationList.Count)
|
|
this._notificationList.Insert(index, notification);
|
|
else
|
|
this._notificationList.Add(notification);
|
|
}
|
|
this.FirePropertyChanged("NotificationCount");
|
|
if (this.Paused && this.CurrentNotification != null)
|
|
return;
|
|
this.CurrentNotification = notification;
|
|
}
|
|
|
|
public void Override(Notification notification)
|
|
{
|
|
if (this._overrideNotification == notification)
|
|
return;
|
|
if (this._overrideNotification != null)
|
|
this._overrideNotification.Dispose();
|
|
this._overrideNotification = notification;
|
|
this.FirePropertyChanged("CurrentNotification");
|
|
if (!this.TickTimer.Enabled)
|
|
return;
|
|
this.TickTimer.Stop();
|
|
}
|
|
|
|
public void EndOverride(Notification notification)
|
|
{
|
|
if (notification == null || this._overrideNotification != notification)
|
|
return;
|
|
this.Override(null);
|
|
if (!this.NotificationsReady)
|
|
return;
|
|
this.TickTimer.Start();
|
|
}
|
|
|
|
public void ClearAll()
|
|
{
|
|
this.TickTimer.Stop();
|
|
this._notificationList.Clear();
|
|
this.CurrentNotification = null;
|
|
}
|
|
|
|
public void RemoveAll(NotificationTask taskType, NotificationState notificationType)
|
|
{
|
|
for (int index = this._notificationList.Count - 1; index >= 0; --index)
|
|
{
|
|
if (this._notificationList[index].Task == taskType && this._notificationList[index].Type == notificationType)
|
|
{
|
|
if (this._notificationList[index] == this._currentNotification)
|
|
this.IncrementNotification();
|
|
this._notificationList[index].Dispose();
|
|
this._notificationList.RemoveAt(index);
|
|
if (!this.NotificationsReady)
|
|
{
|
|
this.CurrentNotification = null;
|
|
this.TickTimer.Stop();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Remove(Notification notification)
|
|
{
|
|
if (notification == null || notification.IsDisposed)
|
|
return;
|
|
if (notification == this._currentNotification)
|
|
this.IncrementNotification();
|
|
if (this._notificationList.Remove(notification))
|
|
notification.Dispose();
|
|
if (this.NotificationsReady)
|
|
return;
|
|
this.CurrentNotification = null;
|
|
this.TickTimer.Stop();
|
|
}
|
|
|
|
public void Replace(Notification oldNotification, Notification newNotification)
|
|
{
|
|
if (oldNotification == null || newNotification == null || (oldNotification.IsDisposed || newNotification.IsDisposed))
|
|
return;
|
|
int index = this._notificationList.IndexOf(oldNotification);
|
|
if (index < 0)
|
|
return;
|
|
this._notificationList.RemoveAt(index);
|
|
this._notificationList.Insert(index, newNotification);
|
|
if (oldNotification == this._currentNotification)
|
|
this.CurrentNotification = newNotification;
|
|
oldNotification.Dispose();
|
|
}
|
|
|
|
public void ForceToFront(Notification notification)
|
|
{
|
|
if (this._notificationList.IndexOf(notification) < 0)
|
|
return;
|
|
if (notification == this._currentNotification)
|
|
{
|
|
this.TickTimer.Stop();
|
|
this.TickTimer.Interval = this._currentNotification.DisplayTime;
|
|
this.TickTimer.Start();
|
|
}
|
|
else
|
|
this.CurrentNotification = notification;
|
|
}
|
|
|
|
public bool Paused
|
|
{
|
|
get => this._paused;
|
|
set
|
|
{
|
|
if (this._paused == value)
|
|
return;
|
|
this._paused = value;
|
|
if (this._paused)
|
|
{
|
|
this.TickTimer.Enabled = false;
|
|
}
|
|
else
|
|
{
|
|
if (!this.NotificationsReady)
|
|
return;
|
|
this.TickTimer.Enabled = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnTick(object sender, EventArgs args)
|
|
{
|
|
if (this._currentNotification == null)
|
|
return;
|
|
Notification currentNotification = this._currentNotification;
|
|
this.IncrementNotification();
|
|
currentNotification.IncrementDisplayCount();
|
|
}
|
|
|
|
public void IncrementNotification()
|
|
{
|
|
int index = this._notificationList.IndexOf(this._currentNotification) + 1;
|
|
if (index >= this._notificationList.Count)
|
|
index = 0;
|
|
if (index < 0 || index >= this._notificationList.Count)
|
|
return;
|
|
this.CurrentNotification = this._notificationList[index];
|
|
}
|
|
}
|
|
}
|