Skip to content
This repository was archived by the owner on Oct 3, 2022. It is now read-only.

Commit 4c4245d

Browse files
authored
Merge pull request #24 from BinderDyn/paging
Paging
2 parents e6b5375 + 51654e1 commit 4c4245d

File tree

14 files changed

+275
-35
lines changed

14 files changed

+275
-35
lines changed
60 Bytes
Binary file not shown.

.vs/TakeMyTime.NETCore/v16/.suo

7.5 KB
Binary file not shown.

TakeMyTime.WPF/Assignments/AssignmentOverview.xaml

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<RowDefinition Height="70"></RowDefinition>
1616
<RowDefinition Height="*"></RowDefinition>
1717
<RowDefinition Height="70"></RowDefinition>
18+
<RowDefinition Height="70"></RowDefinition>
1819
</Grid.RowDefinitions>
1920
<Grid.ColumnDefinitions>
2021
</Grid.ColumnDefinitions>
@@ -115,9 +116,7 @@
115116
Visibility="Visible"
116117
SelectionMode="Single"
117118
MouseDoubleClick="lv_Assignments_MouseDoubleClick"
118-
SelectionChanged="lv_Assignments_SelectionChanged"
119-
ScrollViewer.VerticalScrollBarVisibility="Visible"
120-
ScrollViewer.CanContentScroll="True">
119+
SelectionChanged="lv_Assignments_SelectionChanged">
121120
<ListView.View>
122121
<GridView>
123122
<GridViewColumn
@@ -203,8 +202,22 @@
203202
</GridView>
204203
</ListView.View>
205204
</ListView>
205+
<Border Grid.Row="2">
206+
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
207+
<Button x:Name="btn_PagingBack" Background="Black" Click="btn_PagingBack_Click">
208+
<materialDesign:PackIcon Kind="ArrowLeft"></materialDesign:PackIcon>
209+
</Button>
210+
<Button x:Name="btn_CurrentPage" IsEnabled="False" Background="Black" Foreground="White">
211+
</Button>
212+
<Button x:Name="btn_PagingForward" Background="Black" Click="btn_PagingForward_Click">
213+
<materialDesign:PackIcon Kind="ArrowRight"></materialDesign:PackIcon>
214+
</Button>
215+
<Button x:Name="btn_allPages" Background="Black" IsEnabled="False">
216+
</Button>
217+
</StackPanel>
218+
</Border>
206219
<StackPanel
207-
Grid.Row="2"
220+
Grid.Row="3"
208221
Orientation="Horizontal"
209222
HorizontalAlignment="Center">
210223
<Button x:Name="btn_SetDone"

TakeMyTime.WPF/Assignments/AssignmentOverview.xaml.cs

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public partial class AssignmentOverview : Page
3131
public AssignmentOverview()
3232
{
3333
InitializeComponent();
34+
this.PagingManager = new PagingManager<AssignmentViewModel>(15);
3435
this.Load();
36+
this.RefreshBindings(1);
3537
}
3638

3739
private void Load()
@@ -40,23 +42,29 @@ private void Load()
4042
var projectLogic = new ProjectLogic();
4143
this.AssignmentViewModels = assignmentLogic.GetAllAssignments().Select(a => new AssignmentViewModel(a));
4244
this.FilteredAssignmentViewModels = this.AssignmentViewModels.ToList();
45+
this.PagingManager.Data = this.FilteredAssignmentViewModels.ToList();
4346
this.ProjectViewModels = projectLogic.GetAllProjects()
4447
.Where(p => p.ProjectStatus == EnumDefinition.ProjectStatus.Active)
4548
.Select(p => new Projects.ProjectViewModel(p)).ToList();
4649
string projectAllSelectItemName = ResourceStringManager.GetResourceByKey("ProjectsAll");
4750
this.ProjectViewModels.Insert(0, new Projects.ProjectViewModel { Name = projectAllSelectItemName, Id = 0 });
4851
this.LoadFromAllProjects = true;
49-
this.lv_Assignments.ItemsSource = this.FilteredAssignmentViewModels;
52+
this.lv_Assignments.ItemsSource = this.PagingManager.Page(this.PagingManager.CurrentPage);
5053
this.cb_ProjectSelection.ItemsSource = this.ProjectViewModels;
5154
this.cb_ProjectSelection.SelectedItem = this.ProjectViewModels.FirstOrDefault(p => p.Id == 0);
5255
this.cb_StatusFilter.SelectedItem = this.cbi_All;
5356
}
5457

