From b1a05fc7588374a6cb401fbd58796844e753ab9f Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Tue, 8 Dec 2015 11:01:56 +0300 Subject: [PATCH] new project creation fixes --- src/dlangide/ui/frame.d | 2 +- src/dlangide/ui/newproject.d | 65 ++++++++++++++++++++++++++++++------ 2 files changed, 56 insertions(+), 11 deletions(-) diff --git a/src/dlangide/ui/frame.d b/src/dlangide/ui/frame.d index ea4d382..6e1621f 100644 --- a/src/dlangide/ui/frame.d +++ b/src/dlangide/ui/frame.d @@ -546,7 +546,7 @@ class IDEFrame : AppFrame { UIString caption; caption = "Open Text File"d; 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.dialogResult = delegate(Dialog dlg, const Action result) { if (result.id == ACTION_OPEN.id) { diff --git a/src/dlangide/ui/newproject.d b/src/dlangide/ui/newproject.d index 82ebc2b..54cab16 100644 --- a/src/dlangide/ui/newproject.d +++ b/src/dlangide/ui/newproject.d @@ -37,7 +37,8 @@ class NewProjectDlg : Dialog { IDEFrame _ide; 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; _icon = "dlangui-logo1"; this._currentWorkspace = currentWorkspace; @@ -94,6 +95,8 @@ class NewProjectDlg : Dialog { CheckBox { id: cbCreateWorkspace; text: "Create new solution"; checked: true } TextWidget { text: "Workspace name" } EditLine { id: edWorkspaceName; text: "newworkspace"; layoutWidth: fill } + TextWidget { text: "" } + CheckBox { id: cbCreateWorkspaceSubdir; text: "Create subdirectory for workspace"; checked: true } TextWidget { text: "Project name" } EditLine { id: edProjectName; text: "newproject"; layoutWidth: fill } TextWidget { text: "" } @@ -117,13 +120,23 @@ class NewProjectDlg : Dialog { _edWorkspaceName = content.childById!EditLine("edWorkspaceName"); _cbCreateSubdir = content.childById!CheckBox("cbCreateSubdir"); _cbCreateWorkspace = content.childById!CheckBox("cbCreateWorkspace"); + _cbCreateWorkspaceSubdir = content.childById!CheckBox("cbCreateWorkspaceSubdir"); _edLocation = content.childById!DirEditLine("edLocation"); _edLocation.text = toUTF32(_location); _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) { _workspaceName = toUTF8(_currentWorkspace.name); _edWorkspaceName.text = toUTF32(_workspaceName); + _cbCreateWorkspaceSubdir.enabled = false; + _cbCreateWorkspaceSubdir.checked = false; } else { _cbCreateWorkspace.checked = true; _cbCreateWorkspace.enabled = false; @@ -162,6 +175,18 @@ class NewProjectDlg : Dialog { }; _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; updateDirLayout(); return true; @@ -190,6 +215,7 @@ class NewProjectDlg : Dialog { EditLine _edProjectName; CheckBox _cbCreateSubdir; CheckBox _cbCreateWorkspace; + CheckBox _cbCreateWorkspaceSubdir; TextWidget _statusText; string _projectName = "newproject"; string _workspaceName = "newworkspace"; @@ -210,16 +236,21 @@ class NewProjectDlg : Dialog { protected void updateDirLayout() { dchar[] buf; - if (_cbCreateSubdir.checked) - buf ~= toUTF32(_workspaceName) ~ toUTF32(WORKSPACE_EXTENSION) ~ "\n"; dstring level = ""; + if (_cbCreateWorkspaceSubdir.checked) { + buf ~= toUTF32(_workspaceName) ~ "/\n"; + level ~= " "; + } + if (_cbCreateWorkspace.checked) { + buf ~= level ~ toUTF32(_workspaceName) ~ toUTF32(WORKSPACE_EXTENSION) ~ "\n"; + } if (_cbCreateSubdir.checked) { - buf ~= toUTF32(_projectName) ~ "/\n"; - level = " "; + buf ~= level ~ toUTF32(_projectName) ~ "/\n"; + level ~= " "; } buf ~= level ~ "dub.json" ~ "\n"; buf ~= level ~ "source/" ~ "\n"; - if (_currentTemplate.srcfile.length) { + if (!_currentTemplate.srcfile.empty) { buf ~= level ~ " " ~ toUTF32(_currentTemplate.srcfile) ~ "\n"; } _directoryLayout.text = buf.dup; @@ -260,14 +291,28 @@ class NewProjectDlg : Dialog { if (!validate()) return false; Workspace ws = _currentWorkspace; + string wsdir = _location; 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.name = toUTF32(_workspaceName); if (!ws.save()) return setError("Cannot create workspace file"); } - string pdir = _location; + string pdir = wsdir; if (_cbCreateSubdir.checked) { pdir = buildNormalizedPath(pdir, _projectName); if (pdir.exists) { @@ -317,12 +362,12 @@ class NewProjectDlg : Dialog { } 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", SOURCE_CODE_HELLOWORLD, false); _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); + _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); } }