diff --git a/dlangide.visualdproj b/dlangide.visualdproj
index ae3a58b..2e6cb45 100644
--- a/dlangide.visualdproj
+++ b/dlangide.visualdproj
@@ -203,6 +203,7 @@
+
diff --git a/src/dlangide.d b/src/dlangide.d
index 2388065..e4a17dd 100644
--- a/src/dlangide.d
+++ b/src/dlangide.d
@@ -36,6 +36,8 @@ extern (C) int UIAppMain(string[] args) {
// create some widget to show in window
window.windowIcon = drawableCache.getImage("dlangui-logo1");
+ // open home screen tab
+ frame.showHomeScreen();
// for testing: load workspace at startup
frame.loadWorkspace(appendPath(exePath, "../workspaces/sample1/sample1.dlangidews"));
diff --git a/src/dlangide/ui/commands.d b/src/dlangide/ui/commands.d
index 51e55ce..a70540e 100644
--- a/src/dlangide/ui/commands.d
+++ b/src/dlangide/ui/commands.d
@@ -7,6 +7,8 @@ enum IDEActions : int {
None = 0,
//ProjectOpen = 1010000,
FileNew = 1010000,
+ FileNewWorkspace,
+ FileNewProject,
FileOpen,
FileOpenWorkspace,
FileSave,
@@ -30,7 +32,9 @@ enum IDEActions : int {
HelpAbout,
}
-const Action ACTION_FILE_NEW = new Action(IDEActions.FileOpen, "MENU_FILE_NEW"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_WORKSPACE = new Action(IDEActions.FileNewWorkspace, "MENU_FILE_NEW_WORKSPACE"c);
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_SAVE = new Action(IDEActions.FileSave, "MENU_FILE_SAVE"c, "document-save", KeyCode.KEY_S, KeyFlag.Control);
diff --git a/src/dlangide/ui/frame.d b/src/dlangide/ui/frame.d
index a77ebe1..38edfbd 100644
--- a/src/dlangide/ui/frame.d
+++ b/src/dlangide/ui/frame.d
@@ -18,6 +18,7 @@ import dlangide.ui.commands;
import dlangide.ui.wspanel;
import dlangide.ui.outputpanel;
import dlangide.ui.dsourceedit;
+import dlangide.ui.homescreen;
import dlangide.workspace.workspace;
import dlangide.workspace.project;
@@ -109,6 +110,18 @@ class IDEFrame : AppFrame {
return true;
}
+ static immutable HOME_SCREEN_ID = "HOME_SCREEN";
+ void showHomeScreen() {
+ int index = _tabs.tabIndex(HOME_SCREEN_ID);
+ if (index >= 0) {
+ _tabs.selectTab(index, true);
+ } else {
+ HomeScreen home = new HomeScreen(HOME_SCREEN_ID, this);
+ _tabs.addTab(home, "Home"d);
+ _tabs.selectTab(HOME_SCREEN_ID, true);
+ }
+ }
+
void onTabChanged(string newActiveTabId, string previousTabId) {
int index = _tabs.tabIndex(newActiveTabId);
if (index >= 0) {
@@ -192,7 +205,10 @@ class IDEFrame : AppFrame {
mainMenuItems = new MenuItem();
MenuItem fileItem = new MenuItem(new Action(1, "MENU_FILE"));
- fileItem.add(ACTION_FILE_NEW, ACTION_FILE_OPEN_WORKSPACE, ACTION_FILE_OPEN,
+ MenuItem fileNewItem = new MenuItem(new Action(1, "MENU_FILE_NEW"));
+ fileNewItem.add(ACTION_FILE_NEW_SOURCE_FILE, ACTION_FILE_NEW_WORKSPACE, ACTION_FILE_NEW_PROJECT);
+ fileItem.add(fileNewItem);
+ fileItem.add(ACTION_FILE_OPEN_WORKSPACE, ACTION_FILE_OPEN,
ACTION_FILE_SAVE, ACTION_FILE_SAVE_AS, ACTION_FILE_SAVE_ALL, ACTION_FILE_EXIT);
MenuItem editItem = new MenuItem(new Action(2, "MENU_EDIT"));
diff --git a/src/dlangide/ui/homescreen.d b/src/dlangide/ui/homescreen.d
new file mode 100644
index 0000000..f44794c
--- /dev/null
+++ b/src/dlangide/ui/homescreen.d
@@ -0,0 +1,40 @@
+module dlangide.ui.homescreen;
+
+import dlangui.widgets.layouts;
+import dlangui.widgets.widget;
+import dlangui.widgets.scroll;
+import dlangui.widgets.controls;
+import dlangide.ui.frame;
+import dlangide.ui.commands;
+
+class HomeScreen : ScrollWidget {
+ protected IDEFrame _frame;
+ protected HorizontalLayout _content;
+ this(string ID, IDEFrame frame) {
+ super(ID);
+ backgroundColor = 0xFFFFFF;
+ _frame = frame;
+ _content = new HorizontalLayout("HOME_SCREEN_BODY");
+ _content.layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT);
+ VerticalLayout _column1 = new VerticalLayout();
+ _column1.layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT).padding(Rect(20, 20, 20, 20));
+ VerticalLayout _column2 = new VerticalLayout();
+ _column2.layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT).padding(Rect(20, 20, 20, 20));
+ _content.addChild(_column1);
+ _content.addChild(_column2);
+ _column1.addChild((new TextWidget(null, "Dlang IDE"d)).fontSize(32).textColor(0x000080));
+ _column1.addChild((new TextWidget(null, "D language IDE written in D"d)).fontSize(24));
+ _column1.addChild((new TextWidget(null, "(c) Vadim Lopatin 2015"d)).fontSize(24).textColor(0x000080));
+ _column1.addChild(new VSpacer());
+ _column1.addChild(new TextWidget(null, "Start:"d));
+ _column1.addChild(new ImageTextButton(ACTION_FILE_NEW_WORKSPACE));
+ _column1.addChild(new ImageTextButton(ACTION_FILE_NEW_PROJECT));
+ _column1.addChild(new ImageTextButton(ACTION_FILE_OPEN_WORKSPACE));
+ _column1.addChild(new VSpacer());
+ _column1.addChild(new TextWidget(null, "Recent:"d));
+ _column1.addChild(new VSpacer());
+ _column2.addChild(new TextWidget(null, "Useful links:"d));
+ _column2.addChild(new VSpacer());
+ contentWidget = _content;
+ }
+}
\ No newline at end of file
diff --git a/views/res/i18n/en.ini b/views/res/i18n/en.ini
index add008a..37eec02 100644
--- a/views/res/i18n/en.ini
+++ b/views/res/i18n/en.ini
@@ -1,6 +1,9 @@
EXIT=Exit
MENU_FILE=&FILE
MENU_FILE_NEW=&New
+MENU_FILE_NEW_SOURCE_FILE=New source file
+MENU_FILE_NEW_PROJECT=New project
+MENU_FILE_NEW_WORKSPACE=New workspace
MENU_FILE_OPEN=&Open file
MENU_FILE_OPEN_WORKSPACE=Open project or workspace
MENU_FILE_OPEN_RECENT=Open recent