4
4
using Avalonia ;
5
5
using Avalonia . Controls ;
6
6
using Avalonia . Controls . Models . TreeDataGrid ;
7
+ using Avalonia . Controls . Templates ;
7
8
using Avalonia . Interactivity ;
8
9
9
10
namespace SourceGit . Views
@@ -78,11 +79,10 @@ public ChangeCollectionView()
78
79
79
80
private void UpdateSource ( )
80
81
{
81
- if ( tree . Source is IDisposable disposable )
82
- {
82
+ if ( Content is TreeDataGrid tree && tree . Source is IDisposable disposable )
83
83
disposable . Dispose ( ) ;
84
- tree . Source = null ;
85
- }
84
+
85
+ Content = null ;
86
86
87
87
var changes = Changes ;
88
88
if ( changes == null )
@@ -92,12 +92,13 @@ private void UpdateSource()
92
92
if ( viewMode == Models . ChangeViewMode . Tree )
93
93
{
94
94
var filetree = Models . FileTreeNode . Build ( changes , true ) ;
95
+ var template = this . FindResource ( "TreeModeTemplate" ) as IDataTemplate ;
95
96
var source = new HierarchicalTreeDataGridSource < Models . FileTreeNode > ( filetree )
96
97
{
97
98
Columns =
98
99
{
99
100
new HierarchicalExpanderColumn < Models . FileTreeNode > (
100
- new TemplateColumn < Models . FileTreeNode > ( null , "TreeModeTemplate" , null , GridLength . Auto ) ,
101
+ new TemplateColumn < Models . FileTreeNode > ( null , template , null , GridLength . Auto ) ,
101
102
x => x . Children ,
102
103
x => x . Children . Count > 0 ,
103
104
x => x . IsExpanded )
@@ -111,24 +112,25 @@ private void UpdateSource()
111
112
{
112
113
if ( ! _isSelecting && s is Models . TreeDataGridSelectionModel < Models . FileTreeNode > model )
113
114
{
114
- var selection = new List < Models . Change > ( ) ;
115
+ var selected = new List < Models . Change > ( ) ;
115
116
foreach ( var c in model . SelectedItems )
116
- CollectChangesInNode ( selection , c ) ;
117
+ CollectChangesInNode ( selected , c ) ;
117
118
118
119
_isSelecting = true ;
119
- SetCurrentValue ( SelectedChangesProperty , selection ) ;
120
+ SetCurrentValue ( SelectedChangesProperty , selected ) ;
120
121
_isSelecting = false ;
121
122
}
122
123
} ;
123
124
124
125
source . Selection = selection ;
125
- tree . Source = source ;
126
+ CreateTreeDataGrid ( source ) ;
126
127
}
127
128
else if ( viewMode == Models . ChangeViewMode . List )
128
129
{
130
+ var template = this . FindResource ( "ListModeTemplate" ) as IDataTemplate ;
129
131
var source = new FlatTreeDataGridSource < Models . Change > ( changes )
130
132
{
131
- Columns = { new TemplateColumn < Models . Change > ( null , "ListModeTemplate" , null , GridLength . Auto ) }
133
+ Columns = { new TemplateColumn < Models . Change > ( null , template , null , GridLength . Auto ) }
132
134
} ;
133
135
134
136
var selection = new Models . TreeDataGridSelectionModel < Models . Change > ( source , null ) ;
@@ -138,24 +140,25 @@ private void UpdateSource()
138
140
{
139
141
if ( ! _isSelecting && s is Models . TreeDataGridSelectionModel < Models . Change > model )
140
142
{
141
- var selection = new List < Models . Change > ( ) ;
143
+ var selected = new List < Models . Change > ( ) ;
142
144
foreach ( var c in model . SelectedItems )
143
- selection . Add ( c ) ;
145
+ selected . Add ( c ) ;
144
146
145
147
_isSelecting = true ;
146
- SetCurrentValue ( SelectedChangesProperty , selection ) ;
148
+ SetCurrentValue ( SelectedChangesProperty , selected ) ;
147
149
_isSelecting = false ;
148
150
}
149
151
} ;
150
152
151
153
source . Selection = selection ;
152
- tree . Source = source ;
154
+ CreateTreeDataGrid ( source ) ;
153
155
}
154
156
else
155
157
{
158
+ var template = this . FindResource ( "GridModeTemplate" ) as IDataTemplate ;
156
159
var source = new FlatTreeDataGridSource < Models . Change > ( changes )
157
160
{
158
- Columns = { new TemplateColumn < Models . Change > ( null , "GridModeTemplate" , null , GridLength . Auto ) } ,
161
+ Columns = { new TemplateColumn < Models . Change > ( null , template , null , GridLength . Auto ) } ,
159
162
} ;
160
163
161
164
var selection = new Models . TreeDataGridSelectionModel < Models . Change > ( source , null ) ;
@@ -165,24 +168,28 @@ private void UpdateSource()
165
168
{
166
169
if ( ! _isSelecting && s is Models . TreeDataGridSelectionModel < Models . Change > model )
167
170
{
168
- var selection = new List < Models . Change > ( ) ;
171
+ var selected = new List < Models . Change > ( ) ;
169
172
foreach ( var c in model . SelectedItems )
170
- selection . Add ( c ) ;
173
+ selected . Add ( c ) ;
171
174
172
175
_isSelecting = true ;
173
- SetCurrentValue ( SelectedChangesProperty , selection ) ;
176
+ SetCurrentValue ( SelectedChangesProperty , selected ) ;
174
177
_isSelecting = false ;
175
178
}
176
179
} ;
177
180
178
181
source . Selection = selection ;
179
- tree . Source = source ;
182
+ CreateTreeDataGrid ( source ) ;
180
183
}
181
184
}
182
185
183
186
private void UpdateSelected ( )
184
187
{
185
- if ( _isSelecting || tree . Source == null )
188
+ if ( _isSelecting || Content == null )
189
+ return ;
190
+
191
+ var tree = Content as TreeDataGrid ;
192
+ if ( tree == null )
186
193
return ;
187
194
188
195
_isSelecting = true ;
@@ -212,17 +219,25 @@ private void UpdateSelected()
212
219
CollectSelectedNodeByChange ( nodes , node as Models . FileTreeNode , set ) ;
213
220
214
221
if ( nodes . Count == 0 )
215
- {
216
222
treeSelection . Clear ( ) ;
217
- }
218
223
else
219
- {
220
224
treeSelection . Select ( nodes ) ;
221
- }
222
225
}
223
226
_isSelecting = false ;
224
227
}
225
228
229
+ private void CreateTreeDataGrid ( ITreeDataGridSource source )
230
+ {
231
+ Content = new TreeDataGrid ( )
232
+ {
233
+ AutoDragDropRows = false ,
234
+ ShowColumnHeaders = false ,
235
+ CanUserResizeColumns = false ,
236
+ CanUserSortColumns = false ,
237
+ Source = source ,
238
+ } ;
239
+ }
240
+
226
241
private void CollectChangesInNode ( List < Models . Change > outs , Models . FileTreeNode node )
227
242
{
228
243
if ( node . IsFolder )
0 commit comments