309 lines
13 KiB
C#
309 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.IO;
|
|
|
|
namespace VisualPascalABCPlugins
|
|
{
|
|
public class PT4Provider_VisualPascalABCPlugin : IVisualPascalABCPlugin
|
|
{
|
|
private string PT4Directory = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName) + "\\PT4";
|
|
private string PABCWorkDirectory;
|
|
|
|
public static string StringsPrefix = "VPP_PT4PROVIDER_";
|
|
private PT4Provider.Images Images = new PT4Provider.Images();
|
|
IVisualEnvironmentCompiler VisualEnvironmentCompiler;
|
|
PT4.Tools tools;
|
|
|
|
public string Name
|
|
{
|
|
get
|
|
{
|
|
return "PT4 Provider";
|
|
}
|
|
}
|
|
public string Version
|
|
{
|
|
get
|
|
{
|
|
return "1.1";
|
|
}
|
|
}
|
|
public string Copyright
|
|
{
|
|
get
|
|
{
|
|
return "Copyright © 2005-2026 by Ivan Bondarev, Stanislav Mikhalkovich";
|
|
}
|
|
}
|
|
|
|
/*[DllImport("PT4\\PT4PABC.dll", CharSet = CharSet.Ansi, EntryPoint = "pt4demo")]
|
|
static extern int pt4demo(string startdir,
|
|
string ptdir, string dllname,
|
|
int dlloptions, int usedlltopics, int usedemodat,
|
|
string demodatname, string demodatdir,
|
|
StringBuilder topic, ref int number);
|
|
|
|
[DllImport("PT4\\PT4PABC.dll", CharSet = CharSet.Ansi, EntryPoint = "pt4load")]
|
|
static extern int pt4load(string startdir,
|
|
string ptdir, string envlist, string dirlist,
|
|
int startenv, StringBuilder edittext, StringBuilder filename);
|
|
|
|
[DllImport("PT4\\PT4PABC.dll", CharSet = CharSet.Ansi, EntryPoint = "pt4results")]
|
|
static extern int pt4results(string startdir,
|
|
string ptdir, int showbrowsedir, int browsesubdirs,
|
|
ref int fontsize, ref int showinffile, ref int showtxtfile);
|
|
|
|
[DllImport("PT4\\PT4PABC.dll", CharSet = CharSet.Ansi, EntryPoint = "pt4getdatinfo")]
|
|
static extern int pt4getdatinfo(string startdir,
|
|
StringBuilder studentname, ref int fontsize,
|
|
StringBuilder envir, StringBuilder ptdir);
|
|
|
|
[DllImport("PT4\\PT4PABC.dll", CharSet = CharSet.Ansi, EntryPoint = "pt4setdatinfo")]
|
|
public static extern int pt4setdatinfo(string startdir,
|
|
int fontsize, string envir);*/
|
|
|
|
|
|
public int Demo(StringBuilder topic, ref int number)
|
|
{
|
|
//MABR 26.12.2015>
|
|
string CurrentSourceFileName = VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.GetCurrentSourceFileName, "") as string;
|
|
tools.Demo(Path.GetDirectoryName(CurrentSourceFileName));
|
|
// tools.Demo(PABCWorkDirectory);
|
|
//MABR 26.12.2015<
|
|
return 0;
|
|
// return pt4demo(PABCWorkDirectory, PT4Directory, "pt4", 0, 1, 2, "", "", topic, ref number);
|
|
}
|
|
|
|
/*public int Load(StringBuilder edittext, StringBuilder filename)
|
|
{
|
|
filename = tools.Load(PABCWorkDirectory);
|
|
return 0;
|
|
//return pt4load(PABCWorkDirectory, PT4Directory, "PABC2", "", 1, edittext, filename);
|
|
}*/
|
|
|
|
public void Results()
|
|
{
|
|
//MABR 26.12.2015>
|
|
string CurrentSourceFileName = VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.GetCurrentSourceFileName, "") as string;
|
|
tools.Res(Path.GetDirectoryName(CurrentSourceFileName));
|
|
// tools.Res(PABCWorkDirectory);
|
|
//MABR 26.12.2015<
|
|
/*StringBuilder
|
|
s1 = new StringBuilder(50),
|
|
s2 = new StringBuilder(20),
|
|
s3 = new StringBuilder(100);
|
|
int fsize = 0, fontsize = 0,
|
|
showinf = 1, showtxt = 1,
|
|
i = pt4getdatinfo("", s1, ref fsize, s2, s3);
|
|
if (i == 0)
|
|
fontsize = fsize;
|
|
pt4results(PABCWorkDirectory, PT4Directory, 0, 0, ref fontsize,
|
|
ref showinf, ref showtxt);
|
|
if (i == 0 && fsize != fontsize)
|
|
pt4setdatinfo("", fontsize, "");*/
|
|
}
|
|
|
|
StringBuilder topic = new StringBuilder(20),edittext = new StringBuilder(100);
|
|
int number = 0;
|
|
|
|
public void ExecuteB_D()
|
|
{
|
|
Demo(topic, ref number);
|
|
}
|
|
public void ExecuteB_L()
|
|
{
|
|
// SSM 30.12.2010
|
|
|
|
//StringBuilder filename = new StringBuilder(250);
|
|
string filename = tools.Load(PABCWorkDirectory);
|
|
if (filename == "")
|
|
return;
|
|
/*int i = Load(edittext, filename);
|
|
if (i < 1 || filename.ToString() == "")
|
|
return;*/
|
|
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.OpenFile, filename.ToString());
|
|
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.PT4PositionCursorAfterTask, null);
|
|
}
|
|
public void ExecuteB_R()
|
|
{
|
|
Results();
|
|
}
|
|
|
|
public void ExecuteB_S()
|
|
{
|
|
|
|
string SystemDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);
|
|
var PT4Dir = SystemDir + "\\PT4";
|
|
|
|
var pt4setup = new System.Diagnostics.Process();
|
|
pt4setup.StartInfo.FileName = PT4Dir + "\\PT4Setup.exe";
|
|
|
|
if (System.IO.File.Exists(pt4setup.StartInfo.FileName))
|
|
try
|
|
{
|
|
pt4setup.Start();
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.AddMessageToErrorListWindow,
|
|
new List<PascalABCCompiler.Errors.Error>(new PascalABCCompiler.Errors.Error[] { new PascalABCCompiler.Errors.Error(ex.Message) }));
|
|
}
|
|
}
|
|
public void GetGUI(List<IPluginGUIItem> MenuItems, List<IPluginGUIItem> ToolBarItems)
|
|
{
|
|
// SSM 30.12.2010
|
|
string SystemDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);
|
|
tools = new PT4.Tools(SystemDir);
|
|
if (!tools.AreAvailable)
|
|
return;
|
|
|
|
PluginGUIItem Item;
|
|
Item = new PluginGUIItem(StringsPrefix + "D_NAME", StringsPrefix + "D_DESCRIPTION", Images.pb_pt4d.Image, Images.pb_pt4d.BackColor, ExecuteB_D, Keys.Control | Keys.Shift | Keys.D, "Ctrl+Shift+D");
|
|
MenuItems.Add(Item);ToolBarItems.Add(Item);
|
|
Item = new PluginGUIItem(StringsPrefix + "L_NAME", StringsPrefix + "L_DESCRIPTION", Images.pb_pt4l.Image, Images.pb_pt4l.BackColor, ExecuteB_L, Keys.Control | Keys.Shift | Keys.L, "Ctrl+Shift+L");
|
|
MenuItems.Add(Item); ToolBarItems.Add(Item);
|
|
Item = new PluginGUIItem(StringsPrefix + "R_NAME", StringsPrefix + "R_DESCRIPTION", Images.pb_pt4r.Image, Images.pb_pt4r.BackColor, ExecuteB_R, Keys.Control | Keys.Shift | Keys.R, "Ctrl+Shift+R");
|
|
MenuItems.Add(Item); ToolBarItems.Add(Item);
|
|
|
|
var PT4Dir = SystemDir + "\\PT4";
|
|
Item = new PluginGUIItem(StringsPrefix + "S_NAME", StringsPrefix + "PT4_Setup", null, Images.pb_pt4r.BackColor, ExecuteB_S, Keys.None, "");
|
|
MenuItems.Add(Item);
|
|
|
|
}
|
|
|
|
/*private void CheckAndCopyPT4Files(string FileName)
|
|
{
|
|
|
|
string fn=PABCWorkDirectory+"\\"+FileName;
|
|
string instfn=PT4Directory+"\\"+FileName;
|
|
try
|
|
{
|
|
if (!File.Exists(fn))
|
|
if (File.Exists(instfn))
|
|
File.Copy(instfn, fn);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
|
|
}*/
|
|
|
|
public PT4Provider_VisualPascalABCPlugin(IWorkbench Workbench)
|
|
{
|
|
VisualEnvironmentCompiler = Workbench.VisualEnvironmentCompiler;
|
|
VisualEnvironmentCompiler.ChangeVisualEnvironmentState += new ChangeVisualEnvironmentStateDelegate(VisualEnvironmentCompiler_ChangeVisualEnvironmentState);
|
|
VisualEnvironmentCompiler.Compiler.OnChangeCompilerState += Compiler_OnChangeCompilerState;
|
|
PABCWorkDirectory = VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.GetDirectory, "%WORKINGDIRECTORY%") as string;
|
|
/*if (PABCWorkDirectory == null)
|
|
PABCWorkDirectory = "";
|
|
else
|
|
if (Directory.Exists(PABCWorkDirectory))
|
|
{
|
|
CheckAndCopyPT4Files(PT4Provider.Constants.ResultsABCFileName);
|
|
//CheckAndCopyPT4Files(PT4Provider.Constants.ResultsDATFileName);
|
|
}
|
|
*/
|
|
/*string PABCOutputDirectory = VisualEnvironmentCompiler.ExecuteAction(VisualEnvironmentCompilerAction.GetDirectory, "%OUTPUTDIRECTORY%") as string;
|
|
if (PABCOutputDirectory != null)
|
|
if (Directory.Exists(PABCOutputDirectory))
|
|
{
|
|
PABCWorkDirectory = PABCOutputDirectory;
|
|
CheckAndCopyPT4Files(PT4Provider.Constants.ResultsABCFileName);
|
|
//CheckAndCopyPT4Files(PT4Provider.Constants.ResultsDATFileName);
|
|
}
|
|
*/
|
|
}
|
|
|
|
void CopyResultsABC(string FromDir, string ToDir)
|
|
{
|
|
try
|
|
{
|
|
if (File.Exists(FromDir + "\\" + PT4Provider.Constants.ResultsABCFileName))
|
|
File.Copy(FromDir + "\\" + PT4Provider.Constants.ResultsABCFileName, ToDir + "\\" + PT4Provider.Constants.ResultsABCFileName);
|
|
//if (File.Exists(FromDir + "\\" + PT4Provider.Constants.ResultsDATFileName))
|
|
// File.Copy(FromDir + "\\" + PT4Provider.Constants.ResultsDATFileName, ToDir + "\\" + PT4Provider.Constants.ResultsABCFileName);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
}
|
|
}
|
|
|
|
void VisualEnvironmentCompiler_ChangeVisualEnvironmentState(VisualEnvironmentState State, object obj)
|
|
{
|
|
switch (State)
|
|
{
|
|
case VisualEnvironmentState.ProcessStarting:
|
|
case VisualEnvironmentState.ProcessStartingDebug:
|
|
case VisualEnvironmentState.ProcessExited:
|
|
string FileName = (string)obj;
|
|
if(CompiledProgrammsWithPT4Unit.ContainsKey(FileName))
|
|
{
|
|
string PasDir = Path.GetDirectoryName(CompiledProgrammsWithPT4Unit[FileName]);
|
|
string ExeDir = Path.GetDirectoryName(FileName);
|
|
if (PasDir.ToLower() != ExeDir.ToLower())
|
|
{
|
|
if (State == VisualEnvironmentState.ProcessExited)
|
|
{
|
|
CopyResultsABC(ExeDir, PasDir);
|
|
CompiledProgrammsWithPT4Unit.Remove(FileName);
|
|
}
|
|
else
|
|
{
|
|
if (File.Exists(PasDir + "\\" + PT4Provider.Constants.ResultsABCFileName))
|
|
CopyResultsABC(PasDir, ExeDir);
|
|
else
|
|
CopyResultsABC(PT4Directory, ExeDir);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (State != VisualEnvironmentState.ProcessExited)
|
|
if (!File.Exists(PasDir + "\\" + PT4Provider.Constants.ResultsABCFileName))
|
|
CopyResultsABC(PT4Directory, ExeDir);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
//exe->pas
|
|
private Dictionary<string, string> CompiledProgrammsWithPT4Unit = new Dictionary<string, string>();
|
|
private string FirstCompiledFileName = null;
|
|
private bool PT4UnitUsed = false;
|
|
|
|
void Compiler_OnChangeCompilerState(PascalABCCompiler.ICompiler sender, PascalABCCompiler.CompilerState State, string FileName)
|
|
{
|
|
switch (State)
|
|
{
|
|
case PascalABCCompiler.CompilerState.CompilationStarting:
|
|
FirstCompiledFileName = FileName;
|
|
break;
|
|
|
|
case PascalABCCompiler.CompilerState.ReadPCUFile:
|
|
case PascalABCCompiler.CompilerState.BeginCompileFile:
|
|
if (Path.GetFileNameWithoutExtension(FileName.ToLower()) == PT4Provider.Constants.PT4UnitName)
|
|
PT4UnitUsed = true;
|
|
break;
|
|
|
|
case PascalABCCompiler.CompilerState.CodeGeneration:
|
|
if (CompiledProgrammsWithPT4Unit.ContainsKey(FileName))
|
|
CompiledProgrammsWithPT4Unit.Remove(FileName);
|
|
if (FirstCompiledFileName != null && PT4UnitUsed)
|
|
CompiledProgrammsWithPT4Unit.Add(FileName, FirstCompiledFileName);
|
|
break;
|
|
|
|
case PascalABCCompiler.CompilerState.CompilationFinished:
|
|
FirstCompiledFileName = null;
|
|
PT4UnitUsed = false;
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|