@@ -30,6 +30,9 @@ class HistoryView : Subview
30
30
private const int HistoryExtraItemCount = 10 ;
31
31
private const float MaxChangelistHeightRatio = .2f ;
32
32
33
+ [ NonSerialized ] private bool currentLogHasUpdate ;
34
+ [ NonSerialized ] private bool currentRemoteHasUpdate ;
35
+ [ NonSerialized ] private bool currentStatusHasUpdate ;
33
36
[ NonSerialized ] private int historyStartIndex ;
34
37
[ NonSerialized ] private int historyStopIndex ;
35
38
[ NonSerialized ] private int listID ;
@@ -39,26 +42,19 @@ class HistoryView : Subview
39
42
[ NonSerialized ] private int selectionIndex ;
40
43
[ NonSerialized ] private bool useScrollTime ;
41
44
42
- [ SerializeField ] private Vector2 detailsScroll ;
43
- [ SerializeField ] private Vector2 scroll ;
44
- [ SerializeField ] private string selectionID ;
45
- [ SerializeField ] private int statusAhead ;
46
- [ SerializeField ] private int statusBehind ;
47
-
48
45
[ SerializeField ] private ChangesetTreeView changesetTree = new ChangesetTreeView ( ) ;
49
- [ SerializeField ] private List < GitLogEntry > history = new List < GitLogEntry > ( ) ;
50
46
[ SerializeField ] private string currentRemoteName ;
51
- [ SerializeField ] private bool hasRemote ;
47
+ [ SerializeField ] private Vector2 detailsScroll ;
52
48
[ SerializeField ] private bool hasItemsToCommit ;
53
-
49
+ [ SerializeField ] private bool hasRemote ;
50
+ [ SerializeField ] private List < GitLogEntry > history = new List < GitLogEntry > ( ) ;
54
51
[ SerializeField ] private CacheUpdateEvent lastCurrentRemoteChangedEvent ;
55
- [ NonSerialized ] private bool currentRemoteHasUpdate ;
56
-
57
- [ SerializeField ] private CacheUpdateEvent lastStatusChangedEvent ;
58
- [ NonSerialized ] private bool currentStatusHasUpdate ;
59
-
60
52
[ SerializeField ] private CacheUpdateEvent lastLogChangedEvent ;
61
- [ NonSerialized ] private bool currentLogHasUpdate ;
53
+ [ SerializeField ] private CacheUpdateEvent lastStatusChangedEvent ;
54
+ [ SerializeField ] private Vector2 scroll ;
55
+ [ SerializeField ] private string selectionID ;
56
+ [ SerializeField ] private int statusAhead ;
57
+ [ SerializeField ] private int statusBehind ;
62
58
63
59
public override void InitializeView ( IView parent )
64
60
{
@@ -100,138 +96,6 @@ public override void OnGUI()
100
96
OnEmbeddedGUI ( ) ;
101
97
}
102
98
103
- private void RepositoryOnStatusChanged ( CacheUpdateEvent cacheUpdateEvent )
104
- {
105
- if ( ! lastStatusChangedEvent . Equals ( cacheUpdateEvent ) )
106
- {
107
- new ActionTask ( TaskManager . Token , ( ) =>
108
- {
109
- lastStatusChangedEvent = cacheUpdateEvent ;
110
- currentStatusHasUpdate = true ;
111
- Redraw ( ) ;
112
- } )
113
- { Affinity = TaskAffinity . UI } . Start ( ) ;
114
- }
115
- }
116
-
117
- private void RepositoryOnLogChanged ( CacheUpdateEvent cacheUpdateEvent )
118
- {
119
- if ( ! lastLogChangedEvent . Equals ( cacheUpdateEvent ) )
120
- {
121
- new ActionTask ( TaskManager . Token , ( ) =>
122
- {
123
- lastLogChangedEvent = cacheUpdateEvent ;
124
- currentLogHasUpdate = true ;
125
- Redraw ( ) ;
126
- } )
127
- { Affinity = TaskAffinity . UI } . Start ( ) ;
128
- }
129
- }
130
-
131
- private void RepositoryOnCurrentRemoteChanged ( CacheUpdateEvent cacheUpdateEvent )
132
- {
133
- if ( ! lastCurrentRemoteChangedEvent . Equals ( cacheUpdateEvent ) )
134
- {
135
- new ActionTask ( TaskManager . Token , ( ) =>
136
- {
137
- lastCurrentRemoteChangedEvent = cacheUpdateEvent ;
138
- currentRemoteHasUpdate = true ;
139
- Redraw ( ) ;
140
- } )
141
- { Affinity = TaskAffinity . UI } . Start ( ) ;
142
- }
143
- }
144
-
145
- private void AttachHandlers ( IRepository repository )
146
- {
147
- if ( repository == null )
148
- return ;
149
-
150
- repository . StatusChanged += RepositoryOnStatusChanged ;
151
- repository . LogChanged += RepositoryOnLogChanged ;
152
- repository . CurrentRemoteChanged += RepositoryOnCurrentRemoteChanged ;
153
- }
154
-
155
- private void DetachHandlers ( IRepository repository )
156
- {
157
- if ( repository == null )
158
- return ;
159
-
160
- repository . StatusChanged -= RepositoryOnStatusChanged ;
161
- repository . LogChanged -= RepositoryOnLogChanged ;
162
- repository . CurrentRemoteChanged -= RepositoryOnCurrentRemoteChanged ;
163
- }
164
-
165
- private void MaybeUpdateData ( )
166
- {
167
- if ( Repository == null )
168
- return ;
169
-
170
- if ( currentRemoteHasUpdate )
171
- {
172
- currentRemoteHasUpdate = false ;
173
-
174
- var currentRemote = Repository . CurrentRemote ;
175
- hasRemote = currentRemote . HasValue ;
176
- currentRemoteName = hasRemote ? currentRemote . Value . Name : "placeholder" ;
177
- }
178
-
179
- if ( currentStatusHasUpdate )
180
- {
181
- currentStatusHasUpdate = false ;
182
-
183
- var currentStatus = Repository . CurrentStatus ;
184
- statusAhead = currentStatus . Ahead ;
185
- statusBehind = currentStatus . Behind ;
186
- hasItemsToCommit = currentStatus . Entries != null &&
187
- currentStatus . GetEntriesExcludingIgnoredAndUntracked ( ) . Any ( ) ;
188
- }
189
-
190
- if ( currentLogHasUpdate )
191
- {
192
- currentLogHasUpdate = false ;
193
-
194
- history = Repository . CurrentLog ;
195
-
196
- if ( history . Any ( ) )
197
- {
198
- // Make sure that scroll as much as possible focuses the same time period in the new entry list
199
- if ( useScrollTime )
200
- {
201
- var closestIndex = - 1 ;
202
- double closestDifference = Mathf . Infinity ;
203
- for ( var index = 0 ; index < history . Count ; ++ index )
204
- {
205
- var diff = Math . Abs ( ( history [ index ] . Time - scrollTime ) . TotalSeconds ) ;
206
- if ( diff < closestDifference )
207
- {
208
- closestDifference = diff ;
209
- closestIndex = index ;
210
- }
211
- }
212
-
213
- ScrollTo ( closestIndex , scrollOffset ) ;
214
- }
215
-
216
- CullHistory ( ) ;
217
- }
218
-
219
- // Restore selection index or clear it
220
- newSelectionIndex = - 1 ;
221
- if ( ! string . IsNullOrEmpty ( selectionID ) )
222
- {
223
- selectionIndex = Enumerable . Range ( 1 , history . Count + 1 )
224
- . FirstOrDefault (
225
- index => history [ index - 1 ] . CommitID . Equals ( selectionID ) ) - 1 ;
226
-
227
- if ( selectionIndex < 0 )
228
- {
229
- selectionID = string . Empty ;
230
- }
231
- }
232
- }
233
- }
234
-
235
99
public void OnEmbeddedGUI ( )
236
100
{
237
101
// History toolbar
@@ -428,6 +292,138 @@ public void OnEmbeddedGUI()
428
292
}
429
293
}
430
294
295
+ private void RepositoryOnStatusChanged ( CacheUpdateEvent cacheUpdateEvent )
296
+ {
297
+ if ( ! lastStatusChangedEvent . Equals ( cacheUpdateEvent ) )
298
+ {
299
+ new ActionTask ( TaskManager . Token , ( ) => {
300
+ lastStatusChangedEvent = cacheUpdateEvent ;
301
+ currentStatusHasUpdate = true ;
302
+ Redraw ( ) ;
303
+ } ) { Affinity = TaskAffinity . UI } . Start ( ) ;
304
+ }
305
+ }
306
+
307
+ private void RepositoryOnLogChanged ( CacheUpdateEvent cacheUpdateEvent )
308
+ {
309
+ if ( ! lastLogChangedEvent . Equals ( cacheUpdateEvent ) )
310
+ {
311
+ new ActionTask ( TaskManager . Token , ( ) => {
312
+ lastLogChangedEvent = cacheUpdateEvent ;
313
+ currentLogHasUpdate = true ;
314
+ Redraw ( ) ;
315
+ } ) { Affinity = TaskAffinity . UI } . Start ( ) ;
316
+ }
317
+ }
318
+
319
+ private void RepositoryOnCurrentRemoteChanged ( CacheUpdateEvent cacheUpdateEvent )
320
+ {
321
+ if ( ! lastCurrentRemoteChangedEvent . Equals ( cacheUpdateEvent ) )
322
+ {
323
+ new ActionTask ( TaskManager . Token , ( ) => {
324
+ lastCurrentRemoteChangedEvent = cacheUpdateEvent ;
325
+ currentRemoteHasUpdate = true ;
326
+ Redraw ( ) ;
327
+ } ) { Affinity = TaskAffinity . UI } . Start ( ) ;
328
+ }
329
+ }
330
+
331
+ private void AttachHandlers ( IRepository repository )
332
+ {
333
+ if ( repository == null )
334
+ {
335
+ return ;
336
+ }
337
+
338
+ repository . StatusChanged += RepositoryOnStatusChanged ;
339
+ repository . LogChanged += RepositoryOnLogChanged ;
340
+ repository . CurrentRemoteChanged += RepositoryOnCurrentRemoteChanged ;
341
+ }
342
+
343
+ private void DetachHandlers ( IRepository repository )
344
+ {
345
+ if ( repository == null )
346
+ {
347
+ return ;
348
+ }
349
+
350
+ repository . StatusChanged -= RepositoryOnStatusChanged ;
351
+ repository . LogChanged -= RepositoryOnLogChanged ;
352
+ repository . CurrentRemoteChanged -= RepositoryOnCurrentRemoteChanged ;
353
+ }
354
+
355
+ private void MaybeUpdateData ( )
356
+ {
357
+ if ( Repository == null )
358
+ {
359
+ return ;
360
+ }
361
+
362
+ if ( currentRemoteHasUpdate )
363
+ {
364
+ currentRemoteHasUpdate = false ;
365
+
366
+ var currentRemote = Repository . CurrentRemote ;
367
+ hasRemote = currentRemote . HasValue ;
368
+ currentRemoteName = hasRemote ? currentRemote . Value . Name : "placeholder" ;
369
+ }
370
+
371
+ if ( currentStatusHasUpdate )
372
+ {
373
+ currentStatusHasUpdate = false ;
374
+
375
+ var currentStatus = Repository . CurrentStatus ;
376
+ statusAhead = currentStatus . Ahead ;
377
+ statusBehind = currentStatus . Behind ;
378
+ hasItemsToCommit = currentStatus . Entries != null &&
379
+ currentStatus . GetEntriesExcludingIgnoredAndUntracked ( ) . Any ( ) ;
380
+ }
381
+
382
+ if ( currentLogHasUpdate )
383
+ {
384
+ currentLogHasUpdate = false ;
385
+
386
+ history = Repository . CurrentLog ;
387
+
388
+ if ( history . Any ( ) )
389
+ {
390
+ // Make sure that scroll as much as possible focuses the same time period in the new entry list
391
+ if ( useScrollTime )
392
+ {
393
+ var closestIndex = - 1 ;
394
+ double closestDifference = Mathf . Infinity ;
395
+ for ( var index = 0 ; index < history . Count ; ++ index )
396
+ {
397
+ var diff = Math . Abs ( ( history [ index ] . Time - scrollTime ) . TotalSeconds ) ;
398
+ if ( diff < closestDifference )
399
+ {
400
+ closestDifference = diff ;
401
+ closestIndex = index ;
402
+ }
403
+ }
404
+
405
+ ScrollTo ( closestIndex , scrollOffset ) ;
406
+ }
407
+
408
+ CullHistory ( ) ;
409
+ }
410
+
411
+ // Restore selection index or clear it
412
+ newSelectionIndex = - 1 ;
413
+ if ( ! string . IsNullOrEmpty ( selectionID ) )
414
+ {
415
+ selectionIndex = Enumerable . Range ( 1 , history . Count + 1 )
416
+ . FirstOrDefault (
417
+ index => history [ index - 1 ] . CommitID . Equals ( selectionID ) ) - 1 ;
418
+
419
+ if ( selectionIndex < 0 )
420
+ {
421
+ selectionID = string . Empty ;
422
+ }
423
+ }
424
+ }
425
+ }
426
+
431
427
private void ScrollTo ( int index , float offset = 0f )
432
428
{
433
429
scroll . Set ( scroll . x , EntryHeight * index + offset ) ;
0 commit comments