using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using GZTW.AyaNova.BLL; namespace AyaNova.PlugIn.AyaScript { public partial class ScriptDesigner : Form { //string mScript = ""; //public string Script //{ // get // { // return mScript; // } // set // { // if (mScript != value) // { // mScript = value; // IsDirty = true; // } // } //} public Guid ScriptID { get; set; } private bool IsDirty { get; set; } private bool IsNew { get; set; } //private bool IsEmpty //{ // get // { // return string.IsNullOrEmpty(Script); // } //} public ScriptDesigner() { InitializeComponent(); } private void ScriptDesigner_Load(object sender, EventArgs e) { this.Icon = Resource.ScriptIco; IsDirty = false; IsNew = true; ScriptID = Guid.NewGuid(); PopulateOpenMenu(); } private void ScriptDesigner_FormClosing(object sender, FormClosingEventArgs e) { if (!SaveChanges()) e.Cancel = true; Util.WriteScripts(); } private void PopulateOpenMenu() { openToolStripMenuItem.DropDownItems.Clear(); foreach (Util.ScriptItem si in Util.ScriptList) { ToolStripMenuItem tsi = new ToolStripMenuItem(); tsi.Text = si.ScriptName; tsi.Tag = si.ScriptID; openToolStripMenuItem.DropDownItems.Add(tsi); } } private void openToolStripMenuItem_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) { if (!SaveChanges()) return; //load selected script into editor Guid g = (Guid)e.ClickedItem.Tag; edScript.Text = Util.GetScript(g); ScriptID = g; IsDirty = false; IsNew = false; } /// /// returns false if should cancel operation /// /// private bool SaveChanges() { if (!IsDirty) return true; DialogResult dr=MessageBox.Show("Save changes?", "", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dr == DialogResult.Cancel) return false; if (dr == DialogResult.No) return true; Util.SaveScript(edScript.Text,ScriptID); IsDirty = false; IsNew = false; PopulateOpenMenu(); return true; } ///// ///// Main entry point for script ///// This method must be present and it's definition and parameters unmodified ///// to work with AyaScript ///// ///// Other methods can be defined separately but this one must be present ///// ///// AyaNova RootObjectType of passed ayaNovaObject or the type of object in the list if it's a list object ///// If a single object then this is the AyaNova business object, if a list then this is the list object ///// If a list, this contains the id's of the AyaNova objects in the list. Null if not called from a list. //public static void AyaScriptMain(RootObjectTypes objectType, Object ayaNovaObject, List objectIDList) //{ //} private void newScriptToolStripMenuItem_Click(object sender, EventArgs e) { if (!SaveChanges()) return; System.Text.StringBuilder sb = new StringBuilder(); ScriptID = Guid.NewGuid(); //Header sb.Append("//Script created: "); sb.Append(System.DateTime.Now.ToString()); sb.Append("\r\n"); sb.Append("//Name: Script "); sb.Append(System.DateTime.Now.ToString()); sb.Append("\r\n"); sb.Append("//ShowInMenuFor: Everywhere\r\n"); sb.Append("//HandlesAyaNovaTypes: Client\r\n"); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append("\r\n"); sb.Append("\r\n"); //Main method sb.Append("/// \r\n" + "/// Main entry point for script \r\n" + "/// This method must be present and it's definition and parameters unmodified \r\n" + "/// to work with AyaScript \r\n" + "/// \r\n" + "/// Other methods can be defined separately but this one must be present \r\n" + "/// \r\n" + "/// true if called from a list object, false if called from a single object edit form \r\n" + "/// AyaNova RootObjectType of passed ayaNovaObject or the type of object in the list if it's a list object \r\n" + "/// If a single object then this is the AyaNova business object, if a list then this is the list object, if called from the main menu where there is no object this is DBNull.Value \r\n" + "/// If a list, this contains the id's of the AyaNova objects in the list, otherwise it's an empty list.\r\n" ); sb.Append("public static void AyaScriptMain(bool IsList, RootObjectTypes objectType, Object ayaNovaObject, List objectIDList)\r\n"); sb.Append("{\r\n"); sb.Append("\tMessageBox.Show(\"Hello from AyaScript!\");\r\n"); sb.Append("}\r\n"); edScript.Text = sb.ToString(); IsNew = true; ScriptHeader sh = new ScriptHeader(); sh.Script = edScript.Text; if (sh.ShowDialog() == DialogResult.Cancel) { sh.Dispose(); return; } sh.Dispose(); edScript.Text = sh.Script; } /// /// Set header values /// /// /// private void headerToolStripMenuItem_Click(object sender, EventArgs e) { ScriptHeader sh = new ScriptHeader(); sh.Script = edScript.Text; if (sh.ShowDialog() == DialogResult.OK) edScript.Text = sh.Script; sh.Dispose(); } /// /// Save script /// /// /// private void saveScriptToolStripMenuItem_Click(object sender, EventArgs e) { if (!IsDirty) return; Util.SaveScript(edScript.Text, ScriptID); IsDirty = false; IsNew = false; } private void deleteScriptToolStripMenuItem_Click(object sender, EventArgs e) { if (MessageBox.Show("Are you sure?", "Delete script permanently?", MessageBoxButtons.YesNo, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button2) == DialogResult.No) return; if(!IsNew) Util.DeleteScript(ScriptID); edScript.Text = ""; ScriptID = Guid.NewGuid(); PopulateOpenMenu(); edScript.Text = ""; IsDirty = false; IsNew = true; } private void exitToolStripMenuItem_Click(object sender, EventArgs e) { if (!SaveChanges()) return; Close(); } private void edScript_TextChanged(object sender, EventArgs e) { IsDirty = true; } private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show(Util.AYS.About + "\r\nVersion " + Util.AYS.PluginVersion); } private void helpContentsToolStripMenuItem_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("https://api.ayanova.com/AyaScript/index.htm"); } //----------------------------------------------- } }