// 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;
}
}
}
}