// GfxEd8 // Copyright (C) 2004 Ian Cowburn // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // $Id$ // using System; using System.Windows.Forms; using System.IO; using System.Drawing; using GfxEdInterface; using Noddybox.GUI; namespace GfxEd8 { /// /// Description of MainForm. /// public class MainForm : System.Windows.Forms.Form { private System.Windows.Forms.CheckBox m_applyAll; private System.Windows.Forms.Button m_scrollLeftButton; private System.Windows.Forms.Button m_rotateRightButton; private System.Windows.Forms.NumericUpDown m_spriteNo; private System.Windows.Forms.Button m_deleteButton; private System.Windows.Forms.Button m_insertButton; private System.Windows.Forms.Button m_scrollRightButton; private System.Windows.Forms.Button m_clearButton; private System.Windows.Forms.GroupBox m_adjustGroup; private System.Windows.Forms.Button m_scrollDownButton; private System.Windows.Forms.Button m_rotateLeftButton; private System.Windows.Forms.Button m_mirrorHorizButton; private System.Windows.Forms.GroupBox m_editorGroup; private System.Windows.Forms.GroupBox m_controlGroup; private System.Windows.Forms.Button m_scrollUpButton; private System.Windows.Forms.Button m_revertButton; private System.Windows.Forms.Label label3; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label1; private System.Windows.Forms.NumericUpDown m_duplicateCount; private System.Windows.Forms.Button m_duplicateButton; private System.Windows.Forms.Button m_addButton; private System.Windows.Forms.Label label5; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox m_spriteCount; private System.Windows.Forms.Button m_mirrorVerticalButton; private GfxEditor m_editor; private string m_path; private string m_exportPath; private MenuTree m_menu; private MenuItem m_editorTypeMenu; private IPlugin m_plugin; private SpriteList m_sprite; private int m_index; private bool m_blockValue; private bool m_commonPal; private const string MAGIC="@GFXED8_ISS1"; public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); // For some reason, this crashes the designer since I put them // inside groups... // m_editor=new GfxEditor(); m_editor.Location=new Point(4,16); m_editorGroup.Controls.Add(m_editor); PluginControl.Initialise("gfxed8config.xml"); if (PluginControl.Names.Count==0) { throw new Exception("No plugins defined"); } m_sprite=new SpriteList(); Menu=new MainMenu(); m_menu=new MenuTree(Menu); m_editorTypeMenu=new MenuItem("Editor Type"); foreach (string s in PluginControl.Names) { m_editorTypeMenu.MenuItems.Add (new MenuItem(s,new EventHandler(OnEditorChanged))); } m_menu.Add("/file", "File"); m_menu.Add("/file/new", "New", new EventHandler(OnNew)); m_menu.Add("/file/open", "Open...", new EventHandler(OnOpen)); m_menu.Add("/file/save", "Save", new EventHandler(OnSave)); m_menu.Add("/file/saveas", "Save as...", new EventHandler(OnSaveAs)); m_menu.Add("/file/quit", "Quit", new EventHandler(OnQuit)); m_menu.Add("/editor", m_editorTypeMenu); m_menu.Add("/plugin","Plugin"); m_menu.Add("/plugin/export","Export...",new EventHandler(OnExport)); m_menu.Add("/plugin/config","Config...",new EventHandler(OnConfig)); m_menu.Add("/plugin/process","Process"); m_menu.Add("/plugin/process/one","Current Sprite...",new EventHandler(OnProcessOne)); m_menu.Add("/plugin/process/all","All Sprites...",new EventHandler(OnProcessAll)); m_menu.Add("/help","Help"); m_menu.Add("/help/about","About...", new EventHandler(OnAbout)); m_menu.Get("/file/save").Enabled=false; m_path=""; m_exportPath=""; m_editorTypeMenu.MenuItems[0].Checked=true; InitialiseEditor(m_editorTypeMenu.MenuItems[0]); } [STAThread] public static void Main(string[] args) { //try { Application.Run(new MainForm()); } //catch (Exception e) { //Util.Error(e.Message); } } #region Windows Forms Designer generated code /// /// This method is required for Windows Forms designer support. /// Do not change the method contents inside the source code editor. The Forms designer might /// not be able to load this method if it was changed manually. /// private void InitializeComponent() { this.m_mirrorVerticalButton = new System.Windows.Forms.Button(); this.m_spriteCount = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); this.m_addButton = new System.Windows.Forms.Button(); this.m_duplicateButton = new System.Windows.Forms.Button(); this.m_duplicateCount = new System.Windows.Forms.NumericUpDown(); this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.label3 = new System.Windows.Forms.Label(); this.m_revertButton = new System.Windows.Forms.Button(); this.m_scrollUpButton = new System.Windows.Forms.Button(); this.m_controlGroup = new System.Windows.Forms.GroupBox(); this.m_editorGroup = new System.Windows.Forms.GroupBox(); this.m_mirrorHorizButton = new System.Windows.Forms.Button(); this.m_rotateLeftButton = new System.Windows.Forms.Button(); this.m_scrollDownButton = new System.Windows.Forms.Button(); this.m_adjustGroup = new System.Windows.Forms.GroupBox(); this.m_clearButton = new System.Windows.Forms.Button(); this.m_scrollRightButton = new System.Windows.Forms.Button(); this.m_insertButton = new System.Windows.Forms.Button(); this.m_deleteButton = new System.Windows.Forms.Button(); this.m_spriteNo = new System.Windows.Forms.NumericUpDown(); this.m_rotateRightButton = new System.Windows.Forms.Button(); this.m_scrollLeftButton = new System.Windows.Forms.Button(); this.m_applyAll = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.m_duplicateCount)).BeginInit(); this.m_controlGroup.SuspendLayout(); this.m_adjustGroup.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.m_spriteNo)).BeginInit(); this.SuspendLayout(); // // m_mirrorVerticalButton // this.m_mirrorVerticalButton.Location = new System.Drawing.Point(80, 96); this.m_mirrorVerticalButton.Name = "m_mirrorVerticalButton"; this.m_mirrorVerticalButton.Size = new System.Drawing.Size(64, 24); this.m_mirrorVerticalButton.TabIndex = 4; this.m_mirrorVerticalButton.Text = "Vertical"; this.m_mirrorVerticalButton.Click += new System.EventHandler(this.OnVerticalMirror); // // m_spriteCount // this.m_spriteCount.Location = new System.Drawing.Point(88, 24); this.m_spriteCount.Name = "m_spriteCount"; this.m_spriteCount.ReadOnly = true; this.m_spriteCount.Size = new System.Drawing.Size(48, 20); this.m_spriteCount.TabIndex = 10; this.m_spriteCount.Text = "textBox1"; // // label4 // this.label4.Location = new System.Drawing.Point(8, 208); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(136, 16); this.label4.TabIndex = 11; this.label4.Text = "Rotate"; this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // label5 // this.label5.Location = new System.Drawing.Point(272, 56); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(40, 24); this.label5.TabIndex = 17; this.label5.Text = "Times"; this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // m_addButton // this.m_addButton.Location = new System.Drawing.Point(144, 24); this.m_addButton.Name = "m_addButton"; this.m_addButton.Size = new System.Drawing.Size(64, 24); this.m_addButton.TabIndex = 12; this.m_addButton.Text = "Add"; this.m_addButton.Click += new System.EventHandler(this.OnAddSprite); // // m_duplicateButton // this.m_duplicateButton.Location = new System.Drawing.Point(144, 56); this.m_duplicateButton.Name = "m_duplicateButton"; this.m_duplicateButton.Size = new System.Drawing.Size(64, 24); this.m_duplicateButton.TabIndex = 15; this.m_duplicateButton.Text = "Duplicate"; this.m_duplicateButton.Click += new System.EventHandler(this.OnDuplicateSprite); // // m_duplicateCount // this.m_duplicateCount.Location = new System.Drawing.Point(216, 56); this.m_duplicateCount.Maximum = new System.Decimal(new int[] { 999, 0, 0, 0}); this.m_duplicateCount.Minimum = new System.Decimal(new int[] { 1, 0, 0, 0}); this.m_duplicateCount.Name = "m_duplicateCount"; this.m_duplicateCount.Size = new System.Drawing.Size(48, 20); this.m_duplicateCount.TabIndex = 16; this.m_duplicateCount.UpDownAlign = System.Windows.Forms.LeftRightAlignment.Left; this.m_duplicateCount.Value = new System.Decimal(new int[] { 7, 0, 0, 0}); // // label1 // this.label1.Location = new System.Drawing.Point(8, 80); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(40, 16); this.label1.TabIndex = 3; this.label1.Text = "Mirror"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // label2 // this.label2.Location = new System.Drawing.Point(64, 24); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(16, 24); this.label2.TabIndex = 9; this.label2.Text = "of"; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // label3 // this.label3.Location = new System.Drawing.Point(8, 128); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(136, 16); this.label3.TabIndex = 6; this.label3.Text = "Scroll"; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // m_revertButton // this.m_revertButton.Location = new System.Drawing.Point(360, 24); this.m_revertButton.Name = "m_revertButton"; this.m_revertButton.Size = new System.Drawing.Size(64, 24); this.m_revertButton.TabIndex = 14; this.m_revertButton.Text = "Revert"; this.m_revertButton.Click += new System.EventHandler(this.OnRevertSprite); // // m_scrollUpButton // this.m_scrollUpButton.Location = new System.Drawing.Point(8, 176); this.m_scrollUpButton.Name = "m_scrollUpButton"; this.m_scrollUpButton.Size = new System.Drawing.Size(64, 24); this.m_scrollUpButton.TabIndex = 8; this.m_scrollUpButton.Text = "Up"; this.m_scrollUpButton.Click += new System.EventHandler(this.OnUpScroll); // // m_controlGroup // this.m_controlGroup.Controls.Add(this.label5); this.m_controlGroup.Controls.Add(this.m_duplicateCount); this.m_controlGroup.Controls.Add(this.m_duplicateButton); this.m_controlGroup.Controls.Add(this.m_revertButton); this.m_controlGroup.Controls.Add(this.m_deleteButton); this.m_controlGroup.Controls.Add(this.m_addButton); this.m_controlGroup.Controls.Add(this.m_insertButton); this.m_controlGroup.Controls.Add(this.m_spriteNo); this.m_controlGroup.Controls.Add(this.label2); this.m_controlGroup.Controls.Add(this.m_spriteCount); this.m_controlGroup.Location = new System.Drawing.Point(8, 344); this.m_controlGroup.Name = "m_controlGroup"; this.m_controlGroup.Size = new System.Drawing.Size(560, 88); this.m_controlGroup.TabIndex = 12; this.m_controlGroup.TabStop = false; this.m_controlGroup.Text = "Sprite"; // // m_editorGroup // this.m_editorGroup.Location = new System.Drawing.Point(8, 0); this.m_editorGroup.Name = "m_editorGroup"; this.m_editorGroup.Size = new System.Drawing.Size(392, 336); this.m_editorGroup.TabIndex = 13; this.m_editorGroup.TabStop = false; this.m_editorGroup.Text = "Editor"; // // m_mirrorHorizButton // this.m_mirrorHorizButton.Location = new System.Drawing.Point(8, 96); this.m_mirrorHorizButton.Name = "m_mirrorHorizButton"; this.m_mirrorHorizButton.Size = new System.Drawing.Size(64, 24); this.m_mirrorHorizButton.TabIndex = 2; this.m_mirrorHorizButton.Text = "Horizontal"; this.m_mirrorHorizButton.Click += new System.EventHandler(this.OnHorizontalMirror); // // m_rotateLeftButton // this.m_rotateLeftButton.Location = new System.Drawing.Point(8, 224); this.m_rotateLeftButton.Name = "m_rotateLeftButton"; this.m_rotateLeftButton.Size = new System.Drawing.Size(64, 24); this.m_rotateLeftButton.TabIndex = 10; this.m_rotateLeftButton.Text = "Left"; this.m_rotateLeftButton.Click += new System.EventHandler(this.OnRotateLeft); // // m_scrollDownButton // this.m_scrollDownButton.Location = new System.Drawing.Point(80, 176); this.m_scrollDownButton.Name = "m_scrollDownButton"; this.m_scrollDownButton.Size = new System.Drawing.Size(64, 24); this.m_scrollDownButton.TabIndex = 9; this.m_scrollDownButton.Text = "Down"; this.m_scrollDownButton.Click += new System.EventHandler(this.OnDownScroll); // // m_adjustGroup // this.m_adjustGroup.Controls.Add(this.m_rotateRightButton); this.m_adjustGroup.Controls.Add(this.label4); this.m_adjustGroup.Controls.Add(this.m_rotateLeftButton); this.m_adjustGroup.Controls.Add(this.m_scrollDownButton); this.m_adjustGroup.Controls.Add(this.m_scrollUpButton); this.m_adjustGroup.Controls.Add(this.m_scrollRightButton); this.m_adjustGroup.Controls.Add(this.label3); this.m_adjustGroup.Controls.Add(this.m_scrollLeftButton); this.m_adjustGroup.Controls.Add(this.m_mirrorVerticalButton); this.m_adjustGroup.Controls.Add(this.label1); this.m_adjustGroup.Controls.Add(this.m_mirrorHorizButton); this.m_adjustGroup.Controls.Add(this.m_applyAll); this.m_adjustGroup.Controls.Add(this.m_clearButton); this.m_adjustGroup.Location = new System.Drawing.Point(408, 0); this.m_adjustGroup.Name = "m_adjustGroup"; this.m_adjustGroup.Size = new System.Drawing.Size(160, 336); this.m_adjustGroup.TabIndex = 14; this.m_adjustGroup.TabStop = false; this.m_adjustGroup.Text = "Adjust"; // // m_clearButton // this.m_clearButton.Location = new System.Drawing.Point(8, 48); this.m_clearButton.Name = "m_clearButton"; this.m_clearButton.Size = new System.Drawing.Size(64, 24); this.m_clearButton.TabIndex = 0; this.m_clearButton.Text = "Clear"; this.m_clearButton.Click += new System.EventHandler(this.OnClear); // // m_scrollRightButton // this.m_scrollRightButton.Location = new System.Drawing.Point(80, 144); this.m_scrollRightButton.Name = "m_scrollRightButton"; this.m_scrollRightButton.Size = new System.Drawing.Size(64, 24); this.m_scrollRightButton.TabIndex = 7; this.m_scrollRightButton.Text = "Right"; this.m_scrollRightButton.Click += new System.EventHandler(this.OnRightScroll); // // m_insertButton // this.m_insertButton.Location = new System.Drawing.Point(216, 24); this.m_insertButton.Name = "m_insertButton"; this.m_insertButton.Size = new System.Drawing.Size(64, 24); this.m_insertButton.TabIndex = 11; this.m_insertButton.Text = "Insert"; this.m_insertButton.Click += new System.EventHandler(this.OnInsertSprite); // // m_deleteButton // this.m_deleteButton.Location = new System.Drawing.Point(288, 24); this.m_deleteButton.Name = "m_deleteButton"; this.m_deleteButton.Size = new System.Drawing.Size(64, 24); this.m_deleteButton.TabIndex = 13; this.m_deleteButton.Text = "Delete"; this.m_deleteButton.Click += new System.EventHandler(this.OnDeleteSprite); // // m_spriteNo // this.m_spriteNo.Location = new System.Drawing.Point(8, 24); this.m_spriteNo.Name = "m_spriteNo"; this.m_spriteNo.Size = new System.Drawing.Size(56, 20); this.m_spriteNo.TabIndex = 6; this.m_spriteNo.ValueChanged += new System.EventHandler(this.OnSprite); // // m_rotateRightButton // this.m_rotateRightButton.Location = new System.Drawing.Point(80, 224); this.m_rotateRightButton.Name = "m_rotateRightButton"; this.m_rotateRightButton.Size = new System.Drawing.Size(64, 24); this.m_rotateRightButton.TabIndex = 12; this.m_rotateRightButton.Text = "Right"; this.m_rotateRightButton.Click += new System.EventHandler(this.OnRotateRight); // // m_scrollLeftButton // this.m_scrollLeftButton.Location = new System.Drawing.Point(8, 144); this.m_scrollLeftButton.Name = "m_scrollLeftButton"; this.m_scrollLeftButton.Size = new System.Drawing.Size(64, 24); this.m_scrollLeftButton.TabIndex = 5; this.m_scrollLeftButton.Text = "Left"; this.m_scrollLeftButton.Click += new System.EventHandler(this.OnLeftScroll); // // m_applyAll // this.m_applyAll.Location = new System.Drawing.Point(8, 16); this.m_applyAll.Name = "m_applyAll"; this.m_applyAll.Size = new System.Drawing.Size(120, 24); this.m_applyAll.TabIndex = 1; this.m_applyAll.Text = "Apply to all Sprites"; // // MainForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(578, 447); this.Controls.Add(this.m_adjustGroup); this.Controls.Add(this.m_editorGroup); this.Controls.Add(this.m_controlGroup); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; this.MaximizeBox = false; this.Name = "MainForm"; this.Text = "GfxEd8"; this.Closing += new System.ComponentModel.CancelEventHandler(this.OnFormClosing); ((System.ComponentModel.ISupportInitialize)(this.m_duplicateCount)).EndInit(); this.m_controlGroup.ResumeLayout(false); this.m_adjustGroup.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.m_spriteNo)).EndInit(); this.ResumeLayout(false); } #endregion private void UpdateSpriteCount() { m_blockValue=true; m_spriteCount.Text=m_sprite.Count.ToString(); m_deleteButton.Enabled=(m_sprite.Count>1); if (m_index>=m_sprite.Count) { m_index=m_sprite.Count-1; m_spriteNo.Value=m_sprite.Count; } m_spriteNo.Maximum=m_sprite.Count; m_blockValue=false; } private void InitialiseEditor(MenuItem i) { m_blockValue=true; m_plugin=PluginControl.Get(i.Text); m_commonPal=false; foreach (bool b in m_plugin.SprPalCommon) { m_commonPal|=b; } m_menu.Get("/plugin/config").Enabled=(m_plugin.Config!=null); m_menu.Get("/plugin/process").Enabled=(m_plugin.Process!=null); m_sprite.Clear(); m_sprite.Add(new Sprite("",m_plugin.AllowedSizes[0],m_plugin.MaxColours)); m_sprite.Changed=false; Text="GfxEd8 - " + m_plugin.Description; m_editor.Plugin=m_plugin; m_editor.Sprite=m_sprite[0]; m_spriteNo.Value=1; m_spriteNo.Minimum=1; m_spriteNo.Maximum=1; m_index=0; m_blockValue=false; UpdateSpriteCount(); } private void GetEdit() { m_sprite[m_index]=m_editor.Sprite; CheckCommonPal(); } private void CheckCommonPal() { if (m_commonPal) { Sprite spr=m_sprite[m_index]; foreach (Sprite s in m_sprite) { uint i=0; foreach (bool b in m_plugin.SprPalCommon) { if (b) { s.Pal(i,spr.Pal(i)); } ++i; } } } } private bool LoadSprites() { TextReader str=null; try { IPlugin plugin; str=File.OpenText(m_path); string s; s=str.ReadLine(); if (s!=MAGIC) { Util.Error(m_path,"Not a GfxEd8 file or incompatible version"); str.Close(); m_path=""; return false; } s=str.ReadLine(); plugin=PluginControl.Get(s); if (plugin==null) { Util.Error(m_path,"Used an unknown plugin:\n"+s); str.Close(); m_path=""; return false; } s=str.ReadLine(); if (s!=PluginControl.Version(plugin.ShortName)) { if (!Util.YesNo ("Different version of plugin used to save file.\n"+ "Loaded plugin version: "+ PluginControl.Version(plugin.ShortName)+"\n"+ "File saved with version: "+s+".\n\nTry and load anyway?")) { str.Close(); m_path=""; return false; } } m_exportPath=str.ReadLine(); if (plugin.Config!=null) { plugin.Config.Input(str); } foreach (MenuItem i in m_editorTypeMenu.MenuItems) { if (i.Text==plugin.ShortName) { i.Checked=true; InitialiseEditor(i); break; } else { i.Checked=false; } } m_sprite=SpriteList.Input(str); UpdateSpriteCount(); m_editor.Sprite=new Sprite(m_sprite[0]); str.Close(); return true; } catch (IOException ex) { if (str!=null) { str.Close(); } Util.Error(m_path,"Error reading file:\n"+ex.Message); m_path=""; return false; } } private void SaveSprites() { GetEdit(); TextWriter str=null; try { str=File.CreateText(m_path); str.WriteLine(MAGIC); str.WriteLine(m_plugin.ShortName); str.WriteLine(PluginControl.Version(m_plugin.ShortName)); str.WriteLine(m_exportPath); if (m_plugin.Config!=null) { m_plugin.Config.Output(str); } m_sprite.Output(str); str.Close(); m_sprite.Changed=false; } catch (IOException ex) { if (str!=null) { str.Close(); } Util.Error(m_path,"Error writing file:\n"+ex.Message); m_path=""; return; } } private void Scroll(int dx, int dy) { GetEdit(); if (m_applyAll.Checked) { foreach (Sprite s in m_sprite) { s.Scroll(dx,dy); } } else { m_sprite[m_index].Scroll(dx,dy); } m_sprite.Changed=true; m_editor.Sprite=new Sprite(m_sprite[m_index]); } void OnEditorChanged(object sender, System.EventArgs e) { MenuItem i=(MenuItem)sender; if (i.Checked) { return; } if (m_sprite.Changed && !Util.YesNo("Sure you want to change the editor?\n"+ "All edits will be lost.")) { return; } foreach (MenuItem m in m_editorTypeMenu.MenuItems) { m.Checked=(m==i); } InitialiseEditor(i); } void OnNew(object sender, System.EventArgs e) { if (!m_sprite.Changed || Util.YesNo("Lose current edits?")) { m_sprite.Clear(); m_sprite.Add(new Sprite("",m_plugin.AllowedSizes[0],m_plugin.MaxColours)); m_sprite.Changed=false; m_menu.Get("/file/save").Enabled=false; m_path=""; } } void OnOpen(object sender, System.EventArgs e) { if (!m_sprite.Changed || Util.YesNo("Lose current edits?")) { OpenFileDialog fsel=new OpenFileDialog(); fsel.FileName=m_path; fsel.Filter="GfxEd8 files (*.gf8)|*.gf8|All files (*.*)|*.*"; fsel.FilterIndex=1; if(fsel.ShowDialog()==DialogResult.OK) { m_path=fsel.FileName; if (LoadSprites()) { m_menu.Get("/file/save").Enabled=true; } } } } void OnSave(object sender, System.EventArgs e) { SaveSprites(); } void OnSaveAs(object sender, System.EventArgs e) { SaveFileDialog fsel=new SaveFileDialog(); fsel.FileName=m_path; fsel.Filter="GfxEd8 files (*.gf8)|*.gf8|All files (*.*)|*.*"; fsel.FilterIndex=1; if(fsel.ShowDialog()==DialogResult.OK) { m_path=fsel.FileName; SaveSprites(); m_menu.Get("/file/save").Enabled=true; } } void OnQuit(object sender, System.EventArgs e) { if (!m_sprite.Changed || Util.YesNo("Lose current edits?")) { m_sprite.Changed=false; Close(); } } void OnAbout(object sender, System.EventArgs e) { Form about=new About(); about.ShowDialog(this); } void OnExport(object sender, System.EventArgs e) { SaveFileDialog fsel=new SaveFileDialog(); string ext=m_plugin.ExportExtension; fsel.FileName=m_exportPath; fsel.Filter="Exported files (*."+ext+")|*."+ext+"|All files (*.*)|*.*"; fsel.FilterIndex=1; if(fsel.ShowDialog()==DialogResult.OK) { GetEdit(); m_exportPath=fsel.FileName; try { m_plugin.Export(m_exportPath,m_sprite); } catch (IOException ex) { Util.Error(m_path,"Error writing file:\n"+ex.Message); return; } catch (Exception ex) { Util.Error("Problem exporting sprites:\n"+ex.Message); } } } void OnConfig(object sender, System.EventArgs e) { m_plugin.Config.Settings(this); } void OnProcessOne(object sender, System.EventArgs e) { m_plugin.Process.Single(m_editor.Sprite); } void OnProcessAll(object sender, System.EventArgs e) { // TODO: Get sprite m_plugin.Process.All(m_sprite); } void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e) { if (m_sprite.Changed && !Util.YesNo("Lose current edits?")) { e.Cancel=true; } } void OnSprite(object sender, System.EventArgs e) { // Cheap, I know... // if (m_blockValue) { return; } GetEdit(); m_index=Convert.ToInt32(m_spriteNo.Value)-1; m_editor.Sprite=new Sprite(m_sprite[m_index]); } void OnAddSprite(object sender, System.EventArgs e) { m_sprite.Add(new Sprite("",m_plugin.AllowedSizes[0],m_plugin.MaxColours)); UpdateSpriteCount(); CheckCommonPal(); } void OnInsertSprite(object sender, System.EventArgs e) { GetEdit(); m_sprite.Insert(m_index, new Sprite("",m_plugin.AllowedSizes[0],m_plugin.MaxColours)); UpdateSpriteCount(); CheckCommonPal(); m_editor.Sprite=new Sprite(m_sprite[m_index]); } void OnDeleteSprite(object sender, System.EventArgs e) { m_sprite.RemoveAt(m_index); UpdateSpriteCount(); m_editor.Sprite=new Sprite(m_sprite[m_index]); } void OnRevertSprite(object sender, System.EventArgs e) { m_editor.Sprite=new Sprite(m_sprite[m_index]); } void OnDuplicateSprite(object sender, System.EventArgs e) { GetEdit(); for(int i=m_index;i