示例#1
0
 private void broadcastStateChange(Interval interval, PluginBase.StateChangeType state, DateTime timestamp)
 {
     foreach (IPlugin plugin in _subscribers)
     {
         plugin.OnIntervalStateChange(interval.Id, state, timestamp, interval.Elapsed);
     }
 }
示例#2
0
        public static Icon GetIconForState(PluginBase.IntervalType type, PluginBase.StateChangeType state, bool heartbeat)
        {
            int frame = 0;

            if (type == PluginBase.IntervalType.Rest)
            {
                frame = 8;
            }

            if (state == PluginBase.StateChangeType.Start)
            {
                frame |= 4;
            }

            if (state == PluginBase.StateChangeType.Pause)
            {
                frame |= 2;
            }

            if (heartbeat)
            {
                frame |= 1;
            }

            return(_icons[frame]);
        }
示例#3
0
        public void OnIntervalStateChange(string id, PluginBase.StateChangeType change, DateTime timestamp, TimeSpan elapsed)
        {
            if (_knownState.Id != id)
            {
                if (_idsSeen.Contains(id))
                {
                    // This is a modification to an old interval. Ignore it.
                    return;
                }
                else
                {
                    // This is a new interval. Capture it.
                    _idsSeen.Add(id);
                    _knownState.Id = id;
                    _knownState.Reset();

                    if (change == PluginBase.StateChangeType.Start)
                    {
                        _knownState.Begun = timestamp;
                    }
                }
            }

            if (change == PluginBase.StateChangeType.Unpause)
            {
                _knownState.State = PluginBase.StateChangeType.Start;
            }
            else
            {
                _knownState.State = change;
            }

            _knownState.Elapsed = elapsed;

            refreshButtonsForState();
            refreshIconForState();
        }
示例#4
0
 public static Bitmap GetBitmapForState(int size, PluginBase.IntervalType type, PluginBase.StateChangeType state, bool heartbeat)
 {
     return(GetBitmapForIcon(GetIconForState(type, state, heartbeat), size));
 }
示例#5
0
        public void RequestModifyIntervalState(PluginManager.Plugin caller, string id, PluginBase.StateChangeType state)
        {
            // Can't change state of old intervals
            if (id != _currentIntervalId)
            {
                return;
            }

            Interval current = getInterval(_currentIntervalId);

            if (current.State == PluginBase.StateChangeType.End)
            {
                return;
            }

            if (current.State == state)
            {
                return;
            }

            switch (state)
            {
            case PluginBase.StateChangeType.Unpause:
                if (current.State != PluginBase.StateChangeType.Pause)
                {
                    return;
                }
                current.State = PluginBase.StateChangeType.Start;
                broadcastStateChange(current, PluginBase.StateChangeType.Unpause, DateTime.Now);
                break;

            case PluginBase.StateChangeType.Pause:
                if (current.State != PluginBase.StateChangeType.Start)
                {
                    return;
                }
                current.State = PluginBase.StateChangeType.Pause;
                broadcastStateChange(current, PluginBase.StateChangeType.Pause, DateTime.Now);
                break;

            case PluginBase.StateChangeType.End:
                endInterval(current, true);
                break;

            case PluginBase.StateChangeType.Start:
                // Invalid
                break;

            default:
                // Shouldn't happen!
                break;
            }
        }
示例#6
0
 public void OnClockTick(string id, PluginBase.StateChangeType lastStateChange, DateTime timestamp, TimeSpan elapsed)
 {
     _heartbeat = !_heartbeat;
     refreshIconForState();
 }
示例#7
0
 public void RequestModifyIntervalState(string id, PluginBase.StateChangeType state)
 {
     _api.RequestModifyIntervalState(_instance, id, state);
 }