Пример #1
0
        public static Weekday GetNextRecurringWeekday(DayOfWeek targetWeekday, RecurringFrequencies rf)
        {
            if (rf == RecurringFrequencies.None)
            {
                return(Weekday.None);    // Or throw exception?
            }
            byte nextRecurringWeekday = (byte)targetWeekday.ToCustomWeekday();
            byte targetRF             = (byte)rf;

            while (nextRecurringWeekday <= 0x80)   // 0x80: Weekday.Unknown (exceeds the range of weekdays)
            {
                if ((nextRecurringWeekday & targetRF) == 0x00)
                {
                    // Rotate left shift (size: 7-bit)
                    nextRecurringWeekday = (byte)((nextRecurringWeekday << 1) | (nextRecurringWeekday >> 6));
                    continue;
                }
                else
                {
                    break;
                }
            }

            return((Weekday)nextRecurringWeekday);
        }
Пример #2
0
        private void ConvertRecurringFreqToBlocks(RecurringFrequencies rf)
        {
            byte temp = 0x1;
            byte brf  = (byte)rf;

            foreach (CheckBox chkbox in gridRecurringDate.Children)
            {
                if ((temp & brf) == 1)
                {
                    chkbox.IsChecked = true;
                }
                brf >>= 1;
            }
        }
Пример #3
0
        private string RecurringFrequencyToString(RecurringFrequencies f)
        {
            string retval = "";

            switch (f)
            {
            case RecurringFrequencies.Custom:
                retval = "Custom";
                break;

            case RecurringFrequencies.Daily:
                retval = "Daily";
                break;

            case RecurringFrequencies.EveryMonWedFri:
                retval = "Every Monday, Wednesday and Friday";
                break;

            case RecurringFrequencies.EveryTueThurs:
                retval = "Every Tuesday and Thursday";
                break;

            case RecurringFrequencies.EveryWeekday:
                retval = "Every Week Day (Mon - Fri)";
                break;

            case RecurringFrequencies.EveryWeekend:
                retval = "Every Weekend (Sat & Sun)";
                break;

            case RecurringFrequencies.Monthly:
                retval = "Every Month";
                break;

            case RecurringFrequencies.None:
                retval = "None";
                break;

            case RecurringFrequencies.Weekly:
                retval = "Every week";
                break;

            case RecurringFrequencies.Yearly:
                retval = "Every year";
                break;
            }
            return(retval);
        }
Пример #4
0
        public static List <DateTime> FindAllRecurringDate(IEvent target, DateTime ViewingDate, CalendarViewingMode mode)
        {
            List <DateTime>      result = new List <DateTime>();
            DateTime             rngb   = DateTime.MinValue; // beginning of range
            DateTime             rnge   = DateTime.MinValue; // ending of range
            RecurringFrequencies rf     = target.RecurringFrequency;

            switch (mode)
            {
            case CalendarViewingMode.Monthly:
                FindRangeOfMonth(ViewingDate, out rngb, out rnge);
                break;

            case CalendarViewingMode.Weekly:
                FindRangeOfWeek(ViewingDate, out rngb, out rnge);
                break;

            default:
                break;
            }

            // Target is not a recurring event
            if (target.RecurringFrequency == RecurringFrequencies.None)
            {
                if (target.OriginalBeginningTime > rngb && target.OriginalBeginningTime < rnge)
                {
                    result.Add(target.OriginalBeginningTime);
                }
                return(result);
            }

            if (target.ThisDayForwardOnly && target.OriginalBeginningTime > rnge)
            {
                return(result);
            }

            DateTime iter = target.ThisDayForwardOnly ? ((target.OriginalBeginningTime > rngb) ? target.OriginalBeginningTime : rngb) : rngb;

            for (; iter < rnge; iter = iter.AddDays(1))
            {
                if (((byte)iter.DayOfWeek.ToCustomWeekday() & (byte)rf) >= 1)
                {
                    result.Add(iter);
                }
            }

            return(result);
        }
Пример #5
0
        private RecurringFrequencies StringToRecurringFrequencies(string f)
        {
            RecurringFrequencies retval = RecurringFrequencies.None;

            if (f.Equals("Custom"))
            {
                retval = RecurringFrequencies.Custom;
            }
            if (f.Equals("Daily"))
            {
                retval = RecurringFrequencies.Daily;
            }
            if (f.Equals("Every Monday, Wednesday and Friday"))
            {
                retval = RecurringFrequencies.EveryMonWedFri;
            }
            if (f.Equals("Every Tuesday and Thursday"))
            {
                retval = RecurringFrequencies.EveryTueThurs;
            }
            if (f.Equals("Every Week Day (Mon - Fri)"))
            {
                retval = RecurringFrequencies.EveryWeekday;
            }
            if (f.Equals("Every Weekend (Sat & Sun)"))
            {
                retval = RecurringFrequencies.EveryWeekend;
            }
            if (f.Equals("Every Month"))
            {
                retval = RecurringFrequencies.Monthly;
            }
            if (f.Equals("Every week"))
            {
                retval = RecurringFrequencies.Weekly;
            }
            if (f.Equals("Every year"))
            {
                retval = RecurringFrequencies.Yearly;
            }
            if (f.Equals("None"))
            {
                retval = RecurringFrequencies.None;
            }
            return(retval);
        }