5558
#region GUI Events
5659

57-
private void RefreshBindings()
60+
private void RefreshBindings(int page)
5861
{
59-
this.lv_Assignments.ItemsSource = this.FilteredAssignmentViewModels;
62+
this.PagingManager.Data = this.FilteredAssignmentViewModels.ToList();
63+
this.lv_Assignments.ItemsSource = this.PagingManager.Page(page);
64+
this.btn_CurrentPage.Content = this.PagingManager.CurrentPage;
65+
this.btn_allPages.Content = this.PagingManager.MaxPage;
66+
this.btn_PagingForward.IsEnabled = this.PagingManager.CanPageForward;
67+
this.btn_PagingBack.IsEnabled = this.PagingManager.CanPageBack;
6068
}
6169

6270
private void btn_NewAssignment_Click(object sender, RoutedEventArgs e)
@@ -85,6 +93,7 @@ private void ShowAddAssignmentDialog(bool editMode)
8593

8694
addAssignmentWindow.ShowDialog();
8795
this.Load();
96+
this.RefreshBindings(this.PagingManager.CurrentPage);
8897
}
8998

9099
private void btn_EditAssignment_Click(object sender, RoutedEventArgs e)
@@ -112,6 +121,7 @@ private void btn_SetDone_Click(object sender, RoutedEventArgs e)
112121
assignmentLogic.SetDone(this.SelectedAssignment.Id);
113122
assignmentLogic.Dispose();
114123
this.Load();
124+
this.RefreshBindings(this.PagingManager.CurrentPage);
115125
}
116126
catch (CannotChangeStatusException ex)
117127
{
@@ -132,6 +142,7 @@ private void btn_SetAborted_Click(object sender, RoutedEventArgs e)
132142
assignmentLogic.SetAborted(this.SelectedAssignment.Id);
133143
assignmentLogic.Dispose();
134144
this.Load();
145+
this.RefreshBindings(this.PagingManager.CurrentPage);
135146
}
136147
catch (CannotChangeStatusException ex)
137148
{
@@ -169,7 +180,7 @@ private void cb_ProjectSelection_SelectionChanged(object sender, SelectionChange
169180
}
170181

171182
this.btn_NewAssignment.IsEnabled = this.SelectedProject != null && this.SelectedProject.Id != 0;
172-
RefreshBindings();
183+
RefreshBindings(this.PagingManager.CurrentPage);
173184
}
174185

175186
[Refactor]
@@ -205,7 +216,7 @@ private void cb_StatusFilter_SelectionChanged(object sender, SelectionChangedEve
205216
}
206217
this.SelectedFilter = selectedFilter;
207218
}
208-
RefreshBindings();
219+
RefreshBindings(this.PagingManager.CurrentPage);
209220
}
210221

211222
private void lv_Assignments_SelectionChanged(object sender, SelectionChangedEventArgs e)
@@ -241,6 +252,7 @@ private void btn_DeleteAssignment_Click(object sender, RoutedEventArgs e)
241252
assignmentLogic.DeleteAssignment(this.SelectedAssignment.Id);
242253
assignmentLogic.Dispose();
243254
this.Load();
255+
this.RefreshBindings(this.PagingManager.CurrentPage);
244256
}
245257
catch (Exception ex)
246258
{
@@ -249,6 +261,16 @@ private void btn_DeleteAssignment_Click(object sender, RoutedEventArgs e)
249261
}
250262
}
251263

264+
private void btn_PagingBack_Click(object sender, RoutedEventArgs e)
265+
{
266+
this.RefreshBindings(this.PagingManager.CurrentPage - 1);
267+
}
268+
269+
private void btn_PagingForward_Click(object sender, RoutedEventArgs e)
270+
{
271+
this.RefreshBindings(this.PagingManager.CurrentPage + 1);
272+
}
273+
252274
#endregion
253275

254276
#region Utility
@@ -285,10 +307,12 @@ private void ShowErrorOnStatusChangeDialog()
285307
public Projects.ProjectViewModel SelectedProject { get; set; }
286308
public AssignmentViewModel SelectedAssignment { get; set; }
287309
public bool LoadFromAllProjects { get; set; }
310+
public PagingManager<AssignmentViewModel> PagingManager { get; set; }
288311

