This commit is contained in:
Vitaly Livshic 2017-09-13 17:14:52 +03:00
commit 98d83c357a
11 changed files with 154 additions and 55 deletions

View File

@ -9,10 +9,10 @@
"targetPath": "bin", "targetPath": "bin",
"targetType": "executable", "targetType": "executable",
"stringImportPaths": ["views", "views/res", "views/res/i18n", "views/res/mdpi", "views/res/hdpi"], "stringImportPaths": ["views"],
"dependencies": { "dependencies": {
"dlangui": "==0.9.127", "dlangui": "==0.9.131",
"dsymbol": "~>0.2.9", "dsymbol": "~>0.2.9",
"dcd": "~>0.9.1" "dcd": "~>0.9.1"
}, },

View File

@ -105,6 +105,8 @@ extern (C) int UIAppMain(string[] args) {
// show window // show window
window.show(); window.show();
// restore window state, size, position
frame.restoreUIStateOnStartup();
//jsonTest(); //jsonTest();

View File

@ -80,7 +80,7 @@ const Action ACTION_PROJECT_FOLDER_OPEN_ITEM = new Action(IDEActions.ProjectFold
const Action ACTION_PROJECT_FOLDER_REMOVE_ITEM = new Action(IDEActions.ProjectFolderRemoveItem, "MENU_PROJECT_FOLDER_REMOVE_ITEM"c); const Action ACTION_PROJECT_FOLDER_REMOVE_ITEM = new Action(IDEActions.ProjectFolderRemoveItem, "MENU_PROJECT_FOLDER_REMOVE_ITEM"c);
const Action ACTION_PROJECT_FOLDER_RENAME_ITEM = new Action(IDEActions.ProjectFolderRenameItem, "MENU_PROJECT_FOLDER_RENAME_ITEM"c); const Action ACTION_PROJECT_FOLDER_RENAME_ITEM = new Action(IDEActions.ProjectFolderRenameItem, "MENU_PROJECT_FOLDER_RENAME_ITEM"c);
const Action ACTION_PROJECT_FOLDER_REFRESH = new Action(IDEActions.ProjectFolderRefresh, "MENU_PROJECT_FOLDER_REFRESH"c); const Action ACTION_PROJECT_FOLDER_REFRESH = new Action(IDEActions.ProjectFolderRefresh, "MENU_PROJECT_FOLDER_REFRESH"c);
const Action ACTION_FILE_WORKSPACE_CLOSE = new Action(IDEActions.CloseWorkspace, "MENU_FILE_WORKSPACE_CLOSE"c); const Action ACTION_FILE_WORKSPACE_CLOSE = new Action(IDEActions.CloseWorkspace, "MENU_FILE_WORKSPACE_CLOSE"c).disableByDefault();
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_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_PROJECT = new Action(IDEActions.FileNewProject, "MENU_FILE_NEW_PROJECT"c);
@ -88,7 +88,7 @@ const Action ACTION_FILE_NEW_WORKSPACE = new Action(IDEActions.FileNewWorkspace,
const Action ACTION_FILE_OPEN = new Action(IDEActions.FileOpen, "MENU_FILE_OPEN"c, "document-open", KeyCode.KEY_O, KeyFlag.Control); const Action ACTION_FILE_OPEN = new Action(IDEActions.FileOpen, "MENU_FILE_OPEN"c, "document-open", KeyCode.KEY_O, KeyFlag.Control);
const Action ACTION_FILE_OPEN_WORKSPACE = new Action(IDEActions.FileOpenWorkspace, "MENU_FILE_OPEN_WORKSPACE"c, null, KeyCode.KEY_O, KeyFlag.Control | KeyFlag.Shift); const Action ACTION_FILE_OPEN_WORKSPACE = new Action(IDEActions.FileOpenWorkspace, "MENU_FILE_OPEN_WORKSPACE"c, null, KeyCode.KEY_O, KeyFlag.Control | KeyFlag.Shift);
const Action ACTION_FILE_SAVE = (new Action(IDEActions.FileSave, "MENU_FILE_SAVE"c, "document-save", KeyCode.KEY_S, KeyFlag.Control)).disableByDefault(); const Action ACTION_FILE_SAVE = (new Action(IDEActions.FileSave, "MENU_FILE_SAVE"c, "document-save", KeyCode.KEY_S, KeyFlag.Control)).disableByDefault();
const Action ACTION_FILE_SAVE_AS = (new Action(IDEActions.FileSaveAs, "MENU_FILE_SAVE_AS"c)).disableByDefault(); const Action ACTION_FILE_SAVE_AS = (new Action(IDEActions.FileSaveAs, "MENU_FILE_SAVE_AS"c)).disableByDefault().disableByDefault();
const Action ACTION_FILE_SAVE_ALL = (new Action(IDEActions.FileSaveAll, "MENU_FILE_SAVE_ALL"c, null, KeyCode.KEY_S, KeyFlag.Control | KeyFlag.Shift)).disableByDefault(); const Action ACTION_FILE_SAVE_ALL = (new Action(IDEActions.FileSaveAll, "MENU_FILE_SAVE_ALL"c, null, KeyCode.KEY_S, KeyFlag.Control | KeyFlag.Shift)).disableByDefault();
const Action ACTION_FILE_EXIT = new Action(IDEActions.FileExit, "MENU_FILE_EXIT"c, "document-close"c, KeyCode.KEY_X, KeyFlag.Alt); const Action ACTION_FILE_EXIT = new Action(IDEActions.FileExit, "MENU_FILE_EXIT"c, "document-close"c, KeyCode.KEY_X, KeyFlag.Alt);
const Action ACTION_WORKSPACE_BUILD = new Action(IDEActions.BuildWorkspace, "MENU_BUILD_WORKSPACE_BUILD"c); const Action ACTION_WORKSPACE_BUILD = new Action(IDEActions.BuildWorkspace, "MENU_BUILD_WORKSPACE_BUILD"c);
@ -133,8 +133,8 @@ const Action ACTION_EDIT_PREFERENCES = (new Action(IDEActions.EditPreferences, "
const Action ACTION_HELP_ABOUT = new Action(IDEActions.HelpAbout, "MENU_HELP_ABOUT"c); const Action ACTION_HELP_ABOUT = new Action(IDEActions.HelpAbout, "MENU_HELP_ABOUT"c);
const Action ACTION_HELP_VIEW_HELP = new Action(IDEActions.HelpViewHelp, "MENU_HELP_VIEW_HELP"c); const Action ACTION_HELP_VIEW_HELP = new Action(IDEActions.HelpViewHelp, "MENU_HELP_VIEW_HELP"c);
const Action ACTION_HELP_DONATE = new Action(IDEActions.HelpDonate, "MENU_HELP_DONATE"c); const Action ACTION_HELP_DONATE = new Action(IDEActions.HelpDonate, "MENU_HELP_DONATE"c);
const Action ACTION_WINDOW_CLOSE_DOCUMENT = new Action(IDEActions.WindowCloseDocument, "MENU_WINDOW_CLOSE_DOCUMENT"c, null, KeyCode.KEY_W, KeyFlag.Control); const Action ACTION_WINDOW_CLOSE_DOCUMENT = new Action(IDEActions.WindowCloseDocument, "MENU_WINDOW_CLOSE_DOCUMENT"c, null, KeyCode.KEY_W, KeyFlag.Control).disableByDefault();
const Action ACTION_WINDOW_CLOSE_ALL_DOCUMENTS = new Action(IDEActions.WindowCloseAllDocuments, "MENU_WINDOW_CLOSE_ALL_DOCUMENTS"c); const Action ACTION_WINDOW_CLOSE_ALL_DOCUMENTS = new Action(IDEActions.WindowCloseAllDocuments, "MENU_WINDOW_CLOSE_ALL_DOCUMENTS"c).disableByDefault();
const Action ACTION_WINDOW_SHOW_HOME_SCREEN = new Action(IDEActions.WindowShowHomeScreen, "MENU_WINDOW_SHOW_HOME_SCREEN"c); const Action ACTION_WINDOW_SHOW_HOME_SCREEN = new Action(IDEActions.WindowShowHomeScreen, "MENU_WINDOW_SHOW_HOME_SCREEN"c);
const Action ACTION_CREATE_NEW_WORKSPACE = new Action(IDEActions.CreateNewWorkspace, "OPTION_CREATE_NEW_WORKSPACE"c); const Action ACTION_CREATE_NEW_WORKSPACE = new Action(IDEActions.CreateNewWorkspace, "OPTION_CREATE_NEW_WORKSPACE"c);

View File

@ -830,8 +830,6 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
return true; return true;
case IDEActions.FileExit: case IDEActions.FileExit:
case IDEActions.FileOpen: case IDEActions.FileOpen:
case IDEActions.WindowCloseDocument:
case IDEActions.WindowCloseAllDocuments:
case IDEActions.WindowShowHomeScreen: case IDEActions.WindowShowHomeScreen:
case IDEActions.FileOpenWorkspace: case IDEActions.FileOpenWorkspace:
// disable when background operation in progress // disable when background operation in progress
@ -893,6 +891,15 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
case IDEActions.FindInFiles: case IDEActions.FindInFiles:
a.state = currentWorkspace !is null ? ACTION_STATE_ENABLED : ACTION_STATE_DISABLE; a.state = currentWorkspace !is null ? ACTION_STATE_ENABLED : ACTION_STATE_DISABLE;
return true; return true;
case IDEActions.CloseWorkspace:
a.state = (currentWorkspace !is null && !_currentBackgroundOperation) ? ACTION_STATE_ENABLED : ACTION_STATE_DISABLE;
return true;
case IDEActions.WindowCloseDocument:
case IDEActions.WindowCloseAllDocuments:
case IDEActions.FileSaveAll:
case IDEActions.FileSaveAs:
a.state = (currentEditor !is null && !_currentBackgroundOperation) ? ACTION_STATE_ENABLED : ACTION_STATE_DISABLE;
return true;
default: default:
return super.handleActionStateRequest(a); return super.handleActionStateRequest(a);
} }
@ -926,8 +933,11 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
//debug { //debug {
// testDCDFailAfterThreadCreation(); // testDCDFailAfterThreadCreation();
//} //}
dstring msg = "DLangIDE\n(C) Vadim Lopatin, 2014-2017\nhttp://github.com/buggins/dlangide\n"
~ "IDE for D programming language written in D\nUses DlangUI library "
~ DLANGUI_VERSION ~ " for GUI"d;
window.showMessageBox(UIString.fromId("ABOUT"c) ~ " " ~ DLANGIDE_VERSION, window.showMessageBox(UIString.fromId("ABOUT"c) ~ " " ~ DLANGIDE_VERSION,
UIString.fromRaw("DLangIDE\n(C) Vadim Lopatin, 2014-2017\nhttp://github.com/buggins/dlangide\nIDE for D programming language written in D\nUses DlangUI library for GUI"d)); UIString.fromRaw(msg));
return true; return true;
case StandardAction.OpenUrl: case StandardAction.OpenUrl:
platform.openURL(a.stringParam); platform.openURL(a.stringParam);
@ -1382,7 +1392,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
if (!project) if (!project)
return; return;
Setting s = project.settings.copySettings(); Setting s = project.settings.copySettings();
SettingsDialog dlg = new SettingsDialog(UIString.fromRaw(project.name ~ " settings"d), window, s, createProjectSettingsPages()); SettingsDialog dlg = new SettingsDialog(UIString.fromRaw(project.name ~ " - "d ~ UIString.fromId("HEADER_PROJECT_SETTINGS"c)), window, s, createProjectSettingsPages());
dlg.dialogResult = delegate(Dialog dlg, const Action result) { dlg.dialogResult = delegate(Dialog dlg, const Action result) {
if (result.id == ACTION_APPLY.id) { if (result.id == ACTION_APPLY.id) {
//Log.d("settings after edit:\n", s.toJSON(true)); //Log.d("settings after edit:\n", s.toJSON(true));
@ -1664,6 +1674,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
} }
} }
void restoreUIStateOnStartup() {
window.restoreWindowState(_settings.uiState);
}
/// return false to prevent closing /// return false to prevent closing
bool onCanClose() { bool onCanClose() {
askForUnsavedEdits(delegate() { askForUnsavedEdits(delegate() {
@ -1677,6 +1691,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
} }
/// called when main window is closing /// called when main window is closing
void onWindowClose() { void onWindowClose() {
window.saveWindowState(_settings.uiState);
_settings.save();
Log.i("onWindowClose()"); Log.i("onWindowClose()");
stopExecution(); stopExecution();
} }

View File

@ -39,7 +39,7 @@ class NewFileDlg : Dialog {
ProjectFolder _folder; ProjectFolder _folder;
string[] _sourcePaths; string[] _sourcePaths;
this(IDEFrame parent, Project currentProject, ProjectFolder folder) { this(IDEFrame parent, Project currentProject, ProjectFolder folder) {
super(UIString.fromRaw("New source file"d), parent.window, super(UIString.fromId("OPTION_NEW_SOURCE_FILE"c), parent.window,
DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400); DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
_ide = parent; _ide = parent;
_icon = "dlangui-logo1"; _icon = "dlangui-logo1";
@ -68,7 +68,7 @@ class NewFileDlg : Dialog {
VerticalLayout { VerticalLayout {
margins: 5 margins: 5
layoutWidth: 50%; layoutHeight: fill layoutWidth: 50%; layoutHeight: fill
TextWidget { text: "Project template" } TextWidget { text: OPTION_PROJECT_TEMPLATE }
StringListWidget { StringListWidget {
id: projectTemplateList id: projectTemplateList
layoutWidth: wrap; layoutHeight: fill layoutWidth: wrap; layoutHeight: fill
@ -77,7 +77,7 @@ class NewFileDlg : Dialog {
VerticalLayout { VerticalLayout {
margins: 5 margins: 5
layoutWidth: 50%; layoutHeight: fill layoutWidth: 50%; layoutHeight: fill
TextWidget { text: "Template description" } TextWidget { text: OPTION_TEMPLATE_DESCR }
EditBox { EditBox {
id: templateDescription; readOnly: true id: templateDescription; readOnly: true
layoutWidth: fill; layoutHeight: fill layoutWidth: fill; layoutHeight: fill
@ -88,13 +88,13 @@ class NewFileDlg : Dialog {
margins: 5 margins: 5
colCount: 2 colCount: 2
layoutWidth: fill; layoutHeight: wrap layoutWidth: fill; layoutHeight: wrap
TextWidget { text: "Name" } TextWidget { text: NAME }
EditLine { id: edName; text: "newfile"; layoutWidth: fill } EditLine { id: edName; text: "newfile"; layoutWidth: fill }
TextWidget { text: "Location" } TextWidget { text: LOCATION }
DirEditLine { id: edLocation; layoutWidth: fill } DirEditLine { id: edLocation; layoutWidth: fill }
TextWidget { text: "Module name" } TextWidget { text: OPTION_MODULE_NAME }
EditLine { id: edModuleName; text: ""; layoutWidth: fill; readOnly: true } EditLine { id: edModuleName; text: ""; layoutWidth: fill; readOnly: true }
TextWidget { text: "File path" } TextWidget { text: OPTION_FILE_PATH }
EditLine { id: edFilePath; text: ""; layoutWidth: fill; readOnly: true } EditLine { id: edFilePath; text: ""; layoutWidth: fill; readOnly: true }
} }
TextWidget { id: statusText; text: ""; layoutWidth: fill; textColor: #FF0000 } TextWidget { id: statusText; text: ""; layoutWidth: fill; textColor: #FF0000 }
@ -119,7 +119,7 @@ class NewFileDlg : Dialog {
_edLocation.filetypeIcons["dub.json"] = "project-d"; _edLocation.filetypeIcons["dub.json"] = "project-d";
_edLocation.filetypeIcons["package.json"] = "project-d"; _edLocation.filetypeIcons["package.json"] = "project-d";
_edLocation.filetypeIcons[".dlangidews"] = "project-development"; _edLocation.filetypeIcons[".dlangidews"] = "project-development";
_edLocation.addFilter(FileFilterEntry(UIString.fromRaw("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini;*.dt")); _edLocation.addFilter(FileFilterEntry(UIString.fromId("IDE_FILES"c), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini;*.dt"));
_edLocation.caption = "Select directory"d; _edLocation.caption = "Select directory"d;
_edFileName.editorAction.connect(&onEditorAction); _edFileName.editorAction.connect(&onEditorAction);
@ -304,11 +304,11 @@ class NewFileDlg : Dialog {
Action newaction = action.clone(); Action newaction = action.clone();
if (action.id == IDEActions.FileNew) { if (action.id == IDEActions.FileNew) {
if (!validate()) { if (!validate()) {
window.showMessageBox(UIString.fromRaw("Error"d), UIString.fromRaw("Invalid parameters")); window.showMessageBox(UIString.fromId("ERROR"c), UIString.fromId("ERROR_INVALID_PARAMETERS"c));
return; return;
} }
if (!createItem()) { if (!createItem()) {
window.showMessageBox(UIString.fromRaw("Error"d), UIString.fromRaw("Failed to create project item")); window.showMessageBox(UIString.fromId("ERROR"c), UIString.fromId("ERROR_INVALID_PARAMETERS"c));
return; return;
} }
newaction.objectParam = _result; newaction.objectParam = _result;

View File

@ -38,7 +38,7 @@ class NewProjectDlg : Dialog {
IDEFrame _ide; IDEFrame _ide;
this(IDEFrame parent, bool newWorkspace, Workspace currentWorkspace, string dir) { this(IDEFrame parent, bool newWorkspace, Workspace currentWorkspace, string dir) {
super(newWorkspace ? UIString.fromRaw("New Workspace"d) : UIString.fromRaw("New Project"d), parent.window, super(newWorkspace ? UIString.fromId("OPTION_NEW_WORKSPACE"c) : UIString.fromId("OPTION_NEW_PROJECT"c), parent.window,
DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400); DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
_ide = parent; _ide = parent;
_icon = "dlangui-logo1"; _icon = "dlangui-logo1";
@ -63,7 +63,7 @@ class NewProjectDlg : Dialog {
VerticalLayout { VerticalLayout {
margins: 5 margins: 5
layoutWidth: 25%; layoutHeight: fill layoutWidth: 25%; layoutHeight: fill
TextWidget { text: "Project template" } TextWidget { text: OPTION_PROJECT_TEMPLATE }
StringListWidget { StringListWidget {
id: projectTemplateList id: projectTemplateList
layoutWidth: wrap; layoutHeight: fill layoutWidth: wrap; layoutHeight: fill
@ -72,7 +72,7 @@ class NewProjectDlg : Dialog {
VerticalLayout { VerticalLayout {
margins: 5 margins: 5
layoutWidth: 40%; layoutHeight: fill layoutWidth: 40%; layoutHeight: fill
TextWidget { text: "Template description" } TextWidget { text: OPTION_TEMPLATE_DESCR }
EditBox { EditBox {
id: templateDescription; readOnly: true id: templateDescription; readOnly: true
layoutWidth: fill; layoutHeight: fill layoutWidth: fill; layoutHeight: fill
@ -81,7 +81,7 @@ class NewProjectDlg : Dialog {
VerticalLayout { VerticalLayout {
layoutWidth: 35%; layoutHeight: fill layoutWidth: 35%; layoutHeight: fill
margins: 5 margins: 5
TextWidget { text: "Directory layout" } TextWidget { text: OPTION_DIRECTORY_LAYOUT }
EditBox { EditBox {
id: directoryLayout; readOnly: true id: directoryLayout; readOnly: true
layoutWidth: fill; layoutHeight: fill layoutWidth: fill; layoutHeight: fill
@ -93,16 +93,16 @@ class NewProjectDlg : Dialog {
colCount: 2 colCount: 2
layoutWidth: fill; layoutHeight: wrap layoutWidth: fill; layoutHeight: wrap
TextWidget { text: "" } TextWidget { text: "" }
CheckBox { id: cbCreateWorkspace; text: "Create new solution"; checked: true } CheckBox { id: cbCreateWorkspace; text: OPTION_CREATE_NEW_SOLUTION; checked: true }
TextWidget { text: "Workspace name" } TextWidget { text: OPTION_WORKSPACE_NAME }
EditLine { id: edWorkspaceName; text: "newworkspace"; layoutWidth: fill } EditLine { id: edWorkspaceName; text: "newworkspace"; layoutWidth: fill }
TextWidget { text: "" } TextWidget { text: "" }
CheckBox { id: cbCreateWorkspaceSubdir; text: "Create subdirectory for workspace"; checked: true } CheckBox { id: cbCreateWorkspaceSubdir; text: OPTION_CREATE_SUBDIRECTORY_FOR_WORKSPACE; checked: true }
TextWidget { text: "Project name" } TextWidget { text: OPTION_PROJECT_NAME }
EditLine { id: edProjectName; text: "newproject"; layoutWidth: fill } EditLine { id: edProjectName; text: "newproject"; layoutWidth: fill }
TextWidget { text: "" } TextWidget { text: "" }
CheckBox { id: cbCreateSubdir; text: "Create subdirectory for project"; checked: true } CheckBox { id: cbCreateSubdir; text: OPTION_CREATE_SUBDIRECTORY_FOR_PROJECT; checked: true }
TextWidget { text: "Location" } TextWidget { text: LOCATION }
DirEditLine { id: edLocation; layoutWidth: fill } DirEditLine { id: edLocation; layoutWidth: fill }
} }
TextWidget { id: statusText; text: ""; layoutWidth: fill } TextWidget { id: statusText; text: ""; layoutWidth: fill }
@ -130,8 +130,8 @@ class NewProjectDlg : Dialog {
_edLocation.filetypeIcons["dub.json"] = "project-d"; _edLocation.filetypeIcons["dub.json"] = "project-d";
_edLocation.filetypeIcons["package.json"] = "project-d"; _edLocation.filetypeIcons["package.json"] = "project-d";
_edLocation.filetypeIcons[".dlangidews"] = "project-development"; _edLocation.filetypeIcons[".dlangidews"] = "project-development";
_edLocation.addFilter(FileFilterEntry(UIString.fromRaw("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini")); _edLocation.addFilter(FileFilterEntry(UIString.fromId("IDE_FILES"c), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
_edLocation.caption = "Select directory"d; _edLocation.caption = UIString.fromId("MSG_SELECT_DIR"c);
if (_currentWorkspace) { if (_currentWorkspace) {
_workspaceName = toUTF8(_currentWorkspace.name); _workspaceName = toUTF8(_currentWorkspace.name);
@ -273,14 +273,14 @@ class NewProjectDlg : Dialog {
if (action.id == IDEActions.FileNewWorkspace || action.id == IDEActions.FileNewProject) { if (action.id == IDEActions.FileNewWorkspace || action.id == IDEActions.FileNewProject) {
if (!exists(_location)) { if (!exists(_location)) {
// show message box with OK and CANCEL buttons, cancel by default, and handle its result // show message box with OK and CANCEL buttons, cancel by default, and handle its result
window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw("The target location does not exist.\nDo you want to create the target directory?"), [ACTION_YES, ACTION_CANCEL], 1, delegate(const Action a) { window.showMessageBox(UIString.fromId("ERROR_CANNOT_CREATE_PROJECT"c), UIString.fromId("QUESTION_CREATE_DIR"c), [ACTION_YES, ACTION_CANCEL], 1, delegate(const Action a) {
if (a.id == StandardAction.Yes) { if (a.id == StandardAction.Yes) {
try { try {
mkdirRecurse(_location); mkdirRecurse(_location);
close(action); close(action);
} catch (Exception e) { } catch (Exception e) {
setError("Cannot create target location"); setError("Cannot create target location");
window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw(getError())); window.showMessageBox(UIString.fromId("ERROR_CANNOT_CREATE_PROJECT"c), UIString.fromRaw(getError()));
} }
} }
return true; return true;
@ -288,11 +288,11 @@ class NewProjectDlg : Dialog {
return; return;
} }
if (!validate()) { if (!validate()) {
window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw(getError())); window.showMessageBox(UIString.fromId("ERROR_CANNOT_CREATE_PROJECT"c), UIString.fromRaw(getError()));
return; return;
} }
if (!createProject()) { if (!createProject()) {
window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw("Failed to create project")); window.showMessageBox(UIString.fromId("ERROR_CANNOT_CREATE_PROJECT"c), UIString.fromId("ERROR_FAILED_CREATE_PROJECT"c));
return; return;
} }
newaction.objectParam = _result; newaction.objectParam = _result;
@ -496,8 +496,8 @@ extern (C) int UIAppMain(string[] args) {
}; };
// show message box with content of editors // show message box with content of editors
window.mainWidget.childById!Button("btnOk").click = delegate(Widget w) { window.mainWidget.childById!Button("btnOk").click = delegate(Widget w) {
window.showMessageBox(UIString.fromRaw("Ok button pressed"d), window.showMessageBox(UIString.fromId("MSG_OK_BUTTON"c),
UIString.fromRaw("Editors content\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text)); UIString.fromId("EDITOR_CONTENT"c) ~ "\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text);
return true; return true;
}; };

View File

@ -13,7 +13,7 @@ public import dlangide.workspace.workspacesettings;
StringListValue[] createFaceList(bool monospaceFirst) { StringListValue[] createFaceList(bool monospaceFirst) {
StringListValue[] faces; StringListValue[] faces;
faces.assumeSafeAppend(); faces.assumeSafeAppend();
faces ~= StringListValue("Default", "OPTION_DEFAULT"c); faces ~= StringListValue("Default", UIString.fromId("OPTION_DEFAULT"c));
import dlangui.graphics.fonts; import dlangui.graphics.fonts;
import std.utf : toUTF32; import std.utf : toUTF32;
FontFaceProps[] allFaces = FontManager.instance.getFaces(); FontFaceProps[] allFaces = FontManager.instance.getFaces();
@ -153,7 +153,7 @@ SettingsPage createSettingsPages() {
SettingsPage terminal = dlang.addChild("dlang/terminal", UIString.fromId("OPTION_TERMINAL"c)); SettingsPage terminal = dlang.addChild("dlang/terminal", UIString.fromId("OPTION_TERMINAL"c));
terminal.addExecutableFileNameEdit("dlang/terminal/executable", UIString.fromId("OPTION_TERMINAL_EXECUTABLE"c), "xterm"); terminal.addExecutableFileNameEdit("dlang/terminal/executable", UIString.fromId("OPTION_TERMINAL_EXECUTABLE"c), "xterm");
SettingsPage toolchains = dlang.addChild("dlang/toolchains", UIString.fromId("OPTION_TOOLCHANS"c)); SettingsPage toolchains = dlang.addChild("dlang/toolchains", UIString.fromId("OPTION_TOOLCHAINS"c));
SettingsPage dmdtoolchain = toolchains.addChild("dlang/toolchains/dmd", UIString.fromRaw("DMD"d)); SettingsPage dmdtoolchain = toolchains.addChild("dlang/toolchains/dmd", UIString.fromRaw("DMD"d));
dmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/dmd/executable", UIString.fromId("OPTION_DMD_EXECUTABLE"c), "dmd"); dmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/dmd/executable", UIString.fromId("OPTION_DMD_EXECUTABLE"c), "dmd");
dmdtoolchain.addStringEdit("dlang/toolchains/dmd/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), ""); dmdtoolchain.addStringEdit("dlang/toolchains/dmd/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
@ -174,27 +174,27 @@ SettingsPage createSettingsPages() {
SettingsPage createProjectSettingsPages() { SettingsPage createProjectSettingsPages() {
SettingsPage res = new SettingsPage("", UIString.fromRaw(""d)); SettingsPage res = new SettingsPage("", UIString.fromRaw(""d));
SettingsPage build = res.addChild("build", UIString.fromRaw("Build"d)); SettingsPage build = res.addChild("build", UIString.fromId("OPTION_BUILD"c));
build.addStringComboBox("build/toolchain", UIString.fromRaw("Toolchain"d), [ build.addStringComboBox("build/toolchain", UIString.fromId("OPTION_TOOLCHAIN"c), [
StringListValue("default", "Default"d), StringListValue("default", UIString.fromId("OPTION_DEFAULT"c)),
StringListValue("dmd", "DMD"d), StringListValue("dmd", "DMD"d),
StringListValue("ldc", "LDC"d), StringListValue("ldc", "LDC"d),
StringListValue("ldmd", "LDMD"d), StringListValue("ldmd", "LDMD"d),
StringListValue("gdc", "GDC"d)]); StringListValue("gdc", "GDC"d)]);
build.addStringComboBox("build/arch", UIString.fromRaw("Architecture"d), [ build.addStringComboBox("build/arch", UIString.fromId("OPTION_ARCHITECTURE"c), [
StringListValue("default", "Default"d), StringListValue("default", UIString.fromId("OPTION_DEFAULT"c)),
StringListValue("x86", "x86"d), StringListValue("x86", "x86"d),
StringListValue("x86_64", "x86_64"d), StringListValue("x86_64", "x86_64"d),
StringListValue("arm", "arm"d), StringListValue("arm", "arm"d),
StringListValue("arm64", "arm64"d), StringListValue("arm64", "arm64"d),
]); ]);
build.addCheckbox("build/verbose", UIString.fromRaw("Verbose"d), true); build.addCheckbox("build/verbose", UIString.fromId("OPTION_VERBOSE"c), true);
build.addStringEdit("build/dub_additional_params", UIString.fromRaw("DUB additional params"d), ""); build.addStringEdit("build/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
SettingsPage dbg = res.addChild("debug", UIString.fromRaw("Run and Debug"d)); SettingsPage dbg = res.addChild("debug", UIString.fromId("OPTION_RUN_DEBUG"c));
dbg.addStringEdit("debug/run_args", UIString.fromRaw("Command line args"d), ""); dbg.addStringEdit("debug/run_args", UIString.fromId("OPTION_COMMAND_LINE"c), "");
dbg.addDirNameEdit("debug/working_dir", UIString.fromRaw("Working directory"d), ""); dbg.addDirNameEdit("debug/working_dir", UIString.fromId("OPTION_WORKING_DIR"c), "");
dbg.addCheckbox("debug/external_console", UIString.fromRaw("Run in external console"d), false); dbg.addCheckbox("debug/external_console", UIString.fromId("OPTION_RUN_IN_EXTERNAL_CONSOLE"c), false);
return res; return res;
} }

View File

@ -302,5 +302,10 @@ class IDESettings : SettingsFile {
Setting obj =_setting.objectByPath("common", true); Setting obj =_setting.objectByPath("common", true);
obj.setBoolean("autoOpenLastProject", value); obj.setBoolean("autoOpenLastProject", value);
} }
/// for saving window state, position, and other UI states
@property Setting uiState() {
return _setting.objectByPath("uiState", true);
}
} }

View File

@ -1 +1 @@
v0.7.77 v0.7.79

View File

@ -21,6 +21,11 @@ EXIT=Exit
ALL_FILES=All files ALL_FILES=All files
SOURCE_FILES=Source files SOURCE_FILES=Source files
WORKSPACE_AND_PROJECT_FILES=Workspace and project files WORKSPACE_AND_PROJECT_FILES=Workspace and project files
IDE_FILES=DlangIDE files
EDITOR_CONTENT=Editors content
LOCATION=Location
NAME=Name
MENU_FILE=&File MENU_FILE=&File
MENU_FILE_NEW=&Create MENU_FILE_NEW=&Create
@ -128,21 +133,31 @@ HEADER_OPEN_WORKSPACE_OR_PROJECT=Open Workspace or Project
HEADER_OPEN_TEXT_FILE=Open Text File HEADER_OPEN_TEXT_FILE=Open Text File
HEADER_CLOSE_FILE=Close file HEADER_CLOSE_FILE=Close file
HEADER_CLOSE_TAB=Close tab HEADER_CLOSE_TAB=Close tab
HEADER_PROJECT_SETTINGS=project settings
HEADER_REMOVE_FILE=Remove file
HEADER_SAVE_FILE_AS=Save File As HEADER_SAVE_FILE_AS=Save File As
OPTION_ADD_TO_CURRENT_WORKSPACE=Add to current workspace OPTION_ADD_TO_CURRENT_WORKSPACE=Add to current workspace
OPTION_ARCHITECTURE=Architecture
OPTION_AUTO_OPEN_LAST_PROJECT=Auto open last project OPTION_AUTO_OPEN_LAST_PROJECT=Auto open last project
OPTION_BUILD=Build
OPTION_COMMAND_LINE=Command line args
OPTION_COMMON=Common OPTION_COMMON=Common
OPTION_CREATE_NEW_SOLUTION=Create new solution
OPTION_CREATE_NEW_WORKSPACE=Create new workspace OPTION_CREATE_NEW_WORKSPACE=Create new workspace
OPTION_CREATE_SUBDIRECTORY_FOR_PROJECT=Create subdirectory for project
OPTION_CREATE_SUBDIRECTORY_FOR_WORKSPACE=Create subdirectory for workspace
OPTION_DARK=Dark OPTION_DARK=Dark
OPTION_DEBUGGER=Debugger OPTION_DEBUGGER=Debugger
OPTION_DEBUGGER_EXECUTABLE=Debugger executable OPTION_DEBUGGER_EXECUTABLE=Debugger executable
OPTION_DEFAULT=Default OPTION_DEFAULT=Default
OPTION_DIRECTORY_LAYOUT=Directory layout
OPTION_DMD_EXECUTABLE=DMD executable OPTION_DMD_EXECUTABLE=DMD executable
OPTION_DUB_ADDITIONAL_PARAMS=DUB additional params OPTION_DUB_ADDITIONAL_PARAMS=DUB additional params
OPTION_DUB_EXECUTABLE=DUB executable OPTION_DUB_EXECUTABLE=DUB executable
OPTION_EDITORS=Editors OPTION_EDITORS=Editors
OPTION_INTERFACE=Interface OPTION_INTERFACE=Interface
OPTION_FILE_PATH=File path
OPTION_FONT_ANTIALIASING=Minimum font size for antialiasing OPTION_FONT_ANTIALIASING=Minimum font size for antialiasing
OPTION_FONT_ANTIALIASING_ALWAYS_OFF=Always OFF OPTION_FONT_ANTIALIASING_ALWAYS_OFF=Always OFF
OPTION_FONT_ANTIALIASING_ALWAYS_ON=Always ON OPTION_FONT_ANTIALIASING_ALWAYS_ON=Always ON
@ -158,26 +173,45 @@ OPTION_GDC_EXECUTABLE=GDC executable
OPTION_LANGUAGE=Language OPTION_LANGUAGE=Language
OPTION_LDC2_EXECUTABLE=LDC2 executable OPTION_LDC2_EXECUTABLE=LDC2 executable
OPTION_LDMD2_EXECUTABLE=LDMD2 executable OPTION_LDMD2_EXECUTABLE=LDMD2 executable
OPTION_MODULE_NAME=Module name
OPTION_NEW_PROJECT=New project
OPTION_NEW_SOURCE_FILE=New source file
OPTION_NEW_WORKSPACE=New workspace
OPTION_PROJECT_NAME=Project name
OPTION_PROJECT_TEMPLATE=Project template
OPTION_RDMD_ADDITIONAL_PARAMS=rdmd additional params OPTION_RDMD_ADDITIONAL_PARAMS=rdmd additional params
OPTION_RDMD_EXECUTABLE=rdmd executable OPTION_RDMD_EXECUTABLE=rdmd executable
OPTION_RUN_IN_EXTERNAL_CONSOLE=Run in external console
OPTION_RUN_DEBUG=Run and Debug
OPTION_SHOW_SPACES=Show white space marks OPTION_SHOW_SPACES=Show white space marks
OPTION_SHOW_TABS=Show tab position marks OPTION_SHOW_TABS=Show tab position marks
OPTION_SMART_INDENTS=Smart indents OPTION_SMART_INDENTS=Smart indents
OPTION_SMART_INDENTS_PASTE=Smart indent after paste OPTION_SMART_INDENTS_PASTE=Smart indent after paste
OPTION_TAB=Tab size OPTION_TAB=Tab size
OPTION_TEMPLATE_DESCR=Template description
OPTION_TEXT_EDITORS=Text Editors OPTION_TEXT_EDITORS=Text Editors
OPTION_TERMINAL=Terminal OPTION_TERMINAL=Terminal
OPTION_TERMINAL_EXECUTABLE=Terminal executable OPTION_TERMINAL_EXECUTABLE=Terminal executable
OPTION_THEME=Theme OPTION_THEME=Theme
OPTION_TOOLCHANS=Toolchains OPTION_TOOLCHAIN=Toolchain
OPTION_TOOLCHAINS=Toolchains
OPTION_VERBOSE=Verbose
OPTION_WORKING_DIR=Working directory
OPTION_WORKSPACE_NAME=Workspace name
OPTION_USE_SPACES=Use spaces for tabs OPTION_USE_SPACES=Use spaces for tabs
ERROR=Error ERROR=Error
ERROR_CANNOT_CREATE_PROJECT=Cannot create project
ERROR_CANNOT_DEBUG_PROJECT=Cannot debug project ERROR_CANNOT_DEBUG_PROJECT=Cannot debug project
ERROR_CANNOT_FIND_EXEC=Cannot find executable file
ERROR_CANNOT_RUN_PROJECT=Cannot run project
ERROR_FAILED_CREATE_PROJECT=Failed to create project
ERROR_STARTUP_PROJECT_ABSENT=Startup project is not specified ERROR_STARTUP_PROJECT_ABSENT=Startup project is not specified
ERROR_INVALID_NUMBER=Invalid number ERROR_INVALID_NUMBER=Invalid number
ERROR_INVALID_PARAMETERS=Invalid parameters
ERROR_INVALID_WORKSPACE_FILE=Invalid workspace file ERROR_INVALID_WORKSPACE_FILE=Invalid workspace file
ERROR_INVALID_WS_OR_PROJECT_FILE=This file is not a valid workspace or project file ERROR_INVALID_WS_OR_PROJECT_FILE=This file is not a valid workspace or project file
ERROR_NO_DEBUGGER=No debugger executable specified in settings
ERROR_NO_SUCH_LINE=No such line ERROR_NO_SUCH_LINE=No such line
ERROR_OPEN_FILE=File open error ERROR_OPEN_FILE=File open error
ERROR_OPEN_PROJECT=Cannot open project ERROR_OPEN_PROJECT=Cannot open project
@ -188,12 +222,16 @@ ERROR_OPENING_WORKSPACE=Error occured while opening workspace
MSG_FILE_CONTENT_CHANGED=Content of this file has been changed. MSG_FILE_CONTENT_CHANGED=Content of this file has been changed.
MSG_TAB_CONTENT_CHANGED=Content of tab has been changed MSG_TAB_CONTENT_CHANGED=Content of tab has been changed
MSG_OK_BUTTON=Ok button pressed
MSG_OPEN_PROJECT=Open project MSG_OPEN_PROJECT=Open project
MSG_PROJECT_ALREADY_OPENED=Project is already in workspace MSG_PROJECT_ALREADY_OPENED=Project is already in workspace
MSG_SELECT_DIR=Select directory
MSG_STARTING=Starting MSG_STARTING=Starting
MSG_STARTING_DEBUGGER=Starting debugger for MSG_STARTING_DEBUGGER=Starting debugger for
MSG_TRY_OPEN_PROJECT=Trying to open project from MSG_TRY_OPEN_PROJECT=Trying to open project from
DEBUGGING=debugging... DEBUGGING=debugging...
RUNNING=running... RUNNING=running...
QUESTION_CREATE_DIR=The target location does not exist. Do you want to create the target directory?
QUESTION_NEW_WORKSPACE=Do you want to create new workspace or use current one? QUESTION_NEW_WORKSPACE=Do you want to create new workspace or use current one?
QUESTION_REMOVE_FILE=Do you want to remove file

View File

@ -21,12 +21,17 @@ EXIT=Выход
ALL_FILES=Все файлы ALL_FILES=Все файлы
SOURCE_FILES=Исходники SOURCE_FILES=Исходники
WORKSPACE_AND_PROJECT_FILES=Файлы проектов и раб. прост. WORKSPACE_AND_PROJECT_FILES=Файлы проектов и раб. прост.
IDE_FILES=Файлы DlangIDE
EDITOR_CONTENT=Содержимое редактора
LOCATION=Место
NAME=Имя
MENU_FILE=&Файл MENU_FILE=&Файл
MENU_FILE_NEW=&Создать MENU_FILE_NEW=&Создать
MENU_FILE_NEW_SOURCE_FILE=Новый файл MENU_FILE_NEW_SOURCE_FILE=Новый файл
MENU_FILE_NEW_PROJECT=Новый проект MENU_FILE_NEW_PROJECT=Новый проект
MENU_FILE_NEW_WORKSPACE=Новый рабочее пространство MENU_FILE_NEW_WORKSPACE=Новое рабочее пространство
MENU_FILE_OPEN=&Открыть файл MENU_FILE_OPEN=&Открыть файл
MENU_FILE_OPEN_WORKSPACE=Открыть проект или рабочее пространство... MENU_FILE_OPEN_WORKSPACE=Открыть проект или рабочее пространство...
MENU_FILE_OPEN_RECENT=Открыть недавние MENU_FILE_OPEN_RECENT=Открыть недавние
@ -128,21 +133,31 @@ HEADER_OPEN_WORKSPACE_OR_PROJECT=Открыть рабочее простран
HEADER_OPEN_TEXT_FILE=Открыть текстовый файл HEADER_OPEN_TEXT_FILE=Открыть текстовый файл
HEADER_CLOSE_FILE=Закрыть файл HEADER_CLOSE_FILE=Закрыть файл
HEADER_CLOSE_TAB=Закрыть вкладку HEADER_CLOSE_TAB=Закрыть вкладку
HEADER_PROJECT_SETTINGS=настройки проекта
HEADER_REMOVE_FILE=Удалить файл
HEADER_SAVE_FILE_AS=Сохранить как HEADER_SAVE_FILE_AS=Сохранить как
OPTION_ADD_TO_CURRENT_WORKSPACE=Добавить в текущее пр-во OPTION_ADD_TO_CURRENT_WORKSPACE=Добавить в текущее пр-во
OPTION_ARCHITECTURE=Архитектура
OPTION_AUTO_OPEN_LAST_PROJECT=Авт.открывать последний проект OPTION_AUTO_OPEN_LAST_PROJECT=Авт.открывать последний проект
OPTION_BUILD=Сборка
OPTION_COMMAND_LINE=Аргументы командной строки
OPTION_COMMON=Общие OPTION_COMMON=Общие
OPTION_CREATE_NEW_SOLUTION=Создать новое решение
OPTION_CREATE_NEW_WORKSPACE=Создать новое пр-во OPTION_CREATE_NEW_WORKSPACE=Создать новое пр-во
OPTION_CREATE_SUBDIRECTORY_FOR_PROJECT=Создать подкаталог для проекта
OPTION_CREATE_SUBDIRECTORY_FOR_WORKSPACE=Создать подкаталог для раб.пространства
OPTION_DARK=Темная OPTION_DARK=Темная
OPTION_DEBUGGER=Отладчик OPTION_DEBUGGER=Отладчик
OPTION_DEBUGGER_EXECUTABLE=Исполняемый файл отладчика OPTION_DEBUGGER_EXECUTABLE=Исполняемый файл отладчика
OPTION_DEFAULT=По умолчанию OPTION_DEFAULT=По умолчанию
OPTION_DIRECTORY_LAYOUT=Структура каталога
OPTION_DMD_EXECUTABLE=Исполняемый файл DMD OPTION_DMD_EXECUTABLE=Исполняемый файл DMD
OPTION_DUB_ADDITIONAL_PARAMS=Доп.параметры DUB OPTION_DUB_ADDITIONAL_PARAMS=Доп.параметры DUB
OPTION_DUB_EXECUTABLE=Исполняемый файл DUB OPTION_DUB_EXECUTABLE=Исполняемый файл DUB
OPTION_EDITORS=Редакторы OPTION_EDITORS=Редакторы
OPTION_INTERFACE=Внешний вид OPTION_INTERFACE=Внешний вид
OPTION_FILE_PATH=Путь к файлу
OPTION_FONT_ANTIALIASING=Минимальный размер шрифта для сглаживания OPTION_FONT_ANTIALIASING=Минимальный размер шрифта для сглаживания
OPTION_FONT_ANTIALIASING_ALWAYS_OFF=Всегда выключено OPTION_FONT_ANTIALIASING_ALWAYS_OFF=Всегда выключено
OPTION_FONT_ANTIALIASING_ALWAYS_ON=Всегда включено OPTION_FONT_ANTIALIASING_ALWAYS_ON=Всегда включено
@ -157,26 +172,45 @@ OPTION_GDC_EXECUTABLE=Исполняемый файл GDC
OPTION_LANGUAGE=Язык OPTION_LANGUAGE=Язык
OPTION_LDC2_EXECUTABLE=Исполняемый файл LDC2 OPTION_LDC2_EXECUTABLE=Исполняемый файл LDC2
OPTION_LDMD2_EXECUTABLE=Исполняемый файл LDMD2 OPTION_LDMD2_EXECUTABLE=Исполняемый файл LDMD2
OPTION_MODULE_NAME=Имя модуля
OPTION_NEW_PROJECT=Новый проект
OPTION_NEW_SOURCE_FILE=Новый исходный файл
OPTION_NEW_WORKSPACE=Новое рабочее пространство
OPTION_PROJECT_NAME=Имя проекта
OPTION_PROJECT_TEMPLATE=Шаблон проекта
OPTION_RDMD_ADDITIONAL_PARAMS=Доп.параметры rdmd OPTION_RDMD_ADDITIONAL_PARAMS=Доп.параметры rdmd
OPTION_RDMD_EXECUTABLE=Исполняемый файл rdmd OPTION_RDMD_EXECUTABLE=Исполняемый файл rdmd
OPTION_RUN_IN_EXTERNAL_CONSOLE=Запустить во внешней консоли
OPTION_RUN_DEBUG=Запуск и отладка
OPTION_SHOW_SPACES=Показать пробелы OPTION_SHOW_SPACES=Показать пробелы
OPTION_SHOW_TABS=Показать табуляцию OPTION_SHOW_TABS=Показать табуляцию
OPTION_SMART_INDENTS=Умные отступы OPTION_SMART_INDENTS=Умные отступы
OPTION_SMART_INDENTS_PASTE=Умные отступы после вставки OPTION_SMART_INDENTS_PASTE=Умные отступы после вставки
OPTION_TAB=Размер Tab OPTION_TAB=Размер Tab
OPTION_TEMPLATE_DESCR=Описание шаблона
OPTION_TEXT_EDITORS=Текстовые редакторы OPTION_TEXT_EDITORS=Текстовые редакторы
OPTION_TERMINAL=Командная строка OPTION_TERMINAL=Командная строка
OPTION_TERMINAL_EXECUTABLE=Исполняемый файл терминала OPTION_TERMINAL_EXECUTABLE=Исполняемый файл терминала
OPTION_THEME=Тема оформления OPTION_THEME=Тема оформления
OPTION_TOOLCHANS=Наборы инструментов OPTION_TOOLCHAIN=Инструмент
OPTION_TOOLCHAINS=Наборы инструментов
OPTION_VERBOSE=Показать подробности
OPTION_WORKING_DIR=Рабочий каталог
OPTION_WORKSPACE_NAME=Имя рабочего пространства
OPTION_USE_SPACES=Использовать пробелы вместо табуляции OPTION_USE_SPACES=Использовать пробелы вместо табуляции
ERROR=Ошибка ERROR=Ошибка
ERROR_CANNOT_CREATE_PROJECT=Не могу создать проект
ERROR_CANNOT_DEBUG_PROJECT=Невозможно отлаживать проект ERROR_CANNOT_DEBUG_PROJECT=Невозможно отлаживать проект
ERROR_CANNOT_FIND_EXEC=Не могу найти исполняемый файл
ERROR_CANNOT_RUN_PROJECT=Невозможно запустить проект
ERROR_FAILED_CREATE_PROJECT=Ошибка создания проекта
ERROR_STARTUP_PROJECT_ABSENT=Стартовый проект не указан ERROR_STARTUP_PROJECT_ABSENT=Стартовый проект не указан
ERROR_INVALID_NUMBER=Неверное число ERROR_INVALID_NUMBER=Неверное число
ERROR_INVALID_PARAMETERS=Неверные параметры
ERROR_INVALID_WORKSPACE_FILE=Неверный файл раб.пространства ERROR_INVALID_WORKSPACE_FILE=Неверный файл раб.пространства
ERROR_INVALID_WS_OR_PROJECT_FILE=Файл не является ни файлом раб.пространства, ни проектным ERROR_INVALID_WS_OR_PROJECT_FILE=Файл не является ни файлом раб.пространства, ни проектным
ERROR_NO_DEBUGGER=Отладчика нет в настройках
ERROR_NO_SUCH_LINE=Строка не существует ERROR_NO_SUCH_LINE=Строка не существует
ERROR_OPEN_FILE=Невозможно открыть файл ERROR_OPEN_FILE=Невозможно открыть файл
ERROR_OPEN_PROJECT=Невозможно открыть проект ERROR_OPEN_PROJECT=Невозможно открыть проект
@ -187,12 +221,16 @@ ERROR_OPENING_WORKSPACE=Ошибка в ходе открытия рабочег
MSG_FILE_CONTENT_CHANGED=Содержимое этого файла изменено. MSG_FILE_CONTENT_CHANGED=Содержимое этого файла изменено.
MSG_TAB_CONTENT_CHANGED=Содержимое вкладки изменено MSG_TAB_CONTENT_CHANGED=Содержимое вкладки изменено
MSG_OK_BUTTON=Нажата кнопка Ok
MSG_OPEN_PROJECT=Открыть проект MSG_OPEN_PROJECT=Открыть проект
MSG_PROJECT_ALREADY_OPENED=Проект уже в рабочем пространстве MSG_PROJECT_ALREADY_OPENED=Проект уже в рабочем пространстве
MSG_SELECT_DIR=Выберите каталог
MSG_STARTING=Выполняем MSG_STARTING=Выполняем
MSG_STARTING_DEBUGGER=Стартуем отладчик для MSG_STARTING_DEBUGGER=Стартуем отладчик для
MSG_TRY_OPEN_PROJECT=Попытка открыть проект из MSG_TRY_OPEN_PROJECT=Попытка открыть проект из
DEBUGGING=отладка... DEBUGGING=отладка...
RUNNING=выполнение... RUNNING=выполнение...
QUESTION_CREATE_DIR=Целевой каталог не существует. Желаете создать?
QUESTION_NEW_WORKSPACE=Открыть новое рабочее пространство или использовать текущее? QUESTION_NEW_WORKSPACE=Открыть новое рабочее пространство или использовать текущее?
QUESTION_REMOVE_FILE=Вы действительно хотите удалить файл