예제 #1
0
 /// <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;                             // флаг - приоритетное/не приоритетное
 }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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;
        }
예제 #4
0
        /// <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
        }
예제 #5
0
        /// <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;
        }
예제 #6
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;
            }
        }
예제 #7
0
 public void RemoveNote(KeyStruct noteDT)
 {
     this.Day.Remove(noteDT);
 }
예제 #8
0
 /// <summary>
 /// Добавляет запись в ежедневник
 /// </summary>
 /// <param name="noteDT">Дата и время записи</param>
 /// <param name="note">Запись</param>
 public void AddNote(KeyStruct noteDT, Note note)
 {
     this.Day.Add(noteDT, note);
 }