Example #1
0
        /// <summary>
        /// Добавляет в ежедневник запись в конкретную дату и время, с заданными типом, заголовком и текстом.
        /// При добавлении генерирует уникальный ID записи.
        /// </summary>
        /// <param name="displayDT">Дата и время, в которое показана запись</param>
        /// <param name="title">Заголовок записи</param>
        /// <param name="text">Текст записи</param>
        /// <param name="typeOfNote">Тип записи - заметка, событие или дело</param>
        public void AddNote(SimpleDateTime displayDT, string title, string text,
                            TypeOfNote typeOfNote,
                            bool wDayOrDone,                                            // флаг весь день - событие, сделано - дело
                            bool star)                                                  // флаг приоритета для дела
        {
            short     currYear = displayDT.Year;
            sbyte     currMon  = displayDT.Month;
            sbyte     currDay  = displayDT.Day;
            DayClass  dayToAdd;
            KeyStruct keyDT;
            Note      newNote;

            // Проверка, выделена ли память для этой даты
            // Инициализирован ли год?
            if (!Organizer.ContainsKey(currYear))
            {
                YearClass yearToAdd = new YearClass(currYear);
                Organizer.Add(currYear, yearToAdd);
            }

            // Инициализирован ли месяц для этой даты?
            if (Organizer[currYear][currMon] == null)
            {
                Organizer[currYear].CreateMonth(currMon);
            }

            // Инициализирован ли день?
            if (Organizer[currYear][currMon][currDay] == null)
            {
                Organizer[currYear].CreateDay(currMon, currDay);                    // создаём новый день
                dayToAdd = Organizer[currYear][currMon][currDay];                   // присваиваем ради сокращения записи

                Count++;
                keyDT = new KeyStruct(displayDT, ++IDcounter);
                switch (typeOfNote)
                {
                case TypeOfNote.Note:
                    newNote = new Note(keyDT, title, text);
                    dayToAdd.AddNote(keyDT, newNote);
                    return;

                case TypeOfNote.Event:
                    newNote = new Note(keyDT, title, text, wDayOrDone);
                    dayToAdd.AddNote(keyDT, newNote);
                    return;

                case TypeOfNote.ToDo:
                    newNote = new Note(keyDT, title, text, wDayOrDone, star);
                    dayToAdd.AddNote(keyDT, newNote);
                    return;

                default:
                    Console.WriteLine("Unknown type of a record!!!");
                    break;
                }
            }

            // Если пришли сюда, значит в этом дне уже есть запись(и)
            dayToAdd = Organizer[currYear][currMon][currDay];

            // Существует ли уже запись с такими же временем, типом, заголовком, текстом?
            //
            // Если существует и полностью всё совпадает - то значит, мы просто ничего не добавляем
            // Если совпадает дата, но время отличается - добавляем
            // Если совпадает дата и время, но тип отличается - добавляем
            // Если совпадает дата и время, и тип, но заголовок и/или текст заметки оличается - добавляем
            // Если совпадает дата и время, и тип, и заголовок с текстом, - не добавляем.

            foreach (var e in dayToAdd.Day)
            {
                if (e.Value.DisplayDT.Hour == displayDT.Hour)              // Запись с таким временем
                {
                    if (e.Value.DisplayDT.Min == displayDT.Min)            // уже существует?
                    {
                        if (e.Value.TypeOfNote == typeOfNote)              // Тип совпадает?
                        {
                            if (e.Value.noteStack.Peek().Title == title)   // Заголовок и текст записи
                            {
                                if (e.Value.noteStack.Peek().Text == text) // совпадает?
                                {
                                    return;                                // ничего не добавляем!!! Такая заметка уже есть!!!
                                }
                            }
                        }
                    }
                }
            }
            // Специально сделал несколько  if-ов, а не составное выражение выр1 & выр2 & выр3
            // Потому что в логическом выражении вычисляются обе части выражения,
            // а сравнение текста - это оч. долго

            Count++;
            keyDT = new KeyStruct(displayDT, ++IDcounter);
            switch (typeOfNote)
            {
            case TypeOfNote.Note:
                newNote = new Note(keyDT, title, text);
                dayToAdd.AddNote(keyDT, newNote);
                return;

            case TypeOfNote.Event:
                newNote = new Note(keyDT, title, text, wDayOrDone);
                dayToAdd.AddNote(keyDT, newNote);
                return;

            case TypeOfNote.ToDo:
                newNote = new Note(keyDT, title, text, wDayOrDone, star);
                dayToAdd.AddNote(keyDT, newNote);
                return;
            }
        }
Example #2
0
 void UpdateNextNote(TypeOfNote note)
 {
     measureTriggers[(int)note] = true;
     measureCounter[(int)note]++;
     measureCounter[(int)note - 2] = 0;
 }
Example #3
0
 public void ChangeNoteType(TypeOfNote newType)
 {
     this.TypeOfNote = newType;
 }