mirror of https://github.com/buggins/dlangide.git
new project - working
This commit is contained in:
parent
22d9014511
commit
0fb64e33bc
|
@ -193,6 +193,10 @@ class IDEFrame : AppFrame {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hideHomeScreen() {
|
||||||
|
_tabs.removeTab(HOME_SCREEN_ID);
|
||||||
|
}
|
||||||
|
|
||||||
void onTabChanged(string newActiveTabId, string previousTabId) {
|
void onTabChanged(string newActiveTabId, string previousTabId) {
|
||||||
int index = _tabs.tabIndex(newActiveTabId);
|
int index = _tabs.tabIndex(newActiveTabId);
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
|
@ -649,9 +653,13 @@ class IDEFrame : AppFrame {
|
||||||
if (currentWorkspace is null || res.workspace !is currentWorkspace) {
|
if (currentWorkspace is null || res.workspace !is currentWorkspace) {
|
||||||
// open new workspace
|
// open new workspace
|
||||||
setWorkspace(res.workspace);
|
setWorkspace(res.workspace);
|
||||||
|
refreshWorkspace();
|
||||||
|
hideHomeScreen();
|
||||||
} else {
|
} else {
|
||||||
// project added to current workspace
|
// project added to current workspace
|
||||||
loadProject(res.project);
|
loadProject(res.project);
|
||||||
|
refreshWorkspace();
|
||||||
|
hideHomeScreen();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -708,8 +716,9 @@ class IDEFrame : AppFrame {
|
||||||
if (filename.isWorkspaceFile) {
|
if (filename.isWorkspaceFile) {
|
||||||
Workspace ws = new Workspace(this);
|
Workspace ws = new Workspace(this);
|
||||||
if (ws.load(filename)) {
|
if (ws.load(filename)) {
|
||||||
askForUnsavedEdits(delegate() {
|
askForUnsavedEdits(delegate() {
|
||||||
setWorkspace(ws);
|
setWorkspace(ws);
|
||||||
|
hideHomeScreen();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
window.showMessageBox(UIString("Cannot open workspace"d), UIString("Error occured while opening workspace"d));
|
window.showMessageBox(UIString("Cannot open workspace"d), UIString("Error occured while opening workspace"d));
|
||||||
|
@ -732,12 +741,14 @@ class IDEFrame : AppFrame {
|
||||||
if (result.id == IDEActions.CreateNewWorkspace) {
|
if (result.id == IDEActions.CreateNewWorkspace) {
|
||||||
// new ws
|
// new ws
|
||||||
createNewWorkspaceForExistingProject(project);
|
createNewWorkspaceForExistingProject(project);
|
||||||
|
hideHomeScreen();
|
||||||
} else if (result.id == IDEActions.AddToCurrentWorkspace) {
|
} else if (result.id == IDEActions.AddToCurrentWorkspace) {
|
||||||
// add to current
|
// add to current
|
||||||
currentWorkspace.addProject(project);
|
currentWorkspace.addProject(project);
|
||||||
loadProject(project);
|
loadProject(project);
|
||||||
currentWorkspace.save();
|
currentWorkspace.save();
|
||||||
refreshWorkspace();
|
refreshWorkspace();
|
||||||
|
hideHomeScreen();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
|
@ -195,25 +195,6 @@ class NewProjectDlg : Dialog {
|
||||||
string _workspaceName = "newworkspace";
|
string _workspaceName = "newworkspace";
|
||||||
string _location;
|
string _location;
|
||||||
|
|
||||||
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",
|
|
||||||
q{
|
|
||||||
import std.stdio;
|
|
||||||
void main(string[] args) {
|
|
||||||
writeln("Hello World!");
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
_templates ~= new ProjectTemplate("DlangUI: hello world app"d, "Hello world application\nbased on DlangUI library"d, "app.d",
|
|
||||||
q{
|
|
||||||
import std.stdio;
|
|
||||||
void main(string[] args) {
|
|
||||||
writeln("Hello World!");
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
int _currentTemplateIndex = -1;
|
int _currentTemplateIndex = -1;
|
||||||
ProjectTemplate _currentTemplate;
|
ProjectTemplate _currentTemplate;
|
||||||
ProjectTemplate[] _templates;
|
ProjectTemplate[] _templates;
|
||||||
|
@ -313,12 +294,14 @@ class NewProjectDlg : Dialog {
|
||||||
project.content.setString("targetType", "executable");
|
project.content.setString("targetType", "executable");
|
||||||
project.content.setString("targetPath", "bin");
|
project.content.setString("targetPath", "bin");
|
||||||
}
|
}
|
||||||
|
if (_currentTemplate.json)
|
||||||
|
project.content.merge(_currentTemplate.json);
|
||||||
project.save();
|
project.save();
|
||||||
ws.addProject(project);
|
ws.addProject(project);
|
||||||
if (ws.startupProject is null)
|
if (ws.startupProject is null)
|
||||||
ws.startupProject = project;
|
ws.startupProject = project;
|
||||||
if (!_currentTemplate.srcfile.empty && !_currentTemplate.srccode.empty) {
|
if (!_currentTemplate.srcfile.empty && !_currentTemplate.srccode.empty) {
|
||||||
string srcdir = buildNormalizedPath(pdir, "dub.json");
|
string srcdir = buildNormalizedPath(pdir, "source");
|
||||||
if (!exists(srcdir))
|
if (!exists(srcdir))
|
||||||
mkdir(srcdir);
|
mkdir(srcdir);
|
||||||
string srcfile = buildNormalizedPath(srcdir, _currentTemplate.srcfile);
|
string srcfile = buildNormalizedPath(srcdir, _currentTemplate.srcfile);
|
||||||
|
@ -328,22 +311,118 @@ class NewProjectDlg : Dialog {
|
||||||
return setError("Cannot save project file");
|
return setError("Cannot save project file");
|
||||||
if (!ws.save())
|
if (!ws.save())
|
||||||
return setError("Cannot save workspace file");
|
return setError("Cannot save workspace file");
|
||||||
|
project.load();
|
||||||
_result = new ProjectCreationResult(ws, project);
|
_result = new ProjectCreationResult(ws, project);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
immutable string SOURCE_CODE_HELLOWORLD = q{
|
||||||
|
import std.stdio;
|
||||||
|
void main(string[] args) {
|
||||||
|
writeln("Hello World!");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
immutable string SOURCE_CODE_DLANGUI_HELLOWORLD = q{
|
||||||
|
import dlangui;
|
||||||
|
|
||||||
|
mixin APP_ENTRY_POINT;
|
||||||
|
|
||||||
|
/// entry point for dlangui based application
|
||||||
|
extern (C) int UIAppMain(string[] args) {
|
||||||
|
// create window
|
||||||
|
Window window = Platform.instance.createWindow("DlangUI HelloWorld", null);
|
||||||
|
|
||||||
|
// create some widget to show in window
|
||||||
|
//window.mainWidget = (new Button()).text("Hello, world!"d).margins(Rect(20,20,20,20));
|
||||||
|
window.mainWidget = parseML(q{
|
||||||
|
VerticalLayout {
|
||||||
|
margins: 10
|
||||||
|
padding: 10
|
||||||
|
backgroundColor: "#C0E0E070" // semitransparent yellow background
|
||||||
|
// red bold text with size = 150% of base style size and font face Arial
|
||||||
|
TextWidget { text: "Hello World example for DlangUI"; textColor: "red"; fontSize: 150%; fontWeight: 800; fontFace: "Arial" }
|
||||||
|
// arrange controls as form - table with two columns
|
||||||
|
TableLayout {
|
||||||
|
colCount: 2
|
||||||
|
TextWidget { text: "param 1" }
|
||||||
|
EditLine { id: edit1; text: "some text" }
|
||||||
|
TextWidget { text: "param 2" }
|
||||||
|
EditLine { id: edit2; text: "some text for param2" }
|
||||||
|
TextWidget { text: "some radio buttons" }
|
||||||
|
// arrange some radio buttons vertically
|
||||||
|
VerticalLayout {
|
||||||
|
RadioButton { id: rb1; text: "Item 1" }
|
||||||
|
RadioButton { id: rb2; text: "Item 2" }
|
||||||
|
RadioButton { id: rb3; text: "Item 3" }
|
||||||
|
}
|
||||||
|
TextWidget { text: "and checkboxes" }
|
||||||
|
// arrange some checkboxes horizontally
|
||||||
|
HorizontalLayout {
|
||||||
|
CheckBox { id: cb1; text: "checkbox 1" }
|
||||||
|
CheckBox { id: cb2; text: "checkbox 2" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HorizontalLayout {
|
||||||
|
Button { id: btnOk; text: "Ok" }
|
||||||
|
Button { id: btnCancel; text: "Cancel" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// you can access loaded items by id - e.g. to assign signal listeners
|
||||||
|
auto edit1 = window.mainWidget.childById!EditLine("edit1");
|
||||||
|
auto edit2 = window.mainWidget.childById!EditLine("edit2");
|
||||||
|
// close window on Cancel button click
|
||||||
|
window.mainWidget.childById!Button("btnCancel").click = delegate(Widget w) {
|
||||||
|
window.close();
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
// show message box with content of editors
|
||||||
|
window.mainWidget.childById!Button("btnOk").click = delegate(Widget w) {
|
||||||
|
window.showMessageBox(UIString("Ok button pressed"d),
|
||||||
|
UIString("Editors content\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text));
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// show window
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
// run message loop
|
||||||
|
return Platform.instance.enterMessageLoop();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
immutable string DUB_JSON_DLANGUI_HELLOWORLD = q{
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"dlangui": "~master"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
class ProjectTemplate {
|
class ProjectTemplate {
|
||||||
dstring name;
|
dstring name;
|
||||||
dstring description;
|
dstring description;
|
||||||
string srcfile;
|
string srcfile;
|
||||||
string srccode;
|
string srccode;
|
||||||
bool isLibrary;
|
bool isLibrary;
|
||||||
this(dstring name, dstring description, string srcfile, string srccode, bool isLibrary) {
|
string json;
|
||||||
|
this(dstring name, dstring description, string srcfile, string srccode, bool isLibrary, string json = null) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.srcfile = srcfile;
|
this.srcfile = srcfile;
|
||||||
this.srccode = srccode;
|
this.srccode = srccode;
|
||||||
this.isLibrary = isLibrary;
|
this.isLibrary = isLibrary;
|
||||||
|
this.json = json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -295,6 +295,7 @@ class Project : WorkspaceItem {
|
||||||
_items = new ProjectFolder(fname);
|
_items = new ProjectFolder(fname);
|
||||||
_dependencyVersion = dependencyVersion;
|
_dependencyVersion = dependencyVersion;
|
||||||
_isDependency = _dependencyVersion.length > 0;
|
_isDependency = _dependencyVersion.length > 0;
|
||||||
|
_projectFile = new SettingsFile(fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
@property bool isDependency() { return _isDependency; }
|
@property bool isDependency() { return _isDependency; }
|
||||||
|
@ -309,6 +310,28 @@ class Project : WorkspaceItem {
|
||||||
/// direct access to project file (json)
|
/// direct access to project file (json)
|
||||||
@property SettingsFile content() { return _projectFile; }
|
@property SettingsFile content() { return _projectFile; }
|
||||||
|
|
||||||
|
/// name
|
||||||
|
override @property dstring name() {
|
||||||
|
return super.name();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// name
|
||||||
|
override @property void name(dstring s) {
|
||||||
|
super.name(s);
|
||||||
|
_projectFile.setString("name", toUTF8(s));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// name
|
||||||
|
override @property dstring description() {
|
||||||
|
return super.description();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// name
|
||||||
|
override @property void description(dstring s) {
|
||||||
|
super.description(s);
|
||||||
|
_projectFile.setString("description", toUTF8(s));
|
||||||
|
}
|
||||||
|
|
||||||
/// returns project's own source paths
|
/// returns project's own source paths
|
||||||
@property string[] sourcePaths() { return _sourcePaths; }
|
@property string[] sourcePaths() { return _sourcePaths; }
|
||||||
/// returns project's own source paths
|
/// returns project's own source paths
|
||||||
|
@ -467,6 +490,13 @@ class Project : WorkspaceItem {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override bool save(string fname = null) {
|
||||||
|
if (fname !is null)
|
||||||
|
filename = fname;
|
||||||
|
assert(filename !is null);
|
||||||
|
return _projectFile.save(filename, true);
|
||||||
|
}
|
||||||
|
|
||||||
protected Project[] _dependencies;
|
protected Project[] _dependencies;
|
||||||
@property Project[] dependencies() { return _dependencies; }
|
@property Project[] dependencies() { return _dependencies; }
|
||||||
protected bool addDependency(Project dep) {
|
protected bool addDependency(Project dep) {
|
||||||
|
|
Loading…
Reference in New Issue