root / trunk / Pithos.Client.WPF / SelectiveSynch / DirectoryRecord.cs @ 422c9598
History | View | Annotate | Download (3.9 kB)
1 | d3a13891 | Panagiotis Kanavos | using System; |
---|---|---|---|
2 | d3a13891 | Panagiotis Kanavos | using System.Collections; |
3 | d3a13891 | Panagiotis Kanavos | using System.Collections.Generic; |
4 | d3a13891 | Panagiotis Kanavos | using System.Collections.Specialized; |
5 | d3a13891 | Panagiotis Kanavos | using System.IO; |
6 | d3a13891 | Panagiotis Kanavos | using System.Linq; |
7 | d3a13891 | Panagiotis Kanavos | using System.Text; |
8 | d3a13891 | Panagiotis Kanavos | using Caliburn.Micro; |
9 | d3a13891 | Panagiotis Kanavos | |
10 | d3a13891 | Panagiotis Kanavos | namespace Pithos.Client.WPF.SelectiveSynch |
11 | d3a13891 | Panagiotis Kanavos | { |
12 | d3a13891 | Panagiotis Kanavos | public class DirectoryRecord : PropertyChangedBase,IEnumerable<DirectoryRecord> |
13 | d3a13891 | Panagiotis Kanavos | { |
14 | d3a13891 | Panagiotis Kanavos | public DirectoryInfo Info { get; set; } |
15 | d3a13891 | Panagiotis Kanavos | |
16 | d3a13891 | Panagiotis Kanavos | |
17 | d3a13891 | Panagiotis Kanavos | DirectoryRecord _parent; |
18 | d3a13891 | Panagiotis Kanavos | |
19 | d3a13891 | Panagiotis Kanavos | public bool Added { get; set; } |
20 | d3a13891 | Panagiotis Kanavos | public bool Removed { get; set; } |
21 | d3a13891 | Panagiotis Kanavos | |
22 | d3a13891 | Panagiotis Kanavos | private bool? _isChecked; |
23 | d3a13891 | Panagiotis Kanavos | #region IsChecked |
24 | d3a13891 | Panagiotis Kanavos | |
25 | d3a13891 | Panagiotis Kanavos | /// <summary> |
26 | d3a13891 | Panagiotis Kanavos | /// Gets/sets the state of the associated UI toggle (ex. CheckBox). |
27 | d3a13891 | Panagiotis Kanavos | /// The return value is calculated based on the check state of all |
28 | d3a13891 | Panagiotis Kanavos | /// child FooViewModels. Setting this property to true or false |
29 | d3a13891 | Panagiotis Kanavos | /// will set all children to the same check state, and setting it |
30 | d3a13891 | Panagiotis Kanavos | /// to any value will cause the parent to verify its check state. |
31 | d3a13891 | Panagiotis Kanavos | /// </summary> |
32 | d3a13891 | Panagiotis Kanavos | public bool? IsChecked |
33 | d3a13891 | Panagiotis Kanavos | { |
34 | d3a13891 | Panagiotis Kanavos | get { return _isChecked; } |
35 | d3a13891 | Panagiotis Kanavos | set { this.SetIsChecked(value, true, true); } |
36 | d3a13891 | Panagiotis Kanavos | } |
37 | d3a13891 | Panagiotis Kanavos | |
38 | d3a13891 | Panagiotis Kanavos | void SetIsChecked(bool? value, bool updateChildren, bool updateParent) |
39 | d3a13891 | Panagiotis Kanavos | { |
40 | d3a13891 | Panagiotis Kanavos | if (value == _isChecked) |
41 | d3a13891 | Panagiotis Kanavos | return; |
42 | d3a13891 | Panagiotis Kanavos | |
43 | d3a13891 | Panagiotis Kanavos | _isChecked = value; |
44 | d3a13891 | Panagiotis Kanavos | |
45 | d3a13891 | Panagiotis Kanavos | //If the value is null both Added and Removed should be False |
46 | d3a13891 | Panagiotis Kanavos | Added = _isChecked??false; |
47 | d3a13891 | Panagiotis Kanavos | Removed = !(_isChecked??true); |
48 | d3a13891 | Panagiotis Kanavos | |
49 | d3a13891 | Panagiotis Kanavos | if (updateChildren && _isChecked.HasValue) |
50 | d3a13891 | Panagiotis Kanavos | this.Directories.ForEach(c => c.SetIsChecked(_isChecked, true, false)); |
51 | d3a13891 | Panagiotis Kanavos | |
52 | d3a13891 | Panagiotis Kanavos | if (updateParent && _parent != null) |
53 | d3a13891 | Panagiotis Kanavos | _parent.VerifyCheckState(); |
54 | d3a13891 | Panagiotis Kanavos | |
55 | d3a13891 | Panagiotis Kanavos | this.RaisePropertyChangedEventImmediately("IsChecked"); |
56 | d3a13891 | Panagiotis Kanavos | } |
57 | d3a13891 | Panagiotis Kanavos | |
58 | d3a13891 | Panagiotis Kanavos | void VerifyCheckState() |
59 | d3a13891 | Panagiotis Kanavos | { |
60 | d3a13891 | Panagiotis Kanavos | bool? state = null; |
61 | d3a13891 | Panagiotis Kanavos | for (int i = 0; i < this.Directories.Count; ++i) |
62 | d3a13891 | Panagiotis Kanavos | { |
63 | d3a13891 | Panagiotis Kanavos | bool? current = this.Directories[i].IsChecked; |
64 | d3a13891 | Panagiotis Kanavos | if (i == 0) |
65 | d3a13891 | Panagiotis Kanavos | { |
66 | d3a13891 | Panagiotis Kanavos | state = current; |
67 | d3a13891 | Panagiotis Kanavos | } |
68 | d3a13891 | Panagiotis Kanavos | else if (state != current) |
69 | d3a13891 | Panagiotis Kanavos | { |
70 | d3a13891 | Panagiotis Kanavos | state = null; |
71 | d3a13891 | Panagiotis Kanavos | break; |
72 | d3a13891 | Panagiotis Kanavos | } |
73 | d3a13891 | Panagiotis Kanavos | } |
74 | d3a13891 | Panagiotis Kanavos | this.SetIsChecked(state, false, true); |
75 | d3a13891 | Panagiotis Kanavos | } |
76 | d3a13891 | Panagiotis Kanavos | |
77 | d3a13891 | Panagiotis Kanavos | #endregion // IsChecked |
78 | d3a13891 | Panagiotis Kanavos | |
79 | d3a13891 | Panagiotis Kanavos | |
80 | d3a13891 | Panagiotis Kanavos | public bool IsInitiallySelected { get; private set; } |
81 | d3a13891 | Panagiotis Kanavos | |
82 | d3a13891 | Panagiotis Kanavos | readonly Lazy<List<DirectoryRecord>> _directories = new Lazy<List<DirectoryRecord>>(); |
83 | d3a13891 | Panagiotis Kanavos | |
84 | d3a13891 | Panagiotis Kanavos | public List<DirectoryRecord> Directories |
85 | d3a13891 | Panagiotis Kanavos | { |
86 | d3a13891 | Panagiotis Kanavos | get |
87 | d3a13891 | Panagiotis Kanavos | { |
88 | d3a13891 | Panagiotis Kanavos | return _directories.Value; |
89 | d3a13891 | Panagiotis Kanavos | } |
90 | d3a13891 | Panagiotis Kanavos | } |
91 | d3a13891 | Panagiotis Kanavos | |
92 | d3a13891 | Panagiotis Kanavos | public DirectoryRecord(string ignorePath) |
93 | d3a13891 | Panagiotis Kanavos | { |
94 | d3a13891 | Panagiotis Kanavos | _directories = new Lazy<List<DirectoryRecord>>(() => |
95 | d3a13891 | Panagiotis Kanavos | (from directory in Info.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) |
96 | d3a13891 | Panagiotis Kanavos | where !directory.FullName.StartsWith(ignorePath) |
97 | d3a13891 | Panagiotis Kanavos | select new DirectoryRecord(ignorePath) { Info = directory }).ToList()); |
98 | d3a13891 | Panagiotis Kanavos | } |
99 | d3a13891 | Panagiotis Kanavos | |
100 | d3a13891 | Panagiotis Kanavos | |
101 | d3a13891 | Panagiotis Kanavos | |
102 | d3a13891 | Panagiotis Kanavos | /* |
103 | d3a13891 | Panagiotis Kanavos | public IEnumerable<DirectoryInfo> GetCheckedDirectories() |
104 | d3a13891 | Panagiotis Kanavos | { |
105 | d3a13891 | Panagiotis Kanavos | var q = from record in this |
106 | d3a13891 | Panagiotis Kanavos | where record.IsChecked==true |
107 | d3a13891 | Panagiotis Kanavos | select record.Info; |
108 | d3a13891 | Panagiotis Kanavos | return q; |
109 | d3a13891 | Panagiotis Kanavos | } |
110 | d3a13891 | Panagiotis Kanavos | */ |
111 | d3a13891 | Panagiotis Kanavos | |
112 | d3a13891 | Panagiotis Kanavos | /* |
113 | d3a13891 | Panagiotis Kanavos | public void SetSelections(StringCollection selections) |
114 | d3a13891 | Panagiotis Kanavos | { |
115 | d3a13891 | Panagiotis Kanavos | IsChecked=selections.Contains(Info.FullName); |
116 | d3a13891 | Panagiotis Kanavos | foreach (var children in Directories) |
117 | d3a13891 | Panagiotis Kanavos | { |
118 | d3a13891 | Panagiotis Kanavos | children.SetSelections(selections); |
119 | d3a13891 | Panagiotis Kanavos | } |
120 | d3a13891 | Panagiotis Kanavos | } |
121 | d3a13891 | Panagiotis Kanavos | */ |
122 | d3a13891 | Panagiotis Kanavos | |
123 | d3a13891 | Panagiotis Kanavos | public IEnumerator<DirectoryRecord> GetEnumerator() |
124 | d3a13891 | Panagiotis Kanavos | { |
125 | d3a13891 | Panagiotis Kanavos | yield return this; |
126 | d3a13891 | Panagiotis Kanavos | foreach (var children in Directories) |
127 | d3a13891 | Panagiotis Kanavos | foreach (var info in children) |
128 | d3a13891 | Panagiotis Kanavos | { |
129 | d3a13891 | Panagiotis Kanavos | yield return info; |
130 | d3a13891 | Panagiotis Kanavos | } |
131 | d3a13891 | Panagiotis Kanavos | } |
132 | d3a13891 | Panagiotis Kanavos | |
133 | d3a13891 | Panagiotis Kanavos | IEnumerator IEnumerable.GetEnumerator() |
134 | d3a13891 | Panagiotis Kanavos | { |
135 | d3a13891 | Panagiotis Kanavos | return GetEnumerator(); |
136 | d3a13891 | Panagiotis Kanavos | } |
137 | d3a13891 | Panagiotis Kanavos | } |
138 | d3a13891 | Panagiotis Kanavos | } |