From bae22e7d011f76ddd66b2541935d0f9494d02183 Mon Sep 17 00:00:00 2001
From: Vadim Lopatin <coolreader.org@gmail.com>
Date: Mon, 24 Jul 2017 14:17:50 +0300
Subject: [PATCH 1/4] update deps

---
 deps/DCD                  |  2 +-
 dlangide_msvc.visualdproj | 42 ++++++++++-----------------------------
 dub.json                  |  4 ++--
 3 files changed, 13 insertions(+), 35 deletions(-)

diff --git a/deps/DCD b/deps/DCD
index c324ca9..cbcc6fa 160000
--- a/deps/DCD
+++ b/deps/DCD
@@ -1 +1 @@
-Subproject commit c324ca9700d7ed9cf2f89c140b286ae9f325b977
+Subproject commit cbcc6faac3f820bb8e06ed132d82d13036e34d58
diff --git a/dlangide_msvc.visualdproj b/dlangide_msvc.visualdproj
index 339e59e..12fa97d 100644
--- a/dlangide_msvc.visualdproj
+++ b/dlangide_msvc.visualdproj
@@ -89,7 +89,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -172,7 +172,7 @@
   <doXGeneration>1</doXGeneration>
   <xfilename>$(IntDir)\$(TargetName).json</xfilename>
   <debuglevel>0</debuglevel>
-  <debugids />
+  <debugids>DebugInfo DCD</debugids>
   <versionlevel>0</versionlevel>
   <versionids>EmbedStandardResources</versionids>
   <dump_source>0</dump_source>
@@ -191,7 +191,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -293,7 +293,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -376,7 +376,7 @@
   <doXGeneration>1</doXGeneration>
   <xfilename>$(IntDir)\$(TargetName).json</xfilename>
   <debuglevel>0</debuglevel>
-  <debugids />
+  <debugids>DebugInfo DCD</debugids>
   <versionlevel>0</versionlevel>
   <versionids>EmbedStandardResources</versionids>
   <dump_source>0</dump_source>
@@ -395,7 +395,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -478,7 +478,7 @@
   <doXGeneration>1</doXGeneration>
   <xfilename>$(IntDir)\$(TargetName).json</xfilename>
   <debuglevel>0</debuglevel>
-  <debugids>TestParser DebugInfo DCD</debugids>
+  <debugids>DebugInfo DCD</debugids>
   <versionlevel>0</versionlevel>
   <versionids>USE_CONSOLE EmbedStandardResources</versionids>
   <dump_source>0</dump_source>
@@ -497,7 +497,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -599,7 +599,7 @@
   <cv2pdbOptions />
   <objfiles />
   <linkswitches />
-  <libfiles>ole32.lib kernel32.lib user32.lib</libfiles>
+  <libfiles />
   <libpaths />
   <deffile />
   <resfile />
@@ -656,29 +656,7 @@
     <File path="deps\DCD\dsymbol\src\dsymbol\builtin\symbols.d" />
     <File path="deps\DCD\dsymbol\src\dsymbol\type_lookup.d" />
    </Folder>
-   <Folder name="experimental_allocator">
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\allocator_list.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\bitmapped_block.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\bucketizer.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\common.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\fallback_allocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\free_list.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\free_tree.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\gc_allocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\kernighan_ritchie.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\mallocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\mmap_allocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\null_allocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\package.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\package.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\quantizer.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\region.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\scoped_allocator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\segregator.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\showcase.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\building_blocks\stats_collector.d" />
-    <File path="deps\DCD\libdparse\experimental_allocator\src\std\experimental\allocator\typed.d" />
-   </Folder>
+   <Folder name="experimental_allocator" />
    <Folder name="libdparse">
     <File path="deps\DCD\libdparse\src\dparse\ast.d" />
     <File path="deps\DCD\libdparse\src\dparse\entities.d" />
