Compare commits
51 Commits
Author | SHA1 | Date |
---|---|---|
|
ec29ced5b6 | |
|
1bd86c66cd | |
|
b822795449 | |
|
aeb045e66e | |
|
e18eaa2b5b | |
|
ccac2ad2b9 | |
|
72ea89b6ec | |
|
8c072de2af | |
|
0dee6cb1f1 | |
|
daeb6f58af | |
|
61cda23311 | |
|
51728e70eb | |
|
b511e32ca3 | |
|
c566de2633 | |
|
eac96a7d05 | |
|
16abdd171b | |
|
4e64798b9b | |
|
b5333788ae | |
|
64cfd574b1 | |
|
98c8d835ea | |
|
5b57d9eafe | |
|
2af89ce369 | |
|
06949bef98 | |
|
1119c32e61 | |
|
d89ca3e739 | |
|
da20313a1b | |
|
93545717ed | |
|
0391aa9ae8 | |
|
dbb731fa7b | |
|
6c32105caf | |
|
634c024ab1 | |
|
31d9771a08 | |
|
4640e093c3 | |
|
a542844b97 | |
|
b4a9fbb431 | |
|
ed64d56a79 | |
|
d684feac14 | |
|
bf04e91293 | |
|
92990e5352 | |
|
4f69a40530 | |
|
a92a253481 | |
|
87d5a88a0c | |
|
85995f9baf | |
|
4634fcf90d | |
|
f4f1a6939c | |
|
2e9304727d | |
|
2cd4bc1416 | |
|
39ac4deb5d | |
|
c1f4a3b1c2 | |
|
2bf34ed691 | |
|
3900fd4a34 |
|
@ -20,3 +20,7 @@ index.html
|
|||
api.html
|
||||
screenshots.html
|
||||
*.log
|
||||
|
||||
*.userprefs
|
||||
|
||||
\.dlangidews\.wssettings
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[submodule "deps/DCD"]
|
||||
path = deps/DCD
|
||||
url = https://github.com/Hackerpilot/DCD.git
|
|
@ -1 +0,0 @@
|
|||
Subproject commit cbcc6faac3f820bb8e06ed132d82d13036e34d58
|
|
@ -443,6 +443,7 @@
|
|||
<Link>3rdparty\dsymbol\symbols.d</Link>
|
||||
</Compile>
|
||||
<Compile Include="src\dlangide\ui\terminal.d" />
|
||||
<Compile Include="src\dlangide\ui\newfolder.d" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="src\ddebug\gdb\" />
|
||||
|
|
|
@ -0,0 +1,140 @@
|
|||
; Inno Setup script for DlangIDE.
|
||||
; Installs DlangIDE and the Mago debugger, and optionally
|
||||
; downloads and installs DMD.
|
||||
|
||||
|
||||
[Setup]
|
||||
AppName=DlangIDE
|
||||
AppId=DlangIDE
|
||||
|
||||
; The following version numbers need to be updated on each release.
|
||||
AppVerName=0.8.11
|
||||
AppVersion=0.8.11
|
||||
|
||||
AppPublisher=Vadim Lopatin
|
||||
AppPublisherURL=https://github.com/buggins/dlangui
|
||||
AppSupportURL=https://github.com/buggins/dlangui
|
||||
AppUpdatesURL=https://github.com/buggins/dlangui
|
||||
AppCopyright=Copyright (C) 2015-2018 Vadim Lopatin
|
||||
LicenseFile=LICENSE.txt
|
||||
SetupMutex=DLangIDESetupMutex
|
||||
|
||||
; Require at least Windows 7.
|
||||
MinVersion=6.1
|
||||
DefaultDirName={pf}\DlangIDE
|
||||
DefaultGroupName=DLangIDE
|
||||
|
||||
Compression=lzma2/normal
|
||||
ShowComponentSizes=yes
|
||||
AllowNetworkDrive=no
|
||||
ChangesEnvironment=yes
|
||||
ChangesAssociations=yes
|
||||
|
||||
|
||||
[Types]
|
||||
Name: "dlangide"; Description: "Install DlangIDE."; Flags: iscustom
|
||||
|
||||
|
||||
[Components]
|
||||
Name: "dlangide"; Description: "DlangIDE and tools"; Types: dlangide; Flags: fixed
|
||||
Name: "dmd"; Description: "DMD compiler"; Types: dlangide; Check: IsCompilerNeeded;
|
||||
|
||||
|
||||
[Files]
|
||||
Source: "bin\dlangide.exe"; DestDir: "{app}"; Components: dlangide
|
||||
Source: "bin\libfreetype-6.dll"; DestDir: "{app}"; Components: dlangide
|
||||
Source: "bin\mago-mi.exe"; DestDir: "{app}"; Components: dlangide
|
||||
Source: "views\res\mdpi\dlangui-shortcut1.ico"; DestDir: "{app}"; Components: dlangide
|
||||
|
||||
|
||||
[Registry]
|
||||
; Associate .dlangidews files with DlangIDE.
|
||||
Root: HKCR; Subkey: ".dlangidews"; ValueType: String; ValueName: ""; ValueData: "DlangIDEProjectFile"; Tasks: associate; Flags: uninsdeletevalue
|
||||
Root: HKCR; Subkey: "DlangIDEProjectFile"; ValueType: String; ValueName: ""; ValueData: "DlangIDE Project File"; Tasks: associate; Flags: uninsdeletekey
|
||||
Root: HKCR; Subkey: "DlangIDEProjectFile\DefaultIcon"; ValueType: String; ValueName: ""; ValueData: "{app}\dlangui-shortcut1.ico"; Tasks: associate; Flags: uninsdeletekey
|
||||
Root: HKCR; Subkey: "DlangIDEProjectFile\shell\open\command"; ValueType: String; ValueName: ""; ValueData: """{app}\dlangide.exe"" ""%1"""; Tasks: associate; Flags: uninsdeletekey
|
||||
|
||||
|
||||
[Icons]
|
||||
Name: "{commondesktop}\DlangIDE"; Filename: "{app}\dlangide.exe"; IconFileName: "{app}\dlangui-shortcut1.ico"; Tasks: desktopicon
|
||||
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: "Create a &desktop icon"; Components: dlangide; Flags: checkedonce unchecked
|
||||
Name: associate; Description: "Associate DlangIDE &Workspace Files"; Components: dlangide; Flags: checkedonce
|
||||
|
||||
|
||||
[Run]
|
||||
Filename: "{tmp}\dmd-installer.exe"; StatusMsg: "Installing DMD..."; Components: dmd; Flags: 32bit; BeforeInstall: DownloadDMD
|
||||
|
||||
|
||||
[Code]
|
||||
|
||||
{
|
||||
See if we have a registry key for D or if the default installation directory
|
||||
exists.
|
||||
}
|
||||
function IsCompilerNeeded(): Boolean;
|
||||
begin
|
||||
Result := not (RegKeyExists(HKCU, 'Software\DMD')
|
||||
or DirExists(ExpandConstant('{sd}\D\dmd2')))
|
||||
end;
|
||||
|
||||
{ Windows API function to download files from the Internet. }
|
||||
function URLDownloadToFile(
|
||||
pCaller: Integer;
|
||||
szUrl: String;
|
||||
szFileName: String;
|
||||
dwReserved: Integer;
|
||||
lpfnCB: Integer
|
||||
): Integer;
|
||||
#ifdef UNICODE
|
||||
external 'URLDownloadToFileW@urlmon.dll';
|
||||
#else
|
||||
external 'URLDownloadToFileA@urlmon.dll';
|
||||
#endif
|
||||
|
||||
{
|
||||
Convenience procedure to download files; this hides parameters we don't care
|
||||
about.
|
||||
|
||||
We assume the download is successful; if this fails, a later attempt to read
|
||||
the file will display an error to the user.
|
||||
}
|
||||
procedure DownloadFile(url: String; dest: String);
|
||||
begin
|
||||
URLDownloadToFile(0, url, ExpandConstant(dest), 0, 0);
|
||||
end;
|
||||
|
||||
procedure DownloadDMD();
|
||||
var
|
||||
dmdVersion: AnsiString;
|
||||
#ifdef UNICODE
|
||||
dmdVersionU: String;
|
||||
#else
|
||||
dmdVersionU: AnsiString;
|
||||
#endif
|
||||
begin
|
||||
DownloadFile('http://downloads.dlang.org/releases/LATEST', '{tmp}\latest.txt');
|
||||
if LoadStringFromFile(ExpandConstant('{tmp}\latest.txt'), dmdVersion) then
|
||||
begin
|
||||
|
||||
#ifdef UNICODE
|
||||
dmdVersionU := String(dmdVersion);
|
||||
#else
|
||||
dmdVersionU := dmdVersion;
|
||||
#endif
|
||||
DownloadFile(
|
||||
'http://downloads.dlang.org/releases/2.x/'
|
||||
+ dmdVersionU
|
||||
+ '/dmd-'
|
||||
+ dmdVersionU
|
||||
+ '.exe',
|
||||
'{tmp}\dmd-installer.exe')
|
||||
end
|
||||
else
|
||||
MsgBox(
|
||||
'Unable to download dmd installer.'
|
||||
+ ' Please download and install from dlang.org.',
|
||||
mbInformation, MB_OK);
|
||||
end;
|
|
@ -938,6 +938,7 @@
|
|||
<File path="src\dlangide\ui\frame.d" />
|
||||
<File path="src\dlangide\ui\homescreen.d" />
|
||||
<File path="src\dlangide\ui\newfile.d" />
|
||||
<File path="src\dlangide\ui\newfolder.d" />
|
||||
<File path="src\dlangide\ui\newproject.d" />
|
||||
<File path="src\dlangide\ui\outputpanel.d" />
|
||||
<File path="src\dlangide\ui\searchPanel.d" />
|
||||
|
|
5
dub.json
|
@ -12,9 +12,8 @@
|
|||
"stringImportPaths": ["views"],
|
||||
|
||||
"dependencies": {
|
||||
"dlangui": "==0.9.173",
|
||||
"dsymbol": "~>0.2.9",
|
||||
"dcd": "~>0.9.1"
|
||||
"dlangui": "~>0.10.3",
|
||||
"dcd": "~>0.16.0-beta.1"
|
||||
},
|
||||
|
||||
"copyFiles-windows": [
|
||||
|
|
|
@ -69,7 +69,7 @@ class BasicTypeX : Lexem {
|
|||
in {
|
||||
assert(isBasicTypeXToken(token));
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_token = token;
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ class TypeCtor : Lexem {
|
|||
in {
|
||||
assert(isTypeCtorToken(token));
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_token = token;
|
||||
}
|
||||
}
|
||||
|
@ -112,14 +112,14 @@ class TypeCtors : Lexem {
|
|||
in {
|
||||
assert(isTypeCtorToken(token));
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_list ~= new TypeCtor(token);
|
||||
}
|
||||
public void append(Token token)
|
||||
in {
|
||||
assert(isTypeCtorToken(token));
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_list ~= new TypeCtor(token);
|
||||
}
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ class Identifier : Lexem {
|
|||
in {
|
||||
assert(identifier.type == TokenType.IDENTIFIER);
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_token = cast(IdentToken)identifier;
|
||||
}
|
||||
}
|
||||
|
@ -157,14 +157,14 @@ class IdentifierList : Lexem {
|
|||
in {
|
||||
assert(ident.type == TokenType.IDENTIFIER);
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_identifier = new Identifier(ident);
|
||||
_identifierList = identifierList;
|
||||
}
|
||||
public this(TemplateInstance templateInstance, IdentifierList identifierList = null)
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_templateInstance = templateInstance;
|
||||
_identifierList = identifierList;
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ class TemplateInstance : Lexem {
|
|||
public this()
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -207,7 +207,7 @@ class BasicType : Lexem {
|
|||
public this()
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -228,7 +228,7 @@ class Typeof : Lexem {
|
|||
public this(Expression expression)
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
_expression = expression;
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ class Type : Lexem {
|
|||
public this()
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -259,7 +259,7 @@ class Expression : Lexem {
|
|||
public this()
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -273,7 +273,7 @@ class AltDeclarator : Lexem {
|
|||
public this()
|
||||
in {
|
||||
}
|
||||
body {
|
||||
do {
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,7 +6,15 @@ import std.conv;
|
|||
import dlangide.ui.frame;
|
||||
import dlangide.ui.commands;
|
||||
import dlangide.workspace.workspace;
|
||||
import std.experimental.logger;
|
||||
|
||||
static if(__VERSION__ > 2100)
|
||||
{
|
||||
import std.logger;
|
||||
}
|
||||
else
|
||||
{
|
||||
import std.experimental.logger;
|
||||
}
|
||||
|
||||
mixin APP_ENTRY_POINT;
|
||||
|
||||
|
@ -26,18 +34,20 @@ extern (C) int UIAppMain(string[] args) {
|
|||
runParserTests();
|
||||
}
|
||||
|
||||
version(Windows) {
|
||||
static if(__VERSION__ > 2100) {
|
||||
debug {
|
||||
sharedLog = cast(shared)new FileLogger("dcd.log");
|
||||
} else {
|
||||
sharedLog = cast(shared)new NullLogger();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
debug {
|
||||
sharedLog = new FileLogger("dcd.log");
|
||||
} else {
|
||||
sharedLog = new NullLogger();
|
||||
}
|
||||
} else {
|
||||
debug {
|
||||
//sharedLog = new FileLogger("dcd.log");
|
||||
} else {
|
||||
sharedLog = new NullLogger();
|
||||
}
|
||||
}
|
||||
|
||||
//version (Windows) {
|
||||
|
|
|
@ -15,15 +15,10 @@ import std.experimental.allocator;
|
|||
import std.experimental.allocator.mallocator;
|
||||
import std.experimental.allocator.gc_allocator;
|
||||
|
||||
import server.autocomplete;
|
||||
import common.messages;
|
||||
import dcd.server.autocomplete;
|
||||
import dcd.common.messages;
|
||||
import dsymbol.modulecache;
|
||||
|
||||
//alias SharedASTAllocator = CAllocatorImpl!(Mallocator);
|
||||
//alias SharedASTAllocator = CAllocatorImpl!(Mallocator);
|
||||
//alias SharedASTAllocator = CSharedAllocatorImpl!(Mallocator);
|
||||
alias SharedASTAllocator = ASTAllocator;
|
||||
|
||||
enum DCDResult : int {
|
||||
SUCCESS,
|
||||
NO_RESULT,
|
||||
|
@ -92,11 +87,9 @@ class DCDTask {
|
|||
}
|
||||
|
||||
class ModuleCacheAccessor {
|
||||
import dsymbol.modulecache;
|
||||
//protected ASTAllocator _astAllocator;
|
||||
protected ModuleCache _moduleCache;
|
||||
this(in string[] importPaths) {
|
||||
_moduleCache = ModuleCache(new SharedASTAllocator);
|
||||
_moduleCache = ModuleCache();
|
||||
_moduleCache.addImportPaths(importPaths);
|
||||
}
|
||||
protected ModuleCache * getModuleCache(in string[] importPaths) {
|
||||
|
@ -109,8 +102,6 @@ class ModuleCacheAccessor {
|
|||
class DCDInterface : Thread {
|
||||
|
||||
import dsymbol.modulecache;
|
||||
//protected ASTAllocator _astAllocator;
|
||||
//protected ModuleCache * _moduleCache;
|
||||
ModuleCacheAccessor _moduleCache;
|
||||
protected BlockingQueue!DCDTask _queue;
|
||||
|
||||
|
@ -238,7 +229,7 @@ class DCDInterface : Thread {
|
|||
override void performRequest() {
|
||||
AutocompleteResponse response = getDoc(request, *getModuleCache(_importPaths));
|
||||
|
||||
result.docComments = response.docComments.dup;
|
||||
//result.docComments = response.docComments.dup; TODO_GRIM: Fix
|
||||
result.result = DCDResult.SUCCESS;
|
||||
|
||||
debug(DCD) Log.d("DCD doc comments:\n", result.docComments);
|
||||
|
@ -318,11 +309,9 @@ class DCDInterface : Thread {
|
|||
result.output.length = response.completions.length;
|
||||
int i=0;
|
||||
foreach(s;response.completions) {
|
||||
char type = 0;
|
||||
if (i < response.completionKinds.length)
|
||||
type = response.completionKinds[i];
|
||||
char type = s.kind;
|
||||
result.output[i].kind = type;
|
||||
result.output[i].name = to!dstring(s);
|
||||
result.output[i].name = to!dstring(s.identifier);
|
||||
i++;
|
||||
}
|
||||
if (response.completionType == "calltips") {
|
||||
|
@ -364,6 +353,7 @@ int completionTypePriority(char t) {
|
|||
return 3;
|
||||
case 'k': // - keyword, built-in version, scope statement
|
||||
return 20;
|
||||
case 'F':
|
||||
case 'f': // - function or method
|
||||
return 2;
|
||||
case 'g': // - enum name
|
||||
|
|
|
@ -117,6 +117,7 @@ class DEditorTool : EditorTool
|
|||
auto destPos = byteOffsetToCaret(content, target);
|
||||
_frame.currentEditor.setCaretPos(destPos.line,destPos.pos, true, true);
|
||||
_frame.currentEditor.setFocus();
|
||||
_frame.caretHistory.pushNewPosition();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -6,6 +6,7 @@ import dlangui.widgets.editors;
|
|||
enum IDEActions : int {
|
||||
//ProjectOpen = 1010000,
|
||||
FileNew = 1010000,
|
||||
FileNewDirectory,
|
||||
FileNewWorkspace,
|
||||
FileNewProject,
|
||||
FileOpen,
|
||||
|
@ -71,6 +72,8 @@ enum IDEActions : int {
|
|||
GetDocComments,
|
||||
GetParenCompletion,
|
||||
GotoLine,
|
||||
GotoNextPosition,
|
||||
GotoPrevPosition,
|
||||
|
||||
InsertCompletion,
|
||||
FindInFiles,
|
||||
|
@ -100,6 +103,7 @@ const Action ACTION_PROJECT_FOLDER_COLLAPSE_ALL = new Action(IDEActions.ProjectF
|
|||
|
||||
const Action ACTION_FILE_WORKSPACE_CLOSE = new Action(IDEActions.CloseWorkspace, "MENU_FILE_WORKSPACE_CLOSE"c).disableByDefault();
|
||||
|
||||
const Action ACTION_FILE_NEW_DIRECTORY = new Action(IDEActions.FileNewDirectory, "MENU_FILE_NEW_DIRECTORY"c);
|
||||
const Action ACTION_FILE_NEW_SOURCE_FILE = new Action(IDEActions.FileNew, "MENU_FILE_NEW_SOURCE_FILE"c, "document-new", KeyCode.KEY_N, KeyFlag.Control);
|
||||
const Action ACTION_FILE_NEW_PROJECT = new Action(IDEActions.FileNewProject, "MENU_FILE_NEW_PROJECT"c);
|
||||
const Action ACTION_FILE_NEW_WORKSPACE = new Action(IDEActions.FileNewWorkspace, "MENU_FILE_NEW_WORKSPACE"c);
|
||||
|
@ -174,7 +178,9 @@ const Action ACTION_GET_DOC_COMMENTS = (new Action(IDEActions.GetDocComments, "
|
|||
const Action ACTION_GO_TO_DEFINITION = (new Action(IDEActions.GoToDefinition, "GO_TO_DEFINITION"c, ""c, KeyCode.KEY_G, KeyFlag.Control)).addAccelerator(KeyCode.F12, 0).disableByDefault();
|
||||
const Action ACTION_GET_COMPLETIONS = (new Action(IDEActions.GetCompletionSuggestions, "SHOW_COMPLETIONS"c, ""c, KeyCode.KEY_G, KeyFlag.Control|KeyFlag.Shift)).addAccelerator(KeyCode.SPACE, KeyFlag.Control).disableByDefault();
|
||||
const Action ACTION_GET_PAREN_COMPLETION = (new Action(IDEActions.GetParenCompletion, "SHOW_PAREN_COMPLETION"c, ""c, KeyCode.SPACE, KeyFlag.Control|KeyFlag.Shift)).disableByDefault();
|
||||
const Action ACTION_GO_TO_LINE = (new Action(IDEActions.GotoLine, "GO_TO_LINE"c, ""c, KeyCode.KEY_L, KeyFlag.Control|KeyFlag.Option)).disableByDefault();;
|
||||
const Action ACTION_GO_TO_LINE = (new Action(IDEActions.GotoLine, "GO_TO_LINE"c, ""c, KeyCode.KEY_L, KeyFlag.Control|KeyFlag.Option)).disableByDefault();
|
||||
const Action ACTION_GO_TO_PREV_POSITION = (new Action(IDEActions.GotoPrevPosition, "GO_TO_PREV_POSITION"c, ""c, KeyCode.LEFT, KeyFlag.Alt)).disableByDefault();
|
||||
const Action ACTION_GO_TO_NEXT_POSITION = (new Action(IDEActions.GotoNextPosition, "GO_TO_NEXT_POSITION"c, ""c, KeyCode.RIGHT, KeyFlag.Alt)).disableByDefault();
|
||||
|
||||
const Action ACTION_FIND_TEXT = (new Action(IDEActions.FindInFiles, "FIND_IN_FILES"c, "edit-find"c, KeyCode.KEY_F, KeyFlag.Control | KeyFlag.Shift)).disableByDefault();
|
||||
const Action ACTION_TOOLS_OPEN_DMD_TRACE_LOG = (new Action(IDEActions.ToolsOpenDMDTraceLog, "OPEN_DMD_TRACE_LOG"c));
|
||||
|
@ -202,5 +208,7 @@ const Action[] STD_IDE_ACTIONS = [
|
|||
ACTION_GET_COMPLETIONS,
|
||||
ACTION_GET_PAREN_COMPLETION,
|
||||
ACTION_GO_TO_LINE,
|
||||
ACTION_GO_TO_PREV_POSITION,
|
||||
ACTION_GO_TO_NEXT_POSITION,
|
||||
ACTION_FIND_TEXT,
|
||||
];
|
||||
|
|
|
@ -43,7 +43,7 @@ class DMDProfilerView : WidgetGroupDefaultDrawing {
|
|||
|
||||
class TraceFuncionGrid : StringGridWidgetBase {
|
||||
protected FunctionNode[] _list;
|
||||
protected dstring[] _colTitles;
|
||||
protected UIString[] _colTitles;
|
||||
protected ulong _ticksPerSecond;
|
||||
this(string ID, FunctionNode[] list, ulong ticks_per_second) {
|
||||
super(ID);
|
||||
|
@ -53,10 +53,10 @@ class TraceFuncionGrid : StringGridWidgetBase {
|
|||
fullColumnOnLeft(false);
|
||||
fullRowOnTop(false);
|
||||
resize(4, cast(int)list.length);
|
||||
setColTitle(0, "Function name"d);
|
||||
setColTitle(1, "Called"d);
|
||||
setColTitle(2, "F us"d);
|
||||
setColTitle(3, "F+D us"d);
|
||||
setColTitle(0, UIString.fromRaw("Function name"));
|
||||
setColTitle(1, UIString.fromRaw("Called"));
|
||||
setColTitle(2, UIString.fromRaw("F us"));
|
||||
setColTitle(3, UIString.fromRaw("F+D us"));
|
||||
showRowHeaders = false;
|
||||
rowSelect = true;
|
||||
minVisibleRows = 10;
|
||||
|
@ -80,54 +80,54 @@ class TraceFuncionGrid : StringGridWidgetBase {
|
|||
buffer[i] = buf[k - i - 1];
|
||||
return cast(dstring)buffer[0..k];
|
||||
}
|
||||
dstring formatDurationTicks(ulong n) {
|
||||
auto formatDurationTicks(ulong n) {
|
||||
ulong v = n * 1000000 / _ticksPerSecond;
|
||||
return formatNumber(v, _numberFormatBuf[]);
|
||||
return UIString.fromRaw(formatNumber(v, _numberFormatBuf[]));
|
||||
}
|
||||
|
||||
/// get cell text
|
||||
override dstring cellText(int col, int row) {
|
||||
override UIString cellText(int col, int row) {
|
||||
import std.conv : to;
|
||||
if (row < 0 || row >= _list.length)
|
||||
return ""d;
|
||||
return UIString.fromRaw(""d);
|
||||
FunctionNode entry = _list[row];
|
||||
switch (col) {
|
||||
case 0:
|
||||
string fn = entry.name;
|
||||
if (fn.length > 256)
|
||||
fn = fn[0..256] ~ "...";
|
||||
return fn.to!dstring;
|
||||
return UIString.fromRaw(fn.to!dstring);
|
||||
case 1:
|
||||
return formatNumber(entry.number_of_calls, _numberFormatBuf);
|
||||
return UIString.fromRaw(formatNumber(entry.number_of_calls, _numberFormatBuf));
|
||||
case 2:
|
||||
return formatDurationTicks(entry.function_time);
|
||||
case 3:
|
||||
return formatDurationTicks(entry.function_and_descendant_time);
|
||||
default:
|
||||
return ""d;
|
||||
return UIString.fromRaw(""d);
|
||||
}
|
||||
}
|
||||
/// set cell text
|
||||
override StringGridWidgetBase setCellText(int col, int row, dstring text) {
|
||||
override StringGridWidgetBase setCellText(int col, int row, UIString text) {
|
||||
// do nothing
|
||||
return this;
|
||||
}
|
||||
/// returns row header title
|
||||
override dstring rowTitle(int row) {
|
||||
return ""d;
|
||||
override UIString rowTitle(int row) {
|
||||
return UIString.fromRaw(""d);
|
||||
}
|
||||
/// set row header title
|
||||
override StringGridWidgetBase setRowTitle(int row, dstring title) {
|
||||
override StringGridWidgetBase setRowTitle(int row, UIString title) {
|
||||
return this;
|
||||
}
|
||||
|
||||
/// returns row header title
|
||||
override dstring colTitle(int col) {
|
||||
override UIString colTitle(int col) {
|
||||
return _colTitles[col];
|
||||
}
|
||||
|
||||
/// set col header title
|
||||
override StringGridWidgetBase setColTitle(int col, dstring title) {
|
||||
override StringGridWidgetBase setColTitle(int col, UIString title) {
|
||||
_colTitles[col] = title;
|
||||
return this;
|
||||
}
|
||||
|
|
|
@ -641,7 +641,8 @@ class DSourceEdit : SourceEdit, EditableContentMarksChangeListener {
|
|||
return;
|
||||
}
|
||||
|
||||
if (suggestions.length == 1) {
|
||||
// Only insert singular autocompletion if automatic autocomplete is turned off!
|
||||
if (!_settings.autoAutoComplete && suggestions.length == 1) {
|
||||
insertCompletion(suggestions[0]);
|
||||
return;
|
||||
}
|
||||
|
@ -721,13 +722,25 @@ class DSourceEdit : SourceEdit, EditableContentMarksChangeListener {
|
|||
super.handleFocusChange(focused, receivedFocusFromKeyboard);
|
||||
}
|
||||
|
||||
private bool isAutoCompleteKey(ref KeyEvent event) {
|
||||
if((event.keyCode >= KeyCode.KEY_0 && event.keyCode <= KeyCode.KEY_Z) ||
|
||||
event.keyCode == KeyCode.KEY_PERIOD ||
|
||||
event.keyCode == KeyCode.BACK ||
|
||||
event.text == "_")
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
protected uint _lastKeyDownCode;
|
||||
protected uint _periodKeyCode;
|
||||
/// handle keys: support autocompletion after . press with delay
|
||||
override bool onKeyEvent(KeyEvent event) {
|
||||
if (event.action == KeyAction.KeyDown)
|
||||
_lastKeyDownCode = event.keyCode;
|
||||
if (event.action == KeyAction.Text && event.noModifiers && event.text==".") {
|
||||
if(_settings.autoAutoComplete && isAutoCompleteKey(event) && !_completionPopup) {
|
||||
window.dispatchAction(ACTION_GET_COMPLETIONS, this);
|
||||
}
|
||||
else if (event.action == KeyAction.Text && event.noModifiers && event.text==".") {
|
||||
_periodKeyCode = _lastKeyDownCode;
|
||||
startCompletionTimer();
|
||||
} else {
|
||||
|
@ -790,7 +803,7 @@ class CompletionPopupMenu : PopupMenu {
|
|||
|
||||
MenuItem updateItems() {
|
||||
MenuItem res = new MenuItem();
|
||||
foreach(int i, dstring suggestion ; _suggestions) {
|
||||
foreach(i, dstring suggestion ; _suggestions) {
|
||||
if (_prefix.length && !suggestion.startsWith(_prefix))
|
||||
continue;
|
||||
string iconId;
|
||||
|
@ -806,19 +819,12 @@ class CompletionPopupMenu : PopupMenu {
|
|||
/// handle keys
|
||||
override bool onKeyEvent(KeyEvent event) {
|
||||
if (event.action == KeyAction.Text) {
|
||||
_prefix ~= event.text;
|
||||
MenuItem newItems = updateItems();
|
||||
if (newItems.subitemCount == 0) {
|
||||
// no matches anymore
|
||||
_editor.onKeyEvent(event);
|
||||
_editor.closeCompletionPopup(this);
|
||||
return true;
|
||||
} else {
|
||||
_editor.onKeyEvent(event);
|
||||
menuItems = newItems;
|
||||
selectItem(0);
|
||||
} else if (event.keyCode == KeyCode.ESCAPE) {
|
||||
_editor.closeCompletionPopup(this);
|
||||
return true;
|
||||
}
|
||||
} else if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.BACK && event.noModifiers) {
|
||||
if (_prefix.length > _initialPrefix.length) {
|
||||
_prefix.length = _prefix.length - 1;
|
||||
|
@ -831,8 +837,8 @@ class CompletionPopupMenu : PopupMenu {
|
|||
_editor.closeCompletionPopup(this);
|
||||
}
|
||||
return true;
|
||||
} else if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.RETURN) {
|
||||
} else if (event.action == KeyAction.KeyDown && event.keyCode == KeyCode.SPACE) {
|
||||
} else if ((event.action == KeyAction.KeyDown && event.keyCode == KeyCode.RETURN) ||
|
||||
(event.action == KeyAction.KeyDown && event.keyCode == KeyCode.SPACE)) {
|
||||
}
|
||||
return super.onKeyEvent(event);
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import dlangide.ui.commands;
|
|||
import dlangide.ui.wspanel;
|
||||
import dlangide.ui.outputpanel;
|
||||
import dlangide.ui.newfile;
|
||||
import dlangide.ui.newfolder;
|
||||
import dlangide.ui.newproject;
|
||||
import dlangide.ui.dsourceedit;
|
||||
import dlangide.ui.homescreen;
|
||||
|
@ -107,6 +108,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
window.onCanClose = &onCanClose;
|
||||
window.onClose = &onWindowClose;
|
||||
applySettings(_settings);
|
||||
caretHistory = new CaretHistory;
|
||||
}
|
||||
|
||||
~this() {
|
||||
|
@ -400,8 +402,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
Log.d("found source file");
|
||||
if (sourceFile)
|
||||
_wsPanel.selectItem(sourceFile);
|
||||
caretHistory.pushNewPosition();
|
||||
currentEditor().setCaretPos(line, 0);
|
||||
currentEditor().setCaretPos(line, column);
|
||||
caretHistory.pushNewPosition();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -416,6 +420,13 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
}
|
||||
}
|
||||
|
||||
bool tryOpenSourceFile(string filename) {
|
||||
if (isSupportedSourceTextFileFormat(filename)) {
|
||||
return openSourceFile(filename, null, true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool openSourceFile(string filename, ProjectSourceFile file = null, bool activate = true) {
|
||||
if (!file && !filename)
|
||||
return false;
|
||||
|
@ -762,7 +773,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
MenuItem navItem = new MenuItem(new Action(21, "MENU_NAVIGATE"));
|
||||
navItem.add(ACTION_GO_TO_DEFINITION, ACTION_GET_COMPLETIONS, ACTION_GET_DOC_COMMENTS,
|
||||
ACTION_GET_PAREN_COMPLETION, ACTION_EDITOR_GOTO_PREVIOUS_BOOKMARK,
|
||||
ACTION_EDITOR_GOTO_NEXT_BOOKMARK, ACTION_GO_TO_LINE);
|
||||
ACTION_EDITOR_GOTO_NEXT_BOOKMARK, ACTION_GO_TO_LINE, ACTION_GO_TO_PREV_POSITION, ACTION_GO_TO_NEXT_POSITION);
|
||||
|
||||
MenuItem projectItem = new MenuItem(new Action(21, "MENU_PROJECT"));
|
||||
projectItem.add(ACTION_PROJECT_SET_STARTUP, ACTION_PROJECT_REFRESH, ACTION_PROJECT_UPDATE_DEPENDENCIES, ACTION_PROJECT_SETTINGS);
|
||||
|
@ -980,6 +991,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
case IDEActions.FileSaveAll:
|
||||
case IDEActions.FileSaveAs:
|
||||
case IDEActions.GotoLine:
|
||||
case IDEActions.GotoPrevPosition:
|
||||
case IDEActions.GotoNextPosition:
|
||||
case EditorActions.Find:
|
||||
case EditorActions.FindNext:
|
||||
case EditorActions.FindPrev:
|
||||
|
@ -1137,7 +1150,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
else
|
||||
ed.editorTool = new DefaultEditorTool(this);
|
||||
//openSourceFile(filename);
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
ProjectSourceFile file = _wsPanel.findSourceFileItem(filename, false);
|
||||
if (file) {
|
||||
ed.projectSourceFile = file;
|
||||
|
@ -1209,7 +1222,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
buildProject(BuildOperation.Upgrade, cast(Project)a.objectParam);
|
||||
return true;
|
||||
case IDEActions.RefreshProject:
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
return true;
|
||||
case IDEActions.RevealProjectInExplorer:
|
||||
revealProjectInExplorer(cast(Project)a.objectParam);
|
||||
|
@ -1276,6 +1289,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
case IDEActions.GoToDefinition:
|
||||
if (currentEditor) {
|
||||
Log.d("Trying to go to definition.");
|
||||
caretHistory.pushNewPosition();
|
||||
currentEditor.editorTool.goToDefinition(currentEditor(), currentEditor.caretPos);
|
||||
}
|
||||
return true;
|
||||
|
@ -1294,8 +1308,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
return;
|
||||
}
|
||||
// Go to line
|
||||
caretHistory.pushNewPosition();
|
||||
currentEditor.setCaretPos(num - 1, 0);
|
||||
currentEditor.setFocus();
|
||||
caretHistory.pushNewPosition();
|
||||
}
|
||||
catch (ConvException e) {
|
||||
currentEditor.setFocus();
|
||||
|
@ -1304,6 +1320,18 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
});
|
||||
}
|
||||
return true;
|
||||
case IDEActions.GotoPrevPosition:
|
||||
if (currentEditor) {
|
||||
Log.d("Go to prev position");
|
||||
caretHistory.moveToPrev();
|
||||
}
|
||||
return true;
|
||||
case IDEActions.GotoNextPosition:
|
||||
if (currentEditor) {
|
||||
Log.d("Go to next position");
|
||||
caretHistory.moveToNext();
|
||||
}
|
||||
return true;
|
||||
case IDEActions.GetDocComments:
|
||||
Log.d("Trying to get doc comments.");
|
||||
currentEditor.editorTool.getDocComments(currentEditor, currentEditor.caretPos, delegate(string[] results) {
|
||||
|
@ -1365,7 +1393,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
createNewProject(false);
|
||||
return true;
|
||||
case IDEActions.FileNew:
|
||||
addProjectItem(cast(Object)a.objectParam);
|
||||
addFile(cast(Object)a.objectParam);
|
||||
return true;
|
||||
case IDEActions.FileNewDirectory:
|
||||
addDirectory(cast(Object)a.objectParam);
|
||||
return true;
|
||||
case IDEActions.ProjectFolderRemoveItem:
|
||||
removeProjectItem(a.objectParam);
|
||||
|
@ -1433,7 +1464,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
if (cast(Workspace)obj) {
|
||||
Workspace ws = cast(Workspace)obj;
|
||||
ws.refresh();
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
} else if (cast(Project)obj) {
|
||||
project = cast(Project)obj;
|
||||
} else if (cast(ProjectFolder)obj) {
|
||||
|
@ -1452,7 +1483,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
}
|
||||
if (project) {
|
||||
project.refresh();
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1479,7 +1510,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
Log.e("Cannot remove file");
|
||||
}
|
||||
project.refresh();
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
}
|
||||
// else ignore
|
||||
return true;
|
||||
|
@ -1487,8 +1518,53 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
|
||||
}
|
||||
|
||||
private void addFile(Object obj) {
|
||||
Dialog createNewFileDialog(Project project, ProjectFolder folder) {
|
||||
NewFileDlg dialog = new NewFileDlg(this, project, folder);
|
||||
dialog.dialogResult = delegate(Dialog dlg, const Action result) {
|
||||
if (result.id == ACTION_FILE_NEW_SOURCE_FILE.id) {
|
||||
FileCreationResult res = cast(FileCreationResult)result.objectParam;
|
||||
if (res) {
|
||||
//res.project.reload();
|
||||
res.project.refresh();
|
||||
updateTreeGraph();
|
||||
tryOpenSourceFile(res.filename);
|
||||
}
|
||||
}
|
||||
};
|
||||
return dialog;
|
||||
}
|
||||
addProjectItem(&createNewFileDialog, obj);
|
||||
}
|
||||
|
||||
private void addDirectory(Object obj) {
|
||||
Dialog createNewDirectoryDialog(Project project, ProjectFolder folder) {
|
||||
NewFolderDialog dialog = new NewFolderDialog(this, project, folder);
|
||||
dialog.dialogResult = delegate(Dialog dlg, const Action result) {
|
||||
if(result.id == ACTION_FILE_NEW_DIRECTORY.id) {
|
||||
FileCreationResult res = cast(FileCreationResult)result.objectParam;
|
||||
if (res) {
|
||||
ProjectFolder newFolder = new ProjectFolder(res.filename);
|
||||
if(folder) {
|
||||
folder.addChild(newFolder);
|
||||
folder.sortItems;
|
||||
newFolder.refresh();
|
||||
if(newFolder.childCount > 0){
|
||||
tryOpenSourceFile(newFolder.child(0).filename);
|
||||
}
|
||||
}
|
||||
updateTreeGraph();
|
||||
_wsPanel.selectItem(newFolder);
|
||||
}
|
||||
}
|
||||
};
|
||||
return dialog;
|
||||
}
|
||||
addProjectItem(&createNewDirectoryDialog, obj);
|
||||
}
|
||||
|
||||
/// add new file to project
|
||||
void addProjectItem(Object obj) {
|
||||
private void addProjectItem(Dialog delegate(Project, ProjectFolder) dialogFactory, Object obj) {
|
||||
if (currentWorkspace is null)
|
||||
return;
|
||||
if (obj is null && _wsPanel !is null && !currentEditorSourceFile) {
|
||||
|
@ -1500,7 +1576,12 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
ProjectFolder folder;
|
||||
if (cast(Project)obj) {
|
||||
project = cast(Project)obj;
|
||||
folder = project.firstSourceFolder;
|
||||
folder = project.items;
|
||||
import std.stdio;
|
||||
writeln("Root filename:", folder.filename);
|
||||
for(int i = 0; i < folder.childCount; i++) {
|
||||
writeln("Child [", i, "]: ", folder.child(i).filename);
|
||||
}
|
||||
} else if (cast(ProjectFolder)obj) {
|
||||
folder = cast(ProjectFolder)obj;
|
||||
project = folder.project;
|
||||
|
@ -1515,21 +1596,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
project = srcfile.project;
|
||||
}
|
||||
}
|
||||
if (project && folder && project.workspace is currentWorkspace) {
|
||||
NewFileDlg dlg = new NewFileDlg(this, project, folder);
|
||||
dlg.dialogResult = delegate(Dialog dlg, const Action result) {
|
||||
if (result.id == ACTION_FILE_NEW_SOURCE_FILE.id) {
|
||||
FileCreationResult res = cast(FileCreationResult)result.objectParam;
|
||||
if (res) {
|
||||
//res.project.reload();
|
||||
res.project.refresh();
|
||||
refreshWorkspace();
|
||||
if (isSupportedSourceTextFileFormat(res.filename)) {
|
||||
openSourceFile(res.filename, null, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
if (project && project.workspace is currentWorkspace) {
|
||||
Dialog dlg = dialogFactory(project, folder);
|
||||
dlg.show();
|
||||
}
|
||||
}
|
||||
|
@ -1550,12 +1618,12 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
if (currentWorkspace is null || res.workspace !is currentWorkspace) {
|
||||
// open new workspace
|
||||
setWorkspace(res.workspace);
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
hideHomeScreen();
|
||||
} else {
|
||||
// project added to current workspace
|
||||
loadProject(res.project);
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
hideHomeScreen();
|
||||
}
|
||||
}
|
||||
|
@ -1757,7 +1825,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
currentWorkspace.addProject(project);
|
||||
loadProject(project);
|
||||
currentWorkspace.save();
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
hideHomeScreen();
|
||||
}
|
||||
return true;
|
||||
|
@ -1772,7 +1840,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
}
|
||||
}
|
||||
|
||||
void refreshWorkspace() {
|
||||
void updateTreeGraph() {
|
||||
_logPanel.logLine("Refreshing workspace");
|
||||
_wsPanel.reloadItems();
|
||||
closeRemovedDocuments();
|
||||
|
@ -1838,7 +1906,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
void refreshProject(Project project) {
|
||||
if (currentWorkspace && project.loadSelections()) {
|
||||
currentWorkspace.cleanupUnusedDependencies();
|
||||
refreshWorkspace();
|
||||
updateTreeGraph();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1981,5 +2049,58 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
|
|||
Log.i("onWindowClose()");
|
||||
stopExecution();
|
||||
}
|
||||
|
||||
static struct CaretPosition {
|
||||
string filePath;
|
||||
uint line;
|
||||
uint pos;
|
||||
};
|
||||
|
||||
class CaretHistory {
|
||||
private CaretPosition[] caretHistory;
|
||||
private int currentPos = -1;
|
||||
|
||||
private bool checkIfCurentPosIsCurrentHistoryPos() {
|
||||
if (caretHistory.length == 0) {
|
||||
return false;
|
||||
}
|
||||
return currentEditor.caretPos.line == caretHistory[currentPos].line &&
|
||||
currentEditor.caretPos.pos == caretHistory[currentPos].pos;
|
||||
}
|
||||
|
||||
void pushNewPosition() {
|
||||
if (!checkIfCurentPosIsCurrentHistoryPos()) {
|
||||
pushNewPosition(currentEditor().filename, currentEditor.caretPos.line, currentEditor.caretPos.pos);
|
||||
}
|
||||
}
|
||||
|
||||
void pushNewPosition(string filePath, uint line, uint pos) {
|
||||
if (caretHistory.length != 0) {
|
||||
caretHistory = caretHistory[0..currentPos + 1];
|
||||
}
|
||||
caretHistory ~= CaretPosition(filePath, line, pos);
|
||||
++currentPos;
|
||||
}
|
||||
|
||||
void moveToNext() {
|
||||
if (currentPos + 1 < caretHistory.length) {
|
||||
++currentPos;
|
||||
openSourceFile(caretHistory[currentPos].filePath);
|
||||
currentEditor.setCaretPos(caretHistory[currentPos].line, caretHistory[currentPos].pos);
|
||||
currentEditor.setFocus();
|
||||
}
|
||||
}
|
||||
|
||||
void moveToPrev() {
|
||||
if (currentPos > 0) {
|
||||
--currentPos;
|
||||
openSourceFile(caretHistory[currentPos].filePath);
|
||||
currentEditor.setCaretPos(caretHistory[currentPos].line, caretHistory[currentPos].pos);
|
||||
currentEditor.setFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CaretHistory caretHistory;
|
||||
}
|
||||
|
||||
|
|
|
@ -97,7 +97,7 @@ class NewFileDlg : Dialog {
|
|||
TextWidget { text: OPTION_FILE_PATH }
|
||||
EditLine { id: edFilePath; text: ""; layoutWidth: fill; readOnly: true }
|
||||
}
|
||||
TextWidget { id: statusText; text: ""; layoutWidth: fill; textColor: #FF0000 }
|
||||
TextWidget { id: statusText; text: ""; layoutWidth: fill; textColor: 0xFF0000 }
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
|
@ -198,29 +198,6 @@ class NewFileDlg : Dialog {
|
|||
ProjectTemplate _currentTemplate;
|
||||
ProjectTemplate[] _templates;
|
||||
|
||||
static bool isSubdirOf(string path, string basePath) {
|
||||
if (path.equal(basePath))
|
||||
return true;
|
||||
if (path.length > basePath.length + 1 && path.startsWith(basePath)) {
|
||||
char ch = path[basePath.length];
|
||||
return ch == '/' || ch == '\\';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool findSource(string path, ref string sourceFolderPath, ref string relativePath) {
|
||||
foreach(dir; _sourcePaths) {
|
||||
if (isSubdirOf(path, dir)) {
|
||||
sourceFolderPath = dir;
|
||||
relativePath = path[sourceFolderPath.length .. $];
|
||||
if (relativePath.length > 0 && (relativePath[0] == '\\' || relativePath[0] == '/'))
|
||||
relativePath = relativePath[1 .. $];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool setError(dstring msg) {
|
||||
_statusText.text = msg;
|
||||
return msg.empty;
|
||||
|
@ -242,25 +219,12 @@ class NewFileDlg : Dialog {
|
|||
|
||||
if (_currentTemplate.kind == FileKind.MODULE || _currentTemplate.kind == FileKind.PACKAGE) {
|
||||
string sourcePath, relativePath;
|
||||
if (!findSource(_location, sourcePath, relativePath))
|
||||
if (!findSource(_sourcePaths, _location, sourcePath, relativePath))
|
||||
return setError("Location is outside of source path");
|
||||
if (!isValidModuleName(filename))
|
||||
return setError("Invalid file name");
|
||||
_moduleName = filename;
|
||||
char[] buf;
|
||||
foreach(c; relativePath) {
|
||||
char ch = c;
|
||||
if (ch == '/' || ch == '\\')
|
||||
ch = '.';
|
||||
else if (ch == '.')
|
||||
ch = '_';
|
||||
if (ch == '.' && (buf.length == 0 || buf[$-1] == '.'))
|
||||
continue; // skip duplicate .
|
||||
buf ~= ch;
|
||||
}
|
||||
if (buf.length && buf[$-1] == '.')
|
||||
buf.length--;
|
||||
_packageName = buf.dup;
|
||||
_packageName = getPackageName(sourcePath, relativePath);
|
||||
string m;
|
||||
if (_currentTemplate.kind == FileKind.MODULE) {
|
||||
m = !_packageName.empty ? _packageName ~ '.' ~ _moduleName : _moduleName;
|
||||
|
@ -284,20 +248,10 @@ class NewFileDlg : Dialog {
|
|||
|
||||
private FileCreationResult _result;
|
||||
bool createItem() {
|
||||
try {
|
||||
if (_currentTemplate.kind == FileKind.MODULE) {
|
||||
string txt = "module " ~ _packageName ~ ";\n\n" ~ _currentTemplate.srccode;
|
||||
write(_fullPathName, txt);
|
||||
} else if (_currentTemplate.kind == FileKind.PACKAGE) {
|
||||
string txt = "module " ~ _packageName ~ ";\n\n" ~ _currentTemplate.srccode;
|
||||
write(_fullPathName, txt);
|
||||
} else {
|
||||
write(_fullPathName, _currentTemplate.srccode);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e("Cannot create file", e);
|
||||
if(!createFile(_fullPathName, _currentTemplate.kind, _packageName, _currentTemplate.srccode)) {
|
||||
return setError("Cannot create file");
|
||||
}
|
||||
|
||||
_result = new FileCreationResult(_project, _fullPathName);
|
||||
return true;
|
||||
}
|
||||
|
@ -347,13 +301,13 @@ class NewFileDlg : Dialog {
|
|||
"{\n}\n", FileKind.TEXT);
|
||||
_templates ~= new ProjectTemplate("Vibe-D Diet Template file"d, "Empty Vibe-D Diet Template."d, ".dt",
|
||||
q{
|
||||
doctype html
|
||||
html
|
||||
doctype html
|
||||
html
|
||||
head
|
||||
title Hello, World
|
||||
body
|
||||
h1 Hello World
|
||||
}, FileKind.TEXT);
|
||||
}, FileKind.TEXT);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -377,3 +331,67 @@ class ProjectTemplate {
|
|||
this.kind = kind;
|
||||
}
|
||||
}
|
||||
|
||||
bool createFile(string fullPathName, FileKind fileKind, string packageName, string sourceCode) {
|
||||
try {
|
||||
if (fileKind == FileKind.MODULE) {
|
||||
string txt = "module " ~ packageName ~ ";\n\n" ~ sourceCode;
|
||||
write(fullPathName, txt);
|
||||
} else if (fileKind == FileKind.PACKAGE) {
|
||||
string txt = "module " ~ packageName ~ ";\n\n" ~ sourceCode;
|
||||
write(fullPathName, txt);
|
||||
} else {
|
||||
write(fullPathName, sourceCode);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch(Exception e) {
|
||||
Log.e("Cannot create file", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
string getPackageName(string path, string[] sourcePaths){
|
||||
string sourcePath, relativePath;
|
||||
if(!findSource(sourcePaths, path, sourcePath, relativePath)) return "";
|
||||
return getPackageName(sourcePath, relativePath);
|
||||
}
|
||||
|
||||
string getPackageName(string sourcePath, string relativePath){
|
||||
|
||||
char[] buf;
|
||||
foreach(c; relativePath) {
|
||||
char ch = c;
|
||||
if (ch == '/' || ch == '\\')
|
||||
ch = '.';
|
||||
else if (ch == '.')
|
||||
ch = '_';
|
||||
if (ch == '.' && (buf.length == 0 || buf[$-1] == '.'))
|
||||
continue; // skip duplicate .
|
||||
buf ~= ch;
|
||||
}
|
||||
if (buf.length && buf[$-1] == '.')
|
||||
buf.length--;
|
||||
return buf.dup;
|
||||
}
|
||||
private bool findSource(string[] sourcePaths, string path, ref string sourceFolderPath, ref string relativePath) {
|
||||
foreach(dir; sourcePaths) {
|
||||
if (isSubdirOf(path, dir)) {
|
||||
sourceFolderPath = dir;
|
||||
relativePath = path[sourceFolderPath.length .. $];
|
||||
if (relativePath.length > 0 && (relativePath[0] == '\\' || relativePath[0] == '/'))
|
||||
relativePath = relativePath[1 .. $];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
private bool isSubdirOf(string path, string basePath) {
|
||||
if (path.equal(basePath))
|
||||
return true;
|
||||
if (path.length > basePath.length + 1 && path.startsWith(basePath)) {
|
||||
char ch = path[basePath.length];
|
||||
return ch == '/' || ch == '\\';
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,186 @@
|
|||
module dlangide.ui.newfolder;
|
||||
|
||||
import std.array : empty;
|
||||
import std.file : mkdir, exists;
|
||||
import std.path : buildPath, buildNormalizedPath;
|
||||
import std.utf : toUTF32;
|
||||
|
||||
import dlangui.core.logger;
|
||||
import dlangui.core.stdaction;
|
||||
import dlangui.dialogs.dialog;
|
||||
import dlangui.dml.parser;
|
||||
import dlangui.widgets.controls;
|
||||
import dlangui.widgets.editors;
|
||||
import dlangui.widgets.widget;
|
||||
|
||||
import dlangide.ui.commands;
|
||||
import dlangide.ui.frame;
|
||||
import dlangide.ui.newfile;
|
||||
import dlangide.workspace.project;
|
||||
|
||||
class NewFolderDialog : Dialog {
|
||||
private {
|
||||
IDEFrame _ide;
|
||||
Project _project;
|
||||
ProjectFolder _folder;
|
||||
string _location;
|
||||
}
|
||||
|
||||
|
||||
this(IDEFrame parent, Project currentProject, ProjectFolder folder) {
|
||||
super(UIString.fromId("OPTION_NEW_SOURCE_FILE"c), parent.window,
|
||||
DialogFlag.Modal | DialogFlag.Popup, 800, 0);
|
||||
layoutWidth = FILL_PARENT;
|
||||
_ide = parent;
|
||||
_icon = "dlangui-logo1";
|
||||
this._project = currentProject;
|
||||
this._folder = folder;
|
||||
if (folder){
|
||||
_location = folder.filename;
|
||||
}
|
||||
else {
|
||||
_location = currentProject.dir;
|
||||
}
|
||||
}
|
||||
|
||||
override void initialize() {
|
||||
super.initialize();
|
||||
Widget content;
|
||||
try {
|
||||
content = parseML(q{
|
||||
VerticalLayout {
|
||||
id: vlayout
|
||||
padding: Rect { 5, 5, 5, 5 }
|
||||
layoutWidth: fill; layoutHeight: wrap
|
||||
TableLayout {
|
||||
margins: 5
|
||||
colCount: 2
|
||||
layoutWidth: fill; layoutHeight: wrap
|
||||
TextWidget { text: NAME }
|
||||
EditLine { id: fileName; text: "newfolder"; layoutWidth: fill }
|
||||
CheckBox { id: makePackage }
|
||||
TextWidget { text: OPTION_MAKE_PACKAGE}
|
||||
}
|
||||
TextWidget { id: statusText; text: ""; layoutWidth: fill; textColor: 0xFF0000 }
|
||||
}
|
||||
});
|
||||
} catch (Exception e) {
|
||||
Log.e("Exceptin while parsing DML", e);
|
||||
throw e;
|
||||
}
|
||||
_edFileName = content.childById!EditLine("fileName");
|
||||
_edMakePackage = content.childById!CheckBox("makePackage");
|
||||
_statusText = content.childById!TextWidget("statusText");
|
||||
|
||||
_edFileName.enterKey.connect(&onEnterKey);
|
||||
|
||||
_edFileName.setDefaultPopupMenu();
|
||||
|
||||
_edFileName.contentChange = delegate (EditableContent source) {
|
||||
updateValues(source.text);
|
||||
validate();
|
||||
};
|
||||
|
||||
addChild(content);
|
||||
addChild(createButtonsPanel([ACTION_FILE_NEW_DIRECTORY, ACTION_CANCEL], 0, 0));
|
||||
|
||||
updateValues(_edFileName.text);
|
||||
}
|
||||
|
||||
override void onShow() {
|
||||
super.onShow();
|
||||
_edFileName.selectAll();
|
||||
_edFileName.setFocus();
|
||||
}
|
||||
|
||||
protected bool onEnterKey(EditWidgetBase editor) {
|
||||
if (!validate())
|
||||
return false;
|
||||
close(_buttonActions[0]);
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool validate() {
|
||||
if (!isValidModuleName(_fileName))
|
||||
return setError("Invalid folder name");
|
||||
return setError(null);
|
||||
}
|
||||
|
||||
private void updateValues(dstring fileName) {
|
||||
_fileName = toUTF8(fileName);
|
||||
}
|
||||
|
||||
private bool setError(dstring msg) {
|
||||
_statusText.text = msg;
|
||||
return msg.empty;
|
||||
}
|
||||
|
||||
private {
|
||||
EditLine _edFileName;
|
||||
CheckBox _edMakePackage;
|
||||
TextWidget _statusText;
|
||||
|
||||
string _fileName = "newfile";
|
||||
FileCreationResult _result;
|
||||
bool shouldMakePackage() @property {
|
||||
return _edMakePackage.checked;
|
||||
}
|
||||
string fullPathName() @property {
|
||||
return buildNormalizedPath(_location, _fileName);
|
||||
}
|
||||
}
|
||||
|
||||
private bool createItem() {
|
||||
string fullPathName = this.fullPathName;
|
||||
if(exists(fullPathName))
|
||||
return setError("Folder already exists");
|
||||
|
||||
if(!makeDirectory(fullPathName)) return false;
|
||||
if(shouldMakePackage) {
|
||||
if(!makePackageFile(fullPathName)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
_result = new FileCreationResult(_project, fullPathName);
|
||||
return true;
|
||||
}
|
||||
|
||||
private bool makeDirectory(string fullPathName) {
|
||||
try {
|
||||
mkdir(fullPathName);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
Log.e("Cannot create folder", e);
|
||||
return setError("Cannot create folder");
|
||||
}
|
||||
}
|
||||
|
||||
private bool makePackageFile(string fullPathName) {
|
||||
string packageName = getPackageName(fullPathName, _project.sourcePaths);
|
||||
if(packageName.empty) {
|
||||
Log.e("Could not determing package name for ", fullPathName);
|
||||
return false;
|
||||
}
|
||||
if(!createFile(fullPathName.buildPath("package.d"), FileKind.PACKAGE, packageName, null)) {
|
||||
Log.e("Could not create package file in folder ", fullPathName);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
override void close(const Action action) {
|
||||
Action newaction = action.clone();
|
||||
if (action.id == IDEActions.FileNewDirectory) {
|
||||
if (!validate()) {
|
||||
window.showMessageBox(UIString.fromId("ERROR"c), UIString.fromId("ERROR_INVALID_PARAMETERS"c));
|
||||
return;
|
||||
}
|
||||
if (!createItem()) {
|
||||
window.showMessageBox(UIString.fromId("ERROR"c), UIString.fromId("ERROR_INVALID_PARAMETERS"c));
|
||||
return;
|
||||
}
|
||||
newaction.objectParam = _result;
|
||||
}
|
||||
super.close(newaction);
|
||||
}
|
||||
}
|
|
@ -362,13 +362,13 @@ class NewProjectDlg : Dialog {
|
|||
project.name = toUTF32(_projectName);
|
||||
if (!project.save())
|
||||
return setError("Cannot save project");
|
||||
project.content.setString("targetName", _projectName);
|
||||
project.content.setting.setString("targetName", _projectName);
|
||||
if (_currentTemplate.isLibrary) {
|
||||
project.content.setString("targetType", "staticLibrary");
|
||||
project.content.setString("targetPath", "lib");
|
||||
project.content.setting.setString("targetType", "staticLibrary");
|
||||
project.content.setting.setString("targetPath", "lib");
|
||||
} else {
|
||||
project.content.setString("targetType", "executable");
|
||||
project.content.setString("targetPath", "bin");
|
||||
project.content.setting.setString("targetType", "executable");
|
||||
project.content.setting.setString("targetPath", "bin");
|
||||
}
|
||||
if (_currentTemplate.json)
|
||||
project.content.merge(_currentTemplate.json);
|
||||
|
|
|
@ -224,17 +224,17 @@ class CompilerLogWidget : LogWidget {
|
|||
}
|
||||
|
||||
void resolveRelativePath(ref string path, int line) {
|
||||
import std.path : getcwd, absolutePath;
|
||||
Log.d("resolveRelativePath ", path, " current directory: ", getcwd);
|
||||
import std.path : absolutePath;
|
||||
Log.d("resolveRelativePath ", path);
|
||||
string prjName = findProjectForLine(line);
|
||||
if (prjName) {
|
||||
Log.d("Error is in project ", prjName);
|
||||
}
|
||||
string base = _baseDirectory;
|
||||
if (!base)
|
||||
base = getcwd;
|
||||
// TODO: select proper base
|
||||
path = absolutePath(path, base);
|
||||
else
|
||||
path = absolutePath(path);
|
||||
Log.d("converted to absolute path: ", path);
|
||||
}
|
||||
///
|
||||
|
|
|
@ -352,9 +352,11 @@ class SearchWidget : TabWidget {
|
|||
line--;
|
||||
if (line == 0) {
|
||||
if (_frame.openSourceFile(matchList.filename)) {
|
||||
_frame.caretHistory.pushNewPosition();
|
||||
_frame.currentEditor.setCaretPos(match.line, to!int(match.col));
|
||||
_frame.currentEditor.setTextToHighlight(_findText.text, makeSearchFlags);
|
||||
_frame.currentEditor.setFocus();
|
||||
_frame.caretHistory.pushNewPosition();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -370,11 +372,11 @@ SearchMatchList findMatches(in string filename, in dstring searchString) {
|
|||
SearchMatchList match;
|
||||
match.filename = filename;
|
||||
|
||||
foreach(int lineIndex, dstring line; content.lines) {
|
||||
foreach(lineIndex, dstring line; content.lines) {
|
||||
auto colIndex = line.indexOf(searchString);
|
||||
|
||||
if (colIndex != -1) {
|
||||
match.matches ~= SearchMatch(lineIndex, colIndex, line);
|
||||
match.matches ~= SearchMatch(cast(int)lineIndex, colIndex, line);
|
||||
}
|
||||
}
|
||||
return match;
|
||||
|
|
|
@ -75,6 +75,7 @@ SettingsPage createSettingsPages() {
|
|||
StringListValue("en", "MENU_VIEW_LANGUAGE_EN"c),
|
||||
StringListValue("ru", "MENU_VIEW_LANGUAGE_RU"c),
|
||||
StringListValue("es", "MENU_VIEW_LANGUAGE_ES"c),
|
||||
StringListValue("de", "MENU_VIEW_LANGUAGE_DE"c),
|
||||
StringListValue("cs", "MENU_VIEW_LANGUAGE_CS"c)]);
|
||||
|
||||
// UI font faces
|
||||
|
@ -125,6 +126,9 @@ SettingsPage createSettingsPages() {
|
|||
StringListValue(120, "120"d),
|
||||
StringListValue(140, "140"d),
|
||||
StringListValue(150, "150"d),
|
||||
StringListValue(150, "180"d),
|
||||
StringListValue(150, "200"d),
|
||||
StringListValue(150, "250"d),
|
||||
StringListValue(300, "300"d),
|
||||
StringListValue(400, "400"d),
|
||||
StringListValue(600, "600"d)]);
|
||||
|
@ -143,6 +147,7 @@ SettingsPage createSettingsPages() {
|
|||
texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString.fromId("OPTION_SMART_INDENTS_PASTE"c));
|
||||
texted.addCheckbox("editors/textEditor/showWhiteSpaceMarks", UIString.fromId("OPTION_SHOW_SPACES"c));
|
||||
texted.addCheckbox("editors/textEditor/showTabPositionMarks", UIString.fromId("OPTION_SHOW_TABS"c));
|
||||
texted.addCheckbox("editors/textEditor/autoAutoComplete", UIString.fromId("OPTION_AUTO_AUTOCOMPLETE"c));
|
||||
|
||||
// Common page
|
||||
SettingsPage common = res.addChild("common", UIString.fromId("OPTION_COMMON"c));
|
||||
|
|
|
@ -102,7 +102,7 @@ class WorkspacePanel : DockWindow {
|
|||
_projectPopupMenu = new MenuItem();
|
||||
_projectPopupMenu.add(ACTION_PROJECT_SET_STARTUP,
|
||||
ACTION_PROJECT_FOLDER_REFRESH,
|
||||
ACTION_FILE_NEW_SOURCE_FILE,
|
||||
//ACTION_FILE_NEW_DIRECTORY,
|
||||
//ACTION_PROJECT_FOLDER_OPEN_ITEM,
|
||||
ACTION_PROJECT_BUILD,
|
||||
ACTION_PROJECT_REBUILD,
|
||||
|
@ -116,14 +116,17 @@ class WorkspacePanel : DockWindow {
|
|||
);
|
||||
|
||||
_folderPopupMenu = new MenuItem();
|
||||
_folderPopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH, ACTION_PROJECT_FOLDER_OPEN_ITEM,
|
||||
_folderPopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE,
|
||||
ACTION_FILE_NEW_DIRECTORY,
|
||||
ACTION_PROJECT_FOLDER_REFRESH, ACTION_PROJECT_FOLDER_OPEN_ITEM,
|
||||
ACTION_PROJECT_FOLDER_EXPAND_ALL, ACTION_PROJECT_FOLDER_COLLAPSE_ALL
|
||||
//ACTION_PROJECT_FOLDER_REMOVE_ITEM,
|
||||
//ACTION_PROJECT_FOLDER_RENAME_ITEM
|
||||
);
|
||||
|
||||
_filePopupMenu = new MenuItem();
|
||||
_filePopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_PROJECT_FOLDER_REFRESH,
|
||||
_filePopupMenu.add(ACTION_FILE_NEW_SOURCE_FILE,
|
||||
ACTION_PROJECT_FOLDER_REFRESH,
|
||||
ACTION_PROJECT_FOLDER_OPEN_ITEM,
|
||||
ACTION_PROJECT_FOLDER_REMOVE_ITEM,
|
||||
//ACTION_PROJECT_FOLDER_RENAME_ITEM
|
||||
|
|
|
@ -7,7 +7,7 @@ import dlangui.graphics.fonts;
|
|||
import std.algorithm : equal;
|
||||
|
||||
const AVAILABLE_THEMES = ["ide_theme_default", "ide_theme_dark"];
|
||||
const AVAILABLE_LANGUAGES = ["en", "ru", "es", "cs"];
|
||||
const AVAILABLE_LANGUAGES = ["en", "ru", "es", "cs", "de"];
|
||||
|
||||
class IDESettings : SettingsFile {
|
||||
|
||||
|
@ -23,6 +23,7 @@ class IDESettings : SettingsFile {
|
|||
ed.setBooleanDef("smartIndentsAfterPaste", true);
|
||||
ed.setBooleanDef("showWhiteSpaceMarks", true);
|
||||
ed.setBooleanDef("showTabPositionMarks", true);
|
||||
ed.setBooleanDef("autoAutoComplete", true);
|
||||
ed.setStringDef("fontFace", "Default");
|
||||
ed.setIntegerDef("fontSize", 11);
|
||||
Setting ui = uiSettings();
|
||||
|
@ -171,6 +172,16 @@ class IDESettings : SettingsFile {
|
|||
return this;
|
||||
}
|
||||
|
||||
/// Text editor setting, true if auto-complete is triggered on each key press
|
||||
@property bool autoAutoComplete() {
|
||||
return editorSettings.getBoolean("autoAutoComplete", true);
|
||||
}
|
||||
///
|
||||
@property IDESettings autoAutoComplete(bool v) {
|
||||
editorSettings.setBoolean("autoAutoComplete", v);
|
||||
return this;
|
||||
}
|
||||
|
||||
/// true if smart indents are enabled
|
||||
@property bool smartIndents() { return editorSettings.getBoolean("smartIndents", true); }
|
||||
/// set smart indents enabled flag
|
||||
|
|
|
@ -11,6 +11,7 @@ import std.file;
|
|||
import std.path;
|
||||
import std.process;
|
||||
import std.utf;
|
||||
import std.ascii : isAlphaNum;
|
||||
|
||||
string[] includePath;
|
||||
|
||||
|
@ -422,7 +423,7 @@ class Project : WorkspaceItem {
|
|||
includePath ~= obj.str;
|
||||
}
|
||||
|
||||
_items = new ProjectFolder(fname);
|
||||
_items = new ProjectFolder(fname.dirName);
|
||||
_dependencyVersion = dependencyVersion;
|
||||
_isDependency = _dependencyVersion.length > 0;
|
||||
_projectFile = new SettingsFile(fname);
|
||||
|
@ -490,7 +491,7 @@ class Project : WorkspaceItem {
|
|||
/// name
|
||||
override @property void name(dstring s) {
|
||||
super.name(s);
|
||||
_projectFile.setString("name", toUTF8(s));
|
||||
_projectFile.setting.setString("name", toUTF8(s));
|
||||
}
|
||||
|
||||
/// name
|
||||
|
@ -501,7 +502,7 @@ class Project : WorkspaceItem {
|
|||
/// name
|
||||
override @property void description(dstring s) {
|
||||
super.description(s);
|
||||
_projectFile.setString("description", toUTF8(s));
|
||||
_projectFile.setting.setString("description", toUTF8(s));
|
||||
}
|
||||
|
||||
/// returns project's own source paths
|
||||
|
@ -576,12 +577,12 @@ class Project : WorkspaceItem {
|
|||
if (!isExecutable)
|
||||
return null;
|
||||
string exename = toUTF8(name);
|
||||
exename = _projectFile.getString("targetName", exename);
|
||||
exename = _projectFile.setting.getString("targetName", exename);
|
||||
// TODO: use targetName
|
||||
version (Windows) {
|
||||
exename = exename ~ ".exe";
|
||||
}
|
||||
string targetPath = _projectFile.getString("targetPath", null);
|
||||
string targetPath = _projectFile.setting.getString("targetPath", null);
|
||||
string exePath;
|
||||
if (targetPath.length)
|
||||
exePath = buildNormalizedPath(_filename.dirName, targetPath, exename); // int $targetPath directory
|
||||
|
@ -607,8 +608,8 @@ class Project : WorkspaceItem {
|
|||
return settings.runInExternalConsole;
|
||||
}
|
||||
|
||||
ProjectFolder findItems(string[] srcPaths) {
|
||||
auto folder = new ProjectFolder(_filename);
|
||||
private ProjectFolder findItems(string[] srcPaths) {
|
||||
auto folder = new ProjectFolder(_filename.dirName);
|
||||
folder.project = this;
|
||||
foreach(customPath; srcPaths) {
|
||||
string path = relativeToAbsolutePath(customPath);
|
||||
|
@ -685,10 +686,10 @@ class Project : WorkspaceItem {
|
|||
protected string[] findSourcePaths() {
|
||||
string[] res;
|
||||
res.assumeSafeAppend;
|
||||
string[] srcPaths = _projectFile.getStringArray("sourcePaths");
|
||||
string[] srcPaths = _projectFile.setting.getStringArray("sourcePaths");
|
||||
foreach(s; srcPaths)
|
||||
addRelativePathIfExists(res, s);
|
||||
Setting configs = _projectFile.objectByPath("configurations");
|
||||
Setting configs = _projectFile.setting.objectByPath("configurations");
|
||||
if (configs) {
|
||||
for (int i = 0; i < configs.length; i++) {
|
||||
Setting s = configs[i];
|
||||
|
@ -710,7 +711,7 @@ class Project : WorkspaceItem {
|
|||
void processSubpackages() {
|
||||
import dlangui.core.files;
|
||||
_subPackages.length = 0;
|
||||
Setting subPackages = _projectFile.settingByPath("subPackages", SettingType.ARRAY, false);
|
||||
Setting subPackages = _projectFile.setting.settingByPath("subPackages", SettingType.ARRAY, false);
|
||||
if (subPackages) {
|
||||
string p = _projectFile.filename.dirName;
|
||||
for(int i = 0; i < subPackages.length; i++) {
|
||||
|
@ -761,7 +762,7 @@ class Project : WorkspaceItem {
|
|||
//
|
||||
_mainSourceFile = null;
|
||||
try {
|
||||
_name = toUTF32(_projectFile.getString("name"));
|
||||
_name = toUTF32(_projectFile.setting.getString("name"));
|
||||
_originalName = _name;
|
||||
if (_baseProjectName) {
|
||||
_name = _baseProjectName ~ ":" ~ _name;
|
||||
|
@ -770,7 +771,7 @@ class Project : WorkspaceItem {
|
|||
_name ~= "-"d;
|
||||
_name ~= toUTF32(_dependencyVersion.startsWith("~") ? _dependencyVersion[1..$] : _dependencyVersion);
|
||||
}
|
||||
_description = toUTF32(_projectFile.getString("description"));
|
||||
_description = toUTF32(_projectFile.setting.getString("description"));
|
||||
Log.d(" project name: ", _name);
|
||||
Log.d(" project description: ", _description);
|
||||
|
||||
|
@ -786,7 +787,7 @@ class Project : WorkspaceItem {
|
|||
if (!_isDependency)
|
||||
loadSelections();
|
||||
|
||||
_configurations = ProjectConfiguration.load(_projectFile);
|
||||
_configurations = ProjectConfiguration.load(_projectFile.setting);
|
||||
Log.i("Project configurations: ", _configurations);
|
||||
|
||||
|
||||
|
@ -842,7 +843,7 @@ class Project : WorkspaceItem {
|
|||
_dependencies = newdeps;
|
||||
return false;
|
||||
}
|
||||
Setting versions = selectionsFile.objectByPath("versions");
|
||||
Setting versions = selectionsFile.setting.objectByPath("versions");
|
||||
if (!versions.isObject) {
|
||||
_dependencies = newdeps;
|
||||
return false;
|
||||
|
@ -934,19 +935,19 @@ class DubPackageFinder {
|
|||
bool isValidProjectName(in string s) pure {
|
||||
if (s.empty)
|
||||
return false;
|
||||
return reduce!q{ a && (b == '_' || b == '-' || std.ascii.isAlphaNum(b)) }(true, s);
|
||||
return reduce!((a, b) => a && (b == '_' || b == '-' || isAlphaNum(b)))(true, s);
|
||||
}
|
||||
|
||||
bool isValidModuleName(in string s) pure {
|
||||
if (s.empty)
|
||||
return false;
|
||||
return reduce!q{ a && (b == '_' || std.ascii.isAlphaNum(b)) }(true, s);
|
||||
return reduce!((a, b) => a && (b == '_' || isAlphaNum(b)))(true, s);
|
||||
}
|
||||
|
||||
bool isValidFileName(in string s) pure {
|
||||
if (s.empty)
|
||||
return false;
|
||||
return reduce!q{ a && (b == '_' || b == '.' || b == '-' || std.ascii.isAlphaNum(b)) }(true, s);
|
||||
return reduce!((a, b) => a && (b == '_' || b == '.' || b == '-' || isAlphaNum(b)))(true, s);
|
||||
}
|
||||
|
||||
unittest {
|
||||
|
|
|
@ -74,7 +74,7 @@ class Workspace : WorkspaceItem {
|
|||
}
|
||||
|
||||
@property Setting includePath(){
|
||||
Setting res = _workspaceFile.objectByPath("includePath", true);
|
||||
Setting res = _workspaceFile.setting.objectByPath("includePath", true);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -314,11 +314,11 @@ class Workspace : WorkspaceItem {
|
|||
if (df && !_description.empty) // cut off last delimiter
|
||||
_description = _description[ 0 .. $ - 3 ];
|
||||
}
|
||||
_workspaceFile.setString("name", toUTF8(_name));
|
||||
_workspaceFile.setString("description", toUTF8(_description));
|
||||
_workspaceFile.setting.setString("name", toUTF8(_name));
|
||||
_workspaceFile.setting.setString("description", toUTF8(_description));
|
||||
Log.d("workspace name: ", _name);
|
||||
Log.d("workspace description: ", _description);
|
||||
Setting projects = _workspaceFile.objectByPath("projects", true);
|
||||
Setting projects = _workspaceFile.setting.objectByPath("projects", true);
|
||||
projects.clear(SettingType.OBJECT);
|
||||
foreach (Project p; _projects) {
|
||||
if (p.isDependency)
|
||||
|
@ -346,8 +346,8 @@ class Workspace : WorkspaceItem {
|
|||
return false;
|
||||
}
|
||||
_settings.load(filename ~ WORKSPACE_SETTINGS_EXTENSION);
|
||||
_name = toUTF32(_workspaceFile["name"].str);
|
||||
_description = toUTF32(_workspaceFile["description"].str);
|
||||
_name = toUTF32(_workspaceFile.setting["name"].str);
|
||||
_description = toUTF32(_workspaceFile.setting["description"].str);
|
||||
Log.d("workspace name: ", _name);
|
||||
Log.d("workspace description: ", _description);
|
||||
if (_name.empty()) {
|
||||
|
@ -355,7 +355,7 @@ class Workspace : WorkspaceItem {
|
|||
return false;
|
||||
}
|
||||
auto originalStartupProjectName = _settings.startupProjectName;
|
||||
Setting projects = _workspaceFile.objectByPath("projects", true);
|
||||
Setting projects = _workspaceFile.setting.objectByPath("projects", true);
|
||||
foreach(string key, Setting value; projects) {
|
||||
string path = value.str;
|
||||
Log.d("project: ", key, " path:", path);
|
||||
|
|
|
@ -1 +1 @@
|
|||
v0.8.10
|
||||
v0.8.17
|
|
@ -4,3 +4,4 @@ res/i18n/en.ini
|
|||
res/i18n/ru.ini
|
||||
res/i18n/es.ini
|
||||
res/i18n/cs.ini
|
||||
res/i18n/de.ini
|
||||
|
|
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.3 KiB |
After Width: | Height: | Size: 4.1 KiB |
|
@ -80,6 +80,7 @@ MENU_VIEW_LANGUAGE_EN=English
|
|||
MENU_VIEW_LANGUAGE_RU=Русский
|
||||
MENU_VIEW_LANGUAGE_CS=Čeština
|
||||
MENU_VIEW_LANGUAGE_ES=Spanish
|
||||
MENU_VIEW_LANGUAGE_DE=Deutsch
|
||||
MENU_VIEW_THEME=&Téma
|
||||
MENU_VIEW_THEME_DEFAULT=&Default
|
||||
MENU_VIEW_THEME_CUSTOM1=&Custom 1
|
||||
|
|
|
@ -0,0 +1,268 @@
|
|||
ABOUT=Über DlangIDE
|
||||
HOME=DlangIDE Home
|
||||
DESCRIPTION=D-Sprach-IDE geschrieben in D
|
||||
COPYRIGHT=(c) Vadim Lopatin 2017
|
||||
START_WITH=Starten mit:
|
||||
RECENT=Kürzlich:
|
||||
NO_RECENT=Keine kürzlich verwendete Einträge
|
||||
USEFUL_LINKS=Nützliche Links:
|
||||
D_LANG=D Programmiersprache
|
||||
DUB_REP=DUB Repository
|
||||
DLANG_DOWNLOADS=D-Compiler downloaden
|
||||
DLANG_UI=DLangUI auf GitHub
|
||||
DLANG_IDE=DLangIDE auf GitHub
|
||||
DLANG_IDE_HELP=DLangIDE Onlinedokumentation
|
||||
DLANG_TOUR=DLang Tour
|
||||
DLANG_VIBED=Vibe-D
|
||||
DLANG_FORUM=Dlang Forum
|
||||
DLANG_IDE_DONATE=DlangIDE unterstützen
|
||||
DLANG_IDE_DONATE_PAYPAL=Spenden über PayPal
|
||||
EXIT=Beenden
|
||||
|
||||
PROFILER_WINDOW=Profiler
|
||||
|
||||
ALL_FILES=Alle Dateien
|
||||
SOURCE_FILES=Quelldateien
|
||||
WORKSPACE_AND_PROJECT_FILES=Workspace- und Projektdateien
|
||||
IDE_FILES=DlangIDE Dateien
|
||||
PROFILER_LOG_FILES=DMD Profiler Logs
|
||||
|
||||
EDITOR_CONTENT=Editorinhalte
|
||||
LOCATION=Position
|
||||
NAME=Name
|
||||
|
||||
MENU_FILE=Datei
|
||||
MENU_FILE_NEW=Erstelle
|
||||
MENU_FILE_NEW_SOURCE_FILE=Neue Datei
|
||||
MENU_FILE_NEW_PROJECT=Neues Projekt
|
||||
MENU_FILE_NEW_WORKSPACE=Neue Workspace
|
||||
MENU_FILE_OPEN=Öffne Datei...
|
||||
MENU_FILE_OPEN_WORKSPACE=Öffne Projekt oder Workspace...
|
||||
MENU_FILE_OPEN_RECENT=Öffne kürzlich
|
||||
MENU_FILE_SAVE=&Speichern
|
||||
MENU_FILE_SAVE_AS=&Speichern unter...
|
||||
MENU_FILE_SAVE_ALL=Alles &speichern
|
||||
MENU_FILE_WORKSPACE_CLOSE=Schließe Workspace
|
||||
MENU_FILE_EXIT=Beende
|
||||
|
||||
MENU_EDIT=&Editieren
|
||||
MENU_EDIT_COPY=Kopieren
|
||||
MENU_EDIT_PASTE=Einfügen
|
||||
MENU_EDIT_CUT=Ausschneiden
|
||||
MENU_EDIT_UNDO=Rückgängig
|
||||
MENU_EDIT_REDO=Wiederherstellen
|
||||
MENU_EDIT_INDENT=Block einrücken
|
||||
MENU_EDIT_UNINDENT=Block ausrücken
|
||||
MENU_EDIT_TOGGLE_LINE_COMMENT=Zeilenkommentare umschalten
|
||||
MENU_EDIT_TOGGLE_BLOCK_COMMENT=Blockkommentare umschalten
|
||||
MENU_EDIT_ADVANCED=Erweitert...
|
||||
MENU_EDIT_PREFERENCES=Einstellungen
|
||||
|
||||
MENU_VIEW=Ansicht
|
||||
MENU_VIEW_SHOW_WHITESPACE_MARKS=Zeige Leerzeichenmarkierungen an
|
||||
MENU_VIEW_SHOW_TAB_POSITIONS=Tabpositionsmarkierungen
|
||||
MENU_VIEW_SHOW_TOOLBAR=Zeige Toolbar an
|
||||
MENU_VIEW_SHOW_STATUSBAR=Zeige Statusbar an
|
||||
|
||||
MENU_PROJECT=&Projekt
|
||||
MENU_PROJECT_CONFIGURATIONS=Projekt konfigurieren
|
||||
MENU_PROJECT_SET_AS_STARTUP=Als Startprojekt setzen
|
||||
MENU_PROJECT_SETTINGS=Projekteinstellungen
|
||||
MENU_PROJECT_REFRESH=Workspace-Einträge aktualisieren
|
||||
MENU_PROJECT_UPDATE_DEPENDENCIES=Abhänigkeiten aktualisieren
|
||||
|
||||
MENU_NAVIGATE=&Navigation
|
||||
GO_TO_DEFINITION=Gehe zu Definition
|
||||
SHOW_COMPLETIONS=Autovervollständigung anzeigen
|
||||
SHOW_DOC_COMMENTS=Dokumentation anzeigen
|
||||
SHOW_PAREN_COMPLETION=Autrufvorschläge
|
||||
GO_TO_LINE=Gehe zu Zeile
|
||||
|
||||
FIND_IN_FILES=Finde in Dateien...
|
||||
|
||||
MENU_BUILD_CONFIGURATIONS=Build-Konfigurationen
|
||||
MENU_BUILD_CONFIGURATION=Build-Konfiguration
|
||||
MENU_BUILD=&Build
|
||||
MENU_BUILD_WORKSPACE_BUILD=Baue Workspace
|
||||
MENU_BUILD_WORKSPACE_REBUILD=Baue erneut Workspace
|
||||
MENU_BUILD_WORKSPACE_CLEAN=Säubere Workspace
|
||||
MENU_BUILD_PROJECT_BUILD=Baue Projekt
|
||||
MENU_BUILD_PROJECT_REBUILD=Baue erneut Projekt
|
||||
MENU_BUILD_PROJECT_CLEAN=Säubere Projekt
|
||||
MENU_BUILD_RUN_WITH_RDMD=Starte mit rdmd
|
||||
MENU_BUILD_CONFIGURATION=Build-Type
|
||||
MENU_PROJECT_CONFIGURATION=Projektkonfiguration
|
||||
|
||||
MENU_DEBUG=&Debug
|
||||
MENU_DEBUG_START_DEBUGGING=Starte debuggen
|
||||
MENU_DEBUG_START_NO_DEBUGGING=Starte ohne debuggen
|
||||
MENU_DEBUG_CONTINUE=Debuggen fortfahren
|
||||
MENU_DEBUG_STOP=Stop
|
||||
MENU_DEBUG_PAUSE=Pause
|
||||
MENU_DEBUG_RESTART=Neustart
|
||||
MENU_DEBUG_STEP_INTO=Springe hinein
|
||||
MENU_DEBUG_STEP_OVER=Springe hinweg
|
||||
MENU_DEBUG_STEP_OUT=Springe heraus
|
||||
MENU_DEBUG_BREAKPOINT_TOGGLE=Haltepunkt umschalten
|
||||
MENU_DEBUG_BREAKPOINT_ENABLE=Aktiviere Haltepunkt
|
||||
MENU_DEBUG_BREAKPOINT_DISABLE=Deaktiviere Haltepunkt
|
||||
|
||||
MENU_WINDOW=Fenster
|
||||
MENU_WINDOW_PREFERENCES=Einstellungen
|
||||
MENU_WINDOW_CLOSE_DOCUMENT=Schließe Dokument
|
||||
MENU_WINDOW_CLOSE_ALL_DOCUMENTS=Schließe alle Dokumente
|
||||
MENU_WINDOW_SHOW_HOME_SCREEN=Zeige Homescreen
|
||||
MENU_WINDOW_SHOW_WORKSPACE_EXPLORER=Workspace-Explorer
|
||||
MENU_WINDOW_SHOW_LOG_WINDOW=Log-Fenster
|
||||
|
||||
MENU_HELP=&Hilfe
|
||||
MENU_HELP_VIEW_HELP=Online Hilfe
|
||||
MENU_HELP_ABOUT=Über
|
||||
MENU_HELP_DONATE=Spenden über PayPal
|
||||
|
||||
MENU_VIEW=Anzeige
|
||||
MENU_VIEW_LANGUAGE=Oberflächensprache
|
||||
MENU_VIEW_LANGUAGE_EN=English
|
||||
MENU_VIEW_LANGUAGE_RU=Русский
|
||||
MENU_VIEW_LANGUAGE_CS=Čeština
|
||||
MENU_VIEW_LANGUAGE_ES=Spanish
|
||||
MENU_VIEW_LANGUAGE_DE=Deutsch
|
||||
MENU_VIEW_THEME=&Theme
|
||||
MENU_VIEW_THEME_DEFAULT=Standart
|
||||
MENU_VIEW_THEME_CUSTOM1=&Custom 1
|
||||
|
||||
MENU_TOOLS=Tools
|
||||
OPEN_DMD_TRACE_LOG=Öffne DMD Profiler-Log
|
||||
|
||||
TAB_LONG_LIST=Lange Liste
|
||||
TAB_BUTTONS=Knopf
|
||||
TAB_ANIMATION=Animation
|
||||
TAB_TABLE_LAYOUT=Tabellenlayout
|
||||
TAB_EDITORS=Editoren
|
||||
|
||||
MENU_PROJECT_FOLDER_ADD_ITEM=Hinzufügen...
|
||||
MENU_PROJECT_FOLDER_OPEN_ITEM=Öffnen
|
||||
MENU_PROJECT_FOLDER_REMOVE_ITEM=Umbenennen
|
||||
MENU_PROJECT_FOLDER_RENAME_ITEM=Umbenennen...
|
||||
MENU_PROJECT_FOLDER_REFRESH=Aktualisieren
|
||||
MENU_PROJECT_REVEAL_IN_EXPLORER=Zeige im Dateimanager an
|
||||
MENU_PROJECT_FOLDER_EXPAND_ALL=Alles ausklappen
|
||||
MENU_PROJECT_FOLDER_COLLAPSE_ALL=Alles einklappen
|
||||
|
||||
HEADER_SETTINGS=DlangIDE Einstellungen
|
||||
HEADER_OPEN_WORKSPACE_OR_PROJECT=Öffne Workspace oder Projekt
|
||||
HEADER_OPEN_TEXT_FILE=Öffne Textdatei
|
||||
HEADER_OPEN_DMD_PROFILER_LOG=Öffne DMD Profiler Logdatei
|
||||
HEADER_CLOSE_FILE=Schließe Datei
|
||||
HEADER_CLOSE_TAB=Schließe Tab
|
||||
HEADER_PROJECT_SETTINGS=Projekteinstellungen
|
||||
HEADER_REMOVE_FILE=Entferne Datei
|
||||
HEADER_SAVE_FILE_AS=Speichere Datei unter
|
||||
|
||||
OPTION_ADD_TO_CURRENT_WORKSPACE=Füge zur momentaner Wokrspace hinzu
|
||||
OPTION_ARCHITECTURE=Architektur
|
||||
OPTION_AUTO_OPEN_LAST_PROJECT=Öffne automatisch das letzte Projekt
|
||||
OPTION_BUILD=Build
|
||||
OPTION_COMMAND_LINE=Kommandozeilenargumente
|
||||
OPTION_COMMON=Standard
|
||||
OPTION_CREATE_NEW_SOLUTION=Erstelle neue Ansicht
|
||||
OPTION_CREATE_NEW_WORKSPACE=Erstelle neue Workspace
|
||||
OPTION_CREATE_SUBDIRECTORY_FOR_PROJECT=Erstelle einen Unterordner für das Projekt
|
||||
OPTION_CREATE_SUBDIRECTORY_FOR_WORKSPACE=Erstelle einen Unterordner für die Workspace
|
||||
OPTION_DARK=Dunkel
|
||||
OPTION_DEBUGGER=Debugger
|
||||
OPTION_DEBUGGER_EXECUTABLE=Debugger-Anwendung
|
||||
OPTION_DEFAULT=Standard
|
||||
OPTION_DIRECTORY_LAYOUT=Ordneransicht
|
||||
OPTION_DMD_EXECUTABLE=DMD-Anwendung
|
||||
OPTION_DUB_ADDITIONAL_PARAMS=DUB zusätzliche Parameter
|
||||
OPTION_DUB_EXECUTABLE=DUB-Anwendung
|
||||
OPTION_EDITORS=Editoren
|
||||
OPTION_INTERFACE=Interface
|
||||
OPTION_FILE_PATH=Dateipfad
|
||||
OPTION_FONT_ANTIALIASING=Minimale Schriftgröße für Antialiasing
|
||||
OPTION_FONT_ANTIALIASING_ALWAYS_OFF=Immer AUS
|
||||
OPTION_FONT_ANTIALIASING_ALWAYS_ON=Immer AN
|
||||
OPTION_FONT_HINTING=Schrift-Hinting
|
||||
OPTION_FONT_HINTING_DISABLED=Abgeschaltet
|
||||
OPTION_FONT_HINTING_FORCE=Erzwinge automatische Hints
|
||||
OPTION_FONT_HINTING_NORMAL=Normal
|
||||
OPTION_FONT_HINTING_LIGHT=LIGHT
|
||||
OPTION_FONT_FACE=Schriftart
|
||||
OPTION_FONT_SIZE=Schriftgröße
|
||||
OPTION_FONT_GAMMA=Schrift-Gamma
|
||||
OPTION_SCREEN_DPI_OVERRIDE=Überschreibe Bildschirm DPI
|
||||
OPTION_SCREEN_DPI_OVERRIDE_NONE=Standard Bildschirm DPI
|
||||
OPTION_GDC_EXECUTABLE=GDC-Anwendung
|
||||
OPTION_LANGUAGE=Sprache
|
||||
OPTION_LDC2_EXECUTABLE=LDC2-Anwendung
|
||||
OPTION_LDMD2_EXECUTABLE=LDMD2-Anwendung
|
||||
OPTION_MODULE_NAME=Modulname
|
||||
OPTION_NEW_PROJECT=Neues Projekt
|
||||
OPTION_NEW_SOURCE_FILE=Neue Quelldatei
|
||||
OPTION_NEW_WORKSPACE=Neue Workspace
|
||||
OPTION_PROJECT_NAME=Projektname
|
||||
OPTION_PROJECT_TEMPLATE=Projektvorlage
|
||||
OPTION_RDMD_ADDITIONAL_PARAMS=rdmd zusätzliche Parameter
|
||||
OPTION_RDMD_EXECUTABLE=rdmd-Anwendung
|
||||
OPTION_RUN_IN_EXTERNAL_CONSOLE=Starte in externen Konsole
|
||||
OPTION_RUN_DEBUG=Starte und debugge
|
||||
OPTION_SHOW_SPACES=Zeige Leerzeichenmarkierungen an
|
||||
OPTION_SHOW_TABS=Zeige Tabpositionsmarkierungen an
|
||||
OPTION_SMART_INDENTS=Schlaues Einrücken
|
||||
OPTION_SMART_INDENTS_PASTE=Schlaues Einrücken nach Einfügen
|
||||
OPTION_TAB=Tabgröße
|
||||
OPTION_TEMPLATE_DESCR=Vorlagenbeschreibung
|
||||
OPTION_TEXT_EDITORS=Texteditor
|
||||
OPTION_TERMINAL=Terminal
|
||||
OPTION_TERMINAL_EXECUTABLE=Terminal-Anwendung
|
||||
OPTION_THEME=Theme
|
||||
OPTION_TOOLCHAIN=Toolchain
|
||||
OPTION_TOOLCHAINS=Toolchains
|
||||
OPTION_VERBOSE=Verbose
|
||||
OPTION_WORKING_DIR=Arbeitsverzeichnis
|
||||
OPTION_WORKSPACE_NAME=Workspace-Name
|
||||
OPTION_USE_SPACES=Nutze Leerzeichen für Tabs
|
||||
|
||||
ERROR=Fehler
|
||||
ERROR_CANNOT_CREATE_PROJECT=Projekte konnte nicht erstellt werden
|
||||
ERROR_CANNOT_DEBUG_PROJECT=Projekt konnte nicht gedebuggt werden
|
||||
ERROR_CANNOT_FIND_EXEC=Ausführbare Datei nicht gefunden
|
||||
ERROR_CANNOT_RUN_PROJECT=Projekt konnte nicht gestartet werden
|
||||
ERROR_FAILED_CREATE_PROJECT=Projekt konnte nicht erstllt werden
|
||||
ERROR_STARTUP_PROJECT_ABSENT=Kein Startprojekt angegeben
|
||||
ERROR_INVALID_NUMBER=Unzulässige Nummer
|
||||
ERROR_INVALID_PARAMETERS=Ungültiger Parameter
|
||||
ERROR_INVALID_WORKSPACE_FILE=Ungültige Workspace-Datei
|
||||
ERROR_INVALID_WS_OR_PROJECT_FILE=Diese Datei ist keine gültige Workspace-/Projektdatei
|
||||
ERROR_NO_DEBUGGER=Kein Debugger in den Einstellungen angegeben
|
||||
ERROR_NO_SUCH_LINE=Keine solche Zeile
|
||||
ERROR_OPEN_FILE=Datei konnte nicht geöffnet werden
|
||||
ERROR_OPEN_PROJECT=Projekt konnte nicht geöffnet werden
|
||||
ERROR_OPEN_WORKSPACE=Workspace konnte nicht geöffnet werden
|
||||
ERROR_OPENING_FILE=Datei konnte nicht geöffnet werden
|
||||
ERROR_OPENING_PROJECT=Ein Fehler trat auf beim öffnen des Projekts
|
||||
ERROR_OPENING_WORKSPACE=Ein Fehler trat auf beim öffnen der Workspace
|
||||
ERROR_FAILED_TO_PARSE_TRACE_LOG_FILE=Fehler beim Verarbeiten vom Trace-Log
|
||||
|
||||
MSG_FILE_CONTENT_CHANGED=Dateiinhalt hat sich verändert.
|
||||
MSG_TAB_CONTENT_CHANGED=Tabinhalt hat sich verändert
|
||||
MSG_OK_BUTTON=OK-Knopf gedrückt
|
||||
MSG_OPEN_PROJECT=Öffne Projekt
|
||||
MSG_PROJECT_ALREADY_OPENED=Projekt ist schon in der Workspace
|
||||
MSG_SELECT_DIR=Ordner auswählen
|
||||
MSG_STARTING=Starte
|
||||
MSG_STARTING_DEBUGGER=Starte Debugger für
|
||||
MSG_TRY_OPEN_PROJECT=Versuche Projekt zu öffnen von
|
||||
DEBUGGING=debugge...
|
||||
RUNNING=läuft...
|
||||
|
||||
QUESTION_CREATE_DIR=Der Zielpfad existiert nicht. Soll der Ordner angelegt werden?
|
||||
QUESTION_NEW_WORKSPACE=Soll ein neuer Workspace anglegt werden oder der momentane verwendet werden?
|
||||
QUESTION_REMOVE_FILE=Soll die Datei gelöscht werden
|
||||
|
||||
BUILD_OP_DESCRIPTION_BUILD=Baue Projekt {projectName}...
|
||||
BUILD_OP_DESCRIPTION_CLEAN=Säubere Projekt {projectName}...
|
||||
BUILD_OP_DESCRIPTION_REBUILD=Baue erneut Projekt {projectName}...
|
||||
BUILD_OP_DESCRIPTION_RUN=Starte Projekt {projectName}...
|
||||
BUILD_OP_DESCRIPTION_UPGRADE=Aktualisiere Pakte für das Projekt {projectName}...
|
|
@ -34,6 +34,7 @@ NAME=Name
|
|||
MENU_FILE=&File
|
||||
MENU_FILE_NEW=&Create
|
||||
MENU_FILE_NEW_SOURCE_FILE=New file
|
||||
MENU_FILE_NEW_DIRECTORY=New directory
|
||||
MENU_FILE_NEW_PROJECT=New project
|
||||
MENU_FILE_NEW_WORKSPACE=New workspace
|
||||
MENU_FILE_OPEN=&Open file...
|
||||
|
@ -77,6 +78,8 @@ SHOW_COMPLETIONS=Get autocompletions
|
|||
SHOW_DOC_COMMENTS=Show documentation
|
||||
SHOW_PAREN_COMPLETION=Call hints
|
||||
GO_TO_LINE=Go to line
|
||||
GO_TO_PREV_POSITION=Go to previous position
|
||||
GO_TO_NEXT_POSITION=Go to next position
|
||||
|
||||
FIND_IN_FILES=Find in files...
|
||||
|
||||
|
@ -126,6 +129,7 @@ MENU_VIEW_LANGUAGE_EN=English
|
|||
MENU_VIEW_LANGUAGE_RU=Русский
|
||||
MENU_VIEW_LANGUAGE_CS=Čeština
|
||||
MENU_VIEW_LANGUAGE_ES=Spanish
|
||||
MENU_VIEW_LANGUAGE_DE=Deutsch
|
||||
MENU_VIEW_THEME=&Theme
|
||||
MENU_VIEW_THEME_DEFAULT=&Default
|
||||
MENU_VIEW_THEME_CUSTOM1=&Custom 1
|
||||
|
@ -196,6 +200,7 @@ OPTION_GDC_EXECUTABLE=GDC executable
|
|||
OPTION_LANGUAGE=Language
|
||||
OPTION_LDC2_EXECUTABLE=LDC2 executable
|
||||
OPTION_LDMD2_EXECUTABLE=LDMD2 executable
|
||||
OPTION_MAKE_PACKAGE=Create package.d
|
||||
OPTION_MODULE_NAME=Module name
|
||||
OPTION_NEW_PROJECT=New project
|
||||
OPTION_NEW_SOURCE_FILE=New source file
|
||||
|
@ -222,6 +227,7 @@ OPTION_VERBOSE=Verbose
|
|||
OPTION_WORKING_DIR=Working directory
|
||||
OPTION_WORKSPACE_NAME=Workspace name
|
||||
OPTION_USE_SPACES=Use spaces for tabs
|
||||
OPTION_AUTO_AUTOCOMPLETE=Automatically suggest auto completion
|
||||
|
||||
ERROR=Error
|
||||
ERROR_CANNOT_CREATE_PROJECT=Cannot create project
|
||||
|
|
|
@ -49,6 +49,7 @@ MENU_VIEW_LANGUAGE_ES=Spanish
|
|||
MENU_VIEW_LANGUAGE_EN=English
|
||||
MENU_VIEW_LANGUAGE_RU=Русский
|
||||
MENU_VIEW_LANGUAGE_CS=Čeština
|
||||
MENU_VIEW_LANGUAGE_DE=Deutsch
|
||||
MENU_VIEW_THEME=&Tema
|
||||
MENU_VIEW_THEME_DEFAULT=&Por Defecto
|
||||
MENU_VIEW_THEME_CUSTOM1=&Personalizado 1
|
||||
|
|
|
@ -125,6 +125,7 @@ MENU_VIEW_LANGUAGE_ES=Spanish
|
|||
MENU_VIEW_LANGUAGE_EN=English
|
||||
MENU_VIEW_LANGUAGE_RU=Русский
|
||||
MENU_VIEW_LANGUAGE_CS=Čeština
|
||||
MENU_VIEW_LANGUAGE_DE=Deutsch
|
||||
MENU_VIEW_THEME=&Тема
|
||||
MENU_VIEW_THEME_DEFAULT=Стандартная
|
||||
MENU_VIEW_THEME_CUSTOM1=Пример 1
|
||||
|
@ -220,6 +221,7 @@ OPTION_VERBOSE=Показать подробности
|
|||
OPTION_WORKING_DIR=Рабочий каталог
|
||||
OPTION_WORKSPACE_NAME=Имя рабочего пространства
|
||||
OPTION_USE_SPACES=Использовать пробелы вместо табуляции
|
||||
OPTION_AUTO_AUTOCOMPLETE=Автоматически предлагать дополнение кода
|
||||
|
||||
ERROR=Ошибка
|
||||
ERROR_CANNOT_CREATE_PROJECT=Не могу создать проект
|
||||
|
|
After Width: | Height: | Size: 920 B |
|
@ -4,8 +4,15 @@ res/i18n/en.ini
|
|||
res/i18n/ru.ini
|
||||
res/i18n/es.ini
|
||||
res/i18n/cs.ini
|
||||
res/i18n/de.ini
|
||||
res/hdpi/hdpi_configure.png
|
||||
res/hdpi/hdpi_debug-run.png
|
||||
res/hdpi/hdpi_debug-pause.png
|
||||
res/hdpi/hdpi_debug-stop.png
|
||||
res/hdpi/hdpi_debug-restart.png
|
||||
res/hdpi/hdpi_debug-step-into.png
|
||||
res/hdpi/hdpi_debug-step-out.png
|
||||
res/hdpi/hdpi_debug-step-over.png
|
||||
res/hdpi/hdpi_document-close.png
|
||||
res/hdpi/hdpi_document-open-recent.png
|
||||
res/hdpi/hdpi_document-open.png
|
||||
|
|