Files
2018-08-22 23:28:09 +00:00

255 lines
8.7 KiB
C#

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;
}
/// <summary>
/// returns false if should cancel operation
/// </summary>
/// <returns></returns>
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;
}
///// <summary>
///// 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
///// </summary>
///// <param name="objectType">AyaNova RootObjectType of passed ayaNovaObject or the type of object in the list if it's a list object</param>
///// <param name="ayaNovaObject">If a single object then this is the AyaNova business object, if a list then this is the list object</param>
///// <param name="objectIDList">If a list, this contains the id's of the AyaNova objects in the list. Null if not called from a list.</param>
//public static void AyaScriptMain(RootObjectTypes objectType, Object ayaNovaObject, List<Guid> 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("/// <summary> \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" +
"/// </summary> \r\n" +
"/// <param name=IsList>true if called from a list object, false if called from a single object edit form</param> \r\n" +
"/// <param name=objectType>AyaNova RootObjectType of passed ayaNovaObject or the type of object in the list if it's a list object</param> \r\n" +
"/// <param name=ayaNovaObject>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</param> \r\n" +
"/// <param name=objectIDList>If a list, this contains the id's of the AyaNova objects in the list, otherwise it's an empty list.</param>\r\n" );
sb.Append("public static void AyaScriptMain(bool IsList, RootObjectTypes objectType, Object ayaNovaObject, List<Guid> 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;
}
/// <summary>
/// Set header values
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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();
}
/// <summary>
/// Save script
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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");
}
//-----------------------------------------------
}
}