diff --git a/dub.json b/dub.json
index af66a63..1324fcb 100644
--- a/dub.json
+++ b/dub.json
@@ -12,8 +12,8 @@
     "stringImportPaths": ["views", "views/res", "views/res/i18n", "views/res/mdpi", "views/res/hdpi"],
 
     "dependencies": {
-        "dlangui": "==0.9.50",
-        "dcd": "~>0.9.0-alpha4"
+        "dlangui": "==0.9.82",
+        "dcd": "~>0.9.0"
     },
 
     "copyFiles-windows": [

From f07c7401b2da09e4e0f78ccb4709d4617a585a54 Mon Sep 17 00:00:00 2001
From: Vadim Lopatin <coolreader.org@gmail.com>
Date: Mon, 24 Jul 2017 14:38:52 +0300
Subject: [PATCH 2/4] fix UIString deprecations

---
 src/dlangide/ui/frame.d      |  48 ++++++++---------
 src/dlangide/ui/homescreen.d |   2 +-
 src/dlangide/ui/newfile.d    |   8 +--
 src/dlangide/ui/newproject.d |  16 +++---
 src/dlangide/ui/settings.d   | 102 +++++++++++++++++------------------
 5 files changed, 88 insertions(+), 88 deletions(-)

diff --git a/src/dlangide/ui/frame.d b/src/dlangide/ui/frame.d
index 32c47c0..2e48421 100644
--- a/src/dlangide/ui/frame.d
+++ b/src/dlangide/ui/frame.d
@@ -169,7 +169,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         if (!project)
             project = currentWorkspace.startupProject;
         if (!project) {
-            window.showMessageBox(UIString("Cannot debug project"d), UIString("Startup project is not specified"d));
+            window.showMessageBox(UIString.fromRaw("Cannot debug project"d), UIString.fromRaw("Startup project is not specified"d));
             return;
         }
         buildProject(BuildOperation.Build, project, delegate(int result) {
@@ -208,17 +208,17 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         import std.file;
         stopExecution();
         if (!project) {
-            window.showMessageBox(UIString("Cannot debug project"d), UIString("Startup project is not specified"d));
+            window.showMessageBox(UIString.fromRaw("Cannot debug project"d), UIString.fromRaw("Startup project is not specified"d));
             return;
         }
         string executableFileName = project.executableFileName;
         if (!executableFileName || !exists(executableFileName) || !isFile(executableFileName)) {
-            window.showMessageBox(UIString("Cannot debug project"d), UIString("Cannot find executable file"d));
+            window.showMessageBox(UIString.fromRaw("Cannot debug project"d), UIString.fromRaw("Cannot find executable file"d));
             return;
         }
         string debuggerExecutable = _settings.debuggerExecutable;
         if (debuggerExecutable.empty) {
-            window.showMessageBox(UIString("Cannot debug project"d), UIString("No debugger executable specified in settings"d));
+            window.showMessageBox(UIString.fromRaw("Cannot debug project"d), UIString.fromRaw("No debugger executable specified in settings"d));
             return;
         }
 
@@ -238,7 +238,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         if (!project)
             project = currentWorkspace.startupProject;
         if (!project) {
-            window.showMessageBox(UIString("Cannot run project"d), UIString("Startup project is not specified"d));
+            window.showMessageBox(UIString.fromRaw("Cannot run project"d), UIString.fromRaw("Startup project is not specified"d));
             return;
         }
         buildProject(BuildOperation.Build, project, delegate(int result) {
@@ -255,12 +255,12 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         import std.file;
         stopExecution();
         if (!project) {
-            window.showMessageBox(UIString("Cannot run project"d), UIString("Startup project is not specified"d));
+            window.showMessageBox(UIString.fromRaw("Cannot run project"d), UIString.fromRaw("Startup project is not specified"d));
             return;
         }
         string executableFileName = project.executableFileName;
         if (!executableFileName || !exists(executableFileName) || !isFile(executableFileName)) {
-            window.showMessageBox(UIString("Cannot run project"d), UIString("Cannot find executable file"d));
+            window.showMessageBox(UIString.fromRaw("Cannot run project"d), UIString.fromRaw("Cannot find executable file"d));
             return;
         }
         auto program = new ProgramExecutionNoDebug;
@@ -438,7 +438,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
             } else {
                 destroy(editor);
                 if (window)
-                    window.showMessageBox(UIString("File open error"d), UIString("Failed to open file "d ~ toUTF32(file.filename)));
+                    window.showMessageBox(UIString.fromRaw("File open error"d), UIString.fromRaw("Failed to open file "d ~ toUTF32(file.filename)));
                 return false;
             }
         }
@@ -547,7 +547,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         }
         string tabId = ed.id;
         // tab content is modified - ask for confirmation
-        window.showMessageBox(UIString("Close file "d ~ toUTF32(baseName(tabId))), UIString("Content of this file has been changed."d), 
+        window.showMessageBox(UIString.fromRaw("Close file "d ~ toUTF32(baseName(tabId))), UIString.fromRaw("Content of this file has been changed."d), 
                               [ACTION_SAVE, ACTION_SAVE_ALL, ACTION_DISCARD_CHANGES, ACTION_DISCARD_ALL, ACTION_CANCEL], 
                               0, delegate(const Action result) {
                                   if (result == StandardAction.Save) {
@@ -586,7 +586,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
             DSourceEdit d = cast(DSourceEdit)_tabs.tabBody(tabId);
             if (d && d.content.modified) {
                 // tab content is modified - ask for confirmation
-                window.showMessageBox(UIString("Close tab"d), UIString("Content of "d ~ toUTF32(baseName(tabId)) ~ " file has been changed."d), 
+                window.showMessageBox(UIString.fromRaw("Close tab"d), UIString.fromRaw("Content of "d ~ toUTF32(baseName(tabId)) ~ " file has been changed."d), 
                                       [ACTION_SAVE, ACTION_DISCARD_CHANGES, ACTION_CANCEL], 
                                       0, delegate(const Action result) {
                                           if (result == StandardAction.Save) {
@@ -879,8 +879,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
                     Platform.instance.openURL(HELP_PAGE_URL);
                     return true;
                 case IDEActions.HelpAbout:
-                    window.showMessageBox(UIString("About DlangIDE "d ~ DLANGIDE_VERSION),
-                                          UIString("DLangIDE\n(C) Vadim Lopatin, 2014-2016\nhttp://github.com/buggins/dlangide\nIDE for D programming language written in D\nUses DlangUI library for GUI"d));
+                    window.showMessageBox(UIString.fromRaw("About DlangIDE "d ~ DLANGIDE_VERSION),
+                                          UIString.fromRaw("DLangIDE\n(C) Vadim Lopatin, 2014-2016\nhttp://github.com/buggins/dlangide\nIDE for D programming language written in D\nUses DlangUI library for GUI"d));
                     return true;
                 case StandardAction.OpenUrl:
                     platform.openURL(a.stringParam);
@@ -889,8 +889,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
                     UIString caption;
                     caption = "Open Text File"d;
                     FileDialog dlg = createFileDialog(caption);
-                    dlg.addFilter(FileFilterEntry(UIString("Source files"d), "*.d;*.dd;*.ddoc;*.di;*.dh;*.json;*.sdl;*.xml;*.ini"));
-                    dlg.addFilter(FileFilterEntry(UIString("All files"d), "*.*"));
+                    dlg.addFilter(FileFilterEntry(UIString.fromRaw("Source files"d), "*.d;*.dd;*.ddoc;*.di;*.dh;*.json;*.sdl;*.xml;*.ini"));
+                    dlg.addFilter(FileFilterEntry(UIString.fromRaw("All files"d), "*.*"));
                     dlg.path = _settings.getRecentPath("FILE_OPEN_PATH");
                     dlg.dialogResult = delegate(Dialog d, const Action result) {
                         if (result.id == ACTION_OPEN.id) {
@@ -967,7 +967,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
                     UIString caption;
                     caption = "Open Workspace or Project"d;
                     FileDialog dlg = createFileDialog(caption);
-                    dlg.addFilter(FileFilterEntry(UIString("Workspace and project files"d), "*.dlangidews;dub.json;dub.sdl;package.json"));
+                    dlg.addFilter(FileFilterEntry(UIString.fromRaw("Workspace and project files"d), "*.dlangidews;dub.json;dub.sdl;package.json"));
                     dlg.path = _settings.getRecentPath("FILE_OPEN_WORKSPACE_PATH");
                     dlg.dialogResult = delegate(Dialog d, const Action result) {
                         if (result.id == ACTION_OPEN.id) {
@@ -1131,8 +1131,8 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         Project project = srcfile.project;
         if (!project)
             return;
-        window.showMessageBox(UIString("Remove file"d), 
-                UIString("Do you want to remove file "d ~ srcfile.name ~ "?"), 
+        window.showMessageBox(UIString.fromRaw("Remove file"d), 
+                UIString.fromRaw("Do you want to remove file "d ~ srcfile.name ~ "?"), 
                 [ACTION_YES, ACTION_NO], 
                 1, delegate(const Action result) {
                     if (result == StandardAction.Yes) {
@@ -1227,7 +1227,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         //Log.d("settings before copy:\n", _settings.setting.toJSON(true));
         Setting s = _settings.copySettings();
         //Log.d("settings after copy:\n", s.toJSON(true));
-        SettingsDialog dlg = new SettingsDialog(UIString("DlangIDE settings"d), window, s, createSettingsPages());
+        SettingsDialog dlg = new SettingsDialog(UIString.fromRaw("DlangIDE settings"d), window, s, createSettingsPages());
         dlg.dialogResult = delegate(Dialog dlg, const Action result) {
             if (result.id == ACTION_APPLY.id) {
                 //Log.d("settings after edit:\n", s.toJSON(true));
@@ -1257,7 +1257,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
         if (!project)
             return;
         Setting s = project.settings.copySettings();
-        SettingsDialog dlg = new SettingsDialog(UIString(project.name ~ " settings"d), window, s, createProjectSettingsPages());
+        SettingsDialog dlg = new SettingsDialog(UIString.fromRaw(project.name ~ " settings"d), window, s, createProjectSettingsPages());
         dlg.dialogResult = delegate(Dialog dlg, const Action result) {
             if (result.id == ACTION_APPLY.id) {
                 //Log.d("settings after edit:\n", s.toJSON(true));
@@ -1290,7 +1290,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
     private bool loadProject(Project project) {
         if (!project.load()) {
             _logPanel.logLine("Cannot read project " ~ project.filename);
-            window.showMessageBox(UIString("Cannot open project"d), UIString("Error occured while opening project "d ~ toUTF32(project.filename)));
+            window.showMessageBox(UIString.fromRaw("Cannot open project"d), UIString.fromRaw("Error occured while opening project "d ~ toUTF32(project.filename)));
             return false;
         }
         _logPanel.logLine(toUTF32("Project file " ~ project.filename ~  " is opened ok"));
@@ -1307,7 +1307,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
                     _settings.updateRecentWorkspace(filename);
                 });
             } else {
-                window.showMessageBox(UIString("Cannot open workspace"d), UIString("Error occured while opening workspace"d));
+                window.showMessageBox(UIString.fromRaw("Cannot open workspace"d), UIString.fromRaw("Error occured while opening workspace"d));
                 return;
             }
         } else if (filename.isProjectFile) {
@@ -1319,10 +1319,10 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
                 Project existing = currentWorkspace.findProject(project.filename);
                 if (existing) {
                     _logPanel.logLine("This project already exists in current workspace");
-                    window.showMessageBox(UIString("Open project"d), UIString("Project is already in workspace"d));
+                    window.showMessageBox(UIString.fromRaw("Open project"d), UIString.fromRaw("Project is already in workspace"d));
                     return;
                 }
-                window.showMessageBox(UIString("Open project"d), UIString("Do you want to create new workspace or use current one?"d),
+                window.showMessageBox(UIString.fromRaw("Open project"d), UIString.fromRaw("Do you want to create new workspace or use current one?"d),
                                       [ACTION_ADD_TO_CURRENT_WORKSPACE, ACTION_CREATE_NEW_WORKSPACE, ACTION_CANCEL], 0, delegate(const Action result) {
                                           if (result.id == IDEActions.CreateNewWorkspace) {
                                               // new ws
@@ -1344,7 +1344,7 @@ class IDEFrame : AppFrame, ProgramExecutionStatusListener, BreakpointListChangeL
             }
         } else {
             _logPanel.logLine("File is not recognized as DlangIDE project or workspace file");
-            window.showMessageBox(UIString("Invalid workspace file"d), UIString("This file is not a valid workspace or project file"d));
+            window.showMessageBox(UIString.fromRaw("Invalid workspace file"d), UIString.fromRaw("This file is not a valid workspace or project file"d));
         }
     }
 
diff --git a/src/dlangide/ui/homescreen.d b/src/dlangide/ui/homescreen.d
index b2455a3..eaa864f 100644
--- a/src/dlangide/ui/homescreen.d
+++ b/src/dlangide/ui/homescreen.d
@@ -47,7 +47,7 @@ class HomeScreen : ScrollWidget {
         if (recentWorkspaces.length) {
             foreach(fn; recentWorkspaces) {
                 Action a = ACTION_FILE_OPEN_WORKSPACE.clone();
-                a.label = UIString(toUTF32(stripExtension(baseName(fn))));
+                a.label = UIString.fromRaw(toUTF32(stripExtension(baseName(fn))));
                 a.stringParam = fn;
                 _column1.addChild(new LinkButton(a));
             }
diff --git a/src/dlangide/ui/newfile.d b/src/dlangide/ui/newfile.d
index 27aadff..42f41a1 100644
--- a/src/dlangide/ui/newfile.d
+++ b/src/dlangide/ui/newfile.d
@@ -39,7 +39,7 @@ class NewFileDlg : Dialog {
     ProjectFolder _folder;
     string[] _sourcePaths;
     this(IDEFrame parent, Project currentProject, ProjectFolder folder) {
-        super(UIString("New source file"d), parent.window, 
+        super(UIString.fromRaw("New source file"d), parent.window, 
               DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
         _ide = parent;
         _icon = "dlangui-logo1";
@@ -119,7 +119,7 @@ class NewFileDlg : Dialog {
         _edLocation.filetypeIcons["dub.json"] = "project-d";
         _edLocation.filetypeIcons["package.json"] = "project-d";
         _edLocation.filetypeIcons[".dlangidews"] = "project-development";
-        _edLocation.addFilter(FileFilterEntry(UIString("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
+        _edLocation.addFilter(FileFilterEntry(UIString.fromRaw("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
         _edLocation.caption = "Select directory"d;
 
         // fill templates
@@ -266,11 +266,11 @@ class NewFileDlg : Dialog {
         Action newaction = action.clone();
         if (action.id == IDEActions.FileNew) {
             if (!validate()) {
-                window.showMessageBox(UIString("Error"d), UIString("Invalid parameters"));
+                window.showMessageBox(UIString.fromRaw("Error"d), UIString.fromRaw("Invalid parameters"));
                 return;
             }
             if (!createItem()) {
-                window.showMessageBox(UIString("Error"d), UIString("Failed to create project item"));
+                window.showMessageBox(UIString.fromRaw("Error"d), UIString.fromRaw("Failed to create project item"));
                 return;
             }
             newaction.objectParam = _result;
diff --git a/src/dlangide/ui/newproject.d b/src/dlangide/ui/newproject.d
index a84ff65..f180b35 100644
--- a/src/dlangide/ui/newproject.d
+++ b/src/dlangide/ui/newproject.d
@@ -38,7 +38,7 @@ class NewProjectDlg : Dialog {
     IDEFrame _ide;
 
     this(IDEFrame parent, bool newWorkspace, Workspace currentWorkspace, string dir) {
-        super(newWorkspace ? UIString("New Workspace"d) : UIString("New Project"d), parent.window, 
+        super(newWorkspace ? UIString.fromRaw("New Workspace"d) : UIString.fromRaw("New Project"d), parent.window, 
               DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
         _ide = parent;
         _icon = "dlangui-logo1";
@@ -130,7 +130,7 @@ class NewProjectDlg : Dialog {
         _edLocation.filetypeIcons["dub.json"] = "project-d";
         _edLocation.filetypeIcons["package.json"] = "project-d";
         _edLocation.filetypeIcons[".dlangidews"] = "project-development";
-        _edLocation.addFilter(FileFilterEntry(UIString("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
+        _edLocation.addFilter(FileFilterEntry(UIString.fromRaw("DlangIDE files"d), "*.dlangidews;*.d;*.dd;*.di;*.ddoc;*.dh;*.json;*.xml;*.ini"));
         _edLocation.caption = "Select directory"d;
 
         if (_currentWorkspace) {
@@ -273,14 +273,14 @@ class NewProjectDlg : Dialog {
         if (action.id == IDEActions.FileNewWorkspace || action.id == IDEActions.FileNewProject) {
             if (!exists(_location)) {
                 // show message box with OK and CANCEL buttons, cancel by default, and handle its result
-                window.showMessageBox(UIString("Cannot create project"d), UIString("The target location does not exist.\nDo you want to create the target directory?"), [ACTION_YES, ACTION_CANCEL], 1, delegate(const Action a) {
+                window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw("The target location does not exist.\nDo you want to create the target directory?"), [ACTION_YES, ACTION_CANCEL], 1, delegate(const Action a) {
                     if (a.id == StandardAction.Yes) {
                         try {
                             mkdirRecurse(_location);
                             close(action);
                         } catch (Exception e) {
                             setError("Cannot create target location");
-                            window.showMessageBox(UIString("Cannot create project"d), UIString(getError()));
+                            window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw(getError()));
                         }
                     }
                     return true;
@@ -288,11 +288,11 @@ class NewProjectDlg : Dialog {
                 return;
             }
             if (!validate()) {
-                window.showMessageBox(UIString("Cannot create project"d), UIString(getError()));
+                window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw(getError()));
                 return;
             }
             if (!createProject()) {
-                window.showMessageBox(UIString("Cannot create project"d), UIString("Failed to create project"));
+                window.showMessageBox(UIString.fromRaw("Cannot create project"d), UIString.fromRaw("Failed to create project"));
                 return;
             }
             newaction.objectParam = _result;
@@ -496,8 +496,8 @@ extern (C) int UIAppMain(string[] args) {
     };
     // 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));
+        window.showMessageBox(UIString.fromRaw("Ok button pressed"d), 
+                              UIString.fromRaw("Editors content\nEdit1: "d ~ edit1.text ~ "\nEdit2: "d ~ edit2.text));
         return true;
     };
 
diff --git a/src/dlangide/ui/settings.d b/src/dlangide/ui/settings.d
index 930b47d..08735d4 100644
--- a/src/dlangide/ui/settings.d
+++ b/src/dlangide/ui/settings.d
@@ -12,22 +12,22 @@ public import dlangide.workspace.workspacesettings;
 
 /// create DlangIDE settings pages tree
 SettingsPage createSettingsPages() {
-    SettingsPage res = new SettingsPage("", UIString(""d));
+    SettingsPage res = new SettingsPage("", UIString.fromRaw(""d));
 
-    SettingsPage ui = res.addChild("interface", UIString("OPTION_INTERFACE"c));
-    ui.addStringComboBox("interface/theme", UIString("OPTION_THEME"c), [
+    SettingsPage ui = res.addChild("interface", UIString.fromId("OPTION_INTERFACE"c));
+    ui.addStringComboBox("interface/theme", UIString.fromId("OPTION_THEME"c), [
             StringListValue("ide_theme_default", "OPTION_DEFAULT"c), 
             StringListValue("ide_theme_dark", "OPTION_DARK"c)]);
-    ui.addStringComboBox("interface/language", UIString("OPTION_LANGUAGE"c), [
+    ui.addStringComboBox("interface/language", UIString.fromId("OPTION_LANGUAGE"c), [
             StringListValue("en", "MENU_VIEW_LANGUAGE_EN"c), 
             StringListValue("ru", "MENU_VIEW_LANGUAGE_RU"c), 
             StringListValue("es", "MENU_VIEW_LANGUAGE_ES"c),
 	    StringListValue("cs", "MENU_VIEW_LANGUAGE_CS"c)]);
 
-    ui.addIntComboBox("interface/hintingMode", UIString("OPTION_FONT_HINTING"c), [StringListValue(0, "OPTION_FONT_HINTING_NORMAL"c), 
+    ui.addIntComboBox("interface/hintingMode", UIString.fromId("OPTION_FONT_HINTING"c), [StringListValue(0, "OPTION_FONT_HINTING_NORMAL"c), 
                 StringListValue(1, "OPTION_FONT_HINTING_FORCE"c), 
                 StringListValue(2, "OPTION_FONT_HINTING_DISABLED"c), StringListValue(3, "OPTION_FONT_HINTING_LIGHT"c)]);
-    ui.addIntComboBox("interface/minAntialiasedFontSize", UIString("OPTION_FONT_ANTIALIASING"c), 
+    ui.addIntComboBox("interface/minAntialiasedFontSize", UIString.fromId("OPTION_FONT_ANTIALIASING"c), 
                       [StringListValue(0, "OPTION_FONT_ANTIALIASING_ALWAYS_ON"c), 
                       StringListValue(12, "12"d), 
                       StringListValue(14, "14"d), 
@@ -37,7 +37,7 @@ SettingsPage createSettingsPages() {
                       StringListValue(32, "32"d), 
                       StringListValue(48, "48"d), 
                       StringListValue(255, "OPTION_FONT_ANTIALIASING_ALWAYS_OFF"c)]);
-    ui.addFloatComboBox("interface/fontGamma", UIString("OPTION_FONT_GAMMA"c), 
+    ui.addFloatComboBox("interface/fontGamma", UIString.fromId("OPTION_FONT_GAMMA"c), 
                    [
                     StringListValue(500,  "0.5   "d),
                     StringListValue(600,  "0.6   "d),
@@ -58,8 +58,8 @@ SettingsPage createSettingsPages() {
                     StringListValue(1700, "1.7   "d), 
                     StringListValue(2000, "2.0   "d)]);
 
-    SettingsPage ed = res.addChild("editors", UIString("OPTION_EDITORS"c));
-    SettingsPage texted = ed.addChild("editors/textEditor", UIString("OPTION_TEXT_EDITORS"c));
+    SettingsPage ed = res.addChild("editors", UIString.fromId("OPTION_EDITORS"c));
+    SettingsPage texted = ed.addChild("editors/textEditor", UIString.fromId("OPTION_TEXT_EDITORS"c));
 
     // font faces
     StringListValue[] faces;
@@ -90,74 +90,74 @@ SettingsPage createSettingsPages() {
         else
             faces ~= StringListValue(face.face, toUTF32(face.face));
     }
-    texted.addStringComboBox("editors/textEditor/fontFace", UIString("OPTION_FONT_FACE"c), faces);
+    texted.addStringComboBox("editors/textEditor/fontFace", UIString.fromId("OPTION_FONT_FACE"c), faces);
 
-    texted.addNumberEdit("editors/textEditor/tabSize", UIString("OPTION_TAB"c), 1, 16, 4);
-    texted.addCheckbox("editors/textEditor/useSpacesForTabs", UIString("OPTION_USE_SPACES"c));
-    texted.addCheckbox("editors/textEditor/smartIndents", UIString("OPTION_SMART_INDENTS"c));
-    texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString("OPTION_SMART_INDENTS_PASTE"c));
-    texted.addCheckbox("editors/textEditor/showWhiteSpaceMarks", UIString("OPTION_SHOW_SPACES"c));
-    texted.addCheckbox("editors/textEditor/showTabPositionMarks", UIString("OPTION_SHOW_TABS"c));
+    texted.addNumberEdit("editors/textEditor/tabSize", UIString.fromId("OPTION_TAB"c), 1, 16, 4);
+    texted.addCheckbox("editors/textEditor/useSpacesForTabs", UIString.fromId("OPTION_USE_SPACES"c));
+    texted.addCheckbox("editors/textEditor/smartIndents", UIString.fromId("OPTION_SMART_INDENTS"c));
+    texted.addCheckbox("editors/textEditor/smartIndentsAfterPaste", UIString.fromId("OPTION_SMART_INDENTS_PASTE"c));
+    texted.addCheckbox("editors/textEditor/showWhiteSpaceMarks", UIString.fromId("OPTION_SHOW_SPACES"c));
+    texted.addCheckbox("editors/textEditor/showTabPositionMarks", UIString.fromId("OPTION_SHOW_TABS"c));
 
 
-    SettingsPage dlang = res.addChild("dlang", UIString("D"d));
-    SettingsPage dub = dlang.addChild("dlang/dub", UIString("DUB"d));
-    dub.addExecutableFileNameEdit("dlang/dub/executable", UIString("OPTION_DUB_EXECUTABLE"c), "dub");
-    dub.addStringEdit("dlang/dub/additional_params", UIString("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
-    SettingsPage rdmd = dlang.addChild("dlang/rdmd", UIString("rdmd"d));
-    rdmd.addExecutableFileNameEdit("dlang/rdmd/executable", UIString("OPTION_RDMD_EXECUTABLE"c), "rdmd");
-    rdmd.addStringEdit("dlang/rdmd/additional_params", UIString("OPTION_RDMD_ADDITIONAL_PARAMS"c), "");
-    SettingsPage ddebug = dlang.addChild("dlang/debugger", UIString("OPTION_DEBUGGER"c));
+    SettingsPage dlang = res.addChild("dlang", UIString.fromRaw("D"d));
+    SettingsPage dub = dlang.addChild("dlang/dub", UIString.fromRaw("DUB"d));
+    dub.addExecutableFileNameEdit("dlang/dub/executable", UIString.fromId("OPTION_DUB_EXECUTABLE"c), "dub");
+    dub.addStringEdit("dlang/dub/additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
+    SettingsPage rdmd = dlang.addChild("dlang/rdmd", UIString.fromRaw("rdmd"d));
+    rdmd.addExecutableFileNameEdit("dlang/rdmd/executable", UIString.fromId("OPTION_RDMD_EXECUTABLE"c), "rdmd");
+    rdmd.addStringEdit("dlang/rdmd/additional_params", UIString.fromId("OPTION_RDMD_ADDITIONAL_PARAMS"c), "");
+    SettingsPage ddebug = dlang.addChild("dlang/debugger", UIString.fromId("OPTION_DEBUGGER"c));
     version (Windows) {
-        ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString("OPTION_DEBUGGER_EXECUTABLE"c), "gdb");
+        ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString.fromId("OPTION_DEBUGGER_EXECUTABLE"c), "gdb");
     } else {
-        ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString("OPTION_DEBUGGER_EXECUTABLE"c), "mago-mi");
+        ddebug.addExecutableFileNameEdit("dlang/debugger/executable", UIString.fromId("OPTION_DEBUGGER_EXECUTABLE"c), "mago-mi");
     }
-    SettingsPage terminal = dlang.addChild("dlang/terminal", UIString("OPTION_TERMINAL"c));
-    terminal.addExecutableFileNameEdit("dlang/terminal/executable", UIString("OPTION_TERMINAL_EXECUTABLE"c), "xterm");
+    SettingsPage terminal = dlang.addChild("dlang/terminal", UIString.fromId("OPTION_TERMINAL"c));
+    terminal.addExecutableFileNameEdit("dlang/terminal/executable", UIString.fromId("OPTION_TERMINAL_EXECUTABLE"c), "xterm");
 
-    SettingsPage toolchains = dlang.addChild("dlang/toolchains", UIString("OPTION_TOOLCHANS"c));
-    SettingsPage dmdtoolchain = toolchains.addChild("dlang/toolchains/dmd", UIString("DMD"d));
-    dmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/dmd/executable", UIString("OPTION_DMD_EXECUTABLE"c), "dmd");
-    dmdtoolchain.addStringEdit("dlang/toolchains/dmd/dub_additional_params", UIString("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
-    SettingsPage ldctoolchain = toolchains.addChild("dlang/toolchains/ldc", UIString("LDC"d));
-    ldctoolchain.addExecutableFileNameEdit("dlang/toolchains/ldc/executable", UIString("OPTION_LDC2_EXECUTABLE"c), "ldc2");
-    ldctoolchain.addStringEdit("dlang/toolchains/ldc/dub_additional_params", UIString("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
-    SettingsPage ldmdtoolchain = toolchains.addChild("dlang/toolchains/ldmd", UIString("LDMD"d));
-    ldmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/ldmd/executable", UIString("OPTION_LDMD2_EXECUTABLE"c), "ldmd2");
-    ldmdtoolchain.addStringEdit("dlang/toolchains/ldmd/dub_additional_params", UIString("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
-    SettingsPage gdctoolchain = toolchains.addChild("dlang/toolchains/gdc", UIString("GDC"d));
-    gdctoolchain.addExecutableFileNameEdit("dlang/toolchains/gdc/executable", UIString("OPTION_GDC_EXECUTABLE"c), "gdc");
-    gdctoolchain.addStringEdit("dlang/toolchains/gdc/dub_additional_params", UIString("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
+    SettingsPage toolchains = dlang.addChild("dlang/toolchains", UIString.fromId("OPTION_TOOLCHANS"c));
+    SettingsPage dmdtoolchain = toolchains.addChild("dlang/toolchains/dmd", UIString.fromRaw("DMD"d));
+    dmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/dmd/executable", UIString.fromId("OPTION_DMD_EXECUTABLE"c), "dmd");
+    dmdtoolchain.addStringEdit("dlang/toolchains/dmd/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
+    SettingsPage ldctoolchain = toolchains.addChild("dlang/toolchains/ldc", UIString.fromRaw("LDC"d));
+    ldctoolchain.addExecutableFileNameEdit("dlang/toolchains/ldc/executable", UIString.fromId("OPTION_LDC2_EXECUTABLE"c), "ldc2");
+    ldctoolchain.addStringEdit("dlang/toolchains/ldc/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
+    SettingsPage ldmdtoolchain = toolchains.addChild("dlang/toolchains/ldmd", UIString.fromRaw("LDMD"d));
+    ldmdtoolchain.addExecutableFileNameEdit("dlang/toolchains/ldmd/executable", UIString.fromId("OPTION_LDMD2_EXECUTABLE"c), "ldmd2");
+    ldmdtoolchain.addStringEdit("dlang/toolchains/ldmd/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
+    SettingsPage gdctoolchain = toolchains.addChild("dlang/toolchains/gdc", UIString.fromRaw("GDC"d));
+    gdctoolchain.addExecutableFileNameEdit("dlang/toolchains/gdc/executable", UIString.fromId("OPTION_GDC_EXECUTABLE"c), "gdc");
+    gdctoolchain.addStringEdit("dlang/toolchains/gdc/dub_additional_params", UIString.fromId("OPTION_DUB_ADDITIONAL_PARAMS"c), "");
 
     return res;
 }
 
 /// create DlangIDE settings pages tree
 SettingsPage createProjectSettingsPages() {
-    SettingsPage res = new SettingsPage("", UIString(""d));
+    SettingsPage res = new SettingsPage("", UIString.fromRaw(""d));
 
-    SettingsPage build = res.addChild("build", UIString("Build"d));
-    build.addStringComboBox("build/toolchain", UIString("Toolchain"d), [
+    SettingsPage build = res.addChild("build", UIString.fromRaw("Build"d));
+    build.addStringComboBox("build/toolchain", UIString.fromRaw("Toolchain"d), [
             StringListValue("default", "Default"d), 
             StringListValue("dmd", "DMD"d), 
             StringListValue("ldc", "LDC"d), 
             StringListValue("ldmd", "LDMD"d), 
             StringListValue("gdc", "GDC"d)]);
-    build.addStringComboBox("build/arch", UIString("Architecture"d), [
+    build.addStringComboBox("build/arch", UIString.fromRaw("Architecture"d), [
             StringListValue("default", "Default"d), 
             StringListValue("x86", "x86"d), 
             StringListValue("x86_64", "x86_64"d),
             StringListValue("arm", "arm"d),
             StringListValue("arm64", "arm64"d),
     ]);
-    build.addCheckbox("build/verbose", UIString("Verbose"d), true);
-    build.addStringEdit("build/dub_additional_params", UIString("DUB additional params"d), "");
+    build.addCheckbox("build/verbose", UIString.fromRaw("Verbose"d), true);
+    build.addStringEdit("build/dub_additional_params", UIString.fromRaw("DUB additional params"d), "");
 
-    SettingsPage dbg = res.addChild("debug", UIString("Run and Debug"d));
-    dbg.addStringEdit("debug/run_args", UIString("Command line args"d), "");
-    dbg.addDirNameEdit("debug/working_dir", UIString("Working directory"d), "");
-    dbg.addCheckbox("debug/external_console", UIString("Run in external console"d), true);
+    SettingsPage dbg = res.addChild("debug", UIString.fromRaw("Run and Debug"d));
+    dbg.addStringEdit("debug/run_args", UIString.fromRaw("Command line args"d), "");
+    dbg.addDirNameEdit("debug/working_dir", UIString.fromRaw("Working directory"d), "");
+    dbg.addCheckbox("debug/external_console", UIString.fromRaw("Run in external console"d), true);
 
     return res;
 }

From fbac6bd3cb5b46ac3514aa008e399c6061a72d72 Mon Sep 17 00:00:00 2001
From: Vadim Lopatin <coolreader.org@gmail.com>
Date: Mon, 24 Jul 2017 14:41:19 +0300
Subject: [PATCH 3/4] fix toUTF8 deprecation warning

---
 src/dlangide/ui/dsourceedit.d | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/dlangide/ui/dsourceedit.d b/src/dlangide/ui/dsourceedit.d
index fcad06c..b1939cf 100644
--- a/src/dlangide/ui/dsourceedit.d
+++ b/src/dlangide/ui/dsourceedit.d
@@ -25,7 +25,7 @@ import ddebug.common.debugger;
 
 import std.algorithm;
 import std.utf : toUTF32;
-import std.utf : toUTF8;
+import dlangui.core.types : toUTF8;
 
 interface BreakpointListChangeListener {
     void onBreakpointListChanged(ProjectSourceFile sourceFile, Breakpoint[] breakpoints);

From 133cd7ce3e307c2de73449be878ed088d9fb43bf Mon Sep 17 00:00:00 2001
From: Vadim Lopatin <coolreader.org@gmail.com>
Date: Sat, 29 Jul 2017 20:33:44 +0300
Subject: [PATCH 4/4] update Dlangui dep version

---
 dub.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dub.json b/dub.json
index 1324fcb..84959fe 100644
--- a/dub.json
+++ b/dub.json
@@ -12,7 +12,7 @@
     "stringImportPaths": ["views", "views/res", "views/res/i18n", "views/res/mdpi", "views/res/hdpi"],
 
     "dependencies": {
-        "dlangui": "==0.9.82",
+        "dlangui": "==0.9.83",
         "dcd": "~>0.9.0"
     },