diff --git a/SpineViewer.sln b/SpineViewer.sln
index 477fce0..864681c 100644
--- a/SpineViewer.sln
+++ b/SpineViewer.sln
@@ -20,34 +20,20 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
- Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Debug|Any CPU.ActiveCfg = Debug|x64
- {ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Debug|Any CPU.Build.0 = Debug|x64
{ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Debug|x64.ActiveCfg = Debug|x64
{ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Debug|x64.Build.0 = Debug|x64
- {ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Release|Any CPU.ActiveCfg = Release|x64
- {ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Release|Any CPU.Build.0 = Release|x64
{ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Release|x64.ActiveCfg = Release|x64
{ECD11621-9F72-4BCB-92A4-7D8A426F84FA}.Release|x64.Build.0 = Release|x64
- {CA964DA9-3649-44BC-84F7-B1108A652905}.Debug|Any CPU.ActiveCfg = Debug|x64
- {CA964DA9-3649-44BC-84F7-B1108A652905}.Debug|Any CPU.Build.0 = Debug|x64
{CA964DA9-3649-44BC-84F7-B1108A652905}.Debug|x64.ActiveCfg = Debug|x64
{CA964DA9-3649-44BC-84F7-B1108A652905}.Debug|x64.Build.0 = Debug|x64
- {CA964DA9-3649-44BC-84F7-B1108A652905}.Release|Any CPU.ActiveCfg = Release|x64
- {CA964DA9-3649-44BC-84F7-B1108A652905}.Release|Any CPU.Build.0 = Release|x64
{CA964DA9-3649-44BC-84F7-B1108A652905}.Release|x64.ActiveCfg = Release|x64
{CA964DA9-3649-44BC-84F7-B1108A652905}.Release|x64.Build.0 = Release|x64
- {ECF7297E-031B-4E37-8033-7C2345DB8766}.Debug|Any CPU.ActiveCfg = Debug|x64
- {ECF7297E-031B-4E37-8033-7C2345DB8766}.Debug|Any CPU.Build.0 = Debug|x64
{ECF7297E-031B-4E37-8033-7C2345DB8766}.Debug|x64.ActiveCfg = Debug|x64
{ECF7297E-031B-4E37-8033-7C2345DB8766}.Debug|x64.Build.0 = Debug|x64
- {ECF7297E-031B-4E37-8033-7C2345DB8766}.Release|Any CPU.ActiveCfg = Release|x64
- {ECF7297E-031B-4E37-8033-7C2345DB8766}.Release|Any CPU.Build.0 = Release|x64
{ECF7297E-031B-4E37-8033-7C2345DB8766}.Release|x64.ActiveCfg = Release|x64
{ECF7297E-031B-4E37-8033-7C2345DB8766}.Release|x64.Build.0 = Release|x64
EndGlobalSection
diff --git a/SpineViewer/src/ListViewSkel.Designer.cs b/SpineViewer/src/ListViewSkel.Designer.cs
new file mode 100644
index 0000000..a5cd737
--- /dev/null
+++ b/SpineViewer/src/ListViewSkel.Designer.cs
@@ -0,0 +1,193 @@
+namespace SpineViewer
+{
+ partial class ListViewSkel
+ {
+ ///
+ /// 必需的设计器变量。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清理所有正在使用的资源。
+ ///
+ /// 如果应释放托管资源,为 true;否则为 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region 组件设计器生成的代码
+
+ ///
+ /// 设计器支持所需的方法 - 不要修改
+ /// 使用代码编辑器修改此方法的内容。
+ ///
+ private void InitializeComponent()
+ {
+ tableLayoutPanel = new TableLayoutPanel();
+ flowLayoutPanel_Buttons = new FlowLayoutPanel();
+ button_Add = new Button();
+ button_Insert = new Button();
+ button_Remove = new Button();
+ button_MoveUp = new Button();
+ button_MoveDown = new Button();
+ listView = new ListView();
+ columnHeader_Name = new ColumnHeader();
+ columnHeader_Version = new ColumnHeader();
+ tableLayoutPanel.SuspendLayout();
+ flowLayoutPanel_Buttons.SuspendLayout();
+ SuspendLayout();
+ //
+ // tableLayoutPanel
+ //
+ tableLayoutPanel.ColumnCount = 1;
+ tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
+ tableLayoutPanel.Controls.Add(flowLayoutPanel_Buttons, 0, 0);
+ tableLayoutPanel.Controls.Add(listView, 0, 1);
+ tableLayoutPanel.Dock = DockStyle.Fill;
+ tableLayoutPanel.Location = new Point(0, 0);
+ tableLayoutPanel.Margin = new Padding(0);
+ tableLayoutPanel.Name = "tableLayoutPanel";
+ tableLayoutPanel.RowCount = 2;
+ tableLayoutPanel.RowStyles.Add(new RowStyle());
+ tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
+ tableLayoutPanel.Size = new Size(336, 445);
+ tableLayoutPanel.TabIndex = 2;
+ //
+ // flowLayoutPanel_Buttons
+ //
+ flowLayoutPanel_Buttons.AutoSize = true;
+ flowLayoutPanel_Buttons.Controls.Add(button_Add);
+ flowLayoutPanel_Buttons.Controls.Add(button_Insert);
+ flowLayoutPanel_Buttons.Controls.Add(button_Remove);
+ flowLayoutPanel_Buttons.Controls.Add(button_MoveUp);
+ flowLayoutPanel_Buttons.Controls.Add(button_MoveDown);
+ flowLayoutPanel_Buttons.Dock = DockStyle.Fill;
+ flowLayoutPanel_Buttons.Location = new Point(3, 3);
+ flowLayoutPanel_Buttons.Name = "flowLayoutPanel_Buttons";
+ flowLayoutPanel_Buttons.Size = new Size(330, 40);
+ flowLayoutPanel_Buttons.TabIndex = 4;
+ //
+ // button_Add
+ //
+ button_Add.Anchor = AnchorStyles.None;
+ button_Add.AutoSize = true;
+ button_Add.Location = new Point(3, 3);
+ button_Add.Name = "button_Add";
+ button_Add.Size = new Size(56, 34);
+ button_Add.TabIndex = 0;
+ button_Add.Text = "添加";
+ button_Add.UseVisualStyleBackColor = true;
+ button_Add.Click += button_Add_Click;
+ //
+ // button_Insert
+ //
+ button_Insert.Anchor = AnchorStyles.None;
+ button_Insert.AutoSize = true;
+ button_Insert.Enabled = false;
+ button_Insert.Location = new Point(65, 3);
+ button_Insert.Name = "button_Insert";
+ button_Insert.Size = new Size(56, 34);
+ button_Insert.TabIndex = 4;
+ button_Insert.Text = "插入";
+ button_Insert.UseVisualStyleBackColor = true;
+ button_Insert.Click += button_Insert_Click;
+ //
+ // button_Remove
+ //
+ button_Remove.Anchor = AnchorStyles.None;
+ button_Remove.AutoSize = true;
+ button_Remove.Enabled = false;
+ button_Remove.Location = new Point(127, 3);
+ button_Remove.Name = "button_Remove";
+ button_Remove.Size = new Size(56, 34);
+ button_Remove.TabIndex = 1;
+ button_Remove.Text = "移除";
+ button_Remove.UseVisualStyleBackColor = true;
+ button_Remove.Click += button_Remove_Click;
+ //
+ // button_MoveUp
+ //
+ button_MoveUp.Anchor = AnchorStyles.None;
+ button_MoveUp.AutoSize = true;
+ button_MoveUp.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ button_MoveUp.Enabled = false;
+ button_MoveUp.Location = new Point(189, 3);
+ button_MoveUp.Name = "button_MoveUp";
+ button_MoveUp.Size = new Size(56, 34);
+ button_MoveUp.TabIndex = 2;
+ button_MoveUp.Text = "上移";
+ button_MoveUp.UseVisualStyleBackColor = true;
+ button_MoveUp.Click += button_MoveUp_Click;
+ //
+ // button_MoveDown
+ //
+ button_MoveDown.Anchor = AnchorStyles.None;
+ button_MoveDown.AutoSize = true;
+ button_MoveDown.AutoSizeMode = AutoSizeMode.GrowAndShrink;
+ button_MoveDown.Enabled = false;
+ button_MoveDown.Location = new Point(251, 3);
+ button_MoveDown.Name = "button_MoveDown";
+ button_MoveDown.Size = new Size(56, 34);
+ button_MoveDown.TabIndex = 3;
+ button_MoveDown.Text = "下移";
+ button_MoveDown.UseVisualStyleBackColor = true;
+ button_MoveDown.Click += button_MoveDown_Click;
+ //
+ // listView
+ //
+ listView.Columns.AddRange(new ColumnHeader[] { columnHeader_Name, columnHeader_Version });
+ listView.Dock = DockStyle.Fill;
+ listView.FullRowSelect = true;
+ listView.GridLines = true;
+ listView.Location = new Point(3, 49);
+ listView.Name = "listView";
+ listView.ShowItemToolTips = true;
+ listView.Size = new Size(330, 393);
+ listView.TabIndex = 1;
+ listView.UseCompatibleStateImageBehavior = false;
+ listView.View = View.Details;
+ listView.SelectedIndexChanged += listView_SelectedIndexChanged;
+ //
+ // columnHeader_Name
+ //
+ columnHeader_Name.Text = "名称";
+ columnHeader_Name.Width = 150;
+ //
+ // columnHeader_Version
+ //
+ columnHeader_Version.Text = "版本";
+ columnHeader_Version.Width = 150;
+ //
+ // ListViewSkel
+ //
+ AutoScaleDimensions = new SizeF(11F, 24F);
+ AutoScaleMode = AutoScaleMode.Font;
+ Controls.Add(tableLayoutPanel);
+ Name = "ListViewSkel";
+ Size = new Size(336, 445);
+ tableLayoutPanel.ResumeLayout(false);
+ tableLayoutPanel.PerformLayout();
+ flowLayoutPanel_Buttons.ResumeLayout(false);
+ flowLayoutPanel_Buttons.PerformLayout();
+ ResumeLayout(false);
+ }
+
+ #endregion
+
+ private TableLayoutPanel tableLayoutPanel;
+ private FlowLayoutPanel flowLayoutPanel_Buttons;
+ private Button button_Insert;
+ private Button button_Remove;
+ private Button button_MoveUp;
+ private Button button_MoveDown;
+ private ListView listView;
+ private ColumnHeader columnHeader_Name;
+ private ColumnHeader columnHeader_Version;
+ private Button button_Add;
+ }
+}
diff --git a/SpineViewer/src/ListViewSkel.cs b/SpineViewer/src/ListViewSkel.cs
new file mode 100644
index 0000000..83eb2f2
--- /dev/null
+++ b/SpineViewer/src/ListViewSkel.cs
@@ -0,0 +1,165 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Collections.ObjectModel;
+using SpineViewer.Spine;
+using System.Reflection;
+using SpineViewer.src;
+
+namespace SpineViewer
+{
+ public partial class ListViewSkel : UserControl
+ {
+ [Browsable(true), Category("自定义"), Description("用于显示骨骼属性的属性页")]
+ public PropertyGrid? PropertyGrid { get; set; }
+
+ ///
+ /// Spine 列表
+ ///
+ [Browsable(false)]
+ public ReadOnlyCollection Spines { get => spines.AsReadOnly(); }
+ private readonly List spines = [];
+
+ public ListViewSkel()
+ {
+ InitializeComponent();
+ }
+
+ ///
+ /// 弹出添加对话框
+ ///
+ public void Add()
+ {
+ var dialog = new SkelSelectDialog();
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ var spine = Spine.Spine.New(dialog.Version, dialog.SkelPath, dialog.AtlasPath);
+ spines.Add(spine);
+ listView.Items.Add(new ListViewItem([spine.Name, spine.Version.String()], -1) { ToolTipText = spine.SkelPath });
+ }
+ catch (Exception ex)
+ {
+ Program.Logger.Error(ex.ToString());
+ Program.Logger.Error($"Failed to load {dialog.SkelPath} {dialog.AtlasPath}");
+ MessageBox.Show(ex.ToString(), "骨骼加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+
+ ///
+ /// 弹出批量添加对话框
+ ///
+ public void BatchAdd()
+ {
+ throw new NotImplementedException();
+ }
+
+ private void button_Add_Click(object sender, EventArgs e)
+ {
+ Add();
+ }
+
+ private void button_Insert_Click(object sender, EventArgs e)
+ {
+ if (listView.SelectedIndices.Count <= 0)
+ return;
+
+ var index = listView.SelectedIndices[0];
+ var dialog = new SkelSelectDialog();
+ dialog.ShowDialog();
+ try
+ {
+ var spine = Spine.Spine.New(dialog.Version, dialog.SkelPath, dialog.AtlasPath);
+ spines.Insert(index, spine);
+ listView.Items.Insert(index, new ListViewItem([spine.Name, spine.Version.String()], -1) { ToolTipText = spine.SkelPath });
+ }
+ catch (Exception ex)
+ {
+ Program.Logger.Error(ex.ToString());
+ Program.Logger.Error($"Failed to load {dialog.SkelPath} {dialog.AtlasPath}");
+ MessageBox.Show(ex.ToString(), "骨骼加载失败", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ private void button_Remove_Click(object sender, EventArgs e)
+ {
+ if (listView.SelectedIndices.Count <= 0)
+ return;
+
+ foreach (var i in listView.SelectedIndices.Cast().OrderByDescending(x => x))
+ {
+ spines.RemoveAt(i);
+ listView.Items.RemoveAt(i);
+ }
+ }
+
+ private void button_MoveUp_Click(object sender, EventArgs e)
+ {
+ if (listView.SelectedIndices.Count <= 0)
+ return;
+
+ var index = listView.SelectedIndices[0];
+ if (index > 0)
+ {
+ (spines[index - 1], spines[index]) = (spines[index], spines[index - 1]);
+ var item = listView.Items[index];
+ listView.Items.RemoveAt(index);
+ listView.Items.Insert(index - 1, item);
+ }
+ }
+
+ private void button_MoveDown_Click(object sender, EventArgs e)
+ {
+ if (listView.SelectedIndices.Count <= 0)
+ return;
+
+ var index = listView.SelectedIndices[0];
+ if (index < spines.Count - 1)
+ {
+ (spines[index], spines[index + 1]) = (spines[index + 1], spines[index]);
+ var item = listView.Items[index + 1];
+ listView.Items.RemoveAt(index + 1);
+ listView.Items.Insert(index, item);
+ }
+ }
+
+ private void listView_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (listView.SelectedIndices.Count <= 0)
+ {
+ button_Insert.Enabled = false;
+ button_Remove.Enabled = false;
+ button_MoveUp.Enabled = false;
+ button_MoveDown.Enabled = false;
+ if (PropertyGrid is not null)
+ PropertyGrid.SelectedObject = null;
+ }
+ else if (listView.SelectedIndices.Count <= 1)
+ {
+ button_Insert.Enabled = true;
+ button_Remove.Enabled = true;
+ button_MoveUp.Enabled = true;
+ button_MoveDown.Enabled = true;
+ if (PropertyGrid is not null)
+ PropertyGrid.SelectedObject = spines[listView.SelectedIndices[0]];
+ }
+ else
+ {
+ button_Insert.Enabled = false;
+ button_Remove.Enabled = true;
+ button_MoveUp.Enabled = false;
+ button_MoveDown.Enabled = false;
+ if (PropertyGrid is not null)
+ PropertyGrid.SelectedObject = null;
+ }
+ }
+ }
+}
diff --git a/SpineViewer/src/ListViewSkel.resx b/SpineViewer/src/ListViewSkel.resx
new file mode 100644
index 0000000..8b2ff64
--- /dev/null
+++ b/SpineViewer/src/ListViewSkel.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/SpineViewer/src/MainForm.Designer.cs b/SpineViewer/src/MainForm.Designer.cs
index e27dd65..a958e48 100644
--- a/SpineViewer/src/MainForm.Designer.cs
+++ b/SpineViewer/src/MainForm.Designer.cs
@@ -29,7 +29,6 @@
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
- ListViewItem listViewItem1 = new ListViewItem(new string[] { "A Loooooooooog Name1", "A Loooooooooog Version" }, -1);
menuStrip = new MenuStrip();
toolStripMenuItem_File = new ToolStripMenuItem();
toolStripMenuItem_Open = new ToolStripMenuItem();
@@ -45,16 +44,7 @@
splitContainer_Functional = new SplitContainer();
splitContainer_Information = new SplitContainer();
groupBox_SkelList = new GroupBox();
- tableLayoutPanel = new TableLayoutPanel();
- flowLayoutPanel_Buttons = new FlowLayoutPanel();
- button_Add = new Button();
- button_Insert = new Button();
- button_Remove = new Button();
- button_MoveUp = new Button();
- button_MoveDown = new Button();
- listView_SkelList = new ListView();
- columnHeader_Name = new ColumnHeader();
- columnHeader_Version = new ColumnHeader();
+ listViewSkel = new ListViewSkel();
splitContainer_Config = new SplitContainer();
groupBox_SkelConfig = new GroupBox();
propertyGrid_Skel = new PropertyGrid();
@@ -80,8 +70,6 @@
splitContainer_Information.Panel2.SuspendLayout();
splitContainer_Information.SuspendLayout();
groupBox_SkelList.SuspendLayout();
- tableLayoutPanel.SuspendLayout();
- flowLayoutPanel_Buttons.SuspendLayout();
((System.ComponentModel.ISupportInitialize)splitContainer_Config).BeginInit();
splitContainer_Config.Panel1.SuspendLayout();
splitContainer_Config.Panel2.SuspendLayout();
@@ -251,7 +239,7 @@
//
// groupBox_SkelList
//
- groupBox_SkelList.Controls.Add(tableLayoutPanel);
+ groupBox_SkelList.Controls.Add(listViewSkel);
groupBox_SkelList.Dock = DockStyle.Fill;
groupBox_SkelList.Location = new Point(0, 0);
groupBox_SkelList.Name = "groupBox_SkelList";
@@ -260,126 +248,14 @@
groupBox_SkelList.TabStop = false;
groupBox_SkelList.Text = "模型列表";
//
- // tableLayoutPanel
+ // listViewSkel
//
- tableLayoutPanel.ColumnCount = 1;
- tableLayoutPanel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
- tableLayoutPanel.Controls.Add(flowLayoutPanel_Buttons, 0, 0);
- tableLayoutPanel.Controls.Add(listView_SkelList, 0, 1);
- tableLayoutPanel.Dock = DockStyle.Fill;
- tableLayoutPanel.Location = new Point(3, 26);
- tableLayoutPanel.Name = "tableLayoutPanel";
- tableLayoutPanel.RowCount = 2;
- tableLayoutPanel.RowStyles.Add(new RowStyle());
- tableLayoutPanel.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
- tableLayoutPanel.Size = new Size(330, 703);
- tableLayoutPanel.TabIndex = 1;
- //
- // flowLayoutPanel_Buttons
- //
- flowLayoutPanel_Buttons.AutoSize = true;
- flowLayoutPanel_Buttons.Controls.Add(button_Add);
- flowLayoutPanel_Buttons.Controls.Add(button_Insert);
- flowLayoutPanel_Buttons.Controls.Add(button_Remove);
- flowLayoutPanel_Buttons.Controls.Add(button_MoveUp);
- flowLayoutPanel_Buttons.Controls.Add(button_MoveDown);
- flowLayoutPanel_Buttons.Dock = DockStyle.Fill;
- flowLayoutPanel_Buttons.Location = new Point(3, 3);
- flowLayoutPanel_Buttons.Name = "flowLayoutPanel_Buttons";
- flowLayoutPanel_Buttons.Size = new Size(324, 40);
- flowLayoutPanel_Buttons.TabIndex = 4;
- //
- // button_Add
- //
- button_Add.Anchor = AnchorStyles.None;
- button_Add.AutoSize = true;
- button_Add.Location = new Point(3, 3);
- button_Add.Name = "button_Add";
- button_Add.Size = new Size(56, 34);
- button_Add.TabIndex = 0;
- button_Add.Text = "添加";
- button_Add.UseVisualStyleBackColor = true;
- button_Add.Click += toolStripMenuItem_Open_Click;
- //
- // button_Insert
- //
- button_Insert.Anchor = AnchorStyles.None;
- button_Insert.AutoSize = true;
- button_Insert.Enabled = false;
- button_Insert.Location = new Point(65, 3);
- button_Insert.Name = "button_Insert";
- button_Insert.Size = new Size(56, 34);
- button_Insert.TabIndex = 4;
- button_Insert.Text = "插入";
- button_Insert.UseVisualStyleBackColor = true;
- button_Insert.Click += button_Insert_Click;
- //
- // button_Remove
- //
- button_Remove.Anchor = AnchorStyles.None;
- button_Remove.AutoSize = true;
- button_Remove.Enabled = false;
- button_Remove.Location = new Point(127, 3);
- button_Remove.Name = "button_Remove";
- button_Remove.Size = new Size(56, 34);
- button_Remove.TabIndex = 1;
- button_Remove.Text = "移除";
- button_Remove.UseVisualStyleBackColor = true;
- button_Remove.Click += button_Remove_Click;
- //
- // button_MoveUp
- //
- button_MoveUp.Anchor = AnchorStyles.None;
- button_MoveUp.AutoSize = true;
- button_MoveUp.AutoSizeMode = AutoSizeMode.GrowAndShrink;
- button_MoveUp.Enabled = false;
- button_MoveUp.Location = new Point(189, 3);
- button_MoveUp.Name = "button_MoveUp";
- button_MoveUp.Size = new Size(56, 34);
- button_MoveUp.TabIndex = 2;
- button_MoveUp.Text = "上移";
- button_MoveUp.UseVisualStyleBackColor = true;
- button_MoveUp.Click += button_MoveUp_Click;
- //
- // button_MoveDown
- //
- button_MoveDown.Anchor = AnchorStyles.None;
- button_MoveDown.AutoSize = true;
- button_MoveDown.AutoSizeMode = AutoSizeMode.GrowAndShrink;
- button_MoveDown.Enabled = false;
- button_MoveDown.Location = new Point(251, 3);
- button_MoveDown.Name = "button_MoveDown";
- button_MoveDown.Size = new Size(56, 34);
- button_MoveDown.TabIndex = 3;
- button_MoveDown.Text = "下移";
- button_MoveDown.UseVisualStyleBackColor = true;
- button_MoveDown.Click += button_MoveDown_Click;
- //
- // listView_SkelList
- //
- listView_SkelList.Columns.AddRange(new ColumnHeader[] { columnHeader_Name, columnHeader_Version });
- listView_SkelList.Dock = DockStyle.Fill;
- listView_SkelList.FullRowSelect = true;
- listView_SkelList.GridLines = true;
- listView_SkelList.Items.AddRange(new ListViewItem[] { listViewItem1 });
- listView_SkelList.Location = new Point(3, 49);
- listView_SkelList.Name = "listView_SkelList";
- listView_SkelList.ShowItemToolTips = true;
- listView_SkelList.Size = new Size(324, 651);
- listView_SkelList.TabIndex = 1;
- listView_SkelList.UseCompatibleStateImageBehavior = false;
- listView_SkelList.View = View.Details;
- listView_SkelList.SelectedIndexChanged += listView_SkelList_SelectedIndexChanged;
- //
- // columnHeader_Name
- //
- columnHeader_Name.Text = "名称";
- columnHeader_Name.Width = 150;
- //
- // columnHeader_Version
- //
- columnHeader_Version.Text = "版本";
- columnHeader_Version.Width = 150;
+ listViewSkel.Dock = DockStyle.Fill;
+ listViewSkel.Location = new Point(3, 26);
+ listViewSkel.Name = "listViewSkel";
+ listViewSkel.PropertyGrid = propertyGrid_Skel;
+ listViewSkel.Size = new Size(330, 703);
+ listViewSkel.TabIndex = 0;
//
// splitContainer_Config
//
@@ -514,10 +390,6 @@
((System.ComponentModel.ISupportInitialize)splitContainer_Information).EndInit();
splitContainer_Information.ResumeLayout(false);
groupBox_SkelList.ResumeLayout(false);
- tableLayoutPanel.ResumeLayout(false);
- tableLayoutPanel.PerformLayout();
- flowLayoutPanel_Buttons.ResumeLayout(false);
- flowLayoutPanel_Buttons.PerformLayout();
splitContainer_Config.Panel1.ResumeLayout(false);
splitContainer_Config.Panel2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)splitContainer_Config).EndInit();
@@ -551,16 +423,6 @@
private ToolStripMenuItem toolStripMenuItem_Help;
private ToolStripMenuItem toolStripMenuItem_About;
private ToolStripMenuItem toolStripMenuItem_BatchOpen;
- private TableLayoutPanel tableLayoutPanel;
- private FlowLayoutPanel flowLayoutPanel_Buttons;
- private Button button_Add;
- private Button button_Insert;
- private Button button_Remove;
- private Button button_MoveUp;
- private Button button_MoveDown;
- private ListView listView_SkelList;
- private ColumnHeader columnHeader_Name;
- private ColumnHeader columnHeader_Version;
private GroupBox groupBox_Preview;
private Panel panel_Preview;
private Panel panel_PreviewContainer;
@@ -568,5 +430,6 @@
private OpenFileDialog openFileDialog_Atlas;
private ToolTip toolTip1;
private PropertyGrid propertyGrid_Skel;
+ private ListViewSkel listViewSkel;
}
}
diff --git a/SpineViewer/src/MainForm.cs b/SpineViewer/src/MainForm.cs
index e62f18b..a5ea6f9 100644
--- a/SpineViewer/src/MainForm.cs
+++ b/SpineViewer/src/MainForm.cs
@@ -7,14 +7,10 @@ namespace SpineViewer
{
public partial class MainForm : Form
{
- Manager spineManger = null;
-
public MainForm()
{
InitializeComponent();
InitializeLogConfiguration();
-
- spineManger = new(listView_SkelList);
}
///
@@ -49,30 +45,18 @@ namespace SpineViewer
private void toolStripMenuItem_Open_Click(object sender, EventArgs e)
{
- var dialog = new SkelSelectDialog();
- if (dialog.ShowDialog() == DialogResult.OK)
- {
- try
- {
- spineManger.Add(Spine.Spine.New(dialog.Version, dialog.SkelPath, dialog.AtlasPath));
- }
- catch (Exception ex)
- {
- Program.Logger.Error(ex.ToString());
- Program.Logger.Error($"Failed to load {dialog.SkelPath} {dialog.AtlasPath}");
- MessageBox.Show(ex.ToString(), "ʧ", MessageBoxButtons.OK, MessageBoxIcon.Error);
- }
- }
+ listViewSkel.Add();
}
private void toolStripMenuItem_BatchOpen_Click(object sender, EventArgs e)
{
+ listViewSkel.BatchAdd();
}
private void toolStripMenuItem_Export_Click(object sender, EventArgs e)
{
var a = new SizeF(10, 100);
- spineManger.Spines[0].Position = spineManger.Spines[0].Position + a;
+ listViewSkel.Spines[0].Position = listViewSkel.Spines[0].Position + a;
}
private void toolStripMenuItem_Exit_Click(object sender, EventArgs e)
@@ -82,80 +66,6 @@ namespace SpineViewer
#endregion
- #region ģб
-
- // button_Add_Click => toolStripMenuItem_Open_Click
-
- private void button_Insert_Click(object sender, EventArgs e)
- {
- if (listView_SkelList.SelectedIndices.Count <= 0)
- return;
-
- var index = listView_SkelList.SelectedIndices[0];
- var dialog = new SkelSelectDialog();
- dialog.ShowDialog();
- try
- {
- spineManger.Insert(index, Spine.Spine.New(dialog.Version, dialog.SkelPath, dialog.AtlasPath));
- }
- catch (Exception ex)
- {
- Program.Logger.Error(ex.ToString());
- Program.Logger.Error($"Failed to load {dialog.SkelPath} {dialog.AtlasPath}");
- }
- }
-
- private void button_Remove_Click(object sender, EventArgs e)
- {
- if (listView_SkelList.SelectedIndices.Count <= 0)
- return;
- spineManger.Remove(listView_SkelList.SelectedIndices.Cast());
- }
-
- private void button_MoveUp_Click(object sender, EventArgs e)
- {
- if (listView_SkelList.SelectedIndices.Count <= 0)
- return;
- spineManger.MoveUp(listView_SkelList.SelectedIndices[0]);
- }
-
- private void button_MoveDown_Click(object sender, EventArgs e)
- {
- if (listView_SkelList.SelectedIndices.Count <= 0)
- return;
- spineManger.MoveDown(listView_SkelList.SelectedIndices[0]);
- }
-
- private void listView_SkelList_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (listView_SkelList.SelectedIndices.Count <= 0)
- {
- button_Insert.Enabled = false;
- button_Remove.Enabled = false;
- button_MoveUp.Enabled = false;
- button_MoveDown.Enabled = false;
- propertyGrid_Skel.SelectedObject = null;
- }
- else if (listView_SkelList.SelectedIndices.Count <= 1)
- {
- button_Insert.Enabled = true;
- button_Remove.Enabled = true;
- button_MoveUp.Enabled = true;
- button_MoveDown.Enabled = true;
- propertyGrid_Skel.SelectedObject = spineManger.Spines[listView_SkelList.SelectedIndices[0]];
- }
- else
- {
- button_Insert.Enabled = false;
- button_Remove.Enabled = true;
- button_MoveUp.Enabled = false;
- button_MoveDown.Enabled = false;
- propertyGrid_Skel.SelectedObject = null;
- }
- }
-
- #endregion
-
#region
#endregion
diff --git a/SpineViewer/src/Program.cs b/SpineViewer/src/Program.cs
index ef00088..b511699 100644
--- a/SpineViewer/src/Program.cs
+++ b/SpineViewer/src/Program.cs
@@ -18,7 +18,16 @@ namespace SpineViewer
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
- Application.Run(new MainForm());
+
+ try
+ {
+ Application.Run(new MainForm());
+ }
+ catch (Exception ex)
+ {
+ Logger.Fatal(ex.ToString());
+ MessageBox.Show(ex.ToString(), "ѱ", MessageBoxButtons.OK, MessageBoxIcon.Stop);
+ }
}
///
diff --git a/SpineViewer/src/Spine/Manager.cs b/SpineViewer/src/Spine/Manager.cs
deleted file mode 100644
index 916d672..0000000
--- a/SpineViewer/src/Spine/Manager.cs
+++ /dev/null
@@ -1,115 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace SpineViewer.Spine
-{
- ///
- /// 骨骼列表管理器
- ///
- class Manager
- {
- ///
- /// 骨骼列表
- ///
- public ReadOnlyCollection Spines { get => spines.AsReadOnly(); }
- private readonly List spines = [];
-
- private readonly ListView listView;
-
- ///
- /// 骨骼管理器
- ///
- /// 用于显示骨骼信息的列表
- public Manager(ListView listView)
- {
- listView.BeginUpdate();
- listView.Columns.Clear();
- listView.Items.Clear();
- listView.Columns.AddRange([
- new() { Text = "名称", Width = 150},
- new() { Text = "版本", Width = 150 }
- ]);
- listView.EndUpdate();
- this.listView = listView;
- }
-
- ///
- /// 在末尾添加一个
- ///
- public void Add(Spine spine)
- {
- spines.Add(spine);
- listView.Items.Add(new ListViewItem([
- Path.GetFileNameWithoutExtension(spine.SkelPath),
- spine.Version.String()
- ], -1)
- { ToolTipText = spine.SkelPath });
- }
-
- ///
- /// 在指定下标之前添加一个
- ///
- public void Insert(int index, Spine spine)
- {
- spines.Insert(index, spine);
- listView.Items.Insert(index, new ListViewItem([
- Path.GetFileNameWithoutExtension(spine.SkelPath),
- spine.Version.String()
- ], -1)
- { ToolTipText = spine.SkelPath });
- }
-
- ///
- /// 批量移除
- ///
- public void Remove(IEnumerable indices)
- {
- foreach (var i in indices.OrderByDescending(x => x))
- {
- spines.RemoveAt(i);
- listView.Items.RemoveAt(i);
- }
- }
-
- ///
- /// 指定下标元素前移一位
- ///
- public void MoveUp(int index)
- {
- if (index > 0)
- {
- (spines[index - 1], spines[index]) = (spines[index], spines[index - 1]);
- var item = listView.Items[index];
- listView.Items.RemoveAt(index);
- listView.Items.Insert(index - 1, item);
- }
- }
-
- ///
- /// 指定下标元素后移一位
- ///
- public void MoveDown(int index)
- {
- if (index < spines.Count - 1)
- {
- (spines[index], spines[index + 1]) = (spines[index + 1], spines[index]);
- var item = listView.Items[index + 1];
- listView.Items.RemoveAt(index + 1);
- listView.Items.Insert(index, item);
- }
- }
-
- ///
- /// 全部移除
- ///
- public void Clear()
- {
- spines.Clear();
- listView.Clear();
- }
- }
-}
diff --git a/SpineViewer/src/Spine/Spine.cs b/SpineViewer/src/Spine/Spine.cs
index a9b2d38..b6f5332 100644
--- a/SpineViewer/src/Spine/Spine.cs
+++ b/SpineViewer/src/Spine/Spine.cs
@@ -136,7 +136,7 @@ namespace SpineViewer.Spine
/// 获取所属版本
///
[TypeConverter(typeof(VersionTypeConverter))]
- [Browsable(true), Category("基本信息"), DisplayName("运行时版本")]
+ [Browsable(true), Category("基本信息"), DisplayName("版本")]
public Version Version { get; }
///