Пример #6
0
        private string RecurringFrequencyToString(RecurringFrequencies f)
        {
            string retval = "";

            switch (f)
            {
                case RecurringFrequencies.Custom:
                    retval = "Custom";
                    break;
                case RecurringFrequencies.Daily:
                    retval = "Daily";
                    break;
                case RecurringFrequencies.EveryMonWedFri:
                    retval = "Every Monday, Wednesday and Friday";
                    break;
                case RecurringFrequencies.EveryTueThurs:
                    retval = "Every Tuesday and Thursday";
                    break;
                case RecurringFrequencies.EveryWeekday:
                    retval = "Every Week Day (Mon - Fri)";
                    break;
                case RecurringFrequencies.EveryWeekend:
                    retval = "Every Weekend (Sat & Sun)";
                    break;
                case RecurringFrequencies.Monthly:
                    retval = "Every Month";
                    break;
                case RecurringFrequencies.None:
                    retval = "None";
                    break;
                case RecurringFrequencies.Weekly:
                    retval = "Every week";
                    break;
                case RecurringFrequencies.Yearly:
                    retval = "Every year";
                    break;
            }
            return retval;
        }
Пример #7
0
        private void ParseEventSetting()
        {
            string           eventName;
            int              rank;
            DateTime         beginningTime      = DateTime.MinValue;
            Queue <DateTime> beginningTimeQueue = new Queue <DateTime>();
            TimeSpan         duration           = TimeSpan.Zero;
            bool             autoDelete         = (chkAutoDelete.IsChecked == true) ? true : false;
            bool             thisDayForwardOnly = (chkThisDayForwardOnly.IsChecked == true) ? true : false;

            // EventName
            if (reEscChars.IsMatch(txtEventName.Text))
            {
                throw new Exception("Event name shoud not contain the following charaters: \\/:*?\"<>|");
            }
            eventName = txtEventName.Text.TrimEnd(' ');
            if (eventName.Length == 0)
            {
                throw new Exception("Event name should not be space.");
            }

            // Rank
            if (!reDigitOnly.IsMatch(txtRank.Text))
            {
                throw new Exception("Given value of \"Rank\" is invalid, it should contains digits only.");
            }
            rank = int.Parse(txtRank.Text);

            // Beginning time
            List <DateTime> dtList = new List <DateTime>();

            dtList.Add(dateTimePicker.Value.Value);
            foreach (Grid gd in spTimePickerList.Children)
            {
                TimePicker tp = gd.FindChild <TimePicker>();
                if (tp == null)
                {
                    continue;
                }

                // Get time component only (although formate of timePicker has been set as `DateTimeFormat.LongTime`,
                // we still have to prevent illegal input)
                DateTime dt = dateTimePicker.Value.Value.Date;  // get date only
                dtList.Add(dt.Add(tp.Value.Value.TimeOfDay));
            }

            dtList.Sort();
            foreach (DateTime dt in dtList)
            {
                beginningTimeQueue.Enqueue(dt);
            }

            // Duration
            if (chkSetDuration.IsChecked == true)
            {
                duration = timeSpanUpDown.Value.Value;
            }

            // Set recurring frequency
            RecurringFrequencies recurringFreq = 0;

            if (cmbRecurringFreq.SelectedItem.ToString() == RecurringFrequencies.Custom.ToString())
            {
                recurringFreq = ConvertBlocksToRecurringFreq();
            }
            else
            {
                recurringFreq = (RecurringFrequencies)cmbRecurringFreq.SelectedItem;
            }

            if (cmbTrackIndex.SelectedIndex == -1)
            {
                throw new Exception("No track is avalible in this playlist");
            }

            MultiTriggerEvent evnt = new MultiTriggerEvent(beginningTimeQueue)
            {
                EventText           = eventName,
                Rank                = rank,
                Duration            = duration,
                AutoDelete          = autoDelete,
                ThisDayForwardOnly  = thisDayForwardOnly,
                Enabled             = true, // let user set this while creating event?
                RecurringFrequency  = recurringFreq,
                IgnoreTimeComponent = true,
                ReadOnlyEvent       = false
            };

            evnt.ActionStartsEventArgs = new SchedulerEventArgs
            {
                PlaylistGUID = (cmbPlaylist.SelectedItem as Playlist).GUID,
                Command      = PlaybackCommands.Play,
                Mode         = (PlaybackMode)cmbPlaybackMode.SelectedItem,
                TrackIndex   = (int)cmbTrackIndex.SelectedItem
            };

            evnt.ActionEndsEventArgs = new SchedulerEventArgs
            {
                Command = PlaybackCommands.Stop
            };

            if (WindowMode == DisplayMode.Create)
            {
                NewEventIsCreatedEvent(evnt);
            }
            else if (WindowMode == DisplayMode.Edit)
            {
                evnt.CloneTo(evntToBeUpdated);
                UpdateEvent(evntToBeUpdated);
            }
        }