// SIDFX // 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.Text; using System.CodeDom.Compiler; using Noddybox.GUI; using HardsidInterface; namespace SIDFX { /// /// Description of MainForm. /// public class MainForm : System.Windows.Forms.Form { private System.Windows.Forms.RichTextBox m_edit; private System.Windows.Forms.Button m_runButton; private System.Windows.Forms.CheckBox m_showDebug; private MainMenu m_mainMenu; private MenuTree m_menu; private string m_path; private bool m_changed; private DebugForm m_debug; public MainForm() { // // The InitializeComponent() call is required for Windows Forms designer support. // InitializeComponent(); m_debug=new DebugForm(); m_mainMenu=new MainMenu(); m_menu=new MenuTree(m_mainMenu); 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("/sid","SID"); m_menu.Add("/sid/run","Run Script", new EventHandler(OnRun)); m_menu.Add("/help","Help"); m_menu.Add("/help/about","About...", new EventHandler(OnAbout)); m_menu.Get("/file/save").Enabled=false; m_path=""; m_changed=false; Menu=m_mainMenu; //Hardsid.Init(); Hardsid.DLLDebug(1); } [STAThread] public static void Main(string[] args) { Application.Run(new MainForm()); } #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_showDebug = new System.Windows.Forms.CheckBox(); this.m_runButton = new System.Windows.Forms.Button(); this.m_edit = new System.Windows.Forms.RichTextBox(); this.SuspendLayout(); // // m_showDebug // this.m_showDebug.Location = new System.Drawing.Point(8, 368); this.m_showDebug.Name = "m_showDebug"; this.m_showDebug.Size = new System.Drawing.Size(184, 16); this.m_showDebug.TabIndex = 2; this.m_showDebug.Text = "Show SID Register Window"; this.m_showDebug.CheckedChanged += new System.EventHandler(this.OnShowDebug); // // m_runButton // this.m_runButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.m_runButton.Location = new System.Drawing.Point(512, 368); this.m_runButton.Name = "m_runButton"; this.m_runButton.Size = new System.Drawing.Size(80, 24); this.m_runButton.TabIndex = 1; this.m_runButton.Text = "Run"; this.m_runButton.Click += new System.EventHandler(this.OnRun); // // m_edit // this.m_edit.AcceptsTab = true; this.m_edit.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.m_edit.DetectUrls = false; this.m_edit.Font = new System.Drawing.Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.m_edit.Location = new System.Drawing.Point(8, 0); this.m_edit.Name = "m_edit"; this.m_edit.Size = new System.Drawing.Size(584, 360); this.m_edit.TabIndex = 0; this.m_edit.Text = ""; this.m_edit.WordWrap = false; this.m_edit.TextChanged += new System.EventHandler(this.OnTextChanged); this.m_edit.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnKeyUp); // // MainForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(600, 397); this.Controls.Add(this.m_showDebug); this.Controls.Add(this.m_runButton); this.Controls.Add(this.m_edit); this.Name = "MainForm"; this.Text = "SID FX - Untitled"; this.Closing += new System.ComponentModel.CancelEventHandler(this.OnFormClosing); this.ResumeLayout(false); } #endregion void OnNew(object sender, System.EventArgs e) { m_menu.Get("/file/save").Enabled=false; m_path=""; m_edit.Text=""; m_changed=false; Text="SID FX - Untitled"; } void OnOpen(object sender, System.EventArgs e) { if (!m_changed || Util.YesNo("Lose current edits?")) { OpenFileDialog fsel=new OpenFileDialog(); fsel.FileName=m_path; fsel.Filter="SIDFX files (*.sdx)|*.sdx|All files (*.*)|*.*"; fsel.FilterIndex=1; if(fsel.ShowDialog()==DialogResult.OK) { m_path=fsel.FileName; try { m_edit.LoadFile(m_path,RichTextBoxStreamType.PlainText); m_menu.Get("/file/save").Enabled=true; m_changed=false; Text="SID FX - " + m_path; } catch { Util.Error("Error reading " + m_path); } } } } void OnSave(object sender, System.EventArgs e) { try { m_edit.SaveFile(m_path,RichTextBoxStreamType.PlainText); m_changed=false; } catch { Util.Error("Error writing " + m_path); } } void OnSaveAs(object sender, System.EventArgs e) { SaveFileDialog fsel=new SaveFileDialog(); fsel.FileName=m_path; fsel.Filter="SIDFX files (*.sdx)|*.sdx|All files (*.*)|*.*"; fsel.FilterIndex=1; if(fsel.ShowDialog()==DialogResult.OK) { m_path=fsel.FileName; OnSave(sender,e); m_menu.Get("/file/save").Enabled=true; m_changed=false; Text="SID FX - " + m_path; } } void OnQuit(object sender, System.EventArgs e) { if (!m_changed || Util.YesNo("Lose current edits?")) { // This prevents OnFormClosing() asking again // m_changed=false; Close(); } } void OnAbout(object sender, System.EventArgs e) { Form about=new About(); about.ShowDialog(this); } void OnRun(object sender, System.EventArgs e) { if (Hardsid.Count<1) { Util.Error("This machine has no HardSIDs!"); return; } CompileScript comp=new CompileScript(m_edit.Text); if (comp.HasErrors) { StringBuilder s=new StringBuilder(); s.Append("Errors compiling the script:\n"); foreach (CompilerError err in comp.Errors) { s.Append(err.ToString()+"\n"); } Util.Error(s.ToString()); } else { ExecuteForm exec=new ExecuteForm(comp); exec.Run(this); } } void OnTextChanged(object sender, System.EventArgs e) { m_changed=true; } void OnFormClosing(object sender, System.ComponentModel.CancelEventArgs e) { if (m_changed && !Util.YesNo("Lose current edits?")) { e.Cancel=true; } } void OnShowDebug(object sender, System.EventArgs e) { if (m_showDebug.Checked) { m_debug.StartDebug(); } else { m_debug.StopDebug(); } } void OnKeyUp(object sender, System.Windows.Forms.KeyEventArgs e) { if (e.KeyCode==Keys.F5) { OnRun(null,null); e.Handled=true; } } } }