From 2db332c8ad3dff265ab209a1ff727f30be4dbd20 Mon Sep 17 00:00:00 2001 From: Ian C Date: Mon, 1 Aug 2005 23:46:42 +0000 Subject: Initial working version --- MainForm.cs | 868 +++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 687 insertions(+), 181 deletions(-) (limited to 'MainForm.cs') diff --git a/MainForm.cs b/MainForm.cs index 13da6d8..18ffb97 100644 --- a/MainForm.cs +++ b/MainForm.cs @@ -19,7 +19,9 @@ // using System; using System.Drawing; +using System.Drawing.Imaging; using System.Windows.Forms; +using System.IO; namespace BitmapSpriteEd { @@ -28,34 +30,50 @@ namespace BitmapSpriteEd /// public class MainForm : System.Windows.Forms.Form { - private System.Windows.Forms.MainMenu m_menu; - private System.Windows.Forms.NumericUpDown m_frameNum; - private System.Windows.Forms.MenuItem m_new; - private System.Windows.Forms.Button m_addFrame; - private System.Windows.Forms.MenuItem m_about; - private System.Windows.Forms.NumericUpDown m_spriteNum; - private System.Windows.Forms.TextBox m_spriteName; - private System.Windows.Forms.MenuItem m_saveAs; + private System.ComponentModel.IContainer components; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.MenuItem m_helpMenu; private System.Windows.Forms.Button m_removeFrame; - private System.Windows.Forms.MenuItem m_open; + private System.Windows.Forms.Button m_addFrame; + private System.Windows.Forms.MenuItem m_break1; private System.Windows.Forms.MenuItem m_fileMenu; + private System.Windows.Forms.Button m_addSprite; + private System.Windows.Forms.MenuItem m_exportSinglePNG; + private System.Windows.Forms.Label m_spriteCount; + private System.Windows.Forms.Button m_removeSprite; + private System.Windows.Forms.TextBox m_spriteName; private System.Windows.Forms.MenuItem m_exportMenu; - private System.Windows.Forms.MenuItem m_quit; - private System.Windows.Forms.MenuItem m_exportPNG; - private System.Windows.Forms.GroupBox m_animGroup; + private System.Windows.Forms.CheckBox m_addFrameAsCopy; + private System.Windows.Forms.MenuItem m_about; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.MenuItem m_break1; - private System.Windows.Forms.GroupBox m_editGroup; - private System.Windows.Forms.Button m_addSprite; + private System.Windows.Forms.CheckBox m_animStretch; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Timer m_timer; + private System.Windows.Forms.MainMenu m_menu; + private System.Windows.Forms.GroupBox m_animGroup; + private System.Windows.Forms.CheckBox m_animEnable; + private System.Windows.Forms.NumericUpDown m_animSpeed; + private System.Windows.Forms.MenuItem m_quit; private System.Windows.Forms.MenuItem m_save; + private System.Windows.Forms.MenuItem m_exportPNG; + private System.Windows.Forms.MenuItem m_saveAs; + private System.Windows.Forms.CheckBox m_animPong; + private System.Windows.Forms.NumericUpDown m_spriteNum; + private System.Windows.Forms.GroupBox m_editGroup; + private System.Windows.Forms.MenuItem m_new; + private System.Windows.Forms.MenuItem m_open; + private System.Windows.Forms.PictureBox m_preview; + private System.Windows.Forms.Label m_frameCount; private System.Windows.Forms.GroupBox m_spriteGroup; - private System.Windows.Forms.Button m_removeSprite; - private System.Windows.Forms.MenuItem m_helpMenu; + private System.Windows.Forms.NumericUpDown m_frameNum; private GfxEditor m_edit; private SpriteList m_sprites; + private string m_path; + private string m_exportPath; + private int m_animIndex; + private int m_animIndexInc=1; public MainForm() { @@ -64,10 +82,16 @@ namespace BitmapSpriteEd // InitializeComponent(); + m_path=""; + m_exportPath=""; + m_sprites=new SpriteList(); + m_edit=new GfxEditor(); m_edit.Location=new Point(4,16); m_editGroup.Controls.Add(m_edit); + m_edit.FrameResize+=new GfxEditor.FrameResizeEventHandler(OnFrameResize); + OnNew(null,null); } @@ -84,54 +108,75 @@ namespace BitmapSpriteEd /// not be able to load this method if it was changed manually. /// private void InitializeComponent() { - this.m_helpMenu = new System.Windows.Forms.MenuItem(); - this.m_removeSprite = new System.Windows.Forms.Button(); + this.components = new System.ComponentModel.Container(); + this.m_frameNum = new System.Windows.Forms.NumericUpDown(); this.m_spriteGroup = new System.Windows.Forms.GroupBox(); - this.m_save = new System.Windows.Forms.MenuItem(); - this.m_addSprite = new System.Windows.Forms.Button(); + this.m_frameCount = new System.Windows.Forms.Label(); + this.m_preview = new System.Windows.Forms.PictureBox(); + this.m_open = new System.Windows.Forms.MenuItem(); + this.m_new = new System.Windows.Forms.MenuItem(); this.m_editGroup = new System.Windows.Forms.GroupBox(); - this.m_break1 = new System.Windows.Forms.MenuItem(); - this.label1 = new System.Windows.Forms.Label(); - this.label2 = new System.Windows.Forms.Label(); - this.label3 = new System.Windows.Forms.Label(); - this.m_animGroup = new System.Windows.Forms.GroupBox(); + this.m_spriteNum = new System.Windows.Forms.NumericUpDown(); + this.m_animPong = new System.Windows.Forms.CheckBox(); + this.m_saveAs = new System.Windows.Forms.MenuItem(); this.m_exportPNG = new System.Windows.Forms.MenuItem(); + this.m_save = new System.Windows.Forms.MenuItem(); this.m_quit = new System.Windows.Forms.MenuItem(); + this.m_animSpeed = new System.Windows.Forms.NumericUpDown(); + this.m_animEnable = new System.Windows.Forms.CheckBox(); + this.m_animGroup = new System.Windows.Forms.GroupBox(); + this.m_menu = new System.Windows.Forms.MainMenu(); + this.m_timer = new System.Windows.Forms.Timer(this.components); + this.label4 = new System.Windows.Forms.Label(); + this.m_animStretch = new System.Windows.Forms.CheckBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.m_about = new System.Windows.Forms.MenuItem(); + this.m_addFrameAsCopy = new System.Windows.Forms.CheckBox(); this.m_exportMenu = new System.Windows.Forms.MenuItem(); - this.m_fileMenu = new System.Windows.Forms.MenuItem(); - this.m_open = new System.Windows.Forms.MenuItem(); - this.m_removeFrame = new System.Windows.Forms.Button(); - this.m_saveAs = new System.Windows.Forms.MenuItem(); this.m_spriteName = new System.Windows.Forms.TextBox(); - this.m_spriteNum = new System.Windows.Forms.NumericUpDown(); - this.m_about = new System.Windows.Forms.MenuItem(); + this.m_removeSprite = new System.Windows.Forms.Button(); + this.m_spriteCount = new System.Windows.Forms.Label(); + this.m_exportSinglePNG = new System.Windows.Forms.MenuItem(); + this.m_addSprite = new System.Windows.Forms.Button(); + this.m_fileMenu = new System.Windows.Forms.MenuItem(); + this.m_break1 = new System.Windows.Forms.MenuItem(); this.m_addFrame = new System.Windows.Forms.Button(); - this.m_new = new System.Windows.Forms.MenuItem(); - this.m_frameNum = new System.Windows.Forms.NumericUpDown(); - this.m_menu = new System.Windows.Forms.MainMenu(); + this.m_removeFrame = new System.Windows.Forms.Button(); + this.m_helpMenu = new System.Windows.Forms.MenuItem(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.m_frameNum)).BeginInit(); this.m_spriteGroup.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_spriteNum)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.m_frameNum)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.m_animSpeed)).BeginInit(); + this.m_animGroup.SuspendLayout(); this.SuspendLayout(); // - // m_helpMenu - // - this.m_helpMenu.Index = 2; - this.m_helpMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.m_about}); - this.m_helpMenu.Text = "Help"; - // - // m_removeSprite + // m_frameNum // - this.m_removeSprite.Location = new System.Drawing.Point(224, 32); - this.m_removeSprite.Name = "m_removeSprite"; - this.m_removeSprite.Size = new System.Drawing.Size(64, 24); - this.m_removeSprite.TabIndex = 5; - this.m_removeSprite.Text = "Remove"; - this.m_removeSprite.Click += new System.EventHandler(this.OnRemoveSprite); + this.m_frameNum.Location = new System.Drawing.Point(64, 96); + this.m_frameNum.Minimum = new System.Decimal(new int[] { + 1, + 0, + 0, + 0}); + this.m_frameNum.Name = "m_frameNum"; + this.m_frameNum.ReadOnly = true; + this.m_frameNum.Size = new System.Drawing.Size(64, 20); + this.m_frameNum.TabIndex = 2; + this.m_frameNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.m_frameNum.Value = new System.Decimal(new int[] { + 1, + 0, + 0, + 0}); + this.m_frameNum.ValueChanged += new System.EventHandler(this.OnFrameSelected); // // m_spriteGroup // + this.m_spriteGroup.Controls.Add(this.m_addFrameAsCopy); + this.m_spriteGroup.Controls.Add(this.m_frameCount); + this.m_spriteGroup.Controls.Add(this.m_spriteCount); this.m_spriteGroup.Controls.Add(this.m_spriteName); this.m_spriteGroup.Controls.Add(this.label3); this.m_spriteGroup.Controls.Add(this.m_removeFrame); @@ -144,27 +189,43 @@ namespace BitmapSpriteEd this.m_spriteGroup.Controls.Add(this.m_spriteNum); this.m_spriteGroup.Location = new System.Drawing.Point(424, 8); this.m_spriteGroup.Name = "m_spriteGroup"; - this.m_spriteGroup.Size = new System.Drawing.Size(304, 152); + this.m_spriteGroup.Size = new System.Drawing.Size(288, 192); this.m_spriteGroup.TabIndex = 1; this.m_spriteGroup.TabStop = false; this.m_spriteGroup.Text = "Sprite Frames"; // - // m_save + // m_frameCount // - this.m_save.Enabled = false; - this.m_save.Index = 2; - this.m_save.Shortcut = System.Windows.Forms.Shortcut.CtrlS; - this.m_save.Text = "Save"; - this.m_save.Click += new System.EventHandler(this.OnSave); + this.m_frameCount.Location = new System.Drawing.Point(136, 104); + this.m_frameCount.Name = "m_frameCount"; + this.m_frameCount.Size = new System.Drawing.Size(56, 16); + this.m_frameCount.TabIndex = 11; + this.m_frameCount.Text = "label5"; // - // m_addSprite + // m_preview // - this.m_addSprite.Location = new System.Drawing.Point(144, 32); - this.m_addSprite.Name = "m_addSprite"; - this.m_addSprite.Size = new System.Drawing.Size(64, 24); - this.m_addSprite.TabIndex = 4; - this.m_addSprite.Text = "Add"; - this.m_addSprite.Click += new System.EventHandler(this.OnAddSprite); + this.m_preview.BackColor = System.Drawing.Color.Black; + this.m_preview.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; + this.m_preview.Location = new System.Drawing.Point(176, 24); + this.m_preview.Name = "m_preview"; + this.m_preview.Size = new System.Drawing.Size(64, 64); + this.m_preview.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.m_preview.TabIndex = 3; + this.m_preview.TabStop = false; + // + // m_open + // + this.m_open.Index = 1; + this.m_open.Shortcut = System.Windows.Forms.Shortcut.CtrlO; + this.m_open.Text = "Open"; + this.m_open.Click += new System.EventHandler(this.OnOpen); + // + // m_new + // + this.m_new.Index = 0; + this.m_new.Shortcut = System.Windows.Forms.Shortcut.CtrlN; + this.m_new.Text = "New"; + this.m_new.Click += new System.EventHandler(this.OnNew); // // m_editGroup // @@ -175,23 +236,142 @@ namespace BitmapSpriteEd this.m_editGroup.TabStop = false; this.m_editGroup.Text = "Editor"; // - // m_break1 + // m_spriteNum // - this.m_break1.Index = 4; - this.m_break1.Text = "-"; + this.m_spriteNum.Location = new System.Drawing.Point(64, 32); + this.m_spriteNum.Minimum = new System.Decimal(new int[] { + 1, + 0, + 0, + 0}); + this.m_spriteNum.Name = "m_spriteNum"; + this.m_spriteNum.ReadOnly = true; + this.m_spriteNum.Size = new System.Drawing.Size(64, 20); + this.m_spriteNum.TabIndex = 0; + this.m_spriteNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.m_spriteNum.Value = new System.Decimal(new int[] { + 1, + 0, + 0, + 0}); + this.m_spriteNum.ValueChanged += new System.EventHandler(this.OnSpriteSelected); // - // label1 + // m_animPong // - this.label1.Location = new System.Drawing.Point(8, 32); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(56, 24); - this.label1.TabIndex = 1; - this.label1.Text = "Sprite:"; - this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.m_animPong.Location = new System.Drawing.Point(8, 48); + this.m_animPong.Name = "m_animPong"; + this.m_animPong.Size = new System.Drawing.Size(120, 16); + this.m_animPong.TabIndex = 4; + this.m_animPong.Text = "Ping/Pong"; + this.m_animPong.CheckedChanged += new System.EventHandler(this.OnAnimPingPong); + // + // m_saveAs + // + this.m_saveAs.Index = 3; + this.m_saveAs.Shortcut = System.Windows.Forms.Shortcut.F12; + this.m_saveAs.Text = "Save as..."; + this.m_saveAs.Click += new System.EventHandler(this.OnSaveAs); + // + // m_exportPNG + // + this.m_exportPNG.Index = 0; + this.m_exportPNG.Text = "Export to PNG"; + this.m_exportPNG.Click += new System.EventHandler(this.OnExportPNG); + // + // m_save + // + this.m_save.Enabled = false; + this.m_save.Index = 2; + this.m_save.Shortcut = System.Windows.Forms.Shortcut.CtrlS; + this.m_save.Text = "Save"; + this.m_save.Click += new System.EventHandler(this.OnSave); + // + // m_quit + // + this.m_quit.Index = 5; + this.m_quit.Shortcut = System.Windows.Forms.Shortcut.CtrlQ; + this.m_quit.Text = "Quit"; + this.m_quit.Click += new System.EventHandler(this.OnQuit); + // + // m_animSpeed + // + this.m_animSpeed.Location = new System.Drawing.Point(8, 96); + this.m_animSpeed.Maximum = new System.Decimal(new int[] { + 50, + 0, + 0, + 0}); + this.m_animSpeed.Minimum = new System.Decimal(new int[] { + 1, + 0, + 0, + 0}); + this.m_animSpeed.Name = "m_animSpeed"; + this.m_animSpeed.ReadOnly = true; + this.m_animSpeed.Size = new System.Drawing.Size(48, 20); + this.m_animSpeed.TabIndex = 1; + this.m_animSpeed.Value = new System.Decimal(new int[] { + 5, + 0, + 0, + 0}); + this.m_animSpeed.ValueChanged += new System.EventHandler(this.OnAnimSpeed); + // + // m_animEnable + // + this.m_animEnable.Location = new System.Drawing.Point(8, 24); + this.m_animEnable.Name = "m_animEnable"; + this.m_animEnable.Size = new System.Drawing.Size(120, 16); + this.m_animEnable.TabIndex = 0; + this.m_animEnable.Text = "Preview Animation"; + this.m_animEnable.CheckedChanged += new System.EventHandler(this.OnAnimEnable); + // + // m_animGroup + // + this.m_animGroup.Controls.Add(this.m_animStretch); + this.m_animGroup.Controls.Add(this.m_animPong); + this.m_animGroup.Controls.Add(this.m_preview); + this.m_animGroup.Controls.Add(this.label4); + this.m_animGroup.Controls.Add(this.m_animSpeed); + this.m_animGroup.Controls.Add(this.m_animEnable); + this.m_animGroup.Location = new System.Drawing.Point(424, 208); + this.m_animGroup.Name = "m_animGroup"; + this.m_animGroup.Size = new System.Drawing.Size(288, 128); + this.m_animGroup.TabIndex = 2; + this.m_animGroup.TabStop = false; + this.m_animGroup.Text = "Animation Preview"; + // + // m_menu + // + this.m_menu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.m_fileMenu, + this.m_exportMenu, + this.m_helpMenu}); + // + // m_timer + // + this.m_timer.Tick += new System.EventHandler(this.OnTimer); + // + // label4 + // + this.label4.Location = new System.Drawing.Point(64, 104); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(104, 16); + this.label4.TabIndex = 2; + this.label4.Text = "/50 secs per frame"; + // + // m_animStretch + // + this.m_animStretch.Location = new System.Drawing.Point(8, 72); + this.m_animStretch.Name = "m_animStretch"; + this.m_animStretch.Size = new System.Drawing.Size(120, 16); + this.m_animStretch.TabIndex = 5; + this.m_animStretch.Text = "Stretch"; + this.m_animStretch.CheckedChanged += new System.EventHandler(this.OnAnimStretch); // // label2 // - this.label2.Location = new System.Drawing.Point(8, 72); + this.label2.Location = new System.Drawing.Point(8, 96); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(56, 24); this.label2.TabIndex = 3; @@ -200,141 +380,133 @@ namespace BitmapSpriteEd // // label3 // - this.label3.Location = new System.Drawing.Point(8, 112); + this.label3.Location = new System.Drawing.Point(8, 160); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(56, 24); this.label3.TabIndex = 8; this.label3.Text = "Name:"; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // m_animGroup - // - this.m_animGroup.Location = new System.Drawing.Point(424, 176); - this.m_animGroup.Name = "m_animGroup"; - this.m_animGroup.Size = new System.Drawing.Size(304, 160); - this.m_animGroup.TabIndex = 2; - this.m_animGroup.TabStop = false; - this.m_animGroup.Text = "Animation Preview"; - // - // m_exportPNG + // m_about // - this.m_exportPNG.Index = 0; - this.m_exportPNG.Text = "Export to PNG"; - this.m_exportPNG.Click += new System.EventHandler(this.OnExportPNG); + this.m_about.Index = 0; + this.m_about.Text = "About"; + this.m_about.Click += new System.EventHandler(this.OnAbout); // - // m_quit + // m_addFrameAsCopy // - this.m_quit.Index = 5; - this.m_quit.Shortcut = System.Windows.Forms.Shortcut.CtrlQ; - this.m_quit.Text = "Quit"; - this.m_quit.Click += new System.EventHandler(this.OnQuit); + this.m_addFrameAsCopy.Location = new System.Drawing.Point(64, 128); + this.m_addFrameAsCopy.Name = "m_addFrameAsCopy"; + this.m_addFrameAsCopy.Size = new System.Drawing.Size(128, 16); + this.m_addFrameAsCopy.TabIndex = 12; + this.m_addFrameAsCopy.Text = "New Frame as Copy"; // // m_exportMenu // this.m_exportMenu.Index = 1; this.m_exportMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.m_exportPNG}); + this.m_exportPNG, + this.m_exportSinglePNG}); this.m_exportMenu.Text = "Export"; // - // m_fileMenu + // m_spriteName // - this.m_fileMenu.Index = 0; - this.m_fileMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.m_new, - this.m_open, - this.m_save, - this.m_saveAs, - this.m_break1, - this.m_quit}); - this.m_fileMenu.Text = "File"; + this.m_spriteName.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; + this.m_spriteName.Location = new System.Drawing.Point(64, 160); + this.m_spriteName.Name = "m_spriteName"; + this.m_spriteName.Size = new System.Drawing.Size(208, 20); + this.m_spriteName.TabIndex = 9; + this.m_spriteName.Text = ""; + this.m_spriteName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.OnSpriteNameKey); + this.m_spriteName.TextChanged += new System.EventHandler(this.OnSpriteName); // - // m_open + // m_removeSprite // - this.m_open.Index = 1; - this.m_open.Shortcut = System.Windows.Forms.Shortcut.CtrlO; - this.m_open.Text = "Open"; - this.m_open.Click += new System.EventHandler(this.OnOpen); + this.m_removeSprite.Location = new System.Drawing.Point(200, 48); + this.m_removeSprite.Name = "m_removeSprite"; + this.m_removeSprite.Size = new System.Drawing.Size(72, 24); + this.m_removeSprite.TabIndex = 5; + this.m_removeSprite.Text = "Remove"; + this.m_removeSprite.Click += new System.EventHandler(this.OnRemoveSprite); // - // m_removeFrame + // m_spriteCount // - this.m_removeFrame.Location = new System.Drawing.Point(224, 72); - this.m_removeFrame.Name = "m_removeFrame"; - this.m_removeFrame.Size = new System.Drawing.Size(64, 24); - this.m_removeFrame.TabIndex = 7; - this.m_removeFrame.Text = "Remove"; - this.m_removeFrame.Click += new System.EventHandler(this.OnRemoveFrame); + this.m_spriteCount.Location = new System.Drawing.Point(136, 40); + this.m_spriteCount.Name = "m_spriteCount"; + this.m_spriteCount.Size = new System.Drawing.Size(56, 16); + this.m_spriteCount.TabIndex = 10; + this.m_spriteCount.Text = "label5"; // - // m_saveAs + // m_exportSinglePNG // - this.m_saveAs.Index = 3; - this.m_saveAs.Shortcut = System.Windows.Forms.Shortcut.F12; - this.m_saveAs.Text = "Save as..."; - this.m_saveAs.Click += new System.EventHandler(this.OnSaveAs); + this.m_exportSinglePNG.Index = 1; + this.m_exportSinglePNG.Text = "Export to Single PNG"; + this.m_exportSinglePNG.Click += new System.EventHandler(this.OnExportSinglePNG); // - // m_spriteName + // m_addSprite // - this.m_spriteName.CharacterCasing = System.Windows.Forms.CharacterCasing.Upper; - this.m_spriteName.Location = new System.Drawing.Point(64, 112); - this.m_spriteName.Name = "m_spriteName"; - this.m_spriteName.Size = new System.Drawing.Size(224, 21); - this.m_spriteName.TabIndex = 9; - this.m_spriteName.Text = ""; - this.m_spriteName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.OnSpriteNameKey); - this.m_spriteName.TextChanged += new System.EventHandler(this.OnSpriteName); + this.m_addSprite.Location = new System.Drawing.Point(200, 16); + this.m_addSprite.Name = "m_addSprite"; + this.m_addSprite.Size = new System.Drawing.Size(72, 24); + this.m_addSprite.TabIndex = 4; + this.m_addSprite.Text = "Add"; + this.m_addSprite.Click += new System.EventHandler(this.OnAddSprite); // - // m_spriteNum + // m_fileMenu // - this.m_spriteNum.Location = new System.Drawing.Point(64, 32); - this.m_spriteNum.Name = "m_spriteNum"; - this.m_spriteNum.ReadOnly = true; - this.m_spriteNum.Size = new System.Drawing.Size(64, 21); - this.m_spriteNum.TabIndex = 0; - this.m_spriteNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.m_spriteNum.ValueChanged += new System.EventHandler(this.OnSpriteSelected); + this.m_fileMenu.Index = 0; + this.m_fileMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.m_new, + this.m_open, + this.m_save, + this.m_saveAs, + this.m_break1, + this.m_quit}); + this.m_fileMenu.Text = "File"; // - // m_about + // m_break1 // - this.m_about.Index = 0; - this.m_about.Text = "About"; - this.m_about.Click += new System.EventHandler(this.OnAbout); + this.m_break1.Index = 4; + this.m_break1.Text = "-"; // // m_addFrame // - this.m_addFrame.Location = new System.Drawing.Point(144, 72); + this.m_addFrame.Location = new System.Drawing.Point(200, 80); this.m_addFrame.Name = "m_addFrame"; - this.m_addFrame.Size = new System.Drawing.Size(64, 24); + this.m_addFrame.Size = new System.Drawing.Size(72, 24); this.m_addFrame.TabIndex = 6; this.m_addFrame.Text = "Add"; this.m_addFrame.Click += new System.EventHandler(this.OnAddFrame); // - // m_new + // m_removeFrame // - this.m_new.Index = 0; - this.m_new.Shortcut = System.Windows.Forms.Shortcut.CtrlN; - this.m_new.Text = "New"; - this.m_new.Click += new System.EventHandler(this.OnNew); + this.m_removeFrame.Location = new System.Drawing.Point(200, 112); + this.m_removeFrame.Name = "m_removeFrame"; + this.m_removeFrame.Size = new System.Drawing.Size(72, 24); + this.m_removeFrame.TabIndex = 7; + this.m_removeFrame.Text = "Remove"; + this.m_removeFrame.Click += new System.EventHandler(this.OnRemoveFrame); // - // m_frameNum + // m_helpMenu // - this.m_frameNum.Location = new System.Drawing.Point(64, 72); - this.m_frameNum.Name = "m_frameNum"; - this.m_frameNum.ReadOnly = true; - this.m_frameNum.Size = new System.Drawing.Size(64, 21); - this.m_frameNum.TabIndex = 2; - this.m_frameNum.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.m_frameNum.ValueChanged += new System.EventHandler(this.OnFrameSelected); + this.m_helpMenu.Index = 2; + this.m_helpMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { + this.m_about}); + this.m_helpMenu.Text = "Help"; // - // m_menu + // label1 // - this.m_menu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { - this.m_fileMenu, - this.m_exportMenu, - this.m_helpMenu}); + this.label1.Location = new System.Drawing.Point(8, 32); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 24); + this.label1.TabIndex = 1; + this.label1.Text = "Sprite:"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // MainForm // - this.AutoScaleBaseSize = new System.Drawing.Size(5, 14); - this.ClientSize = new System.Drawing.Size(738, 351); + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.ClientSize = new System.Drawing.Size(722, 351); this.Controls.Add(this.m_animGroup); this.Controls.Add(this.m_spriteGroup); this.Controls.Add(this.m_editGroup); @@ -343,9 +515,12 @@ namespace BitmapSpriteEd this.Menu = this.m_menu; this.Name = "MainForm"; this.Text = "Bitmap Sprite Editor"; + this.Closing += new System.ComponentModel.CancelEventHandler(this.OnClosing); + ((System.ComponentModel.ISupportInitialize)(this.m_frameNum)).EndInit(); this.m_spriteGroup.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.m_spriteNum)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.m_frameNum)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.m_animSpeed)).EndInit(); + this.m_animGroup.ResumeLayout(false); this.ResumeLayout(false); } #endregion @@ -354,7 +529,7 @@ namespace BitmapSpriteEd { get { - int spr=Convert.ToInt32(m_spriteNum.Value); + int spr=Convert.ToInt32(m_spriteNum.Value)-1; return m_sprites[spr]; } @@ -364,37 +539,137 @@ namespace BitmapSpriteEd { get { - int frame=Convert.ToInt32(m_frameNum.Value); + int frame=Convert.ToInt32(m_frameNum.Value)-1; return SelectedSprite[frame]; } } + private bool EditChanged + { + get {return m_edit.Frame!=null && m_edit.Frame.Changed;} + } + + private bool ChangesAllowed + { + get {return (!m_sprites.Changed && !EditChanged) || Util.YesNo("Abandon changes?");} + } + + private void UpdateInfo() + { + m_spriteCount.Text="of "+m_sprites.Count; + m_frameCount.Text="of "+SelectedSprite.Count; + m_removeSprite.Enabled=(m_sprites.Count>1); + m_removeFrame.Enabled=(SelectedSprite.Count>1); + } + + private void OnFrameResize(object sender, GfxEditor.FrameResizeEventArgs e) + { + foreach (Frame f in SelectedSprite) + { + if (f!=m_edit.Frame) + { + f.Resize(e.Width,e.Height); + } + } + } + void OnNew(object sender, System.EventArgs e) { - m_sprites=new SpriteList(); - m_sprites.Add(new Sprite()); - - m_spriteNum.Maximum=0; - m_frameNum.Maximum=0; - m_spriteNum.Value=0; - OnSpriteSelected(null,null); + if (ChangesAllowed) + { + m_sprites=new SpriteList(); + m_sprites.Add(new Sprite()); + m_sprites.Changed=false; + m_save.Enabled=false; + + m_animIndex=0; + m_animIndexInc=1; + + m_spriteNum.Maximum=1; + m_frameNum.Maximum=1; + m_spriteNum.Value=1; + OnSpriteSelected(null,null); + } } void OnOpen(object sender, System.EventArgs e) { + if (ChangesAllowed) + { + OpenFileDialog fsel=new OpenFileDialog(); + + fsel.FileName=m_path; + fsel.Filter="Bitmap Sprite Files (*.bms)|*.bms|All files (*.*)|*.*"; + + if (fsel.ShowDialog()==DialogResult.OK) + { + using(FileStream str=File.Open(fsel.FileName,FileMode.Open)) + { + try + { + m_sprites=SpriteList.Input(str); + str.Close(); + m_spriteNum.Value=1; + m_spriteNum.Maximum=m_sprites.Count; + OnSpriteSelected(null,null); + m_path=fsel.FileName; + m_save.Enabled=true; + } + catch (Exception ex) + { + Util.Error("Error opening " + fsel.FileName + ":\n" + ex.Message); + } + } + } + } } void OnSave(object sender, System.EventArgs e) { + using(FileStream str=File.Open(m_path,FileMode.Create)) + { + try + { + m_sprites.Output(str); + str.Close(); + } + catch (Exception ex) + { + Util.Error("Error writing " + m_path + ":\n" + ex.Message); + } + } } void OnSaveAs(object sender, System.EventArgs e) { + SaveFileDialog fsel=new SaveFileDialog(); + + fsel.FileName=m_path; + fsel.Filter="Bitmap Sprite Files (*.bms)|*.bms|All files (*.*)|*.*"; + + if (fsel.ShowDialog()==DialogResult.OK) + { + using(FileStream str=File.Open(fsel.FileName,FileMode.Create)) + { + try + { + m_sprites.Output(str); + str.Close(); + m_path=fsel.FileName; + m_save.Enabled=true; + } + catch (Exception ex) + { + Util.Error("Error writing " + fsel.FileName + ":\n" + ex.Message); + } + } + } } void OnQuit(object sender, System.EventArgs e) { + Close(); } void OnAbout(object sender, System.EventArgs e) @@ -404,26 +679,180 @@ namespace BitmapSpriteEd void OnExportPNG(object sender, System.EventArgs e) { + try + { + m_sprites.Validate(); + } + catch (ApplicationException ex) + { + Util.Error(ex.Message); + return; + } + + FolderBrowserDialog fsel=new FolderBrowserDialog(); + + fsel.ShowNewFolderButton=true; + fsel.Description="Select folder to ouput PNG files to"; + fsel.SelectedPath=m_exportPath; + + if (fsel.ShowDialog()==DialogResult.OK) + { + try + { + foreach(Sprite s in m_sprites) + { + using (Bitmap bmp=new Bitmap(s[0].Width*s.Count,s[0].Height,PixelFormat.Format32bppArgb)) + { + using (Graphics g=Graphics.FromImage(bmp)) + { + string fname=fsel.SelectedPath + + Path.DirectorySeparatorChar + + s.Name + ".png"; + + int x=0; + + foreach (Frame f in s) + { + g.DrawImageUnscaled(f.Bitmap,x,0); + x+=f.Width; + } + + + bmp.Save(fname,ImageFormat.Png); + } + } + } + + m_exportPath=fsel.SelectedPath; + } + catch (Exception ex) + { + Util.Error("Error writing to " + fsel.SelectedPath + ":\n" + ex.Message); + } + } } + void OnExportSinglePNG(object sender, System.EventArgs e) + { + SaveFileDialog fsel=new SaveFileDialog(); + + fsel.Filter="PNG Files (*.png)|*.png|All files (*.*)|*.*"; + + if (fsel.ShowDialog()==DialogResult.OK) + { + int height=0; + int width=0; + + foreach (Sprite s in m_sprites) + { + height+=s[0].Height; + width=Math.Max(width,s[0].Width*s.Count); + } + + try + { + using (Bitmap bmp=new Bitmap(width,height,PixelFormat.Format32bppArgb)) + { + using (Graphics g=Graphics.FromImage(bmp)) + { + int y=0; + + foreach(Sprite s in m_sprites) + { + int x=0; + + foreach (Frame f in s) + { + g.DrawImageUnscaled(f.Bitmap,x,y); + x+=f.Width; + } + + y+=s[0].Height; + } + + bmp.Save(fsel.FileName,ImageFormat.Png); + } + } + } + catch (Exception ex) + { + Util.Error("Error writing " + fsel.FileName + ":\n" + ex.Message); + } + } + } + void OnAddSprite(object sender, System.EventArgs e) { + m_timer.Enabled=false; + m_sprites.Add(new Sprite()); - m_spriteNum.Maximum=m_sprites.Count-1; + m_spriteNum.Maximum=m_sprites.Count; + UpdateInfo(); + + m_animIndex=0; + m_animIndexInc=1; + m_timer.Enabled=m_animEnable.Checked; } void OnRemoveSprite(object sender, System.EventArgs e) { + m_timer.Enabled=false; + + m_sprites.Remove(SelectedSprite); + + if (m_spriteNum.Value==m_sprites.Count+1) + { + m_spriteNum.Value--; + } + + m_spriteNum.Maximum=m_sprites.Count; + OnSpriteSelected(null,null); + UpdateInfo(); + + m_animIndex=0; + m_animIndexInc=1; + m_timer.Enabled=m_animEnable.Checked; } void OnAddFrame(object sender, System.EventArgs e) { - SelectedSprite.Add(new Frame(SelectedFrame)); - m_frameNum.Maximum=SelectedSprite.Count-1; + m_timer.Enabled=false; + + if (m_addFrameAsCopy.Checked) + { + SelectedSprite.Add(new Frame(SelectedFrame)); + } + else + { + SelectedSprite.Add(new Frame(SelectedFrame.Width,SelectedFrame.Height)); + } + + m_frameNum.Maximum=SelectedSprite.Count; + UpdateInfo(); + + m_animIndex=0; + m_animIndexInc=1; + m_timer.Enabled=m_animEnable.Checked; } void OnRemoveFrame(object sender, System.EventArgs e) { + m_timer.Enabled=false; + + SelectedSprite.Remove(SelectedFrame); + + if (m_frameNum.Value==SelectedSprite.Count+1) + { + m_frameNum.Value--; + } + + m_frameNum.Maximum=SelectedSprite.Count; + OnFrameSelected(null,null); + UpdateInfo(); + + m_animIndex=0; + m_animIndexInc=1; + m_timer.Enabled=m_animEnable.Checked; } void OnSpriteNameKey(object sender, System.Windows.Forms.KeyPressEventArgs e) @@ -442,9 +871,12 @@ namespace BitmapSpriteEd void OnSpriteSelected(object sender, System.EventArgs e) { + m_animIndex=0; + m_animIndexInc=1; m_spriteName.Text=SelectedSprite.Name; - m_frameNum.Value=0; - m_frameNum.Maximum=SelectedSprite.Count-1; + m_frameNum.Value=1; + m_frameNum.Maximum=SelectedSprite.Count; + UpdateInfo(); OnFrameSelected(null,null); } @@ -452,5 +884,79 @@ namespace BitmapSpriteEd { m_edit.Frame=SelectedFrame; } + + void OnTimer(object sender, System.EventArgs e) + { + if (m_animPong.Checked) + { + if (m_animIndex<=0) + { + m_animIndex=0; + m_animIndexInc=1; + } + + if (m_animIndex>=SelectedSprite.Count-1) + { + m_animIndex=SelectedSprite.Count-1; + m_animIndexInc=-1; + } + } + else + { + if (m_animIndex==SelectedSprite.Count) + { + m_animIndex=0; + } + } + + m_preview.Image=SelectedSprite[m_animIndex].Bitmap; + + if (m_animPong.Checked) + { + m_animIndex+=m_animIndexInc; + } + else + { + m_animIndex++; + } + } + + void OnAnimEnable(object sender, System.EventArgs e) + { + m_animIndex=0; + m_animIndexInc=1; + m_timer.Enabled=m_animEnable.Checked; + } + + void OnAnimPingPong(object sender, System.EventArgs e) + { + m_animIndex=0; + m_animIndexInc=1; + } + + void OnAnimSpeed(object sender, System.EventArgs e) + { + m_timer.Interval=20*Convert.ToInt32(m_animSpeed.Value); + } + + void OnAnimStretch(object sender, System.EventArgs e) + { + if (m_animStretch.Checked) + { + m_preview.SizeMode=PictureBoxSizeMode.StretchImage; + } + else + { + m_preview.SizeMode=PictureBoxSizeMode.CenterImage; + } + } + + void OnClosing(object sender, System.ComponentModel.CancelEventArgs e) + { + if (!ChangesAllowed) + { + e.Cancel=true; + } + } } } -- cgit v1.2.3