aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs')
-rw-r--r--ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs300
1 files changed, 300 insertions, 0 deletions
diff --git a/ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs b/ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs
new file mode 100644
index 0000000..1abcfc1
--- /dev/null
+++ b/ShiftOS.Wpf/Applications/FileSkimmer.xaml.cs
@@ -0,0 +1,300 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using ShiftOS.Objects.ShiftFS;
+using ShiftOS.Engine;
+
+namespace ShiftOS.Wpf.Applications
+{
+ /// <summary>
+ /// Interaction logic for FileSkimmer.xaml
+ /// </summary>
+ [Launcher("File Skimmer", true, "al_file_skimmer")]
+ [RequiresUpgrade("file_skimmer")]
+ public partial class FileSkimmer : UserControl, IShiftOSWindow
+ {
+ public FileSkimmer()
+ {
+ InitializeComponent();
+ }
+
+ private string currentFolder = "0:";
+
+ static FileSkimmer()
+ {
+ FileSkimmerBackend.Init(new WpfFSFrontend());
+ }
+
+ public void OnLoad()
+ {
+ Reset();
+ }
+
+ public string GetParent(string path)
+ {
+ string[] pathlist = path.Split(new[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
+ if (pathlist.Length > 1)
+ {
+ if (path.EndsWith("/"))
+ {
+ path = path.Remove(path.Length - 1, 1);
+ }
+ path = path.Remove(path.LastIndexOf('/'), path.Length - path.LastIndexOf('/'));
+ return path;
+ }
+ else
+ {
+ return "__system";
+ }
+ }
+
+ public void Reset()
+ {
+ if (currentFolder != "__system")
+ this.SetTitle("File Skimmer - " + currentFolder);
+ else
+ this.SetTitle("File Skimmer");
+
+ lbfiles.Children.Clear();
+ if (currentFolder == "__system")
+ {
+ foreach(var dir in Utils.Mounts)
+ {
+ var sp = new StackPanel();
+ sp.Width = 50;
+ sp.Margin = new Thickness(5);
+ var label = new TextBlock();
+ label.Text = dir.Name;
+ label.TextWrapping = TextWrapping.Wrap;
+ label.TextAlignment = TextAlignment.Center;
+
+ var img = new Image();
+ img.Width = 42;
+ img.Height = 42;
+ img.Source = FileSkimmerBackend.GetImage(Utils.Mounts.IndexOf(dir) + ":").ToBitmapImage();
+
+ sp.Children.Add(img);
+ sp.Children.Add(label);
+
+ sp.PreviewMouseLeftButtonDown += (o, a) =>
+ {
+ if (a.ClickCount == 2)
+ {
+ ChangeDirectory(Utils.Mounts.IndexOf(dir) + ":");
+ }
+ };
+
+ lbfiles.Children.Add(sp);
+
+ }
+ }
+ else
+ {
+ var __up = CreateUpOneDirectory();
+ lbfiles.Children.Add(__up);
+
+ foreach(var dir in Utils.GetDirectories(currentFolder))
+ {
+ var sp = new StackPanel();
+ sp.Margin = new Thickness(5);
+ sp.Width = 50;
+ var label = new TextBlock();
+ label.Text = Utils.GetDirectoryInfo(dir).Name;
+ label.TextWrapping = TextWrapping.Wrap;
+ label.TextAlignment = TextAlignment.Center;
+
+ var img = new Image();
+ img.Width = 42;
+ img.Height = 42;
+ img.Source = FileSkimmerBackend.GetImage(dir).ToBitmapImage();
+
+ sp.Children.Add(img);
+ sp.Children.Add(label);
+
+ sp.PreviewMouseLeftButtonDown += (o, a) =>
+ {
+ if (a.ClickCount == 2)
+ {
+ ChangeDirectory(dir);
+ }
+ };
+
+ lbfiles.Children.Add(sp);
+
+ }
+
+ foreach(var dir in Utils.GetFiles(currentFolder))
+ {
+ var sp = new StackPanel();
+ sp.Margin = new Thickness(5);
+ sp.Width = 50;
+ var label = new TextBlock();
+ label.Text = Utils.GetFileInfo(dir).Name;
+ label.TextWrapping = TextWrapping.Wrap;
+ label.TextAlignment = TextAlignment.Center;
+
+ var img = new Image();
+ img.Width = 42;
+ img.Height = 42;
+ img.Source = FileSkimmerBackend.GetImage(dir).ToBitmapImage();
+
+ sp.Children.Add(img);
+ sp.Children.Add(label);
+
+ sp.PreviewMouseLeftButtonDown += (o, a) =>
+ {
+ if (a.ClickCount == 2)
+ {
+ FileSkimmerBackend.OpenFile(dir);
+ }
+ };
+
+ lbfiles.Children.Add(sp);
+
+ }
+ }
+ }
+
+ public void ChangeDirectory(string path)
+ {
+ currentFolder = path;
+ Reset();
+ }
+
+ private StackPanel CreateUpOneDirectory()
+ {
+ var sp = new StackPanel();
+ sp.Margin = new Thickness(5);
+ sp.Width = 50;
+ var label = new TextBlock();
+ label.Text = "Up one directory";
+ label.TextWrapping = TextWrapping.Wrap;
+ label.TextAlignment = TextAlignment.Center;
+
+ var img = new Image();
+ img.Width = 42;
+ img.Height = 42;
+ img.Source = FileSkimmerBackend.GetImage("__upone").ToBitmapImage();
+
+ sp.Children.Add(img);
+ sp.Children.Add(label);
+
+ sp.PreviewMouseLeftButtonDown += (o, a) =>
+ {
+ if(a.ClickCount == 2)
+ {
+ GoUp();
+ }
+ };
+
+ return sp;
+ }
+
+ public void GoUp()
+ {
+ if (currentFolder.EndsWith(":"))
+ {
+ currentFolder = "__system";
+ Reset();
+ }
+ else
+ {
+ currentFolder = GetParent(currentFolder);
+ Reset();
+ }
+ }
+
+ public void OnSkinLoad()
+ {
+ }
+
+ public bool OnUnload()
+ {
+ return true;
+ }
+
+ public void OnUpgrade()
+ {
+
+ }
+ }
+
+ public class WpfFSFrontend : IFileSkimmer
+ {
+ public void GetPath(string[] filetypes, FileOpenerStyle style, Action<string> callback)
+ {
+ AppearanceManager.SetupDialog(new FileDialog(filetypes, style, callback));
+ }
+
+ public void OpenDirectory(string path)
+ {
+ var fs = new FileSkimmer();
+ fs.ChangeDirectory(path);
+ AppearanceManager.SetupWindow(fs);
+ }
+
+ public void OpenFile(string path)
+ {
+ bool opened = true;
+
+ string ext = path.Split('.')[path.Split('.').Length - 1];
+ switch(ext)
+ {
+ case "txt":
+ if (Shiftorium.UpgradeInstalled("textpad_open"))
+ {
+ var txt = new TextPad();
+ txt.LoadFile(path);
+ AppearanceManager.SetupWindow(txt);
+ }
+ else
+ {
+ opened = false;
+ }
+ break;
+ case "pic":
+ case "png":
+ case "jpg":
+ case "bmp":
+
+ break;
+ case "wav":
+ case "mp3":
+
+ break;
+ case "lua":
+
+ break;
+ case "py":
+
+ break;
+ case "skn":
+
+ break;
+ case "mfs":
+ Utils.MountPersistent(path);
+ string mount = (Utils.Mounts.Count - 1).ToString() + ":";
+ OpenDirectory(mount);
+ break;
+ default:
+ opened = false;
+ break;
+ }
+ if(opened == false)
+ {
+ Infobox.Show("File Skimmer - Can't open file", "File Skimmer can't find an application to open this file!");
+ }
+ }
+ }
+}