Skip to content

Commit

Permalink
fix: ClassIsland#387 修复在时间表顶部变更一个“课间休息”为“上课”时,整个课程表会向前错位的问题
Browse files Browse the repository at this point in the history
  • Loading branch information
HelloWRC committed Sep 30, 2024
1 parent e60db6e commit 0ac68ce
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 1 deletion.
12 changes: 11 additions & 1 deletion ClassIsland.Shared/Models/Profile/TimeLayout.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
public void InsertTimePoint(int index, TimeLayoutItem item)
{
Layouts.Insert(index, item);
NotifyTimeLayoutItemAdded(index, item);
}

internal void NotifyTimeLayoutItemAdded(int index, TimeLayoutItem item)
{
var ci = -1;
if (item.TimeType == 0)
{
Expand All @@ -80,12 +85,17 @@ public void InsertTimePoint(int index, TimeLayoutItem item)
public void RemoveTimePoint(TimeLayoutItem item)
{
var index = Layouts.IndexOf(item);
NotifyTimeLayoutItemRemoved(index, item);
Layouts.Remove(item);
}

internal void NotifyTimeLayoutItemRemoved(int index, TimeLayoutItem item)
{
var ci = -1;
if (item.TimeType == 0)
{
ci = (from i in Layouts where i.TimeType==0 select i).ToList().IndexOf(item);
}
Layouts.Remove(item);
LayoutItemChanged?.Invoke(this, new TimeLayoutUpdateEventArgs()
{
Action = NotifyCollectionChangedAction.Remove,
Expand Down
6 changes: 6 additions & 0 deletions ClassIsland.Shared/Models/Profile/TimeLayoutItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public DateTime StartSecond
{
if (value == _startSecond) return;
//EnsureTime(value, EndSecond);
OnPropertyChanging();
_startSecond = value;
OnPropertyChanged();
OnPropertyChanged(nameof(Last));
Expand All @@ -40,6 +41,7 @@ public DateTime EndSecond
set
{
if (value == _endSecond) return;
OnPropertyChanging();
//EnsureTime(StartSecond, value);
_endSecond = value;
OnPropertyChanged();
Expand Down Expand Up @@ -72,6 +74,7 @@ public int TimeType
set
{
if (value == _timeType) return;
OnPropertyChanging();
_timeType = value;
OnPropertyChanged();
}
Expand All @@ -86,6 +89,7 @@ public bool IsHideDefault
set
{
if (value == _isHideDefault) return;
OnPropertyChanging();
_isHideDefault = value;
OnPropertyChanged();
}
Expand All @@ -100,6 +104,7 @@ public string DefaultClassId
set
{
if (value == _defaultClassId) return;
OnPropertyChanging();
_defaultClassId = value;
OnPropertyChanged();
}
Expand All @@ -120,6 +125,7 @@ public string BreakName
set
{
if (_breakName == value) return;
OnPropertyChanging();
_breakName = value;
OnPropertyChanged();
OnPropertyChanged(nameof(BreakNameText));
Expand Down
12 changes: 12 additions & 0 deletions ClassIsland/ViewModels/ProfileSettingsViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public class ProfileSettingsViewModel : ObservableRecipient
private bool _isUpdatingClassInfoIndexInBackend = false;
private bool _isClassPlanEditComplete = false;
private bool _isWeekOffsetSettingsOpen = false;
private TimeLayoutItem? _previousTrackedTimeLayoutItem;

public object DrawerContent
{
Expand Down Expand Up @@ -280,4 +281,15 @@ public bool IsWeekOffsetSettingsOpen
OnPropertyChanged();
}
}

public TimeLayoutItem? PreviousTrackedTimeLayoutItem
{
get => _previousTrackedTimeLayoutItem;
set
{
if (Equals(value, _previousTrackedTimeLayoutItem)) return;
_previousTrackedTimeLayoutItem = value;
OnPropertyChanged();
}
}
}
54 changes: 54 additions & 0 deletions ClassIsland/Views/ProfileSettingsWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,61 @@ public ProfileSettingsWindow()
{
InitializeComponent();
DataContext = this;
ViewModel.PropertyChanged += ViewModelOnPropertyChanged;
ViewModel.PropertyChanging += ViewModelOnPropertyChanging;
}

private void ViewModelOnPropertyChanging(object? sender, PropertyChangingEventArgs e)
{

}

private void SelectedTimePointOnPropertyChanging(object? sender, PropertyChangingEventArgs e)
{
if (e.PropertyName != nameof(ViewModel.SelectedTimePoint.TimeType))
return;
NotifyTimePointChanged(true);
}

private void NotifyTimePointChanged(bool isRemove)
{
if (ViewModel.SelectedTimePoint == null)
return;
var timeLayout = ((KeyValuePair<string, TimeLayout>)ListViewTimeLayouts.SelectedItem).Value;
var index = timeLayout.Layouts.IndexOf(ViewModel.SelectedTimePoint);
if (index == -1)
return;
if (!isRemove){
timeLayout.NotifyTimeLayoutItemAdded(index, ViewModel.SelectedTimePoint);
}
else
{
timeLayout.NotifyTimeLayoutItemRemoved(index, ViewModel.SelectedTimePoint);
}
}

private void SelectedTimePointOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != nameof(ViewModel.SelectedTimePoint.TimeType))
return;
NotifyTimePointChanged(false);
}

private void ViewModelOnPropertyChanged(object? sender, PropertyChangedEventArgs e)
{
if (e.PropertyName != nameof(ViewModel.SelectedTimePoint))
return;
if (ViewModel.PreviousTrackedTimeLayoutItem != null)
{
ViewModel.PreviousTrackedTimeLayoutItem.PropertyChanged -= SelectedTimePointOnPropertyChanged;
ViewModel.PreviousTrackedTimeLayoutItem.PropertyChanging -= SelectedTimePointOnPropertyChanging;
}
if (ViewModel.SelectedTimePoint != null)
{
ViewModel.SelectedTimePoint.PropertyChanged += SelectedTimePointOnPropertyChanged;
ViewModel.SelectedTimePoint.PropertyChanging += SelectedTimePointOnPropertyChanging;
ViewModel.PreviousTrackedTimeLayoutItem = ViewModel.SelectedTimePoint;
}
}

public bool IsOpened
Expand Down

0 comments on commit 0ac68ce

Please sign in to comment.