mirror of https://github.com/buggins/dlangide.git
Merge branch 'master' of github.com:buggins/dlangide
This commit is contained in:
commit
c006d96c0b
|
@ -33,6 +33,7 @@
|
||||||
<String>USE_OPENGL</String>
|
<String>USE_OPENGL</String>
|
||||||
<String>USE_SDL</String>
|
<String>USE_SDL</String>
|
||||||
<String>USE_FREETYPE</String>
|
<String>USE_FREETYPE</String>
|
||||||
|
<String>USE_GDB_DEBUG</String>
|
||||||
<String>EmbedStandardResources</String>
|
<String>EmbedStandardResources</String>
|
||||||
</VersionIds>
|
</VersionIds>
|
||||||
</VersionIds>
|
</VersionIds>
|
||||||
|
@ -164,6 +165,30 @@
|
||||||
<Externalconsole>true</Externalconsole>
|
<Externalconsole>true</Externalconsole>
|
||||||
<DebugLevel>0</DebugLevel>
|
<DebugLevel>0</DebugLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugX11|x64' ">
|
||||||
|
<OutputPath>bin\DebugX11</OutputPath>
|
||||||
|
<VersionIds>
|
||||||
|
<VersionIds>
|
||||||
|
<String>USE_X11</String>
|
||||||
|
<String>USE_FREETYPE</String>
|
||||||
|
<String>USE_GDB_DEBUG</String>
|
||||||
|
<String>EmbedStandardResources</String>
|
||||||
|
</VersionIds>
|
||||||
|
</VersionIds>
|
||||||
|
<ObjectsDirectory>obj/DebugX11</ObjectsDirectory>
|
||||||
|
<LinkinThirdPartyLibraries>true</LinkinThirdPartyLibraries>
|
||||||
|
<ExtraLinkerArguments>-L-lX11</ExtraLinkerArguments>
|
||||||
|
<ExtraCompilerArguments>-Jviews
|
||||||
|
-Jviews/res
|
||||||
|
-Jviews/res/i18n
|
||||||
|
-Jviews/res/mdpi
|
||||||
|
-Jviews/res/hdpi</ExtraCompilerArguments>
|
||||||
|
<UnittestMode>false</UnittestMode>
|
||||||
|
<OutputName>dlangide-monod-linux</OutputName>
|
||||||
|
<Target>Executable</Target>
|
||||||
|
<Externalconsole>true</Externalconsole>
|
||||||
|
<DebugLevel>0</DebugLevel>
|
||||||
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="src\dlangide.d" />
|
<Compile Include="src\dlangide.d" />
|
||||||
<Compile Include="src\ddc\lexer\exceptions.d" />
|
<Compile Include="src\ddc\lexer\exceptions.d" />
|
||||||
|
@ -192,5 +217,9 @@
|
||||||
<Compile Include="src\dlangide\workspace\workspace.d" />
|
<Compile Include="src\dlangide\workspace\workspace.d" />
|
||||||
<Compile Include="src\ddebug\common\debugger.d" />
|
<Compile Include="src\ddebug\common\debugger.d" />
|
||||||
<Compile Include="src\ddebug\common\queue.d" />
|
<Compile Include="src\ddebug\common\queue.d" />
|
||||||
|
<Compile Include="src\ddebug\gdb\gdbinterface.d" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="src\ddebug\gdb\" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -13,6 +13,8 @@ Project("{3947E667-4C90-4C3A-BEB9-7148D6FE0D7C}") = "tetris-monod-linux", "..\dl
|
||||||
EndProject
|
EndProject
|
||||||
Project("{3947E667-4C90-4C3A-BEB9-7148D6FE0D7C}") = "dmledit-monod-linux", "..\dlangui\examples\dmledit\dmledit-monod-linux.dproj", "{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}"
|
Project("{3947E667-4C90-4C3A-BEB9-7148D6FE0D7C}") = "dmledit-monod-linux", "..\dlangui\examples\dmledit\dmledit-monod-linux.dproj", "{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{3947E667-4C90-4C3A-BEB9-7148D6FE0D7C}") = "disowntty", "tools\disowntty\disowntty.dproj", "{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -21,12 +23,15 @@ Global
|
||||||
DebugMinimal|Any CPU = DebugMinimal|Any CPU
|
DebugMinimal|Any CPU = DebugMinimal|Any CPU
|
||||||
ReleaseMinimal|Any CPU = ReleaseMinimal|Any CPU
|
ReleaseMinimal|Any CPU = ReleaseMinimal|Any CPU
|
||||||
UnittestMinimal|Any CPU = UnittestMinimal|Any CPU
|
UnittestMinimal|Any CPU = UnittestMinimal|Any CPU
|
||||||
|
DebugX11|Any CPU = DebugX11|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Debug|Any CPU.ActiveCfg = Debug|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Debug|Any CPU.ActiveCfg = Debug|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Debug|Any CPU.Build.0 = Debug|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Release|Any CPU.ActiveCfg = Release|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Release|Any CPU.Build.0 = Release|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{075C374A-563A-4CAC-9E9F-0B6E1DFEAEC3}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -39,6 +44,8 @@ Global
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Debug|Any CPU.Build.0 = Debug|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Release|Any CPU.ActiveCfg = Release|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Release|Any CPU.Build.0 = Release|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{0A3A0D08-E4DC-418E-B92B-561CC91C2306}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -51,6 +58,8 @@ Global
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Debug|Any CPU.Build.0 = Debug|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Release|Any CPU.ActiveCfg = Release|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Release|Any CPU.Build.0 = Release|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{54BDE028-6064-4CA9-B6CA-4C0BEEE70F24}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -63,6 +72,8 @@ Global
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.Debug|Any CPU.Build.0 = Debug|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.Release|Any CPU.ActiveCfg = Release|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.Release|Any CPU.Build.0 = Release|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{85ECF79F-B75F-4459-8A90-3857961F2029}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{85ECF79F-B75F-4459-8A90-3857961F2029}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -75,6 +86,8 @@ Global
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Debug|Any CPU.Build.0 = Debug|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Release|Any CPU.ActiveCfg = Release|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Release|Any CPU.Build.0 = Release|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{8E722D80-CF8D-4D98-BEAE-7BC9E6752AC4}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -87,6 +100,8 @@ Global
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Debug|Any CPU.Build.0 = Debug|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Debug|Any CPU.Build.0 = Debug|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|x64
|
||||||
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugX11|Any CPU.ActiveCfg = DebugX11|x64
|
||||||
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.DebugX11|Any CPU.Build.0 = DebugX11|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Release|Any CPU.ActiveCfg = Release|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Release|Any CPU.ActiveCfg = Release|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Release|Any CPU.Build.0 = Release|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Release|Any CPU.Build.0 = Release|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|x64
|
||||||
|
@ -95,5 +110,19 @@ Global
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Unittest|Any CPU.Build.0 = Unittest|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.Unittest|Any CPU.Build.0 = Unittest|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestMinimal|Any CPU.ActiveCfg = UnittestMinimal|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestMinimal|Any CPU.ActiveCfg = UnittestMinimal|x64
|
||||||
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestMinimal|Any CPU.Build.0 = UnittestMinimal|x64
|
{A38BEF21-AAFE-4115-A978-63B7C8C2FBD1}.UnittestMinimal|Any CPU.Build.0 = UnittestMinimal|x64
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.DebugX11|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.DebugX11|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.ReleaseMinimal|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.ReleaseMinimal|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Unittest|Any CPU.ActiveCfg = Unittest|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.Unittest|Any CPU.Build.0 = Unittest|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.UnittestMinimal|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}.UnittestMinimal|Any CPU.Build.0 = Debug|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -2,26 +2,106 @@ module ddebug.common.debugger;
|
||||||
|
|
||||||
import core.thread;
|
import core.thread;
|
||||||
import dlangui.core.logger;
|
import dlangui.core.logger;
|
||||||
|
import ddebug.common.queue;
|
||||||
|
|
||||||
|
enum ResponseCode : int {
|
||||||
|
/// Operation finished successfully
|
||||||
|
Ok = 0,
|
||||||
|
|
||||||
|
// more success codes here
|
||||||
|
|
||||||
|
/// General purpose failure code
|
||||||
|
Fail = 1000,
|
||||||
|
/// method is not implemented
|
||||||
|
NotImplemented,
|
||||||
|
/// error running debugger
|
||||||
|
CannotRunDebugger,
|
||||||
|
|
||||||
|
// more error codes here
|
||||||
|
}
|
||||||
|
|
||||||
|
alias Runnable = void delegate();
|
||||||
|
alias DebuggerResponse = void delegate(ResponseCode code, string msg);
|
||||||
|
|
||||||
interface Debugger {
|
interface Debugger {
|
||||||
/// start debugging
|
/// start debugging
|
||||||
void startDebugging(string executable, string[] args, string workingDir);
|
void startDebugging(string debuggerExecutable, string executable, string[] args, string workingDir, DebuggerResponse response);
|
||||||
}
|
}
|
||||||
|
|
||||||
interface DebuggerCallback {
|
|
||||||
|
|
||||||
|
/// proxy for debugger interface implementing async calls
|
||||||
|
class DebuggerProxy : Debugger {
|
||||||
|
private DebuggerBase _debugger;
|
||||||
|
private void delegate(Runnable runnable) _callbackDelegate;
|
||||||
|
|
||||||
|
this(DebuggerBase debugger, void delegate(Runnable runnable) callbackDelegate) {
|
||||||
|
_debugger = debugger;
|
||||||
|
_callbackDelegate = callbackDelegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void startDebugging(string debuggerExecutable, string executable, string[] args, string workingDir, DebuggerResponse response) {
|
||||||
|
_debugger.postRequest(delegate() {
|
||||||
|
_debugger.startDebugging(debuggerExecutable, executable, args, workingDir,
|
||||||
|
delegate(ResponseCode code, string msg) {
|
||||||
|
_callbackDelegate( delegate() { response(code, msg); } );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class DebuggerBase : Thread {
|
class DebuggerBase : Thread, Debugger {
|
||||||
private bool _stopRequested;
|
private bool _stopRequested;
|
||||||
private bool _finished;
|
private bool _finished;
|
||||||
|
protected string _debuggerExecutable;
|
||||||
|
protected BlockingQueue!Runnable _queue;
|
||||||
|
|
||||||
|
void postRequest(Runnable request) {
|
||||||
|
_queue.put(request);
|
||||||
|
}
|
||||||
|
|
||||||
this() {
|
this() {
|
||||||
super(&run);
|
super(&run);
|
||||||
|
_queue = new BlockingQueue!Runnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~this() {
|
||||||
|
stop();
|
||||||
|
destroy(_queue);
|
||||||
|
_queue = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop() {
|
||||||
|
Log.i("Debugger.stop()");
|
||||||
|
_stopRequested = true;
|
||||||
|
_queue.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onDebuggerThreadStarted() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onDebuggerThreadFinished() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// thread func: execute all tasks from queue
|
||||||
private void run() {
|
private void run() {
|
||||||
|
onDebuggerThreadStarted();
|
||||||
Log.i("Debugger thread started");
|
Log.i("Debugger thread started");
|
||||||
|
while (!_stopRequested) {
|
||||||
|
Runnable task;
|
||||||
|
if (_queue.get(task, 0)) {
|
||||||
|
task();
|
||||||
|
}
|
||||||
|
}
|
||||||
Log.i("Debugger thread finished");
|
Log.i("Debugger thread finished");
|
||||||
_finished = true;
|
_finished = true;
|
||||||
|
onDebuggerThreadFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void startDebugging(string debuggerExecutable, string executable, string[] args, string workingDir, DebuggerResponse response) {
|
||||||
|
response(ResponseCode.NotImplemented, "Not Implemented");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,20 +7,127 @@ class BlockingQueue(T) {
|
||||||
|
|
||||||
private Mutex _mutex;
|
private Mutex _mutex;
|
||||||
private Condition _condition;
|
private Condition _condition;
|
||||||
|
private T[] _buffer;
|
||||||
|
private int _readPos;
|
||||||
|
private int _writePos;
|
||||||
|
private shared bool _closed;
|
||||||
|
|
||||||
this() {
|
this() {
|
||||||
_mutex = new Mutex();
|
_mutex = new Mutex();
|
||||||
_condition = new Condition(_mutex);
|
_condition = new Condition(_mutex);
|
||||||
|
_readPos = 0;
|
||||||
|
_writePos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void close() {
|
||||||
|
if (_mutex && !_closed) {
|
||||||
|
synchronized(_mutex) {
|
||||||
|
_closed = true;
|
||||||
|
if (_condition !is null)
|
||||||
|
_condition.notifyAll();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_closed = true;
|
||||||
|
}
|
||||||
|
if (_condition) {
|
||||||
|
destroy(_condition);
|
||||||
|
_condition = null;
|
||||||
|
}
|
||||||
|
if (_mutex) {
|
||||||
|
destroy(_mutex);
|
||||||
|
_mutex = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
~this() {
|
~this() {
|
||||||
// TODO: destroy mutex?
|
// TODO: destroy mutex?
|
||||||
|
close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void move() {
|
||||||
|
if (_readPos > 1024 && _readPos > _buffer.length * 3 / 4) {
|
||||||
|
// move buffer data
|
||||||
|
for (int i = 0; _readPos + i < _writePos; i++)
|
||||||
|
_buffer[i] = _buffer[_readPos + i];
|
||||||
|
_writePos -= _readPos;
|
||||||
|
_readPos = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void append(ref T item) {
|
||||||
|
if (_writePos >= _buffer.length) {
|
||||||
|
move();
|
||||||
|
_buffer.length = _buffer.length == 0 ? 64 : _buffer.length * 2;
|
||||||
|
}
|
||||||
|
_buffer[_writePos++] = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
void put(T item) {
|
void put(T item) {
|
||||||
|
if (_closed)
|
||||||
|
return;
|
||||||
|
synchronized(_mutex) {
|
||||||
|
if (_closed)
|
||||||
|
return;
|
||||||
|
append(item);
|
||||||
|
_condition.notifyAll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void put(T[] items) {
|
||||||
|
if (_closed)
|
||||||
|
return;
|
||||||
|
synchronized(_mutex) {
|
||||||
|
if (_closed)
|
||||||
|
return;
|
||||||
|
foreach(ref item; items) {
|
||||||
|
append(item);
|
||||||
|
}
|
||||||
|
_condition.notifyAll();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get(ref T value, int timeoutMillis) {
|
bool get(ref T value, int timeoutMillis) {
|
||||||
|
if (_closed)
|
||||||
|
return false;
|
||||||
|
synchronized(_mutex) {
|
||||||
|
if (_closed)
|
||||||
|
return false;
|
||||||
|
if (_readPos < _writePos) {
|
||||||
|
value = _buffer[_readPos++];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (timeoutMillis <= 0)
|
||||||
|
_condition.wait(); // no timeout
|
||||||
|
else if (!_condition.wait(dur!"msecs"(timeoutMillis)))
|
||||||
|
return false; // timeout
|
||||||
|
if (_readPos < _writePos) {
|
||||||
|
value = _buffer[_readPos++];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool getAll(ref T[] values, int timeoutMillis) {
|
||||||
|
if (_closed)
|
||||||
|
return false;
|
||||||
|
synchronized(_mutex) {
|
||||||
|
if (_closed)
|
||||||
|
return false;
|
||||||
|
values.length = 0;
|
||||||
|
while (_readPos < _writePos)
|
||||||
|
values ~= _buffer[_readPos++];
|
||||||
|
if (values.length > 0)
|
||||||
|
return true;
|
||||||
|
if (timeoutMillis <= 0)
|
||||||
|
_condition.wait(); // no timeout
|
||||||
|
else if (!_condition.wait(dur!"msecs"(timeoutMillis)))
|
||||||
|
return false; // timeout
|
||||||
|
while (_readPos < _writePos)
|
||||||
|
values ~= _buffer[_readPos++];
|
||||||
|
if (values.length > 0)
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,205 @@
|
||||||
|
module ddebug.gdb.gdbinterface;
|
||||||
|
|
||||||
|
public import ddebug.common.debugger;
|
||||||
|
import dlangui.core.logger;
|
||||||
|
import ddebug.common.queue;
|
||||||
|
import dlangide.builders.extprocess;
|
||||||
|
import std.utf;
|
||||||
|
import std.conv : to;
|
||||||
|
|
||||||
|
class ConsoleDebuggerInterface : DebuggerBase, TextWriter {
|
||||||
|
protected ExternalProcess _debuggerProcess;
|
||||||
|
|
||||||
|
protected ExternalProcessState runDebuggerProcess(string executable, string[]args, string dir) {
|
||||||
|
_debuggerProcess = new ExternalProcess();
|
||||||
|
ExternalProcessState state = _debuggerProcess.run(executable, args, dir, this);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string[] _stdoutLines;
|
||||||
|
private char[] _stdoutBuf;
|
||||||
|
/// return true to clear lines list
|
||||||
|
protected bool onDebuggerStdoutLines(string[] lines) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
private void onStdoutText(string text) {
|
||||||
|
_stdoutBuf ~= text;
|
||||||
|
// pass full lines
|
||||||
|
int startPos = 0;
|
||||||
|
bool fullLinesFound = false;
|
||||||
|
for (int i = 0; i < _stdoutBuf.length; i++) {
|
||||||
|
if (_stdoutBuf[i] == '\n' || _stdoutBuf[i] == '\r') {
|
||||||
|
if (i <= startPos)
|
||||||
|
_stdoutLines ~= "";
|
||||||
|
else
|
||||||
|
_stdoutLines ~= _stdoutBuf[startPos .. i].dup;
|
||||||
|
fullLinesFound = true;
|
||||||
|
if (i + 1 < _stdoutBuf.length) {
|
||||||
|
if ((_stdoutBuf[i] == '\n' && _stdoutBuf[i + 1] == '\r')
|
||||||
|
|| (_stdoutBuf[i] == '\r' && _stdoutBuf[i + 1] == '\n'))
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
startPos = i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (fullLinesFound) {
|
||||||
|
for (int i = 0; i + startPos < _stdoutBuf.length; i++)
|
||||||
|
_stdoutBuf[i] = _stdoutBuf[i + startPos];
|
||||||
|
_stdoutBuf.length = _stdoutBuf.length - startPos;
|
||||||
|
if (onDebuggerStdoutLines(_stdoutLines)) {
|
||||||
|
_stdoutLines.length = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool sendLine(string text) {
|
||||||
|
return _debuggerProcess.write(text ~ "\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/// log lines
|
||||||
|
override void writeText(dstring text) {
|
||||||
|
string text8 = toUTF8(text);
|
||||||
|
postRequest(delegate() {
|
||||||
|
onStdoutText(text8);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
import std.process;
|
||||||
|
class GDBInterface : ConsoleDebuggerInterface {
|
||||||
|
|
||||||
|
protected int commandId;
|
||||||
|
|
||||||
|
|
||||||
|
int sendCommand(string text) {
|
||||||
|
commandId++;
|
||||||
|
sendLine(to!string(commandId) ~ text);
|
||||||
|
return commandId;
|
||||||
|
}
|
||||||
|
|
||||||
|
Pid terminalPid;
|
||||||
|
string terminalTty;
|
||||||
|
|
||||||
|
string startTerminal(string termExecutable) {
|
||||||
|
Log.d("Starting terminal");
|
||||||
|
import std.random;
|
||||||
|
import std.file;
|
||||||
|
import std.path;
|
||||||
|
import std.string;
|
||||||
|
import core.thread;
|
||||||
|
uint n = uniform(0, 0x10000000, rndGen());
|
||||||
|
terminalTty = null;
|
||||||
|
string termfile = buildPath(tempDir, format("dlangide-term-name-%07x.tmp", n));
|
||||||
|
Log.d("temp file for tty name: ", termfile);
|
||||||
|
try {
|
||||||
|
terminalPid = spawnProcess([
|
||||||
|
termExecutable,
|
||||||
|
"-title",
|
||||||
|
"DLangIDE External Console",
|
||||||
|
"-e",
|
||||||
|
"echo 'DlangIDE External Console' && tty > " ~ termfile ~ " && sleep 1000000"
|
||||||
|
]);
|
||||||
|
for (int i = 0; i < 20; i++) {
|
||||||
|
Thread.sleep(dur!"msecs"(100));
|
||||||
|
if (!isTerminalActive) {
|
||||||
|
Log.e("Failed to get terminal TTY");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!exists(termfile)) {
|
||||||
|
Thread.sleep(dur!"msecs"(20));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// read TTY from file
|
||||||
|
if (exists(termfile)) {
|
||||||
|
terminalTty = readText(termfile);
|
||||||
|
if (terminalTty.endsWith("\n"))
|
||||||
|
terminalTty = terminalTty[0 .. $-1];
|
||||||
|
// delete file
|
||||||
|
remove(termfile);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.e("Failed to start terminal ", e);
|
||||||
|
killTerminal();
|
||||||
|
}
|
||||||
|
if (terminalTty.length == 0) {
|
||||||
|
Log.i("Cannot start terminal");
|
||||||
|
killTerminal();
|
||||||
|
} else {
|
||||||
|
Log.i("Terminal: ", terminalTty);
|
||||||
|
}
|
||||||
|
return terminalTty;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isTerminalActive() {
|
||||||
|
if (terminalPid is null)
|
||||||
|
return false;
|
||||||
|
auto res = tryWait(terminalPid);
|
||||||
|
if (res.terminated) {
|
||||||
|
Log.d("isTerminalActive: Terminal is stopped");
|
||||||
|
wait(terminalPid);
|
||||||
|
terminalPid = Pid.init;
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void killTerminal() {
|
||||||
|
if (terminalPid is null)
|
||||||
|
return;
|
||||||
|
try {
|
||||||
|
Log.d("Trying to kill terminal");
|
||||||
|
kill(terminalPid, 9);
|
||||||
|
Log.d("Waiting for terminal process termination");
|
||||||
|
wait(terminalPid);
|
||||||
|
terminalPid = Pid.init;
|
||||||
|
Log.d("Killed");
|
||||||
|
} catch (Exception e) {
|
||||||
|
Log.d("Exception while killing terminal", e);
|
||||||
|
terminalPid = Pid.init;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string terminalExecutableFileName = "xterm";
|
||||||
|
override void startDebugging(string debuggerExecutable, string executable, string[] args, string workingDir, DebuggerResponse response) {
|
||||||
|
string[] debuggerArgs;
|
||||||
|
terminalTty = startTerminal(terminalExecutableFileName);
|
||||||
|
if (terminalTty.length == 0) {
|
||||||
|
response(ResponseCode.CannotRunDebugger, "Cannot start terminal");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
debuggerArgs ~= "-tty";
|
||||||
|
debuggerArgs ~= terminalTty;
|
||||||
|
debuggerArgs ~= "--interpreter=mi";
|
||||||
|
debuggerArgs ~= "--silent";
|
||||||
|
debuggerArgs ~= "--args";
|
||||||
|
debuggerArgs ~= executable;
|
||||||
|
foreach(arg; args)
|
||||||
|
debuggerArgs ~= arg;
|
||||||
|
ExternalProcessState state = runDebuggerProcess(debuggerExecutable, debuggerArgs, workingDir);
|
||||||
|
Log.i("Debugger process state:");
|
||||||
|
if (state == ExternalProcessState.Running) {
|
||||||
|
response(ResponseCode.Ok, "Started");
|
||||||
|
//sendCommand("-break-insert main");
|
||||||
|
sendCommand("-exec-run");
|
||||||
|
} else {
|
||||||
|
response(ResponseCode.CannotRunDebugger, "Error while trying to run debugger process");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override void stop() {
|
||||||
|
if (_debuggerProcess !is null)
|
||||||
|
_debuggerProcess.kill();
|
||||||
|
killTerminal();
|
||||||
|
super.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// return true to clear lines list
|
||||||
|
override protected bool onDebuggerStdoutLines(string[] lines) {
|
||||||
|
Log.d("onDebuggerStdout ", lines);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -59,14 +59,17 @@ extern (C) int UIAppMain(string[] args) {
|
||||||
version(USE_WIN_DEBUG) {
|
version(USE_WIN_DEBUG) {
|
||||||
debuggerTest();
|
debuggerTest();
|
||||||
}
|
}
|
||||||
|
version(USE_GDB_DEBUG) {
|
||||||
|
debuggerTestGDB();
|
||||||
|
}
|
||||||
|
|
||||||
// create window
|
// create window
|
||||||
Window window = Platform.instance.createWindow("Dlang IDE", null, WindowFlag.Resizable, 800, 600);
|
Window window = Platform.instance.createWindow("Dlang IDE", null, WindowFlag.Resizable, 800, 600);
|
||||||
// set window icon
|
// set window icon
|
||||||
window.windowIcon = drawableCache.getImage("dlangui-logo1");
|
window.windowIcon = drawableCache.getImage("dlangui-logo1");
|
||||||
|
|
||||||
Widget w = new Widget();
|
//Widget w = new Widget();
|
||||||
pragma(msg, w.click.return_t, "", w.click.params_t);
|
//pragma(msg, w.click.return_t, "", w.click.params_t);
|
||||||
|
|
||||||
IDEFrame frame = new IDEFrame(window);
|
IDEFrame frame = new IDEFrame(window);
|
||||||
|
|
||||||
|
@ -93,6 +96,40 @@ version(USE_WIN_DEBUG) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
version(USE_GDB_DEBUG) {
|
||||||
|
void debuggerTestGDB() {
|
||||||
|
import ddebug.gdb.gdbinterface;
|
||||||
|
import core.thread;
|
||||||
|
Log.d("Testing GDB debugger");
|
||||||
|
DebuggerBase debugger = new DebuggerBase();
|
||||||
|
debugger.startDebugging("gdb", "test", [], "", delegate(ResponseCode code, string msg) {
|
||||||
|
Log.d("startDebugging result: ", code, " : ", msg);
|
||||||
|
//assert(code == ResponseCode.NotImplemented);
|
||||||
|
});
|
||||||
|
debugger.stop();
|
||||||
|
destroy(debugger);
|
||||||
|
|
||||||
|
// async
|
||||||
|
|
||||||
|
debugger = new GDBInterface();
|
||||||
|
DebuggerProxy proxy = new DebuggerProxy(debugger, delegate(Runnable runnable) {
|
||||||
|
runnable();
|
||||||
|
});
|
||||||
|
Log.d("calling debugger.start()");
|
||||||
|
debugger.start();
|
||||||
|
Log.d("calling proxy.startDebugging()");
|
||||||
|
proxy.startDebugging("gdb", "/home/lve/src/d/dlangide/test/gdbtest", ["param1", "param2"], "/home/lve/src/d/dlangide/test", delegate(ResponseCode code, string msg) {
|
||||||
|
Log.d("startDebugging result: ", code, " : ", msg);
|
||||||
|
//assert(code == ResponseCode.NotImplemented);
|
||||||
|
});
|
||||||
|
Thread.sleep(dur!"msecs"(200000));
|
||||||
|
debugger.stop();
|
||||||
|
Thread.sleep(dur!"msecs"(200000));
|
||||||
|
destroy(debugger);
|
||||||
|
Log.d("Testing of GDB debugger is finished");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unittest {
|
unittest {
|
||||||
void jsonTest() {
|
void jsonTest() {
|
||||||
import dlangui.core.settings;
|
import dlangui.core.settings;
|
||||||
|
|
|
@ -400,14 +400,16 @@ class ExternalProcess {
|
||||||
return _state;
|
return _state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void write(string data) {
|
bool write(string data) {
|
||||||
if(_state == ExternalProcessState.Error || _state == ExternalProcessState.None || _state == ExternalProcessState.Stopped) {
|
if(_state == ExternalProcessState.Error || _state == ExternalProcessState.None || _state == ExternalProcessState.Stopped) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log.d("writing ", data.length, " characters to stdin");
|
Log.d("writing ", data.length, " characters to stdin");
|
||||||
_pipes.stdin.write("", data);
|
_pipes.stdin.write("", data);
|
||||||
_pipes.stdin.close();
|
_pipes.stdin.flush();
|
||||||
|
//_pipes.stdin.close();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,10 @@ import dlangui.core.types;
|
||||||
import dlangui.core.i18n;
|
import dlangui.core.i18n;
|
||||||
import dlangui.platforms.common.platform;
|
import dlangui.platforms.common.platform;
|
||||||
import dlangui.dialogs.dialog;
|
import dlangui.dialogs.dialog;
|
||||||
|
import dlangui.widgets.widget;
|
||||||
|
import dlangui.widgets.layouts;
|
||||||
|
import dlangui.widgets.editors;
|
||||||
|
import dlangui.dml.parser;
|
||||||
|
|
||||||
class NewProjectDlg : Dialog {
|
class NewProjectDlg : Dialog {
|
||||||
|
|
||||||
|
@ -18,6 +22,54 @@ class NewProjectDlg : Dialog {
|
||||||
/// override to implement creation of dialog controls
|
/// override to implement creation of dialog controls
|
||||||
override void init() {
|
override void init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
Widget content = parseML(q{
|
||||||
|
VerticalLayout {
|
||||||
|
id: vlayout
|
||||||
|
HorizontalLayout {
|
||||||
|
VerticalLayout {
|
||||||
|
layoutWidth: FILL_PARENT; layoutHeight: FILL_PARENT; layoutWidth: 1
|
||||||
|
TextWidget {
|
||||||
|
text: "Project type"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VerticalLayout {
|
||||||
|
layoutWidth: FILL_PARENT; layoutWeight: FILL_PARENT; layoutWidth: 1
|
||||||
|
TextWidget {
|
||||||
|
text: "Template"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VerticalLayout {
|
||||||
|
layoutWidth: FILL_PARENT; layoutWeight: FILL_PARENT; layoutWidth: 1
|
||||||
|
TextWidget {
|
||||||
|
text: "Description"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
margins: Rect { left: 5; right: 3; top: 2; bottom: 4 }
|
||||||
|
padding: Rect { 5, 4, 3, 2 } // same as Rect { left: 5; top: 4; right: 3; bottom: 2 }
|
||||||
|
TextWidget {
|
||||||
|
/* this widget can be accessed via id myLabel1
|
||||||
|
e.g. w.childById!TextWidget("myLabel1")
|
||||||
|
*/
|
||||||
|
id: myLabel1
|
||||||
|
text: "Some text"; padding: 5
|
||||||
|
enabled: false
|
||||||
|
}
|
||||||
|
TextWidget {
|
||||||
|
id: myLabel2
|
||||||
|
text: "More text"; margins: 5
|
||||||
|
enabled: true
|
||||||
|
}
|
||||||
|
CheckBox{ id: cb1; text: "Some checkbox" }
|
||||||
|
HorizontalLayout {
|
||||||
|
RadioButton { id: rb1; text: "Radio Button 1" }
|
||||||
|
RadioButton { id: rb1; text: "Radio Button 2" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// you can access loaded items by id - e.g. to assign signal listeners
|
||||||
|
auto edit1 = window.mainWidget.childById!EditLine("edit1");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -197,7 +197,7 @@ class SearchWidget : TabWidget {
|
||||||
_layout.addChild(_findText);
|
_layout.addChild(_findText);
|
||||||
|
|
||||||
auto goButton = new ImageButton("findTextButton", "edit-find");
|
auto goButton = new ImageButton("findTextButton", "edit-find");
|
||||||
goButton.onClickListener = &onFindButtonPressed;
|
goButton.click = &onFindButtonPressed;
|
||||||
_layout.addChild(goButton);
|
_layout.addChild(goButton);
|
||||||
|
|
||||||
_searchScope = new ComboBox("searchScope", ["File"d, "Project"d, "Dependencies"d, "Everywhere"d]);
|
_searchScope = new ComboBox("searchScope", ["File"d, "Project"d, "Dependencies"d, "Everywhere"d]);
|
||||||
|
|
|
@ -8,7 +8,7 @@ import dlangui.dialogs.settingsdialog;
|
||||||
|
|
||||||
|
|
||||||
const AVAILABLE_THEMES = ["ide_theme_default", "ide_theme_dark"];
|
const AVAILABLE_THEMES = ["ide_theme_default", "ide_theme_dark"];
|
||||||
const AVAILABLE_LANGUAGES = ["en", "ru"];
|
const AVAILABLE_LANGUAGES = ["en", "ru", "es"];
|
||||||
|
|
||||||
class IDESettings : SettingsFile {
|
class IDESettings : SettingsFile {
|
||||||
|
|
||||||
|
@ -142,11 +142,17 @@ SettingsPage createSettingsPages() {
|
||||||
texted.addCheckbox("editors/textEditor/useSpacesForTabs", UIString("Use spaces for tabs"d));
|
texted.addCheckbox("editors/textEditor/useSpacesForTabs", UIString("Use spaces for tabs"d));
|
||||||
texted.addCheckbox("editors/textEditor/smartIndents", UIString("Smart indents"d));
|
texted.addCheckbox("editors/textEditor/smartIndents", UIString("Smart indents"d));
|
||||||
texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString("Smart indent after paste"d));
|
texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString("Smart indent after paste"d));
|
||||||
SettingsPage ui = res.addChild("interface", UIString("Interface"d));
|
SettingsPage dlang = res.addChild("dlang", UIString("D"d));
|
||||||
|
SettingsPage ddebug = dlang.addChild("dlang/debugger", UIString("Debugger"d));
|
||||||
|
ddebug.addStringEdit("dlang/debugger/executable", UIString("Debugger executable"d), "gdb");
|
||||||
|
SettingsPage ui = res.addChild("interface", UIString("Interface"d));
|
||||||
ui.addStringComboBox("interface/theme", UIString("Theme"d), [
|
ui.addStringComboBox("interface/theme", UIString("Theme"d), [
|
||||||
StringListValue("ide_theme_default", "Default"d),
|
StringListValue("ide_theme_default", "Default"d),
|
||||||
StringListValue("ide_theme_dark", "Dark"d)]);
|
StringListValue("ide_theme_dark", "Dark"d)]);
|
||||||
ui.addStringComboBox("interface/language", UIString("Language"d), [StringListValue("en", "English"d), StringListValue("ru", "Russian"d)]);
|
ui.addStringComboBox("interface/language", UIString("Language"d), [
|
||||||
|
StringListValue("en", "English"d),
|
||||||
|
StringListValue("ru", "Russian"d),
|
||||||
|
StringListValue("es", "Spanish"d)]);
|
||||||
ui.addIntComboBox("interface/hintingMode", UIString("Font hinting mode"d), [StringListValue(0, "Normal"d), StringListValue(1, "Force Auto Hint"d),
|
ui.addIntComboBox("interface/hintingMode", UIString("Font hinting mode"d), [StringListValue(0, "Normal"d), StringListValue(1, "Force Auto Hint"d),
|
||||||
StringListValue(2, "Disabled"d), StringListValue(3, "Light"d)]);
|
StringListValue(2, "Disabled"d), StringListValue(3, "Light"d)]);
|
||||||
ui.addIntComboBox("interface/minAntialiasedFontSize", UIString("Minimum font size for antialiasing"d),
|
ui.addIntComboBox("interface/minAntialiasedFontSize", UIString("Minimum font size for antialiasing"d),
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/* tty;exec disowntty */
|
||||||
|
//#include <sys/ioctl.h>
|
||||||
|
//#include <unistd.h>
|
||||||
|
//#include <stdio.h>
|
||||||
|
//#include <limits.h>
|
||||||
|
//#include <stdlib.h>
|
||||||
|
//#include <signal.h>
|
||||||
|
|
||||||
|
//import std.stdio;
|
||||||
|
import std.string;
|
||||||
|
import std.c.stdlib;
|
||||||
|
import core.thread;
|
||||||
|
import core.sys.posix.signal;
|
||||||
|
import core.sys.posix.sys.ioctl;
|
||||||
|
import core.sys.posix.unistd;
|
||||||
|
import core.sys.posix.stdio;
|
||||||
|
|
||||||
|
//extern(C) void signal(int sig, void function(int) );
|
||||||
|
//extern(C) void setbuf(FILE * stream, char * buf);
|
||||||
|
//extern(C) void ioctl(int fd, uint request, int param);
|
||||||
|
|
||||||
|
void end(string msg)
|
||||||
|
{
|
||||||
|
perror(msg.toStringz);
|
||||||
|
for (;;)
|
||||||
|
Thread.sleep(dur!"seconds"(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
alias extern(C) void function(int) sigfn_t;
|
||||||
|
|
||||||
|
void main(string args[])
|
||||||
|
{
|
||||||
|
FILE *tty_name_file;
|
||||||
|
if (args.length < 2)
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
string tty_filename = args[1];
|
||||||
|
|
||||||
|
sigfn_t orig;
|
||||||
|
setbuf (stdout, null);
|
||||||
|
orig = signal (SIGHUP, SIG_IGN);
|
||||||
|
if (orig !is SIG_DFL)
|
||||||
|
end ("signal (SIGHUP)");
|
||||||
|
|
||||||
|
printf("%s %s\n", tty_filename.toStringz, ttyname(STDIN_FILENO));
|
||||||
|
tty_name_file = fopen(tty_filename.toStringz, "w");
|
||||||
|
fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
|
||||||
|
fclose(tty_name_file);
|
||||||
|
|
||||||
|
/* Verify we are the sole owner of the tty. */
|
||||||
|
if (ioctl(STDIN_FILENO, TIOCSCTTY, 0) != 0)
|
||||||
|
end ("TIOCSCTTY");
|
||||||
|
|
||||||
|
printf("%s %s\n", tty_filename.toStringz, ttyname(STDIN_FILENO));
|
||||||
|
tty_name_file = fopen(tty_filename.toStringz, "w");
|
||||||
|
fprintf(tty_name_file, "%s\n", ttyname(STDIN_FILENO));
|
||||||
|
fclose(tty_name_file);
|
||||||
|
|
||||||
|
/* Disown the tty. */
|
||||||
|
if (ioctl (STDIN_FILENO, TIOCNOTTY) != 0)
|
||||||
|
end ("TIOCNOTTY");
|
||||||
|
end ("OK, disowned");
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
|
<ProjectGuid>{FB7A3FF6-0E67-47D1-BA70-F258F9A0E332}</ProjectGuid>
|
||||||
|
<BaseDirectory>.</BaseDirectory>
|
||||||
|
<Compiler>DMD2</Compiler>
|
||||||
|
<PreferOneStepBuild>true</PreferOneStepBuild>
|
||||||
|
<UseDefaultCompiler>true</UseDefaultCompiler>
|
||||||
|
<IncrementalLinking>true</IncrementalLinking>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
|
<ObjectsDirectory>obj/Debug</ObjectsDirectory>
|
||||||
|
<LinkinThirdPartyLibraries>false</LinkinThirdPartyLibraries>
|
||||||
|
<UnittestMode>false</UnittestMode>
|
||||||
|
<OutputName>disowntty</OutputName>
|
||||||
|
<Target>Executable</Target>
|
||||||
|
<Externalconsole>true</Externalconsole>
|
||||||
|
<DebugLevel>0</DebugLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
|
<OutputPath>bin\Release</OutputPath>
|
||||||
|
<ObjectsDirectory>obj/Release</ObjectsDirectory>
|
||||||
|
<LinkinThirdPartyLibraries>false</LinkinThirdPartyLibraries>
|
||||||
|
<UnittestMode>false</UnittestMode>
|
||||||
|
<OutputName>disowntty</OutputName>
|
||||||
|
<Target>Executable</Target>
|
||||||
|
<Externalconsole>true</Externalconsole>
|
||||||
|
<DebugLevel>0</DebugLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Unittest|AnyCPU' ">
|
||||||
|
<DebugSymbols>true</DebugSymbols>
|
||||||
|
<OutputPath>bin\Unittest</OutputPath>
|
||||||
|
<ObjectsDirectory>obj/Unittest</ObjectsDirectory>
|
||||||
|
<LinkinThirdPartyLibraries>false</LinkinThirdPartyLibraries>
|
||||||
|
<UnittestMode>true</UnittestMode>
|
||||||
|
<OutputName>disowntty</OutputName>
|
||||||
|
<Target>Executable</Target>
|
||||||
|
<Externalconsole>true</Externalconsole>
|
||||||
|
<DebugLevel>0</DebugLevel>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Include="disowntty.d" />
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,77 @@
|
||||||
|
EXIT=Salir
|
||||||
|
MENU_FILE=&ARCHIVO
|
||||||
|
MENU_FILE_NEW=&Nuevo
|
||||||
|
MENU_FILE_NEW_SOURCE_FILE=Nuevo Archivo Fuente
|
||||||
|
MENU_FILE_NEW_PROJECT=Nuevo Proyecto
|
||||||
|
MENU_FILE_NEW_WORKSPACE=Nuevo Espacio de Trabajo
|
||||||
|
MENU_FILE_OPEN=&Abrir archivo...
|
||||||
|
MENU_FILE_OPEN_WORKSPACE=Abrir Proyecto o Espacio de Trabajo...
|
||||||
|
MENU_FILE_OPEN_RECENT=Abrir reciente
|
||||||
|
MENU_FILE_SAVE=&Guardar archivo
|
||||||
|
MENU_FILE_SAVE_AS=&Guardar archivo como...
|
||||||
|
MENU_FILE_SAVE_ALL=&Guardar todo
|
||||||
|
MENU_FILE_EXIT=S&alir
|
||||||
|
MENU_EDIT=&EDITAR
|
||||||
|
MENU_EDIT_COPY=&Copiar
|
||||||
|
MENU_EDIT_PASTE=&Pegar
|
||||||
|
MENU_EDIT_CUT=Corta&r
|
||||||
|
MENU_EDIT_UNDO=&Deshacer
|
||||||
|
MENU_EDIT_REDO=&Rehacer
|
||||||
|
MENU_EDIT_INDENT=Sangrar bloque
|
||||||
|
MENU_EDIT_UNINDENT=De-sangrar bloque
|
||||||
|
MENU_EDIT_TOGGLE_LINE_COMMENT=Alternar comentario de línea
|
||||||
|
MENU_EDIT_TOGGLE_BLOCK_COMMENT=Alternar comentario de bloque
|
||||||
|
MENU_EDIT_ADVANCED=Avanzado...
|
||||||
|
MENU_EDIT_PREFERENCES=&Preferencias
|
||||||
|
MENU_BUILD_CONFIGURATIONS=Configuraciones de construcción
|
||||||
|
MENU_BUILD=&Contruir
|
||||||
|
MENU_BUILD_WORKSPACE_BUILD=Construir espacio de trabajo
|
||||||
|
MENU_BUILD_WORKSPACE_REBUILD=Reconstruir espacio de trabajo
|
||||||
|
MENU_BUILD_WORKSPACE_CLEAN=Limpiar espacio de trabajo
|
||||||
|
MENU_BUILD_PROJECT_BUILD=Construir Proyecto
|
||||||
|
MENU_BUILD_PROJECT_REBUILD=Reconstruir Proyecto
|
||||||
|
MENU_BUILD_PROJECT_CLEAN=Limpiar Proyecto
|
||||||
|
MENU_PROJECT=&PROYECTO
|
||||||
|
MENU_PROJECT_CONFIGURATIONS=Configuraciones de Proyecto
|
||||||
|
MENU_PROJECT_SET_AS_STARTUP=Establecer como Proyecto de Inicio
|
||||||
|
MENU_PROJECT_SETTINGS=Ajustes de Proyecto
|
||||||
|
MENU_PROJECT_REFRESH=Refrescar elementos del espacio de trabajo
|
||||||
|
MENU_PROJECT_UPDATE_DEPENDENCIES=Actualizar Dependencias
|
||||||
|
MENU_DEBUG=&DEPURAR
|
||||||
|
MENU_DEBUG_START_DEBUGGING=Iniciar Depuración
|
||||||
|
MENU_DEBUG_START_NO_DEBUGGING=Iniciar sin Depuración
|
||||||
|
MENU_DEBUG_CONTINUE=Continuar Depurando
|
||||||
|
MENU_DEBUG_STOP=Detener
|
||||||
|
MENU_DEBUG_PAUSE=Pausar
|
||||||
|
MENU_VIEW=&VISTA
|
||||||
|
MENU_VIEW_LANGUAGE=Lenguaje de &Interfaz
|
||||||
|
MENU_VIEW_LANGUAGE_ES=Spanish
|
||||||
|
MENU_VIEW_LANGUAGE_EN=English
|
||||||
|
MENU_VIEW_LANGUAGE_RU=Русский
|
||||||
|
MENU_VIEW_THEME=&Tema
|
||||||
|
MENU_VIEW_THEME_DEFAULT=&Por Defecto
|
||||||
|
MENU_VIEW_THEME_CUSTOM1=&Personalizado 1
|
||||||
|
MENU_WINDOW=&VENTANA
|
||||||
|
MENU_WINDOW_PREFERENCES=&Preferencias
|
||||||
|
MENU_WINDOW_CLOSE_ALL_DOCUMENTS=Cerrar todos los Documentos
|
||||||
|
MENU_HELP=&AYUDA
|
||||||
|
MENU_HELP_VIEW_HELP=&Ver ayuda
|
||||||
|
MENU_HELP_ABOUT=&Acerca de
|
||||||
|
MENU_NAVIGATE=Navegar
|
||||||
|
|
||||||
|
GO_TO_DEFINITION=Ir a Definición
|
||||||
|
SHOW_COMPLETIONS=Obtener Autocompletados
|
||||||
|
FIND_TEXT=Encontrar texto
|
||||||
|
|
||||||
|
|
||||||
|
TAB_LONG_LIST=Larga lista
|
||||||
|
TAB_BUTTONS=Botones
|
||||||
|
TAB_ANIMATION=Animación
|
||||||
|
TAB_TABLE_LAYOUT=Diseño de tabla
|
||||||
|
TAB_EDITORS=Editores
|
||||||
|
|
||||||
|
|
||||||
|
MENU_PROJECT_FOLDER_ADD_ITEM=Añadir...
|
||||||
|
MENU_PROJECT_FOLDER_OPEN_ITEM=Abrir
|
||||||
|
MENU_PROJECT_FOLDER_REMOVE_ITEM=Remover
|
||||||
|
MENU_PROJECT_FOLDER_RENAME_ITEM=Renombrar...
|
|
@ -2,6 +2,7 @@ res/ide_theme_default.xml
|
||||||
res/ide_theme_dark.xml
|
res/ide_theme_dark.xml
|
||||||
res/i18n/en.ini
|
res/i18n/en.ini
|
||||||
res/i18n/ru.ini
|
res/i18n/ru.ini
|
||||||
|
res/i18n/es.ini
|
||||||
res/hdpi/hdpi_configure.png
|
res/hdpi/hdpi_configure.png
|
||||||
res/hdpi/hdpi_debug-run.png
|
res/hdpi/hdpi_debug-run.png
|
||||||
res/hdpi/hdpi_document-close.png
|
res/hdpi/hdpi_document-close.png
|
||||||
|
|
Loading…
Reference in New Issue