1 // -----------------------------------------------------------------------
2 // <copyright file="PreferencesViewModel.cs" company="Microsoft">
3 // TODO: Update copyright text.
5 // -----------------------------------------------------------------------
7 using System.Collections;
8 using System.ComponentModel.Composition;
9 using System.Diagnostics;
11 using System.IO.IsolatedStorage;
12 using System.Linq.Expressions;
14 using System.Reflection;
15 using System.Runtime.Serialization;
17 using System.Windows.Forms;
19 using Pithos.Client.WPF.Configuration;
21 using Pithos.Interfaces;
22 using Pithos.ShellExtensions;
23 using Screen = Caliburn.Micro.Screen;
25 namespace Pithos.Client.WPF
28 using System.Collections.Generic;
33 /// TODO: Update summary.
35 [Export(typeof(IShell))]
36 public class PreferencesViewModel : Screen, IShell
41 public IPithosSettings Settings { get; set; }
44 public PithosMonitor Monitor { get; private set; }
46 public TaskbarViewModel Taskbar { get; set; }
48 ShellExtensionController _extensionController=new ShellExtensionController();
50 [ImportingConstructor]
51 public PreferencesViewModel(TaskbarViewModel taskbar, IPithosSettings settings, PithosMonitor monitor)
53 DisplayName = "Pithos Preferences";
56 Taskbar.Parent = this;
62 Taskbar.UsageMessage = "Using 15% of 50 GB";
63 Taskbar.RecentFiles.AddRange(new[]
65 new FileEntry{FileName="Moo",FullPath=@"e:\Pithos\moo"} ,
66 new FileEntry{FileName="Mee",FullPath=@"e:\Pithos\mee"}
68 Taskbar.StatusMessage = "In Synch";
69 Taskbar.UpdateStatus();
72 protected override void OnViewAttached(object view, object context)
74 var window = (Window)view;
76 base.OnViewAttached(view, context);
80 protected override void OnViewLoaded(object view)
82 var window = (Window)view;
85 base.OnViewLoaded(view);
88 #region Preferences Properties
90 private bool _noProxy;
93 get { return _noProxy; }
97 NotifyOfPropertyChange(()=>NoProxy);
102 private bool _defaultProxy;
104 public bool DefaultProxy
106 get { return _defaultProxy; }
109 _defaultProxy = value;
110 NotifyOfPropertyChange(() => DefaultProxy);
115 private bool _manualProxy;
117 public bool ManualProxy
119 get { return _manualProxy; }
122 _manualProxy = value;
123 NotifyOfPropertyChange(() => ManualProxy);
133 public void SaveChanges()
139 public void RejectChanges()
145 public void ApplyChanges()
150 private void DoSave()
153 NotifyOfPropertyChange(()=>Settings);
155 var activeAccount = Settings.Accounts.FirstOrDefault(account => account.IsActive);
156 if (activeAccount == null)
158 if (String.IsNullOrWhiteSpace(activeAccount.AccountName))
161 Monitor.ApiKey = activeAccount.ApiKey;
162 Monitor.UserName = activeAccount.AccountName;
163 Monitor.UsePithos = activeAccount.UsePithos;
168 public void ChangePithosFolder()
170 var browser = new FolderBrowserDialog();
171 browser.SelectedPath = Settings.PithosPath;
172 var result = browser.ShowDialog((IWin32Window)GetView());
173 if (result == DialogResult.OK)
175 var newPath = browser.SelectedPath;
176 Directory.Move(Settings.PithosPath, newPath);
177 Settings.PithosPath = newPath;
179 NotifyOfPropertyChange(() => Settings);
184 public void AddAccount()
186 var newAccount = new AccountSettings();
187 Settings.Accounts.Add(newAccount);
188 SelectedAccountIndex= Settings.Accounts.Count-1;
189 NotifyOfPropertyChange(()=>Settings);
192 public void RemoveAccount()
194 Settings.Accounts.RemoveAll(account => account.AccountName == CurrentAccount.AccountName);
196 NotifyOfPropertyChange(()=>CurrentAccount);
197 NotifyOfPropertyChange(()=>Settings);
198 //NotifyOfPropertyChange("Settings.Accounts");
201 public bool CanRemoveAccount
203 get { return (CurrentAccount != null); }
208 public bool ExtensionsActivated
210 get { return Settings.ExtensionsActivated; }
213 if (Settings.ExtensionsActivated == value)
216 Settings.ExtensionsActivated = value;
219 _extensionController.RegisterExtensions();
222 _extensionController.UnregisterExtensions();
224 NotifyOfPropertyChange(() => ExtensionsActivated);
228 public void RefreshOverlays()
230 this.Monitor.Workflow.RaiseChangeNotification(Settings.PithosPath);
234 private int _selectedAccountIndex;
235 public int SelectedAccountIndex
237 get { return _selectedAccountIndex; }
240 //var accountCount=Settings.Accounts.Count;
241 //if (accountCount == 0)
243 //if (0 <= value && value < accountCount)
244 // _selectedAccountIndex = value;
246 // _selectedAccountIndex = 0;
247 NotifyOfPropertyChange(() => CurrentAccount);
248 NotifyOfPropertyChange(() => CanRemoveAccount);
249 NotifyOfPropertyChange(()=>SelectedAccountIndex);
253 private AccountSettings _currentAccount;
254 public AccountSettings CurrentAccount
257 if (0 <= SelectedAccountIndex && SelectedAccountIndex < Settings.Accounts.Count)
258 return Settings.Accounts[SelectedAccountIndex];
264 _currentAccount = value;