diff --git a/README.md b/README.md
index 779c7b9e..7a6f8134 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
Dlang UI
========
-Cross platform GUI for D. Layouts, styles, themes, unicode, i18n, OpenGL based acceleration, widget set.
+Cross platform GUI for D. Widgets, layouts, styles, themes, unicode, i18n, OpenGL based acceleration.
GitHub page: [https://github.com/buggins/dlangui](https://github.com/buggins/dlangui)
@@ -254,11 +254,11 @@ DlangIDE project
It is a project to build D language IDE using DlangUI library.
-Now it's in early alpha stage, and could be used as a demo for DlangUI.
-
But it already can open DUB based projects, edit, build and run them.
-There is simple syntax highlight.
+Simple syntax highlight.
+
+DCD integration: go to definition and autocompletion for D source code.
Project page: [https://github.com/buggins/dlangide](https://github.com/buggins/dlangide)
diff --git a/dlanguilib.visualdproj b/dlanguilib.visualdproj
index 87da0094..93c8f1fe 100644
--- a/dlanguilib.visualdproj
+++ b/dlanguilib.visualdproj
@@ -365,6 +365,7 @@
+
diff --git a/src/dlangui/core/stdaction.d b/src/dlangui/core/stdaction.d
index 0e9fc118..6e769fa0 100644
--- a/src/dlangui/core/stdaction.d
+++ b/src/dlangui/core/stdaction.d
@@ -1,53 +1,55 @@
-// Written in the D programming language.
-
-/**
-Definition of standard actions commonly used in dialogs and controls.
-
-Synopsis:
-
-----
-import dlangui.core.stdaction;
-
-----
-
-Copyright: Vadim Lopatin, 2014
-License: Boost License 1.0
-Authors: Vadim Lopatin, coolreader.org@gmail.com
-*/
+// Written in the D programming language.
+
+/**
+Definition of standard actions commonly used in dialogs and controls.
+
+Synopsis:
+
+----
+import dlangui.core.stdaction;
+
+----
+
+Copyright: Vadim Lopatin, 2014
+License: Boost License 1.0
+Authors: Vadim Lopatin, coolreader.org@gmail.com
+*/
module dlangui.core.stdaction;
-public import dlangui.core.events;
-
-/// standard (commonly used) action codes
-enum StandardAction : int {
- Ok = 1,
- Cancel,
- Yes,
- No,
- Close,
- Abort,
- Retry,
- Ignore,
- Open,
- Save,
- SaveAll,
- DiscardChanges,
- DiscardAll,
- OpenUrl,
-}
-
-const Action ACTION_OK = new Action(StandardAction.Ok, "ACTION_OK"c, "dialog-ok");
-const Action ACTION_CANCEL = new Action(StandardAction.Cancel, "ACTION_CANCEL"c, "dialog-cancel");
-const Action ACTION_YES = new Action(StandardAction.Yes, "ACTION_YES"c, "dialog-ok");
-const Action ACTION_NO = new Action(StandardAction.No, "ACTION_NO"c, "dialog-cancel");
-const Action ACTION_CLOSE = new Action(StandardAction.Close, "ACTION_CLOSE"c, "dialog-close");
-const Action ACTION_ABORT = new Action(StandardAction.Abort, "ACTION_ABORT"c);
-const Action ACTION_RETRY = new Action(StandardAction.Retry, "ACTION_RETRY"c);
-const Action ACTION_IGNORE = new Action(StandardAction.Ignore, "ACTION_IGNORE"c);
-const Action ACTION_OPEN = new Action(StandardAction.Open, "ACTION_OPEN"c);
-const Action ACTION_SAVE = new Action(StandardAction.Save, "ACTION_SAVE"c);
-const Action ACTION_SAVE_ALL = new Action(StandardAction.SaveAll, "ACTION_SAVE_ALL"c);
-const Action ACTION_DISCARD_CHANGES = new Action(StandardAction.DiscardChanges, "ACTION_DISCARD_CHANGES"c);
-const Action ACTION_DISCARD_ALL = new Action(StandardAction.DiscardAll, "ACTION_DISCARD_ALL"c);
-const Action ACTION_OPEN_URL = (new Action(StandardAction.OpenUrl)).iconId("applications-internet");
-
+public import dlangui.core.events;
+
+/// standard (commonly used) action codes
+enum StandardAction : int {
+ Ok = 1,
+ Cancel,
+ Yes,
+ No,
+ Close,
+ Abort,
+ Retry,
+ Ignore,
+ Open,
+ Save,
+ SaveAll,
+ DiscardChanges,
+ DiscardAll,
+ OpenUrl,
+ Apply,
+}
+
+const Action ACTION_OK = new Action(StandardAction.Ok, "ACTION_OK"c, "dialog-ok");
+const Action ACTION_CANCEL = new Action(StandardAction.Cancel, "ACTION_CANCEL"c, "dialog-cancel");
+const Action ACTION_APPLY = new Action(StandardAction.Apply, "ACTION_APPLY"c, null);
+const Action ACTION_YES = new Action(StandardAction.Yes, "ACTION_YES"c, "dialog-ok");
+const Action ACTION_NO = new Action(StandardAction.No, "ACTION_NO"c, "dialog-cancel");
+const Action ACTION_CLOSE = new Action(StandardAction.Close, "ACTION_CLOSE"c, "dialog-close");
+const Action ACTION_ABORT = new Action(StandardAction.Abort, "ACTION_ABORT"c);
+const Action ACTION_RETRY = new Action(StandardAction.Retry, "ACTION_RETRY"c);
+const Action ACTION_IGNORE = new Action(StandardAction.Ignore, "ACTION_IGNORE"c);
+const Action ACTION_OPEN = new Action(StandardAction.Open, "ACTION_OPEN"c);
+const Action ACTION_SAVE = new Action(StandardAction.Save, "ACTION_SAVE"c);
+const Action ACTION_SAVE_ALL = new Action(StandardAction.SaveAll, "ACTION_SAVE_ALL"c);
+const Action ACTION_DISCARD_CHANGES = new Action(StandardAction.DiscardChanges, "ACTION_DISCARD_CHANGES"c);
+const Action ACTION_DISCARD_ALL = new Action(StandardAction.DiscardAll, "ACTION_DISCARD_ALL"c);
+const Action ACTION_OPEN_URL = (new Action(StandardAction.OpenUrl)).iconId("applications-internet");
+
diff --git a/src/dlangui/dialogs/filedlg.d b/src/dlangui/dialogs/filedlg.d
index 365c4553..c49da7ed 100644
--- a/src/dlangui/dialogs/filedlg.d
+++ b/src/dlangui/dialogs/filedlg.d
@@ -316,9 +316,7 @@ class FileDialog : Dialog, CustomGridCellAdapter {
override void init() {
_roots = getRootPaths;
- layoutWidth(FILL_PARENT);
- layoutWidth(FILL_PARENT);
- minWidth = 600;
+ layoutWidth(FILL_PARENT).layoutHeight(FILL_PARENT).minWidth(600);
//minHeight = 400;
LinearLayout content = new HorizontalLayout("dlgcontent");
diff --git a/src/dlangui/dialogs/settingsdialog.d b/src/dlangui/dialogs/settingsdialog.d
new file mode 100644
index 00000000..842fd4d7
--- /dev/null
+++ b/src/dlangui/dialogs/settingsdialog.d
@@ -0,0 +1,108 @@
+module dlangui.dialogs.settingsdialog;
+
+import dlangui.core.events;
+import dlangui.core.i18n;
+import dlangui.core.stdaction;
+import dlangui.core.files;
+import dlangui.core.settings;
+import dlangui.widgets.controls;
+import dlangui.widgets.lists;
+import dlangui.widgets.layouts;
+import dlangui.widgets.tree;
+import dlangui.widgets.editors;
+import dlangui.widgets.menu;
+import dlangui.widgets.combobox;
+import dlangui.platforms.common.platform;
+import dlangui.dialogs.dialog;
+
+private import std.algorithm;
+private import std.file;
+private import std.path;
+private import std.utf;
+private import std.conv : to;
+private import std.array : split;
+
+class SettingsItem {
+ protected string _id;
+ protected UIString _label;
+ protected SettingsPage _page;
+ this(string id, UIString label) {
+ _id = id;
+ _label = label;
+ }
+ /// setting path, e.g. "editor/tabSize"
+ @property string id() { return _id; }
+ @property ref UIString label() { return _label; }
+}
+
+class SettingsPage {
+ protected SettingsPage _parent;
+ protected ObjectList!SettingsPage _children;
+ protected ObjectList!SettingsItem _items;
+ protected string _id;
+ protected UIString _label;
+
+ this(string id, UIString label) {
+ _id = id;
+ _label = label;
+ }
+
+ @property string id() { return _id; }
+ @property ref UIString label() { return _label; }
+
+ @property int childCount() {
+ return _children.count;
+ }
+
+ /// returns child page by index
+ SettingsPage child(int index) {
+ return _children[index];
+ }
+
+ void addChild(SettingsPage item) {
+ _children.add(item);
+ item._parent = this;
+ }
+
+ @property int itemCount() {
+ return _items.count;
+ }
+
+ /// returns page item by index
+ SettingsItem item(int index) {
+ return _items[index];
+ }
+
+ void addChild(SettingsItem item) {
+ _items.add(item);
+ item._page = this;
+ }
+}
+
+class SettingsDialog : Dialog {
+ protected TreeWidget _tree;
+ protected FrameLayout _frame;
+ protected SettingsFile _settings;
+
+ this(UIString caption, Window parent, SettingsFile settings) {
+ super(caption, parent, DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup);
+ _settings = settings;
+ }
+
+ void onTreeItemSelected(TreeItems source, TreeItem selectedItem, bool activated) {
+ if (!selectedItem)
+ return;
+ }
+
+ /// override to implement creation of dialog controls
+ override void init() {
+ minWidth(600).minHeight(400);
+ _tree = new TreeWidget("prop_tree");
+ _tree.layoutHeight(FILL_PARENT).layoutHeight(FILL_PARENT);
+ _tree.selectionListener = &onTreeItemSelected;
+ _tree.fontSize = 16;
+ _frame = new FrameLayout("prop_pages");
+
+ }
+
+}
diff --git a/views/res/theme_default.xml b/views/res/theme_default.xml
index b5863fc1..79596061 100644
--- a/views/res/theme_default.xml
+++ b/views/res/theme_default.xml
@@ -335,7 +335,6 @@
/>