diff --git a/iconviewer/iconviewer/MainForm.xeto b/iconviewer/iconviewer/MainForm.xeto
index e8b1a0a..6a0b205 100644
--- a/iconviewer/iconviewer/MainForm.xeto
+++ b/iconviewer/iconviewer/MainForm.xeto
@@ -14,6 +14,9 @@
+
+
+
diff --git a/iconviewer/iconviewer/MainForm.xeto.cs b/iconviewer/iconviewer/MainForm.xeto.cs
index ff8954c..f523a4d 100644
--- a/iconviewer/iconviewer/MainForm.xeto.cs
+++ b/iconviewer/iconviewer/MainForm.xeto.cs
@@ -1,10 +1,7 @@
using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
using System.IO;
-using System.Linq;
-using Eto.Forms;
using Eto.Drawing;
+using Eto.Forms;
using Eto.Serialization.Xaml;
using Bitmap = libexeinfo.Os2.Bitmap;
@@ -12,36 +9,80 @@ namespace iconviewer
{
public class MainForm : Form
{
+ GridView grdIcons;
ImageView imgIcon;
- TextBox txtPath;
-
+ TextBox txtPath;
+
public MainForm()
{
XamlReader.Load(this);
+
+ grdIcons.Columns.Add(new GridColumn
+ {
+ DataCell =
+ new TextBoxCell {Binding = Binding.Property(b => $"{b.Type}")},
+ HeaderText = "Command"
+ });
+
+ grdIcons.Columns.Add(new GridColumn
+ {
+ DataCell = new TextBoxCell
+ {
+ Binding = Binding.Property(b => $"{b.Width}x{b.Height}")
+ },
+ HeaderText = "Size"
+ });
+
+ grdIcons.Columns.Add(new GridColumn
+ {
+ DataCell = new TextBoxCell
+ {
+ Binding = Binding.Property(b => $"{1 << (int)b.BitsPerPixel}")
+ },
+ HeaderText = "Colors"
+ });
+
+ grdIcons.AllowMultipleSelection = false;
+ grdIcons.SelectionChanged += GrdIconsOnSelectionChanged;
}
- protected void OnBtnPathClick(object sender, EventArgs e)
+ void GrdIconsOnSelectionChanged(object sender, EventArgs eventArgs)
{
- OpenFileDialog dlgOpenFileDialog = new OpenFileDialog {MultiSelect = false};
- dlgOpenFileDialog.Filters.Add(new FileFilter {Extensions = new[] {".ico"}});
- DialogResult result = dlgOpenFileDialog.ShowDialog(this);
-
- if(result != DialogResult.Ok)
+ if(!(grdIcons.SelectedItem is Bitmap.DecodedBitmap icon))
{
- txtPath.Text = "";
imgIcon.Image = null;
return;
}
- txtPath.Text = dlgOpenFileDialog.FileName;
+ imgIcon.Image =
+ new Eto.Drawing.Bitmap((int)icon.Width, (int)icon.Height, PixelFormat.Format32bppRgba, icon.Pixels);
+ }
+
+ protected void OnBtnPathClick(object sender, EventArgs e)
+ {
+ OpenFileDialog dlgOpenFileDialog = new OpenFileDialog {MultiSelect = false};
+ dlgOpenFileDialog.Filters.Add(new FileFilter {Extensions = new[] {".ico"}});
+ DialogResult result = dlgOpenFileDialog.ShowDialog(this);
+
+ if(result != DialogResult.Ok)
+ {
+ txtPath.Text = "";
+ imgIcon.Image = null;
+ grdIcons.DataStore = null;
+ return;
+ }
+
+ txtPath.Text = dlgOpenFileDialog.FileName;
FileStream fstream = new FileStream(dlgOpenFileDialog.FileName, FileMode.Open);
- byte[] data = new byte[fstream.Length];
+ byte[] data = new byte[fstream.Length];
fstream.Read(data, 0, data.Length);
fstream.Dispose();
- Bitmap.DecodedBitmap[] icons = libexeinfo.Os2.Bitmap.DecodeBitmap(data);
- imgIcon.Image = new Eto.Drawing.Bitmap((int)icons[0].Width, (int)icons[0].Height, PixelFormat.Format32bppRgba,
- icons[0].Pixels);
+ Bitmap.DecodedBitmap[] icons = Bitmap.DecodeBitmap(data);
+ imgIcon.Image = new Eto.Drawing.Bitmap((int)icons[0].Width, (int)icons[0].Height,
+ PixelFormat.Format32bppRgba, icons[0].Pixels);
+ grdIcons.DataStore = icons;
+ grdIcons.Visible = icons.Length != 1;
}
protected void HandleAbout(object sender, EventArgs e)
@@ -54,4 +95,4 @@ namespace iconviewer
Application.Instance.Quit();
}
}
-}
+}
\ No newline at end of file