/// <summary> /// Конструктор создаёт новую запись ДЕЛО для заданных даты и времени /// </summary> /// <param name="displayDT">Дата и время отображения записи</param> /// <param name="title">Заголовок записи</param> /// <param name="text">Текст заметки</param> /// <param name="done">Флаг - сделано/не сделано</param> /// <param name="star">Флаг - приоритетное/не приоритетное</param> public Note(KeyStruct keyDT, string title, string text, bool done, bool star) { // Помним, что конструктор класса вызывается при первом создании экземпляра класса через new // Поэтому переменным память не выделена. Переменные не инициализированы CreateNote(keyDT, title, text); this.TypeOfNote = TypeOfNote.ToDo; // тип записи - дело this.Done = done; // флаг - сделано/не сделано this.Star = star; // флаг - приоритетное/не приоритетное }
/// <summary> /// Перемещает запись из указанной даты и с указанным ID в папку помойка /// </summary> /// <param name="id">Уникальный идентификатор записи</param> /// <param name="noteDT">Дата и время записи</param> public void RemoveNote(KeyStruct noteKeyDT) { Note noteToRemove = Organizer[noteKeyDT.Year][noteKeyDT.Month][noteKeyDT.Day].Day[noteKeyDT]; Organizer[noteKeyDT.Year][noteKeyDT.Month][noteKeyDT.Day].Day.Remove(noteKeyDT); Count--; TrashFolder.Add(noteToRemove); }
/// <summary> /// Редактирует текущую запись - меняет заголовок и текст /// </summary> /// <param name="keyDT">Ключ записи. Включает в себя дату и время записи</param> /// <param name="newTitle">Новый заголовок</param> /// <param name="newText">Новый текст</param> public void EditNoteContent(KeyStruct keyDT, string newTitle, string newText) { BaseNote noteToEdit = Organizer[keyDT.Year][keyDT.Month][keyDT.Day].Day[keyDT].noteStack.Peek(); noteToEdit.Title = newTitle; noteToEdit.Text = newText; Organizer[keyDT.Year][keyDT.Month][keyDT.Day].Day[keyDT].noteStack.Push(noteToEdit); SimpleDateTime changeDT = new SimpleDateTime(DateTime.Now); Organizer[keyDT.Year][keyDT.Month][keyDT.Day].Day[keyDT].ChangeDT = changeDT; }
/// <summary> /// Создаёт стек заметок, помещает туда общие для всех записей эл-ты: ID, заголовок и текст, /// дату отображения, дату создания. Устанавливает в минимальное значение даты изменения и удаления. /// </summary> /// <param name="id"></param> /// <param name="dt"></param> /// <param name="title"></param> /// <param name="text"></param> private void CreateNote(KeyStruct keyDT, string title, string text) { // Помним, что конструктор класса вызывается при первом создании экземпляра класса через new // Поэтому переменным память не выделена. Переменные не инициализированы this.noteStack = new Stack <BaseNote>(); // создаём стек заметок BaseNote newNote = new BaseNote(title, text); // создаём заметку. this.noteStack.Push(newNote); // помещаем заметку в стек // генерируется время this.DisplayDT = keyDT; // передаём уникальный ID и отображаемые дату и время заметки this.CreationDT = new SimpleDateTime(DateTime.Now); // Текущее значение даты и времени this.ChangeDT = new SimpleDateTime(DateTime.MinValue); // Значение по умлочанию 01.01.0001 00:00:00 this.DeleteDT = new SimpleDateTime(DateTime.MinValue); // Значение по умлочанию 01.01.0001 00:00:00 }
/// <summary> /// Конструктор создаёт новую запись СОБЫТИЕ в заданных дате и времени /// </summary> /// <param name="displayDT">Дата и время отображения записи</param> /// <param name="title">Заголовок записи</param> /// <param name="text">Текст заметки</param> /// <param name="wholeDay">true - whole day, false - в конкретное время</param> public Note(KeyStruct keyDT, string title, string text, bool wholeDay) { // Помним, что конструктор класса вызывается при первом создании экземпляра класса через new // Поэтому переменным память не выделена. Переменные не инициализированы CreateNote(keyDT, title, text); this.TypeOfNote = TypeOfNote.Event; // тип записи - событие this.WholeDay = wholeDay; // генерируется время // Т.к. DisplayDT - это структура-свойство класса Note, // т.е. доступ к ней через { get; set; }, // то полям этой структуры нельзя присвоить значения напрямую! // Поэтому создаём вспомогательную переменную tempDT KeyStruct tempDT = keyDT; // отображаемые дата и время заметки if (wholeDay) { // Если событие на весь день tempDT.Hour = 9; // То отображаем его с 9:00 утра tempDT.Min = 0; } this.DisplayDT = tempDT; }
/// <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; } }
public void RemoveNote(KeyStruct noteDT) { this.Day.Remove(noteDT); }
/// <summary> /// Добавляет запись в ежедневник /// </summary> /// <param name="noteDT">Дата и время записи</param> /// <param name="note">Запись</param> public void AddNote(KeyStruct noteDT, Note note) { this.Day.Add(noteDT, note); }