|
@@ -11,243 +11,282 @@ using InABox.Configuration;
|
|
|
using InABox.Core;
|
|
|
using InABox.DynamicGrid;
|
|
|
using InABox.Wpf;
|
|
|
+using PRS.Shared;
|
|
|
|
|
|
-namespace PRSDesktop
|
|
|
+namespace PRSDesktop;
|
|
|
+
|
|
|
+
|
|
|
+public class TimesheetGlobalSettings : BaseObject, IGlobalConfigurationSettings
|
|
|
+{
|
|
|
+ public int PageSize { get; set; } = 5000;
|
|
|
+}
|
|
|
+
|
|
|
+/// <summary>
|
|
|
+/// Interaction logic for TimesheetPanel.xaml
|
|
|
+/// </summary>
|
|
|
+public partial class TimesheetPanel : UserControl, IPanel<TimeSheet>
|
|
|
{
|
|
|
+ private TimeSheetSettings _settings = new();
|
|
|
+ private TimesheetGlobalSettings _globalSettings = new();
|
|
|
|
|
|
- public class TimesheetGlobalSettings : BaseObject, IGlobalConfigurationSettings
|
|
|
+ public TimesheetPanel()
|
|
|
{
|
|
|
- public int PageSize { get; set; } = 5000;
|
|
|
+ Task[] setup = new Task[]
|
|
|
+ {
|
|
|
+ Task.Run(() => _settings = new UserConfiguration<TimeSheetSettings>().Load()),
|
|
|
+ Task.Run(() => _globalSettings = new GlobalConfiguration<TimesheetGlobalSettings>().Load())
|
|
|
+ };
|
|
|
+ InitializeComponent();
|
|
|
+ Task.WaitAll(setup);
|
|
|
}
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// Interaction logic for TimesheetPanel.xaml
|
|
|
- /// </summary>
|
|
|
- public partial class TimesheetPanel : UserControl, IPanel<TimeSheet>
|
|
|
+
|
|
|
+ public event DataModelUpdateEvent? OnUpdateDataModel;
|
|
|
+
|
|
|
+ public bool IsReady { get; set; }
|
|
|
+
|
|
|
+ public void Setup()
|
|
|
+ {
|
|
|
+ LoadSettings();
|
|
|
+ TimeSheets.Reconfigure();
|
|
|
+ TimeSheets.Refresh(true, false);
|
|
|
+ Notes.Refresh(true, true);
|
|
|
+ Assignments.Refresh(true, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void TimeSheets_OnReconfigure(DynamicGridOptions options)
|
|
|
+ {
|
|
|
+ options.PageSize = _globalSettings.PageSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Dictionary<string, object[]> Selected()
|
|
|
{
|
|
|
- private TimeSheetSettings _settings = new();
|
|
|
- private TimesheetGlobalSettings _globalSettings = new();
|
|
|
+ return new Dictionary<string, object[]> { { typeof(TimeSheet).EntityName(), TimeSheets.SelectedRows } };
|
|
|
+ }
|
|
|
+
|
|
|
+ public void Shutdown(CancelEventArgs? cancel)
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ public void CreateToolbarButtons(IPanelHost host)
|
|
|
+ {
|
|
|
+ HumanResourcesSetupActions.EmployeeActivities(host);
|
|
|
+ HumanResourcesSetupActions.EmployeeRosters(host);
|
|
|
+ host.CreateSetupSeparator();
|
|
|
+ HumanResourcesSetupActions.EmployeeOvertimeRules(host);
|
|
|
+ HumanResourcesSetupActions.EmployeeOvertime(host);
|
|
|
+ HumanResourcesSetupActions.EmployeeStandardLeave(host);
|
|
|
|
|
|
- public TimesheetPanel()
|
|
|
- {
|
|
|
- Task[] setup = new Task[]
|
|
|
+ host.CreateSetupSeparator();
|
|
|
+ host.CreateSetupAction(new PanelAction() { Caption = "Timesheets Settings", Image = PRSDesktop.Resources.product, OnExecute =
|
|
|
+ (obj) =>
|
|
|
{
|
|
|
- Task.Run(() => _settings = new UserConfiguration<TimeSheetSettings>().Load()),
|
|
|
- Task.Run(() => _globalSettings = new GlobalConfiguration<TimesheetGlobalSettings>().Load())
|
|
|
- };
|
|
|
- InitializeComponent();
|
|
|
- Task.WaitAll(setup);
|
|
|
- }
|
|
|
+ var grid = new DynamicItemsListGrid<TimesheetGlobalSettings>();
|
|
|
+ if (grid.EditItems(new TimesheetGlobalSettings[] { _globalSettings }))
|
|
|
+ {
|
|
|
+ new GlobalConfiguration<TimesheetGlobalSettings>().Save(_globalSettings);
|
|
|
+ TimeSheets.Reconfigure();
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
- public event DataModelUpdateEvent? OnUpdateDataModel;
|
|
|
+ host.CreatePanelAction(new PanelAction() { Caption = "Process Leave", Image = PRSDesktop.Resources.leave, OnExecute = ProcessLeave });
|
|
|
|
|
|
- public bool IsReady { get; set; }
|
|
|
+ PostUtils.CreateToolbarButtons(host,
|
|
|
+ () => (DataModel(Selection.Selected) as IDataModel<TimeSheet>)!,
|
|
|
+ () => TimeSheets.Refresh(false, true),
|
|
|
+ true);
|
|
|
+ }
|
|
|
|
|
|
- public void Setup()
|
|
|
- {
|
|
|
- LoadSettings();
|
|
|
- TimeSheets.Reconfigure();
|
|
|
- TimeSheets.Refresh(true, false);
|
|
|
- }
|
|
|
+ private void ProcessLeave(PanelAction obj)
|
|
|
+ {
|
|
|
+ var processor = new TimeSheetLeaveProcessor(StartPicker.SelectedDate.Value, EndPicker.SelectedDate.Value);
|
|
|
+ if (processor.ShowDialog() == true)
|
|
|
+ TimeSheets.Refresh(false, true);
|
|
|
+ }
|
|
|
|
|
|
- private void TimeSheets_OnReconfigure(DynamicGridOptions options)
|
|
|
- {
|
|
|
- options.PageSize = _globalSettings.PageSize;
|
|
|
- }
|
|
|
+ public string SectionName => "Timesheets";
|
|
|
|
|
|
- public Dictionary<string, object[]> Selected()
|
|
|
- {
|
|
|
- return new Dictionary<string, object[]> { { typeof(TimeSheet).EntityName(), TimeSheets.SelectedRows } };
|
|
|
- }
|
|
|
+ public DataModel DataModel(Selection selection)
|
|
|
+ {
|
|
|
+ var ids = TimeSheets.ExtractValues(x => x.ID, selection).ToArray();
|
|
|
+ return new BaseDataModel<TimeSheet>(new Filter<TimeSheet>(x => x.ID).InList(ids.ToArray()));
|
|
|
+ }
|
|
|
|
|
|
- public void Shutdown(CancelEventArgs? cancel)
|
|
|
+ private void TimeSheets_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
|
|
|
+ {
|
|
|
+ if(e.Rows is null || e.Rows.Length != 1)
|
|
|
{
|
|
|
- }
|
|
|
+ Notes.EmployeeID = Guid.Empty;
|
|
|
+ Assignments.EmployeeID = Guid.Empty;
|
|
|
|
|
|
- public void CreateToolbarButtons(IPanelHost host)
|
|
|
- {
|
|
|
- HumanResourcesSetupActions.EmployeeActivities(host);
|
|
|
- HumanResourcesSetupActions.EmployeeRosters(host);
|
|
|
- host.CreateSetupSeparator();
|
|
|
- HumanResourcesSetupActions.EmployeeOvertimeRules(host);
|
|
|
- HumanResourcesSetupActions.EmployeeOvertime(host);
|
|
|
- HumanResourcesSetupActions.EmployeeStandardLeave(host);
|
|
|
-
|
|
|
- host.CreateSetupSeparator();
|
|
|
- host.CreateSetupAction(new PanelAction() { Caption = "Timesheets Settings", Image = PRSDesktop.Resources.product, OnExecute =
|
|
|
- (obj) =>
|
|
|
- {
|
|
|
- var grid = new DynamicItemsListGrid<TimesheetGlobalSettings>();
|
|
|
- if (grid.EditItems(new TimesheetGlobalSettings[] { _globalSettings }))
|
|
|
- {
|
|
|
- new GlobalConfiguration<TimesheetGlobalSettings>().Save(_globalSettings);
|
|
|
- TimeSheets.Reconfigure();
|
|
|
- Refresh();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- host.CreatePanelAction(new PanelAction() { Caption = "Process Leave", Image = PRSDesktop.Resources.leave, OnExecute = ProcessLeave });
|
|
|
-
|
|
|
- PostUtils.CreateToolbarButtons(host,
|
|
|
- () => (DataModel(Selection.Selected) as IDataModel<TimeSheet>)!,
|
|
|
- () => TimeSheets.Refresh(false, true),
|
|
|
- true);
|
|
|
+ Notes.Refresh(false, true);
|
|
|
+ Assignments.Refresh(false, true);
|
|
|
}
|
|
|
-
|
|
|
- private void ProcessLeave(PanelAction obj)
|
|
|
+ else
|
|
|
{
|
|
|
- var processor = new TimeSheetLeaveProcessor(StartPicker.SelectedDate.Value, EndPicker.SelectedDate.Value);
|
|
|
- if (processor.ShowDialog() == true)
|
|
|
- TimeSheets.Refresh(false, true);
|
|
|
+ var item = e.Rows[0].ToObject<TimeSheet>();
|
|
|
+ Notes.EmployeeID = item.EmployeeLink.ID;
|
|
|
+ Notes.Date = item.Date.Date;
|
|
|
+ Assignments.EmployeeID = item.EmployeeLink.ID;
|
|
|
+ Assignments.Date = item.Date.Date;
|
|
|
+
|
|
|
+ Notes.Refresh(false, true);
|
|
|
+ Assignments.Refresh(false, true);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- public string SectionName => "Timesheets";
|
|
|
+ public void Refresh()
|
|
|
+ {
|
|
|
+ TimeSheets.StartDate = StartPicker.SelectedDate.Value;
|
|
|
|
|
|
- public DataModel DataModel(Selection selection)
|
|
|
- {
|
|
|
- var ids = TimeSheets.ExtractValues(x => x.ID, selection).ToArray();
|
|
|
- return new BaseDataModel<TimeSheet>(new Filter<TimeSheet>(x => x.ID).InList(ids.ToArray()));
|
|
|
- }
|
|
|
+ if (FutureTimes.IsChecked == true)
|
|
|
+ TimeSheets.EndDate = EndPicker.SelectedDate.Value;
|
|
|
+ else
|
|
|
+ TimeSheets.EndDate = EndPicker.SelectedDate.Value > DateTime.Today ? DateTime.Today : EndPicker.SelectedDate.Value;
|
|
|
|
|
|
- public void Refresh()
|
|
|
- {
|
|
|
- TimeSheets.StartDate = StartPicker.SelectedDate.Value;
|
|
|
+ TimeSheets.Search = Search.Text;
|
|
|
|
|
|
- if (FutureTimes.IsChecked == true)
|
|
|
- TimeSheets.EndDate = EndPicker.SelectedDate.Value;
|
|
|
- else
|
|
|
- TimeSheets.EndDate = EndPicker.SelectedDate.Value > DateTime.Today ? DateTime.Today : EndPicker.SelectedDate.Value;
|
|
|
+ TimeSheets.ApprovedOnly = ApprovedTimes.IsChecked == true;
|
|
|
|
|
|
- TimeSheets.Search = Search.Text;
|
|
|
+ TimeSheets.Refresh(false, true);
|
|
|
+ Notes.Refresh(false, true);
|
|
|
+ Assignments.Refresh(false, true);
|
|
|
+ }
|
|
|
|
|
|
- TimeSheets.ApprovedOnly = ApprovedTimes.IsChecked == true;
|
|
|
+ public void Heartbeat(TimeSpan time)
|
|
|
+ {
|
|
|
+ }
|
|
|
|
|
|
- TimeSheets.Refresh(false, true);
|
|
|
- }
|
|
|
+ private void LoadSettings()
|
|
|
+ {
|
|
|
+ _settings = new UserConfiguration<TimeSheetSettings>().Load();
|
|
|
+ StartPicker.SelectedDate = _settings.StartDate;
|
|
|
+ EndPicker.SelectedDate = _settings.EndDate;
|
|
|
+ View.SelectedIndex = _settings.View;
|
|
|
+ UpdateStartFinishDates();
|
|
|
+ FutureTimes.IsChecked = _settings.FutureTimes;
|
|
|
+ ApprovedTimes.IsChecked = _settings.ApprovedOnly;
|
|
|
+
|
|
|
+ SplitPanel.AnchorWidth = _settings.AnchorWidth;
|
|
|
+ SplitPanel.View = _settings.ViewType.ToSplitPanelView();
|
|
|
+ }
|
|
|
|
|
|
- public void Heartbeat(TimeSpan time)
|
|
|
+ private void SaveSettings()
|
|
|
+ {
|
|
|
+ if (IsReady)
|
|
|
{
|
|
|
+ _settings.View = View.SelectedIndex;
|
|
|
+ _settings.StartDate = StartPicker.SelectedDate.HasValue ? StartPicker.SelectedDate.Value : DateTime.Today;
|
|
|
+ _settings.EndDate = EndPicker.SelectedDate.HasValue ? EndPicker.SelectedDate.Value : DateTime.Today;
|
|
|
+ _settings.FutureTimes = FutureTimes.IsChecked == true;
|
|
|
+ _settings.ApprovedOnly = ApprovedTimes.IsChecked == true;
|
|
|
+
|
|
|
+ _settings.AnchorWidth = SplitPanel.AnchorWidth;
|
|
|
+ _settings.ViewType = SplitPanel.View.ToScreenViewType();
|
|
|
+
|
|
|
+ new UserConfiguration<TimeSheetSettings>().Save(_settings);
|
|
|
}
|
|
|
+ }
|
|
|
+ private void UpdateStartEndPicker(DateTime start, DateTime end)
|
|
|
+ {
|
|
|
+ if (StartPicker == null || EndPicker == null)
|
|
|
+ return;
|
|
|
+
|
|
|
+ StartPicker.IsEnabled = false;
|
|
|
+ EndPicker.IsEnabled = false;
|
|
|
+ StartPicker.SelectedDate = start;
|
|
|
+ EndPicker.SelectedDate = end;
|
|
|
+ }
|
|
|
|
|
|
- private void LoadSettings()
|
|
|
+ private void View_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
+ {
|
|
|
+ UpdateStartFinishDates();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void UpdateStartFinishDates()
|
|
|
+ {
|
|
|
+ if (View.SelectedIndex == 0)
|
|
|
{
|
|
|
- _settings = new UserConfiguration<TimeSheetSettings>().Load();
|
|
|
- StartPicker.SelectedDate = _settings.StartDate;
|
|
|
- EndPicker.SelectedDate = _settings.EndDate;
|
|
|
- View.SelectedIndex = _settings.View;
|
|
|
- UpdateStartFinishDates();
|
|
|
- FutureTimes.IsChecked = _settings.FutureTimes;
|
|
|
- ApprovedTimes.IsChecked = _settings.ApprovedOnly;
|
|
|
+ UpdateStartEndPicker(DateTime.Today, DateTime.Today);
|
|
|
}
|
|
|
-
|
|
|
- private void SaveSettings()
|
|
|
+ else if (View.SelectedIndex == 1)
|
|
|
{
|
|
|
- if (IsReady)
|
|
|
- {
|
|
|
- _settings.View = View.SelectedIndex;
|
|
|
- _settings.StartDate = StartPicker.SelectedDate.HasValue ? StartPicker.SelectedDate.Value : DateTime.Today;
|
|
|
- _settings.EndDate = EndPicker.SelectedDate.HasValue ? EndPicker.SelectedDate.Value : DateTime.Today;
|
|
|
- _settings.FutureTimes = FutureTimes.IsChecked == true;
|
|
|
- _settings.ApprovedOnly = ApprovedTimes.IsChecked == true;
|
|
|
- new UserConfiguration<TimeSheetSettings>().Save(_settings);
|
|
|
- }
|
|
|
+ UpdateStartEndPicker(DateTime.Today.AddDays(0 - 1), DateTime.Today.AddDays(0 - 1));
|
|
|
}
|
|
|
- private void UpdateStartEndPicker(DateTime start, DateTime end)
|
|
|
+ else if (View.SelectedIndex == 2)
|
|
|
{
|
|
|
- if (StartPicker == null || EndPicker == null)
|
|
|
- return;
|
|
|
-
|
|
|
- StartPicker.IsEnabled = false;
|
|
|
- EndPicker.IsEnabled = false;
|
|
|
- StartPicker.SelectedDate = start;
|
|
|
- EndPicker.SelectedDate = end;
|
|
|
+ UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(1),
|
|
|
+ DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(7));
|
|
|
}
|
|
|
-
|
|
|
- private void View_SelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
|
+ else if (View.SelectedIndex == 3)
|
|
|
{
|
|
|
- UpdateStartFinishDates();
|
|
|
+ UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(0 - 6),
|
|
|
+ DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek));
|
|
|
}
|
|
|
-
|
|
|
- private void UpdateStartFinishDates()
|
|
|
+ else if (View.SelectedIndex == 4)
|
|
|
{
|
|
|
- if (View.SelectedIndex == 0)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(DateTime.Today, DateTime.Today);
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 1)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(DateTime.Today.AddDays(0 - 1), DateTime.Today.AddDays(0 - 1));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 2)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(1),
|
|
|
- DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(7));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 3)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(0 - 6),
|
|
|
- DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 4)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1),
|
|
|
- new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(1).AddDays(0 - 1));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 5)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(0 - 1),
|
|
|
- new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(0 - 1));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 6)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1), new DateTime(DateTime.Today.Year, 1, 1).AddYears(1).AddDays(0 - 1));
|
|
|
- }
|
|
|
- else if (View.SelectedIndex == 7)
|
|
|
- {
|
|
|
- UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1).AddYears(0 - 1), new DateTime(DateTime.Today.Year, 1, 1).AddDays(0 - 1));
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- StartPicker.IsEnabled = true;
|
|
|
- EndPicker.IsEnabled = true;
|
|
|
- }
|
|
|
-
|
|
|
- if (!IsReady)
|
|
|
- return;
|
|
|
- SaveSettings();
|
|
|
- Refresh();
|
|
|
+ UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1),
|
|
|
+ new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(1).AddDays(0 - 1));
|
|
|
}
|
|
|
-
|
|
|
- private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
|
|
|
+ else if (View.SelectedIndex == 5)
|
|
|
{
|
|
|
- if (!StartPicker.IsEnabled || !EndPicker.IsEnabled || !IsReady)
|
|
|
- return;
|
|
|
- SaveSettings();
|
|
|
- Refresh();
|
|
|
+ UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(0 - 1),
|
|
|
+ new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(0 - 1));
|
|
|
}
|
|
|
-
|
|
|
- private void Search_KeyUp(object sender, KeyEventArgs e)
|
|
|
+ else if (View.SelectedIndex == 6)
|
|
|
{
|
|
|
- if (e.Key == Key.Enter || e.Key == Key.Return)
|
|
|
- Refresh();
|
|
|
+ UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1), new DateTime(DateTime.Today.Year, 1, 1).AddYears(1).AddDays(0 - 1));
|
|
|
}
|
|
|
-
|
|
|
- private void FutureTimes_Checked(object sender, RoutedEventArgs e)
|
|
|
+ else if (View.SelectedIndex == 7)
|
|
|
{
|
|
|
- if (!IsReady)
|
|
|
- return;
|
|
|
- SaveSettings();
|
|
|
- Refresh();
|
|
|
+ UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1).AddYears(0 - 1), new DateTime(DateTime.Today.Year, 1, 1).AddDays(0 - 1));
|
|
|
}
|
|
|
-
|
|
|
- private void ApprovedTimes_Checked(object sender, RoutedEventArgs e)
|
|
|
+ else
|
|
|
{
|
|
|
- if (!IsReady)
|
|
|
- return;
|
|
|
- SaveSettings();
|
|
|
- Refresh();
|
|
|
+ StartPicker.IsEnabled = true;
|
|
|
+ EndPicker.IsEnabled = true;
|
|
|
}
|
|
|
+
|
|
|
+ if (!IsReady)
|
|
|
+ return;
|
|
|
+ SaveSettings();
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
|
|
|
+ {
|
|
|
+ if (!StartPicker.IsEnabled || !EndPicker.IsEnabled || !IsReady)
|
|
|
+ return;
|
|
|
+ SaveSettings();
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Search_KeyUp(object sender, KeyEventArgs e)
|
|
|
+ {
|
|
|
+ if (e.Key == Key.Enter || e.Key == Key.Return)
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void FutureTimes_Checked(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ if (!IsReady)
|
|
|
+ return;
|
|
|
+ SaveSettings();
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void ApprovedTimes_Checked(object sender, RoutedEventArgs e)
|
|
|
+ {
|
|
|
+ if (!IsReady)
|
|
|
+ return;
|
|
|
+ SaveSettings();
|
|
|
+ Refresh();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
|
|
|
+ {
|
|
|
+ SaveSettings();
|
|
|
}
|
|
|
}
|