aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Applications/FileSkimmer.cs
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-01-08 09:57:10 -0500
committerMichael <[email protected]>2017-01-08 09:57:10 -0500
commitf30dcf5ef41d54c588d7b42c48be8d941abba72e (patch)
tree7705f99b965673b1c034ac2b1c56e65072c827df /ShiftOS.WinForms/Applications/FileSkimmer.cs
parent69dfad54724d4176dfce238a8d7e73970e6eef24 (diff)
downloadshiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.gz
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.tar.bz2
shiftos_thereturn-f30dcf5ef41d54c588d7b42c48be8d941abba72e.zip
Initial upload
Diffstat (limited to 'ShiftOS.WinForms/Applications/FileSkimmer.cs')
-rw-r--r--ShiftOS.WinForms/Applications/FileSkimmer.cs238
1 files changed, 238 insertions, 0 deletions
diff --git a/ShiftOS.WinForms/Applications/FileSkimmer.cs b/ShiftOS.WinForms/Applications/FileSkimmer.cs
new file mode 100644
index 0000000..959c90b
--- /dev/null
+++ b/ShiftOS.WinForms/Applications/FileSkimmer.cs
@@ -0,0 +1,238 @@
+using ShiftOS.Objects.ShiftFS;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+using static ShiftOS.Objects.ShiftFS.Utils;
+using Newtonsoft.Json;
+using ShiftOS.Engine;
+
+namespace ShiftOS.WinForms.Applications
+{
+ [Launcher("File Skimmer", true, "al_file_skimmer")]
+ [RequiresUpgrade("file_skimmer")]
+ [WinOpen("file_skimmer")]
+ public partial class FileSkimmer : UserControl, IShiftOSWindow
+ {
+ public FileSkimmer()
+ {
+ InitializeComponent();
+ this.Load += (o, a) =>
+ {
+ ChangeDirectory(Paths.GetPath("root"));
+ };
+ }
+
+ private void lvitems_DoubleClick(object sender, EventArgs e)
+ {
+ if (lvitems.SelectedItems.Count <= 0)
+ return;
+
+ var item = lvitems.SelectedItems[0];
+ var path = item.Tag as string;
+
+ if(currentdir == "__system")
+ {
+ ChangeDirectory(path);
+ }
+ else if(DirectoryExists(currentdir + "/" + path))
+ {
+ ChangeDirectory(currentdir + "/" + path);
+ }
+ else if(FileExists(currentdir + "/" + path))
+ {
+ FileSkimmerBackend.OpenFile(currentdir + "/" + path);
+ }
+ else if(path == "__..")
+ {
+ ChangeToParent();
+ }
+ }
+
+ [Obsolete("This just forwards over to FileSkimmerBackend.OpenFile().")]
+ public void Open(string path)
+ {
+ FileSkimmerBackend.OpenFile(path);
+ }
+
+ [Obsolete("Forwarded to FileSkimmerBackend.GetFileType().")]
+ public static FileType GetFileType(string path)
+ {
+ return FileSkimmerBackend.GetFileType(path);
+ }
+
+ string currentdrive = "0:";
+
+ public void ChangeToParent()
+ {
+ if(currentdir == currentdrive)
+ {
+ ChangeDirectory("__system");
+ }
+
+ ChangeDirectory(GetParent(currentdir));
+ }
+
+ 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";
+ }
+ }
+
+ private string currentdir = "";
+
+ public void ChangeDirectory(string path)
+ {
+ currentdir = path;
+ lbcurrentfolder.Text = currentdir;
+ ResetList();
+ }
+
+
+ public static void GetAllTypes(ImageList list)
+ {
+ list.Images.Add("Directory", Properties.Resources.fileicon0);
+ list.Images.Add("UpOne", Properties.Resources.fileicon5);
+ list.Images.Add("Mount", Properties.Resources.FloppyDriveIcon);
+
+ foreach (FileType value in Enum.GetValues(typeof(FileType)))
+ {
+ list.Images.Add(value.ToString(), GetImage(value));
+ }
+ }
+
+ public void ResetList()
+ {
+ if(lvitems.LargeImageList == null)
+ {
+ lvitems.LargeImageList = new ImageList();
+ lvitems.LargeImageList.TransparentColor = SkinEngine.LoadedSkin.ControlColor;
+ lvitems.LargeImageList.ImageSize = new Size(42, 42);
+ GetAllTypes(lvitems.LargeImageList);
+ }
+
+
+
+ lvitems.Items.Clear();
+ if (currentdir == "__system")
+ {
+ //List all drives
+ foreach (var dir in Mounts)
+ {
+ var item = ConstructItemAsMount(dir);
+ item.ImageKey = "Mount";
+ lvitems.Items.Add(item);
+ }
+ }
+ else if (DirectoryExists(currentdir))
+ {
+ var up = new ListViewItem();
+ up.Text = "Up one";
+ up.ImageKey = "UpOne";
+ up.Tag = "__..";
+ lvitems.Items.Add(up);
+
+
+ foreach(var dir in GetDirectories(currentdir))
+ {
+ var item = ConstructItem(GetDirectoryInfo(dir));
+ item.ImageKey = "Directory";
+ lvitems.Items.Add(item);
+ }
+
+ foreach (var dir in GetFiles(currentdir))
+ {
+ var item = ConstructItem(GetFileInfo(dir));
+ item.ImageKey = FileSkimmerBackend.GetFileType(dir).ToString();
+ lvitems.Items.Add(item);
+ }
+
+ }
+
+ }
+
+ public static ListViewItem ConstructItemAsMount(Directory dir)
+ {
+ var item = new ListViewItem();
+ item.Text = dir.Name + "(" + Mounts.IndexOf(dir).ToString() + ":/)";
+ item.Tag = Mounts.IndexOf(dir).ToString() + ":";
+ return item;
+ }
+
+ public static ListViewItem ConstructItem(Directory dir)
+ {
+ var item = new ListViewItem();
+ item.Text = dir.Name;
+ item.Tag = item.Text;
+ return item;
+ }
+ public static ListViewItem ConstructItem(File dir)
+ {
+ var item = new ListViewItem();
+ item.Text = dir.Name;
+ item.ImageKey = "Directory";
+ item.Tag = item.Text;
+ return item;
+ }
+
+ public static Image GetImage(FileType type)
+ {
+ switch(type)
+ {
+ case FileType.Executable:
+ case FileType.Lua:
+ case FileType.Python:
+ return Properties.Resources.fileiconsaa;
+ case FileType.Image:
+ return Properties.Resources.fileicon3;
+ case FileType.Skin:
+ return Properties.Resources.fileicon10;
+ case FileType.TextFile:
+ return Properties.Resources.fileicon2;
+ default:
+ return Properties.Resources.fileicon1;
+ }
+ }
+
+ private void FileSkimmer_Load(object sender, EventArgs e) {
+
+ }
+
+ public void OnLoad()
+ {
+ }
+
+ public void OnSkinLoad()
+ {
+ }
+
+ public bool OnUnload()
+ {
+ return true;
+ }
+
+ public void OnUpgrade()
+ {
+ }
+ }
+
+
+}