From 01ffc1dffa1afb159e35f50d30a0b8ee9368faa7 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Tue, 27 Jan 2015 12:18:06 +0300 Subject: [PATCH] Home Screen, part 1 --- dlangide.visualdproj | 1 + src/dlangide.d | 2 ++ src/dlangide/ui/commands.d | 6 +++++- src/dlangide/ui/frame.d | 18 +++++++++++++++- src/dlangide/ui/homescreen.d | 40 ++++++++++++++++++++++++++++++++++++ views/res/i18n/en.ini | 3 +++ 6 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/dlangide/ui/homescreen.d 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