289312

290-
#endregion
291313

314+
#endregion
292315

316+
293317
}
294318
}

TakeMyTime.WPF/Entries/EntryOverview.xaml

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
<Grid.RowDefinitions>
1414
<RowDefinition Height="50"></RowDefinition>
1515
<RowDefinition Height="30"></RowDefinition>
16-
<RowDefinition Height="auto"></RowDefinition>
16+
<RowDefinition Height="*"></RowDefinition>
17+
<RowDefinition Height="60"></RowDefinition>
1718
</Grid.RowDefinitions>
1819
<Border Grid.Row="0">
1920
<StackPanel Margin="3"
@@ -73,7 +74,7 @@
7374
Orientation="Vertical">-->
7475
<ListView x:Name="lv_Entries"
7576
SelectionChanged="lv_Entries_SelectionChanged"
76-
Grid.Row="2" Background="{StaticResource BackgroundGrey}" Foreground="{StaticResource LightWhite}">
77+
Grid.Row="2" Background="{StaticResource BackgroundGrey}" Foreground="{StaticResource LightWhite}" ScrollViewer.CanContentScroll="False">
7778
<ListView.View>
7879
<GridView>
7980
<GridView.Columns>
@@ -95,6 +96,19 @@
9596
</GridView>
9697
</ListView.View>
9798
</ListView>
98-
<!--</StackPanel>-->
99+
<Border Grid.Row="3">
100+
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
101+
<Button x:Name="btn_PagingBack" Background="Black" Click="btn_PagingBack_Click">
102+
<materialDesign:PackIcon Kind="ArrowLeft"></materialDesign:PackIcon>
103+
</Button>
104+
<Button x:Name="btn_CurrentPage" IsEnabled="False" Background="Black" Foreground="White">
105+
</Button>
106+
<Button x:Name="btn_PagingForward" Background="Black" Click="btn_PagingForward_Click">
107+
<materialDesign:PackIcon Kind="ArrowRight"></materialDesign:PackIcon>
108+
</Button>
109+
<Button x:Name="btn_allPages" Background="Black" IsEnabled="False">
110+
</Button>
111+
</StackPanel>
112+
</Border>
99113
</Grid>
100114
</Page>

TakeMyTime.WPF/Entries/EntryOverview.xaml.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ public partial class EntryOverview : Page
1919
public EntryOverview()
2020
{
2121
InitializeComponent();
22+
this.PagingManager = new PagingManager<EntryViewModel>(19);
2223
Load();
24+
this.RefreshBindings(1);
2325
this.cb_ProjectFilter.SelectedItem = this.ProjectViewModels.Single(p => p.Id == 0);
2426
}
2527

@@ -33,7 +35,16 @@ private void Load()
3335
private void RefreshEntries()
3436
{
3537
this.LoadEntriesWhereFiltersHit();
36-
this.lv_Entries.ItemsSource = this.FilteredViewModels;
38+
this.PagingManager.Data = this.FilteredViewModels;
39+
}
40+
41+
private void RefreshBindings(int page)
42+
{
43+
this.lv_Entries.ItemsSource = this.PagingManager.Page(page);
44+
this.btn_CurrentPage.Content = this.PagingManager.CurrentPage;
45+
this.btn_allPages.Content = this.PagingManager.MaxPage;
46+
this.btn_PagingForward.IsEnabled = this.PagingManager.CanPageForward;
47+
this.btn_PagingBack.IsEnabled = this.PagingManager.CanPageBack;
3748
}
3849

