You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.1 KiB
153 lines
4.1 KiB
/* |
|
* Created by SharpDevelop. |
|
* User: Daniel Grunwald |
|
* Date: 26.07.2006 |
|
* Time: 19:49 |
|
*/ |
|
|
|
using System; |
|
using System.Collections.Generic; |
|
using System.Drawing; |
|
using System.IO; |
|
using System.Reflection; |
|
using System.Windows.Forms; |
|
using ICSharpCode.SharpDevelop.Sda; |
|
|
|
namespace SdaUser |
|
{ |
|
public partial class MainForm |
|
{ |
|
#region Application Startup |
|
[STAThread] |
|
public static void Main(string[] args) |
|
{ |
|
Application.EnableVisualStyles(); |
|
Application.SetCompatibleTextRenderingDefault(false); |
|
Application.Run(new MainForm()); |
|
} |
|
|
|
public MainForm() |
|
{ |
|
// |
|
// The InitializeComponent() call is required for Windows Forms designer support. |
|
// |
|
InitializeComponent(); |
|
} |
|
#endregion |
|
|
|
#region RunWorkbench |
|
void RunButtonClick(object sender, EventArgs e) |
|
{ |
|
Run(); |
|
} |
|
|
|
SharpDevelopHost host; |
|
|
|
void Run() |
|
{ |
|
runButton.Enabled = false; |
|
unloadHostDomainButton.Enabled = true; |
|
System.Threading.ThreadPool.QueueUserWorkItem(ThreadedRun); |
|
} |
|
|
|
void ThreadedRun(object state) |
|
{ |
|
RunWorkbench(new WorkbenchSettings()); |
|
} |
|
|
|
void RunWorkbench(WorkbenchSettings wbSettings) |
|
{ |
|
if (host == null) { |
|
StartupSettings startup = new StartupSettings(); |
|
startup.ApplicationName = "HostedSharpDevelop"; |
|
startup.DataDirectory = Path.Combine(Path.GetDirectoryName(typeof(SharpDevelopHost).Assembly.Location), "../data"); |
|
string sdaDir = Path.Combine(Path.GetDirectoryName(typeof(MainForm).Assembly.Location), "SdaAddIns"); |
|
startup.AddAddInFile(Path.Combine(sdaDir, "SdaBase.addin")); |
|
|
|
host = new SharpDevelopHost(startup); |
|
host.InvokeTarget = this; |
|
host.BeforeRunWorkbench += delegate { groupBox1.Enabled = true; }; |
|
host.WorkbenchClosed += delegate { groupBox1.Enabled = false; runButton.Enabled = true; }; |
|
} |
|
|
|
host.RunWorkbench(wbSettings); |
|
} |
|
#endregion |
|
|
|
#region MainForm Events |
|
void VisibleCheckBoxCheckedChanged(object sender, System.EventArgs e) |
|
{ |
|
host.WorkbenchVisible = visibleCheckBox.Checked; |
|
} |
|
|
|
void CloseButtonClick(object sender, System.EventArgs e) |
|
{ |
|
if (!host.CloseWorkbench(false)) { |
|
if (DialogResult.Yes == MessageBox.Show("Force close?", "Force", MessageBoxButtons.YesNo)) { |
|
host.CloseWorkbench(true); |
|
} |
|
} |
|
} |
|
|
|
void MainFormFormClosing(object sender, FormClosingEventArgs e) |
|
{ |
|
if (host != null && host.WorkbenchVisible == false) { |
|
if (!host.CloseWorkbench(false)) { |
|
host.WorkbenchVisible = true; |
|
} |
|
} |
|
} |
|
#endregion |
|
|
|
void UnloadHostDomainButtonClick(object sender, System.EventArgs e) |
|
{ |
|
unloadHostDomainButton.Enabled = false; |
|
host.UnloadDomain(); |
|
host = null; |
|
|
|
// disable the group box so no events are fired |
|
groupBox1.Enabled = false; |
|
} |
|
|
|
void OpenFileButtonClick(object sender, System.EventArgs e) |
|
{ |
|
using (OpenFileDialog dlg = new OpenFileDialog()) { |
|
if (dlg.ShowDialog() == DialogResult.OK) { |
|
if (runButton.Enabled) { |
|
// create host with InitialFile set |
|
runButton.Enabled = false; |
|
unloadHostDomainButton.Enabled = true; |
|
|
|
WorkbenchSettings wbSettings = new WorkbenchSettings(); |
|
wbSettings.InitialFileList.Add(dlg.FileName); |
|
RunWorkbench(wbSettings); |
|
} else if (host != null) { |
|
if (host.IsSolutionOrProject(dlg.FileName)) { |
|
// won't occur because no project types are defined |
|
// in our reduces .addin file. |
|
host.OpenProject(dlg.FileName); |
|
} else { |
|
host.OpenDocument(dlg.FileName); |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// This demonstrates how to access SharpDevelop's internals from the host application. |
|
/// </summary> |
|
void MakeTransparentButtonClick(object sender, System.EventArgs e) |
|
{ |
|
// We need to use a wrapper class to cross the AppDomain barrier. |
|
// The assembly containing the wrapper class will be loaded to both AppDomains. |
|
// Therefore we don't use our possibly large main application, but a special |
|
// assembly just for the interaction. |
|
|
|
SharpDevelopInteraction.InteractionClass obj; |
|
obj = host.CreateInstanceInTargetDomain<SharpDevelopInteraction.InteractionClass>(); |
|
|
|
obj.MakeTransparent(); |
|
} |
|
} |
|
}
|
|
|