new project creation fixes

This commit is contained in:
Vadim Lopatin 2015-12-08 11:01:56 +03:00
parent 0fb64e33bc
commit b1a05fc758
2 changed files with 56 additions and 11 deletions

View File

@ -546,7 +546,7 @@ class IDEFrame : AppFrame {
UIString caption; UIString caption;
caption = "Open Text File"d; caption = "Open Text File"d;
FileDialog dlg = createFileDialog(caption); FileDialog dlg = createFileDialog(caption);
dlg.addFilter(FileFilterEntry(UIString("Source files"d), "*.d;*.dd;*.ddoc;*.dh;*.json;*.xml;*.ini")); dlg.addFilter(FileFilterEntry(UIString("Source files"d), "*.d;*.dd;*.ddoc;*.di;*.dh;*.json;*.xml;*.ini"));
dlg.addFilter(FileFilterEntry(UIString("All files"d), "*.*")); dlg.addFilter(FileFilterEntry(UIString("All files"d), "*.*"));
dlg.dialogResult = delegate(Dialog dlg, const Action result) { dlg.dialogResult = delegate(Dialog dlg, const Action result) {
if (result.id == ACTION_OPEN.id) { if (result.id == ACTION_OPEN.id) {

View File

@ -37,7 +37,8 @@ class NewProjectDlg : Dialog {
IDEFrame _ide; IDEFrame _ide;
this(IDEFrame parent, bool newWorkspace, Workspace currentWorkspace) { this(IDEFrame parent, bool newWorkspace, Workspace currentWorkspace) {
super(newWorkspace ? UIString("New Workspace"d) : UIString("New Project"d), parent.window, DialogFlag.Modal | DialogFlag.Resizable, 500, 400); super(newWorkspace ? UIString("New Workspace"d) : UIString("New Project"d), parent.window,
DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
_ide = parent; _ide = parent;
_icon = "dlangui-logo1"; _icon = "dlangui-logo1";
this._currentWorkspace = currentWorkspace; this._currentWorkspace = currentWorkspace;
@ -94,6 +95,8 @@ class NewProjectDlg : Dialog {
CheckBox { id: cbCreateWorkspace; text: "Create new solution"; checked: true } CheckBox { id: cbCreateWorkspace; text: "Create new solution"; checked: true }
TextWidget { text: "Workspace name" } TextWidget { text: "Workspace name" }
EditLine { id: edWorkspaceName; text: "newworkspace"; layoutWidth: fill } EditLine { id: edWorkspaceName; text: "newworkspace"; layoutWidth: fill }
TextWidget { text: "" }
CheckBox { id: cbCreateWorkspaceSubdir; text: "Create subdirectory for workspace"; checked: true }
TextWidget { text: "Project name" } TextWidget { text: "Project name" }
EditLine { id: edProjectName; text: "newproject"; layoutWidth: fill } EditLine { id: edProjectName; text: "newproject"; layoutWidth: fill }
TextWidget { text: "" } TextWidget { text: "" }
@ -117,13 +120,23 @@ class NewProjectDlg : Dialog {
_edWorkspaceName = content.childById!EditLine("edWorkspaceName"); _edWorkspaceName = content.childById!EditLine("edWorkspaceName");
_cbCreateSubdir = content.childById!CheckBox("cbCreateSubdir"); _cbCreateSubdir = content.childById!CheckBox("cbCreateSubdir");
_cbCreateWorkspace = content.childById!CheckBox("cbCreateWorkspace"); _cbCreateWorkspace = content.childById!CheckBox("cbCreateWorkspace");
_cbCreateWorkspaceSubdir = content.childById!CheckBox("cbCreateWorkspaceSubdir");
_edLocation = content.childById!DirEditLine("edLocation"); _edLocation = content.childById!DirEditLine("edLocation");
_edLocation.text = toUTF32(_location); _edLocation.text = toUTF32(_location);
_statusText = content.childById!TextWidget("statusText"); _statusText = content.childById!TextWidget("statusText");
_edLocation.filetypeIcons[".d"] = "text-d";
_edLocation.filetypeIcons["dub.json"] = "project-d";
_edLocation.filetypeIcons["package.json"] = "project-d";
_edLocation.filetypeIcons[".dlangidews"] = "project-development";
_edLocation.addFilter(FileFilterEntry(UIString("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
_edLocation.caption = "Select directory"d;
if (_currentWorkspace) { if (_currentWorkspace) {
_workspaceName = toUTF8(_currentWorkspace.name); _workspaceName = toUTF8(_currentWorkspace.name);
_edWorkspaceName.text = toUTF32(_workspaceName); _edWorkspaceName.text = toUTF32(_workspaceName);
_cbCreateWorkspaceSubdir.enabled = false;
_cbCreateWorkspaceSubdir.checked = false;
} else { } else {
_cbCreateWorkspace.checked = true; _cbCreateWorkspace.checked = true;
_cbCreateWorkspace.enabled = false; _cbCreateWorkspace.enabled = false;
@ -162,6 +175,18 @@ class NewProjectDlg : Dialog {
}; };
_cbCreateWorkspace.checkChange = delegate (Widget source, bool checked) { _cbCreateWorkspace.checkChange = delegate (Widget source, bool checked) {
_edWorkspaceName.readOnly = !checked;
_cbCreateWorkspaceSubdir.enabled = checked;
updateDirLayout();
return true;
};
_cbCreateSubdir.checkChange = delegate (Widget source, bool checked) {
updateDirLayout();
return true;
};
_cbCreateWorkspaceSubdir.checkChange = delegate (Widget source, bool checked) {
_edWorkspaceName.readOnly = !checked; _edWorkspaceName.readOnly = !checked;
updateDirLayout(); updateDirLayout();
return true; return true;
@ -190,6 +215,7 @@ class NewProjectDlg : Dialog {
EditLine _edProjectName; EditLine _edProjectName;
CheckBox _cbCreateSubdir; CheckBox _cbCreateSubdir;
CheckBox _cbCreateWorkspace; CheckBox _cbCreateWorkspace;
CheckBox _cbCreateWorkspaceSubdir;
TextWidget _statusText; TextWidget _statusText;
string _projectName = "newproject"; string _projectName = "newproject";
string _workspaceName = "newworkspace"; string _workspaceName = "newworkspace";
@ -210,16 +236,21 @@ class NewProjectDlg : Dialog {
protected void updateDirLayout() { protected void updateDirLayout() {
dchar[] buf; dchar[] buf;
if (_cbCreateSubdir.checked)
buf ~= toUTF32(_workspaceName) ~ toUTF32(WORKSPACE_EXTENSION) ~ "\n";
dstring level = ""; dstring level = "";
if (_cbCreateWorkspaceSubdir.checked) {
buf ~= toUTF32(_workspaceName) ~ "/\n";
level ~= " ";
}
if (_cbCreateWorkspace.checked) {
buf ~= level ~ toUTF32(_workspaceName) ~ toUTF32(WORKSPACE_EXTENSION) ~ "\n";
}
if (_cbCreateSubdir.checked) { if (_cbCreateSubdir.checked) {
buf ~= toUTF32(_projectName) ~ "/\n"; buf ~= level ~ toUTF32(_projectName) ~ "/\n";
level = " "; level ~= " ";
} }
buf ~= level ~ "dub.json" ~ "\n"; buf ~= level ~ "dub.json" ~ "\n";
buf ~= level ~ "source/" ~ "\n"; buf ~= level ~ "source/" ~ "\n";
if (_currentTemplate.srcfile.length) { if (!_currentTemplate.srcfile.empty) {
buf ~= level ~ " " ~ toUTF32(_currentTemplate.srcfile) ~ "\n"; buf ~= level ~ " " ~ toUTF32(_currentTemplate.srcfile) ~ "\n";
} }
_directoryLayout.text = buf.dup; _directoryLayout.text = buf.dup;
@ -260,14 +291,28 @@ class NewProjectDlg : Dialog {
if (!validate()) if (!validate())
return false; return false;
Workspace ws = _currentWorkspace; Workspace ws = _currentWorkspace;
string wsdir = _location;
if (_newWorkspace) { if (_newWorkspace) {
string wsfilename = buildNormalizedPath(_location, _workspaceName ~ WORKSPACE_EXTENSION); if (_cbCreateWorkspaceSubdir.checked) {
wsdir = buildNormalizedPath(wsdir, _workspaceName);
if (wsdir.exists) {
if (!wsdir.isDir)
return setError("Cannot create workspace directory");
} else {
try {
mkdir(wsdir);
} catch (Exception e) {
return setError("Cannot create workspace directory");
}
}
}
string wsfilename = buildNormalizedPath(wsdir, _workspaceName ~ WORKSPACE_EXTENSION);
ws = new Workspace(_ide, wsfilename); ws = new Workspace(_ide, wsfilename);
ws.name = toUTF32(_workspaceName); ws.name = toUTF32(_workspaceName);
if (!ws.save()) if (!ws.save())
return setError("Cannot create workspace file"); return setError("Cannot create workspace file");
} }
string pdir = _location; string pdir = wsdir;
if (_cbCreateSubdir.checked) { if (_cbCreateSubdir.checked) {
pdir = buildNormalizedPath(pdir, _projectName); pdir = buildNormalizedPath(pdir, _projectName);
if (pdir.exists) { if (pdir.exists) {
@ -317,12 +362,12 @@ class NewProjectDlg : Dialog {
} }
void initTemplates() { void initTemplates() {
_templates ~= new ProjectTemplate("Empty app project"d, "Empty application project.\nNo source files."d, null, null, false);
_templates ~= new ProjectTemplate("Empty library project"d, "Empty library project.\nNo Source files."d, null, null, true);
_templates ~= new ProjectTemplate("Hello world app"d, "Hello world application."d, "app.d", _templates ~= new ProjectTemplate("Hello world app"d, "Hello world application."d, "app.d",
SOURCE_CODE_HELLOWORLD, false); SOURCE_CODE_HELLOWORLD, false);
_templates ~= new ProjectTemplate("DlangUI: hello world app"d, "Hello world application\nbased on DlangUI library"d, "app.d", _templates ~= new ProjectTemplate("DlangUI: hello world app"d, "Hello world application\nbased on DlangUI library"d, "app.d",
SOURCE_CODE_DLANGUI_HELLOWORLD, false, DUB_JSON_DLANGUI_HELLOWORLD); SOURCE_CODE_DLANGUI_HELLOWORLD, false, DUB_JSON_DLANGUI_HELLOWORLD);
_templates ~= new ProjectTemplate("Empty app project"d, "Empty application project.\nNo source files."d, null, null, false);
_templates ~= new ProjectTemplate("Empty library project"d, "Empty library project.\nNo Source files."d, null, null, true);
} }
} }