Files
HFUTCourseSimulation/HFUTCourseSimulation/Kernel/Data/Ui.cs

207 lines
7.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
namespace HFUTCourseSimulation.Kernel.Data.Ui {
public class Semester : INotifyPropertyChanged {
public Semester(Storage.Semester rhs) {
_startDate = rhs.StartDate;
_weekCount = rhs.WeekCount;
_indexCount = rhs.IndexCount;
_breakfastAt = rhs.BreakfastAt;
_lunchAt = rhs.LunchAt;
_dinnerAt = rhs.DinnerAt;
_courses = new ObservableCollection<Course>(rhs.Courses.Select((item) => new Course(item)));
}
public Storage.Semester ToStorage() {
return new Storage.Semester() {
StartDate = _startDate,
WeekCount = _weekCount,
IndexCount = _indexCount,
BreakfastAt = _breakfastAt,
LunchAt = _lunchAt,
DinnerAt = _dinnerAt,
Courses = _courses.Select((item) => item.ToStorage()).ToList()
};
}
private DateTime _startDate;
private string _weekCount;
private string _indexCount;
private string _breakfastAt;
private string _lunchAt;
private string _dinnerAt;
private ObservableCollection<Course> _courses;
public DateTime StartDate {
get { return _startDate; }
set { _startDate = value; OnPropertyChanged(nameof(StartDate)); }
}
public string WeekCount {
get { return _weekCount; }
set { _weekCount = value; OnPropertyChanged(nameof(WeekCount)); }
}
public string IndexCount {
get { return _indexCount; }
set { _indexCount = value; OnPropertyChanged(nameof(IndexCount)); }
}
public string BreakfastAt {
get { return _breakfastAt; }
set { _breakfastAt = value; OnPropertyChanged(nameof(BreakfastAt)); }
}
public string LunchAt {
get { return _lunchAt; }
set { _lunchAt = value; OnPropertyChanged(nameof(LunchAt)); }
}
public string DinnerAt {
get { return _dinnerAt; }
set { _dinnerAt = value; OnPropertyChanged(nameof(DinnerAt)); }
}
public ObservableCollection<Course> Courses {
get { return _courses; }
set { _courses = value; OnPropertyChanged(nameof(Courses)); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
public class Course : INotifyPropertyChanged {
public Course(Storage.Course rhs) {
_name = rhs.Name;
_description = rhs.Description;
_color = new ColorPair(rhs.Color);
_schedules = new ObservableCollection<Schedule>(rhs.Schedules.Select((item) => new Schedule(item)));
SubscribeScheduleChanges();
}
public Storage.Course ToStorage() {
return new Storage.Course() {
Name = _name,
Description = _description,
Color = _color.ToStorage(),
Schedules = _schedules.Select((item) => item.ToStorage()).ToList()
};
}
private string _name;
private string _description;
private ColorPair _color;
private ObservableCollection<Schedule> _schedules;
public string Name {
get { return _name; }
set { _name = value; OnPropertyChanged(nameof(Name)); }
}
public string Description {
get { return _description; }
set { _description = value; OnPropertyChanged(nameof(Description)); }
}
public ColorPair Color {
get { return _color; }
set { _color = value; OnPropertyChanged(nameof(Color)); }
}
public ObservableCollection<Schedule> Schedules {
get { return _schedules; }
set {
// Common codes
_schedules = value;
OnPropertyChanged(nameof(Schedule));
// We also need register a event for the change of this list,
// because showcase schedules need it.
SubscribeScheduleChanges();
}
}
public string ShowcaseSchedules => $"共计{_schedules.Count}个课程安排";
/// <summary>
/// 用于订阅Schedules集合改变的通知用于通知ShowcaseSchedules的改变。
/// </summary>
protected void SubscribeScheduleChanges() {
_schedules.CollectionChanged += (sender, e) => {
OnPropertyChanged(nameof(ShowcaseSchedules));
};
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
public class Schedule : INotifyPropertyChanged {
public Schedule(Storage.Schedule rhs) {
_week = rhs.Week;
_day = rhs.Day;
_index = rhs.Index;
}
public Storage.Schedule ToStorage() {
return new Storage.Schedule() {
Week = _week,
Day = _day,
Index = _index
};
}
private string _week;
private string _day;
private string _index;
public string Week {
get { return _week; }
set { _week = value; OnPropertyChanged(nameof(Week)); }
}
public string Day {
get { return _day; }
set { _day = value; OnPropertyChanged(nameof(Day)); }
}
public string Index {
get { return _index; }
set { _index = value; OnPropertyChanged(nameof(Index)); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
public class ColorPair : INotifyPropertyChanged {
public ColorPair(Storage.ColorPair rhs) {
_foreground = rhs.Foreground;
_background = rhs.Background;
}
public Storage.ColorPair ToStorage() {
return new Storage.ColorPair() {
Foreground = _foreground,
Background = _background
};
}
private Color _foreground;
private Color _background;
public Color Foreground {
get { return _foreground; }
set { _foreground = value; OnPropertyChanged(nameof(Foreground)); }
}
public Color Background {
get { return _background; }
set { _background = value; OnPropertyChanged(nameof(Background)); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name = null) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
}