From def5580108f2f2a66f9608731a53dfb5a1d7c604 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Mon, 7 Jul 2014 11:19:25 +0400 Subject: [PATCH] file dialog, continue --- src/dlangui/core/types.d | 14 +++++++++++ src/dlangui/dialogs/filedlg.d | 45 +++++++++++++++++++++++++++++++---- 2 files changed, 55 insertions(+), 4 deletions(-) diff --git a/src/dlangui/core/types.d b/src/dlangui/core/types.d index 0cdff181..842f5632 100644 --- a/src/dlangui/core/types.d +++ b/src/dlangui/core/types.d @@ -399,3 +399,17 @@ char[] appendPath(char[] buf, string[] pathItems ...) { return convertPathDelimiters(buf); } +/// split path into elements (e.g. /home/user/dir1 -> ["home", "user", "dir1"], "c:\dir1\dir2" -> ["c:", "dir1", "dir2"] +string[] splitPath(string path) { + string[] res; + int start = 0; + for (int i = 0; i <= path.length; i++) { + char ch = i < path.length ? path[i] : 0; + if (ch == '\\' || ch == '/' || ch == 0) { + if (start < i) + res ~= path[start .. i].dup; + start = i + 1; + } + } + return res; +} diff --git a/src/dlangui/dialogs/filedlg.d b/src/dlangui/dialogs/filedlg.d index 6ff434b6..34436adb 100644 --- a/src/dlangui/dialogs/filedlg.d +++ b/src/dlangui/dialogs/filedlg.d @@ -30,6 +30,8 @@ import dlangui.widgets.controls; import dlangui.widgets.lists; import dlangui.widgets.popup; import dlangui.widgets.layouts; +import dlangui.widgets.grid; +import dlangui.widgets.editors; import dlangui.platforms.common.platform; import dlangui.dialogs.dialog; @@ -46,17 +48,52 @@ enum FileDialogFlag : uint { } /// file open / save dialog -class FileDialog : Dialog { - this(UIString caption, Window parent, uint fileDialogFlags = DialogFlag.Modal | FileDialogFlag.FileMustExist) { +class FileDialog : Dialog { + EditLine path; + StringGridWidget list; + StringGridWidget places; + VerticalLayout leftPanel; + VerticalLayout rightPanel; + this(UIString caption, Window parent, uint fileDialogFlags = DialogFlag.Modal | FileDialogFlag.FileMustExist) { super(caption, parent, fileDialogFlags); } /// override to implement creation of dialog controls override void init() { layoutWidth(FILL_PARENT); layoutWidth(FILL_PARENT); - LinearLayout content = new LinearLayout("dlgcontent"); + LinearLayout content = new HorizontalLayout("dlgcontent"); content.layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT).minWidth(400).minHeight(300); + leftPanel = new VerticalLayout("places"); + rightPanel = new VerticalLayout("main"); + leftPanel.layoutHeight(FILL_PARENT).minWidth(40); + rightPanel.layoutHeight(FILL_PARENT).layoutWidth(FILL_PARENT); + rightPanel.addChild(new TextWidget(null, "Path:"d)); + content.addChild(leftPanel); + content.addChild(rightPanel); + path = new EditLine("path"); + path.layoutWidth(FILL_PARENT); + + rightPanel.addChild(path); + list = new StringGridWidget("files"); + list.layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT); + list.resize(3, 3); + list.setColTitle(0, "Name"d); + list.setColTitle(1, "Size"d); + list.setColTitle(2, "Modified"d); + list.showRowHeaders = false; + list.rowSelect = true; + rightPanel.addChild(list); + + places = new StringGridWidget("placesList"); + places.resize(1, 10); + places.showRowHeaders(false).showColHeaders(true); + places.setColTitle(0, "Places"d); + leftPanel.addChild(places); + addChild(content); - addChild(createButtonsPanel([ACTION_OK, ACTION_CANCEL], 0, 1)); + addChild(createButtonsPanel([ACTION_OPEN, ACTION_CANCEL], 0, 0)); + + string[] path = splitPath("/home/lve/src"); + Log.d("path: ", path); } }