Skip to content

Added ConsolePanel plugin #3098

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: development
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions External/Plugins/ConsolePanel/ConsolePanel.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{2A36ADDC-B30E-472B-BDD6-0E6E35649FAA}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ConsolePanel</RootNamespace>
<AssemblyName>ConsolePanel</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\FlashDevelop\Bin\Debug\Plugins\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\..\FlashDevelop\Bin\Debug\Plugins\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>AnyCPU</PlatformTarget>
<LangVersion>preview</LangVersion>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="UIAutomationClient" />
</ItemGroup>
<ItemGroup>
<Compile Include="Implementation\CmdProcess\CmdConsole.cs" />
<Compile Include="Implementation\CmdProcess\CmdConsoleProvider.cs" />
<Compile Include="Implementation\CmdProcess\ConsoleControl.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Implementation\CmdProcess\ConsoleControl.Designer.cs">
<DependentUpon>ConsoleControl.cs</DependentUpon>
</Compile>
<Compile Include="Gui\TabbedConsole.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Gui\TabbedConsole.Designer.cs">
<DependentUpon>TabbedConsole.cs</DependentUpon>
</Compile>
<Compile Include="IConsole.cs" />
<Compile Include="IConsoleProvider.cs" />
<Compile Include="Managers\ConsoleManager.cs" />
<Compile Include="PluginMain.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Settings.cs" />
<Compile Include="WinApi.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\PluginCore\PluginCore.csproj">
<Project>{61885f70-b4dc-4b44-852d-5d6d03f2a734}</Project>
<Name>PluginCore</Name>
<Private>False</Private>
</ProjectReference>
<ProjectReference Include="..\..\..\External\Plugins\ProjectManager\ProjectManager.csproj">
<Project>{78101c01-e186-4954-b1dd-debb7905fad8}</Project>
<Name>ProjectManager</Name>
<Private>False</Private>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
87 changes: 87 additions & 0 deletions External/Plugins/ConsolePanel/Gui/TabbedConsole.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

61 changes: 61 additions & 0 deletions External/Plugins/ConsolePanel/Gui/TabbedConsole.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace ConsolePanel.Gui
{
public partial class TabbedConsole : UserControl
{
readonly PluginMain main;

public ICollection<IConsole> Consoles => consoleTabMap.Keys;

readonly Dictionary<IConsole, TabPage> consoleTabMap;
readonly Dictionary<TabPage, IConsole> tabConsoleMap;

public TabbedConsole(PluginMain plugin)
{
InitializeComponent();
main = plugin;
consoleTabMap = new Dictionary<IConsole, TabPage>();
tabConsoleMap = new Dictionary<TabPage, IConsole>();
btnNew.Image = PluginCore.PluginBase.MainForm.FindImage16("33");
}

public void AddConsole(IConsole console)
{
var tab = new TabPage(console.ConsoleControl.Text);
console.ConsoleControl.Dock = DockStyle.Fill;
tab.Controls.Add(console.ConsoleControl);

tabConsoles.TabPages.Add(tab);
tabConsoles.SelectTab(tab);
consoleTabMap.Add(console, tabConsoles.SelectedTab);
tabConsoleMap.Add(tabConsoles.SelectedTab, console);
}

public void RemoveConsole(IConsole console)
{
if (!consoleTabMap.ContainsKey(console)) return;
console.Cancel();
var page = consoleTabMap[console];
tabConsoles.TabPages.Remove(page);
consoleTabMap.Remove(console);
tabConsoleMap.Remove(page);
}

void tabConsoles_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Middle) return;
for (int i = 0; i < tabConsoles.TabCount; i++)
{
if (tabConsoles.GetTabRect(i).Contains(e.Location))
{
RemoveConsole(tabConsoleMap[tabConsoles.TabPages[i]]);
}
}
}

void btnNew_Click(object sender, EventArgs e) => main.CreateConsolePanel();
}
}
30 changes: 30 additions & 0 deletions External/Plugins/ConsolePanel/IConsole.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
using System;
using System.Windows.Forms;

namespace ConsolePanel
{
/// <summary>
/// Interface to implement a different way of embedding a console window
/// </summary>
public interface IConsole
{
event EventHandler Exited;

/// <summary>
/// The Control that is added to the FlashDevelop form
/// </summary>
Control ConsoleControl { get; }

string WorkingDirectory { set; }

void Clear();

void Cancel();

/// <summary>
/// Sends a string to the command line
/// </summary>
/// <param name="str"></param>
void SendString(string str);
}
}
8 changes: 8 additions & 0 deletions External/Plugins/ConsolePanel/IConsoleProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace ConsolePanel
{
public interface IConsoleProvider
{
IConsole GetConsole();
IConsole GetConsole(string workingDirectory);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Windows.Forms;

namespace ConsolePanel.Implementation.CmdProcess
{
class CmdConsole : IConsole
{
readonly ConsoleControl cmd;

public CmdConsole() : this(null)
{
}

public CmdConsole(string workingDirectory)
{
cmd = new ConsoleControl(true, workingDirectory) { Text = "cmd" };
cmd.Exited += (sender, e) => Exited?.Invoke(sender, e);
}

public Control ConsoleControl => cmd;

public string WorkingDirectory
{
set => cmd.WorkingDirectory = value;
}

public event EventHandler Exited;

public void Clear() => cmd.SendString("cls");

public void Cancel() => cmd.Cancel();

public void SendString(string str) => cmd.SendString(str, false);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace ConsolePanel.Implementation.CmdProcess
{
class CmdConsoleProvider : IConsoleProvider
{
public IConsole GetConsole() => GetConsole(null);
public IConsole GetConsole(string workingDirectory) => new CmdConsole(workingDirectory);
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading