aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.Frontend/Apps
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-08-05 15:44:09 -0400
committerMichael <[email protected]>2017-08-05 15:44:09 -0400
commitec363f09caa99f8b0ffa9351950fed5629f396f7 (patch)
tree686ef8fb3d48a389613178c2b4c4f964a2839e07 /ShiftOS.Frontend/Apps
parent01683f1fcb8a593af66b0a882db7b3a2beba9fa0 (diff)
downloadshiftos_thereturn-ec363f09caa99f8b0ffa9351950fed5629f396f7.tar.gz
shiftos_thereturn-ec363f09caa99f8b0ffa9351950fed5629f396f7.tar.bz2
shiftos_thereturn-ec363f09caa99f8b0ffa9351950fed5629f396f7.zip
file skimmer icons
Diffstat (limited to 'ShiftOS.Frontend/Apps')
-rw-r--r--ShiftOS.Frontend/Apps/FileSkimmer.cs130
1 files changed, 108 insertions, 22 deletions
diff --git a/ShiftOS.Frontend/Apps/FileSkimmer.cs b/ShiftOS.Frontend/Apps/FileSkimmer.cs
index 9249595..315e7ad 100644
--- a/ShiftOS.Frontend/Apps/FileSkimmer.cs
+++ b/ShiftOS.Frontend/Apps/FileSkimmer.cs
@@ -1,10 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Graphics;
using ShiftOS.Engine;
+using ShiftOS.Frontend.GraphicsSubsystem;
+using ShiftOS.Frontend.GUI;
using static ShiftOS.Objects.ShiftFS.Utils;
namespace ShiftOS.Frontend.Apps
@@ -16,7 +20,7 @@ namespace ShiftOS.Frontend.Apps
{
private string _currentdirectory = "0:";
private const string SD_SYSTEM = "__system";
- private GUI.ListBox _fList = null;
+ private GUI.ListView _fList = null;
private GUI.TextControl _currentdirtext = null;
public void OnLoad()
@@ -46,19 +50,21 @@ namespace ShiftOS.Frontend.Apps
Width = 720;
Height = 480;
- _fList = new GUI.ListBox();
+ _fList = new GUI.ListView();
+ //TODO: keyboard support in listviews
+ /*
_fList.KeyEvent += (e) =>
{
if(e.Key == Microsoft.Xna.Framework.Input.Keys.Enter)
{
Navigate(_fList.SelectedItem.ToString());
}
- };
+ };*/
_fList.DoubleClick += () =>
{
try
{
- Navigate(_fList.SelectedItem.ToString());
+ Navigate(_fList.SelectedItem.Tag);
}
catch { }
};
@@ -69,30 +75,28 @@ namespace ShiftOS.Frontend.Apps
ResetList();
}
- public void Navigate(string relativepath)
+ public void Navigate(string path)
{
- if (relativepath == "Up one...")
+ if(path == "__up")
{
- if (_currentdirectory.Contains('/'))
+ if (_currentdirectory == SD_SYSTEM)
+ throw new NaughtyDeveloperException("Someone tried to make it so you can go \"up one directory\" in the mounts list.");
+ if (_currentdirectory.EndsWith(":"))
{
- int _index = _currentdirectory.LastIndexOf('/');
- int _len = _currentdirectory.Length - _index;
- _currentdirectory = _currentdirectory.Remove(_index, _len);
+ _currentdirectory = SD_SYSTEM;
ResetList();
+ return;
}
else
{
- _currentdirectory = SD_SYSTEM;
+ int slashlast = _currentdirectory.LastIndexOf("/");
+ int len = _currentdirectory.Length - slashlast;
+ _currentdirectory = _currentdirectory.Remove(slashlast, len);
ResetList();
+ return;
}
- return;
}
- string path = "";
- if (_currentdirectory == SD_SYSTEM)
- path = relativepath;
- else
- path = _currentdirectory + "/" + relativepath;
if (DirectoryExists(path))
{
_currentdirectory = path;
@@ -102,16 +106,73 @@ namespace ShiftOS.Frontend.Apps
{
if (!FileSkimmerBackend.OpenFile(path))
{
- Engine.Infobox.Show("File Skimmer can't open this file!", "A program that can open files of this type was not found on your computer.");
+ Engine.Infobox.Show("File Skimmer can't open this file!", "File Skimmer couldn't find a program that can open a file of this type. Please install a program that can handle this file and try again.");
+ }
+ }
+ }
+
+ public Texture2D ToTexture2D(System.Drawing.Image img)
+ {
+ if (img == null)
+ return null;
+ using(var bmp = new System.Drawing.Bitmap(img))
+ {
+ var lck = bmp.LockBits(new System.Drawing.Rectangle(0, 0, bmp.Width, bmp.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
+ var arr = new byte[Math.Abs(lck.Stride) * lck.Height];
+ Marshal.Copy(lck.Scan0, arr, 0, arr.Length);
+ for(int i = 0; i < arr.Length; i += 4)
+ {
+ byte r = arr[i];
+ byte b = arr[i + 2];
+ arr[i] = b;
+ arr[i + 2] = r;
}
+ var tex2 = new Texture2D(UIManager.GraphicsDevice, bmp.Width, bmp.Height);
+ tex2.SetData<byte>(arr);
+ bmp.UnlockBits(lck);
+ return tex2;
}
}
public void OnSkinLoad()
{
+ foreach(var name in Enum.GetNames(typeof(FileType)))
+ {
+ FileType ftype = (FileType)Enum.Parse(typeof(FileType), name);
+ var img = ToTexture2D(GetImage(ftype));
+ _fList.SetImage(name, img);
+ }
+
+
_currentdirtext.Font = SkinEngine.LoadedSkin.Header3Font;
}
+ public System.Drawing.Image GetImage(FileType type)
+ {
+ switch (type)
+ {
+ case FileType.UpOne:
+ return Properties.Resources.fileicon5;
+ case FileType.Mount:
+ case FileType.Directory:
+ return Properties.Resources.fileicon0;
+ 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;
+ case FileType.CommandFormat:
+ return Properties.Resources.fileiconcf;
+ default:
+ return Properties.Resources.fileicon1;
+ }
+ }
+
public bool OnUnload()
{
return true;
@@ -130,13 +191,25 @@ namespace ShiftOS.Frontend.Apps
_fList.ClearItems();
if (_currentdirectory != SD_SYSTEM)
- _fList.AddItem("Up one...");
+ _fList.AddItem(new GUI.ListViewItem
+ {
+ Text = "Up one...",
+ Tag = "__up",
+ ImageKey = FileType.UpOne.ToString()
+ });
if(_currentdirectory == SD_SYSTEM)
{
foreach(var mount in Mounts)
{
- _fList.AddItem(Mounts.IndexOf(mount) + ":");
+ string mountpath = $"{Mounts.IndexOf(mount)}:";
+ string name = $"{mount.Name} ({mountpath})";
+ _fList.AddItem(new ListViewItem
+ {
+ Text = name,
+ Tag = mountpath,
+ ImageKey = FileType.Mount.ToString()
+ });
}
}
else
@@ -144,12 +217,25 @@ namespace ShiftOS.Frontend.Apps
foreach(var dir in GetDirectories(_currentdirectory))
{
var dinf = GetDirectoryInfo(dir);
- _fList.AddItem(dinf.Name);
+ _fList.AddItem(new ListViewItem
+ {
+ Text = dinf.Name,
+ Tag = dir,
+ ImageKey = FileType.Directory.ToString()
+ });
}
foreach (var dir in GetFiles(_currentdirectory))
{
var dinf = GetFileInfo(dir);
- _fList.AddItem(dinf.Name);
+ var ext = FileSkimmerBackend.GetFileType(dir);
+
+
+ _fList.AddItem(new ListViewItem
+ {
+ Text = dinf.Name,
+ Tag = dir,
+ ImageKey = ext.ToString()
+ });
}
}