summaryrefslogtreecommitdiff
path: root/Noddybox.WindowsPhone.Silverlight/ViewModels
diff options
context:
space:
mode:
Diffstat (limited to 'Noddybox.WindowsPhone.Silverlight/ViewModels')
-rw-r--r--Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs159
1 files changed, 159 insertions, 0 deletions
diff --git a/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs b/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs
new file mode 100644
index 0000000..afc8e63
--- /dev/null
+++ b/Noddybox.WindowsPhone.Silverlight/ViewModels/FileDialogViewModel.cs
@@ -0,0 +1,159 @@
+// This file is part of the Noddybox.WindowsPhone C# suite.
+//
+// Noddybox.Emulation is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Noddybox.Emulation is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Noddybox.Emulation. If not, see <http://www.gnu.org/licenses/>.
+//
+// Copyright (c) 2012 Ian Cowburn
+//
+using System;
+using System.Net;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Shapes;
+using System.Collections.Generic;
+
+namespace Noddybox.WindowsPhone.Silverlight.ViewModels
+{
+ /// <summary>
+ /// Provides a common view model for all file dialogs.
+ /// </summary>
+ public class FileDialogViewModel : BaseViewModel
+ {
+ #region Private data
+
+ private string filename;
+ private string path;
+ private List<FileInfo> fileList;
+
+ #endregion
+
+ #region Private members
+
+ private void GetFileList()
+ {
+ FileList = FileInfo.GetFiles(path);
+ }
+
+ #endregion
+
+ #region Bindable properties
+
+ /// <summary>
+ /// Get/set the filename.
+ /// </summary>
+ public string Filename
+ {
+ get {return filename;}
+ set {SetValue(ref filename, value, "Filename", "IsFileSelected");}
+ }
+
+ /// <summary>
+ /// Get whether there is a filename.
+ /// </summary>
+ public bool IsFileSelected
+ {
+ get {return !String.IsNullOrWhiteSpace(filename);}
+ }
+
+
+ /// <summary>
+ /// Get the list of files.
+ /// </summary>
+ public List<FileInfo> FileList
+ {
+ get {return fileList;}
+ set {SetValue(ref fileList, value, "FileList"); }
+ }
+
+ /// <summary>
+ /// Get/set the current path.
+ /// </summary>
+ public string Path
+ {
+ get {return path;}
+ set
+ {
+ SetValue(ref path, value, "Path");
+ Filename = String.Empty;
+ GetFileList();
+ }
+ }
+
+ #endregion
+
+ #region Public members
+
+ /// <summary>
+ /// Called when a file is selected.
+ /// </summary>
+ /// <param name="file">The selected file.</param>
+ public void FileSelected(FileInfo file)
+ {
+ if (file.IsFolder)
+ {
+ string newPath = path;
+
+ if (file.Name != "..")
+ {
+ newPath += file.Name + "/";
+ }
+ else
+ {
+ if (newPath.Length > 1)
+ {
+ string[] parts = newPath.Split(new char[] {'/'}, StringSplitOptions.RemoveEmptyEntries);
+
+ newPath = "/";
+
+ for(int f = 0; f < parts.Length-1; f++)
+ {
+ newPath += parts[f] + "/";
+ }
+ }
+ else
+ {
+ newPath = "/";
+ }
+ }
+
+ Path = newPath;
+ }
+ else
+ {
+ Filename = file.Name;
+ }
+ }
+
+ #endregion
+
+ #region Constructors
+
+ /// <summary>
+ /// Construct the view model.
+ /// </summary>
+ /// <param name="startPath">The path to start selecting from.</param>
+ public FileDialogViewModel(string startPath)
+ {
+ path = startPath;
+ Filename = String.Empty;
+ GetFileList();
+ }
+
+ #endregion
+ }
+}