using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using ToDoApp.Context; using ToDoApp.Model; using ToDoApp.Service; using ToDoApp.SubControl; using ToDoApp.SubWindow; namespace ToDoApp { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private enum Mode { ToDo, Today, Planned, Completed, } private User _user; private Item _selectedItem; private Mode _currentMode; public MainWindow() { InitializeComponent(); if (!CheckDB()) { MessageBox.Show("데이터베이스가 정상적이지 않아 프로그램을 종료합니다."); Application.Current.Shutdown(); } if (CheckLogin() != true) { Application.Current.Shutdown(); } InitInstance(); } private void InitInstance() { tbName.Text = _user.Name; tbEmail.Text = _user.Email; _currentMode = Mode.ToDo; RefreshList(); } private bool CheckDB() { try { DbService.Instance.EnsureCreated(); return true; } catch (Exception ex) { return false; } } private bool? CheckLogin() { try { LoginWindow dlg = new LoginWindow(); bool? isOk = dlg.ShowDialog(); _user = dlg.User; return isOk; } catch (Exception ex) { return false; } } private void RefreshList() { string modeTitle = _currentMode.ToString(); List items = new List(); switch (_currentMode) { case Mode.ToDo: default: items = GetAllToDoItems(); break; case Mode.Today: items = GetTodayItems(); break; case Mode.Planned: items = GetPlannedItems(); break; case Mode.Completed: items = GetCompletedItems(); break; } tbTitle.Text = modeTitle; SetItemList(items); } private List GetAllToDoItems() { return ItemService.Instance.FindAllNotCompletedItems(_user.Id); } private List GetTodayItems() { return ItemService.Instance.FindTodayItems(_user.Id); } private List GetPlannedItems() { return ItemService.Instance.FindPlannedItems(_user.Id); } private List GetCompletedItems() { return ItemService.Instance.FindCompletedItems(_user.Id); } private void SetItemList(List items) { List list = new List(); foreach (Item item in items) { ToDoListItem toDoItem = new ToDoListItem(item); toDoItem.ItemUpdateHandler += ToDoItem_ItemUpdateHandler; toDoItem.ItemRemoveHandler += ToDoItem_ItemRemoveHandler; toDoItem.ItemListRefreshHandler += ToDoItem_ItemListRefreshHandler; list.Add(toDoItem); } lbxContent.ItemsSource = list; } private void ToDoItem_ItemListRefreshHandler(object? sender, EventArgs e) { RefreshList(); } private void ToDoItem_ItemRemoveHandler(object? sender, Item e) { ItemService.Instance.RemoveItem(e); } private void ToDoItem_ItemUpdateHandler(object? sender, Item e) { ItemService.Instance.UpdateItem(e); } private void SetSelectedItem(Item item) { _selectedItem = item; tbxItemName.Text = _selectedItem.Title; tbItemCreatedAt.Text = _selectedItem.CreateDate.ToString("yyyy년 MM월 dd일 ddd 생성됨"); chkItemToday.IsChecked = _selectedItem.IsToday == true ? true : false; dpItemDueDate.SelectedDate = _selectedItem.DueDate; tbxItemDescription.Text = _selectedItem.Description == null ? "" : _selectedItem.Description; } private void ClearSelectedItem() { _selectedItem = null; tbxItemName.Text = ""; tbItemCreatedAt.Text = ""; dpItemDueDate.SelectedDate = null; tbxItemDescription.Text = ""; } private void tbxSearch_KeyDown(object sender, KeyEventArgs e) { } private void btnUpdate_Click(object sender, RoutedEventArgs e) { if (_selectedItem == null) { Item newItem = new Item() { UserId = _user.Id, Title = tbxItemName.Text, IsToday = chkItemToday.IsChecked, DueDate = dpItemDueDate.SelectedDate, Description = tbxItemDescription.Text, }; ItemService.Instance.CreateItem(newItem); ClearSelectedItem(); } else { _selectedItem.Title = tbxItemName.Text; _selectedItem.IsToday = chkItemToday.IsChecked == true ? true : false; _selectedItem.DueDate = dpItemDueDate.SelectedDate; _selectedItem.Description = tbxItemDescription.Text; ItemService.Instance.UpdateItem(_selectedItem); } RefreshList(); } private void btnDelete_Click(object sender, RoutedEventArgs e) { if (_selectedItem == null) return; ItemService.Instance.RemoveItem(_selectedItem.Id); ClearSelectedItem(); RefreshList(); } private void tbxNewItem_KeyDown(object sender, KeyEventArgs e) { if (e.Key != Key.Enter) return; PlaceholderTextBox textBox = sender as PlaceholderTextBox; if (textBox == null || string.IsNullOrEmpty(textBox.Text)) return; Item newItem = new Item() { UserId = _user.Id, Title = textBox.Text, }; ItemService.Instance.CreateItem(newItem); textBox.Text = ""; RefreshList(); } private void lbxContent_SelectionChanged(object sender, SelectionChangedEventArgs e) { ToDoListItem toDoListItem = lbxContent.SelectedItem as ToDoListItem; if (toDoListItem == null) return; SetSelectedItem(toDoListItem.Item); } private void btnToday_Click(object sender, RoutedEventArgs e) { _currentMode = Mode.Today; RefreshList(); } private void btnPlanned_Click(object sender, RoutedEventArgs e) { _currentMode = Mode.Planned; RefreshList(); } private void btnCompleted_Click(object sender, RoutedEventArgs e) { _currentMode = Mode.Completed; RefreshList(); } private void btnToDo_Click(object sender, RoutedEventArgs e) { _currentMode = Mode.ToDo; RefreshList(); } } }