/// <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; } }
void UpdateNextNote(TypeOfNote note) { measureTriggers[(int)note] = true; measureCounter[(int)note]++; measureCounter[(int)note - 2] = 0; }
public void ChangeNoteType(TypeOfNote newType) { this.TypeOfNote = newType; }