3950
#region GUI Events
@@ -54,6 +65,7 @@ private void cb_ProjectFilter_SelectionChanged(object sender, SelectionChangedEv
5465
this.LoadAssignmentsForProject(this.SelectedProject.Id);
5566
this.cb_AssignmentFilter.ItemsSource = this.AssignmentViewModels;
5667
this.RefreshEntries();
68+
this.RefreshBindings(this.PagingManager.CurrentPage);
5769
}
5870
else
5971
{
@@ -75,6 +87,7 @@ private void cb_AssignmentFilter_SelectionChanged(object sender, SelectionChange
7587
this.LoadSubtasksForAssignment(this.SelectedAssignment.Id);
7688
this.cb_SubtaskFilter.ItemsSource = this.SubtaskViewModels;
7789
this.RefreshEntries();
90+
this.RefreshBindings(this.PagingManager.CurrentPage);
7891
}
7992
else
8093
{
@@ -88,6 +101,7 @@ private void cb_SubtaskFilter_SelectionChanged(object sender, SelectionChangedEv
88101
{
89102
this.SelectedSubtask = e.AddedItems[0] as SubtaskComboBoxViewModel;
90103
this.RefreshEntries();
104+
this.RefreshBindings(this.PagingManager.CurrentPage);
91105
}
92106
else
93107
{
@@ -100,6 +114,7 @@ private void btn_EditEntry_Click(object sender, System.Windows.RoutedEventArgs e
100114
var editEntry = new AddEntry(this.SelectedEntry.Id);
101115
editEntry.ShowDialog();
102116
this.Load();
117+
this.RefreshBindings(this.PagingManager.CurrentPage);
103118
}
104119

105120
private void btn_DeleteEntry_Click(object sender, System.Windows.RoutedEventArgs e)
@@ -112,6 +127,17 @@ private void btn_DeleteEntry_Click(object sender, System.Windows.RoutedEventArgs
112127
entryLogic.Dispose();
113128
}
114129
Load();
130+
this.RefreshBindings(this.PagingManager.CurrentPage);
131+
}
132+
133+
private void btn_PagingBack_Click(object sender, RoutedEventArgs e)
134+
{
135+
this.RefreshBindings(this.PagingManager.CurrentPage - 1);
136+
}
137+
138+
private void btn_PagingForward_Click(object sender, RoutedEventArgs e)
139+
{
140+
this.RefreshBindings(this.PagingManager.CurrentPage + 1);
115141
}
116142

117143
#endregion
@@ -217,6 +243,7 @@ private void lv_Entries_SelectionChanged(object sender, SelectionChangedEventArg
217243
public AssignmentViewModel SelectedAssignment { get; set; }
218244
public SubtaskComboBoxViewModel SelectedSubtask { get; set; }
219245
public EntryViewModel SelectedEntry { get; set; }
246+
public PagingManager<EntryViewModel> PagingManager { get; set; }
220247

221248
#endregion
222249
}

TakeMyTime.WPF/MainWindow.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ private void InitDataDirectory()
6565
private void ApplyMigrations()
6666
{
6767
TakeMyTimeDbContext context = new TakeMyTimeDbContext();
68-
context.Database.EnsureDeleted();
68+
// context.Database.EnsureDeleted();
6969
context.Database.Migrate();
7070
}
7171

TakeMyTime.WPF/ProjectTypes/ProjectTypeOverview.xaml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
<Grid>
1515
<Grid.RowDefinitions>
1616
<RowDefinition Height="60"></RowDefinition>
17-
<RowDefinition Height="auto"></RowDefinition>
17+
<RowDefinition Height="*"></RowDefinition>
18+
<RowDefinition Height="60"></RowDefinition>
1819
</Grid.RowDefinitions>
1920
<Border Grid.Row="0">
2021
<StackPanel HorizontalAlignment="Right"
@@ -57,5 +58,19 @@
5758
</GridView>
5859
</ListView.View>
5960
</ListView>
61+
<Border Grid.Row="2">
62+
<StackPanel HorizontalAlignment="Center" Orientation="Horizontal">
63+
<Button x:Name="btn_PagingBack" Background="Black" Click="btn_PagingBack_Click">
64+
<materialDesign:PackIcon Kind="ArrowLeft"></materialDesign:PackIcon>
65+
</Button>
66+
<Button x:Name="btn_CurrentPage" IsEnabled="False" Background="Black" Foreground="White">
67+
</Button>
68+
<Button x:Name="btn_PagingForward" Background="Black" Click="btn_PagingForward_Click">
69+
<materialDesign:PackIcon Kind="ArrowRight"></materialDesign:PackIcon>
70+
</Button>
71+
<Button x:Name="btn_allPages" Background="Black" IsEnabled="False">
72+
</Button>
73+
</StackPanel>
74+
</Border>
6075
</Grid>
6176
</Page>

0 commit comments

Comments
 (0)