Statistics
| Branch: | Revision:

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
}