example1: support opening of file in separate tab with open file dialog

This commit is contained in:
Vadim Lopatin 2015-01-19 13:47:01 +03:00
parent 4bbab0b7ca
commit 00e4d207d4
5 changed files with 51 additions and 13 deletions

View File

@ -66,7 +66,7 @@
<debuglevel>0</debuglevel>
<debugids>DebugFocus</debugids>
<versionlevel>0</versionlevel>
<versionids>USE_OPENGL Unicode</versionids>
<versionids>Unicode</versionids>
<dump_source>0</dump_source>
<mapverbosity>0</mapverbosity>
<createImplib>1</createImplib>
@ -389,6 +389,7 @@
<File path="src\dlangui\widgets\menu.d" />
<File path="src\dlangui\widgets\popup.d" />
<File path="src\dlangui\widgets\scroll.d" />
<File path="src\dlangui\widgets\srcedit.d" />
<File path="src\dlangui\widgets\statusline.d" />
<File path="src\dlangui\widgets\styles.d" />
<File path="src\dlangui\widgets\tabs.d" />

View File

@ -66,7 +66,7 @@
<debuglevel>0</debuglevel>
<debugids />
<versionlevel>0</versionlevel>
<versionids>USE_OPENGL Unicode</versionids>
<versionids>Unicode</versionids>
<dump_source>0</dump_source>
<mapverbosity>3</mapverbosity>
<createImplib>0</createImplib>
@ -89,7 +89,6 @@
<resfile />
<exefile>$(OutDir)\$(ProjectName).exe</exefile>
<useStdLibPath>1</useStdLibPath>
<cRuntime>2</cRuntime>
<additionalOptions>-profile</additionalOptions>
<preBuildCommand />
<postBuildCommand />
@ -184,7 +183,6 @@
<resfile />
<exefile>$(OutDir)\$(ProjectName).exe</exefile>
<useStdLibPath>1</useStdLibPath>
<cRuntime>1</cRuntime>
<additionalOptions />
<preBuildCommand />
<postBuildCommand />

View File

@ -22,6 +22,8 @@ import dlangui.dialogs.msgbox;
import std.stdio;
import std.conv;
import std.utf;
import std.algorithm;
import std.path;
mixin APP_ENTRY_POINT;
@ -186,9 +188,10 @@ extern (C) int UIAppMain(string[] args) {
// load theme from file "theme_default.xml"
Platform.instance.uiTheme = "theme_default";
// you can override default hinting mode here
// you can override default hinting mode here (Normal, AutoHint, Disabled)
FontManager.instance.hintingMode = HintingMode.Normal;
// you can override antialiasing setting here
// you can override antialiasing setting here (0 means antialiasing always on, some big value = always off)
// fonts with size less than specified value will not be antialiased
FontManager.instance.minAnitialiasedFontSize = 0; // 0 means always antialiased
// create window
@ -197,6 +200,8 @@ extern (C) int UIAppMain(string[] args) {
static if (true) {
VerticalLayout contentLayout = new VerticalLayout();
TabWidget tabs = new TabWidget("TABS");
//=========================================================================
// create main menu
@ -303,8 +308,29 @@ extern (C) int UIAppMain(string[] args) {
//dlg.filterIndex = 2;
dlg.onDialogResult = delegate(Dialog dlg, const Action result) {
if (result.id == ACTION_OPEN.id) {
Log.d("FileDialog.onDialogResult: ", result, " param=", result.stringParam);
window.showMessageBox(UIString("FileOpen result"d), UIString(toUTF32(result.stringParam)));
string filename = result.stringParam;
if (filename.endsWith(".d") || filename.endsWith(".txt") || filename.endsWith(".cpp") || filename.endsWith(".h") || filename.endsWith(".c")
|| filename.endsWith(".json") || filename.endsWith(".dd") || filename.endsWith(".ddoc") || filename.endsWith(".xml") || filename.endsWith(".html")
|| filename.endsWith(".html") || filename.endsWith(".css") || filename.endsWith(".log") || filename.endsWith(".hpp")) {
// open source file in tab
int index = tabs.tabIndex(filename);
if (index >= 0) {
// file is already opened in tab
tabs.selectTab(index, true);
} else {
SourceEdit editor = new SourceEdit(filename);
if (editor.load(filename)) {
tabs.addTab(editor, toUTF32(baseName(filename)));
tabs.selectTab(filename);
} else {
destroy(editor);
window.showMessageBox(UIString("File open error"d), UIString("Cannot open file "d ~ toUTF32(filename)));
}
}
} else {
Log.d("FileDialog.onDialogResult: ", result, " param=", result.stringParam);
window.showMessageBox(UIString("FileOpen result"d), UIString("Filename: "d ~ toUTF32(filename)));
}
}
};
@ -321,7 +347,6 @@ extern (C) int UIAppMain(string[] args) {
// ========= create tabs ===================
TabWidget tabs = new TabWidget("TABS");
tabs.onTabChangedListener = delegate(string newTabId, string oldTabId) {
window.windowCaption = tabs.tab(newTabId).text.value ~ " - dlangui example 1"d;
};

View File

@ -463,22 +463,22 @@ class FontManager {
/// removes entries not used after last call of checkpoint() or cleanup()
abstract void cleanup();
/// get min font size for antialiased fonts
/// get min font size for antialiased fonts (0 means antialiasing always on, some big value = always off)
@property int minAnitialiasedFontSize() {
return _minAnitialiasedFontSize;
}
/// set new min font size for antialiased fonts
/// set new min font size for antialiased fonts - fonts with size >= specified value will be antialiased (0 means antialiasing always on, some big value = always off)
@property void minAnitialiasedFontSize(int size) {
_minAnitialiasedFontSize = size;
}
/// get current hinting mode
/// get current hinting mode (Normal, AutoHint, Disabled)
@property HintingMode hintingMode() {
return _hintingMode;
}
/// set hinting mode
/// set hinting mode (Normal, AutoHint, Disabled)
@property void hintingMode(HintingMode mode) {
_hintingMode = mode;
}

View File

@ -476,6 +476,15 @@ class TabHost : FrameLayout, TabHandler {
onTabChangedListener(newActiveTabId, previousTabId);
}
/// get tab content widget by id
Widget tabBody(string id) {
for (int i = 0; i < _children.count; i++) {
if (_children[i].compareId(id))
return _children[i];
}
return null;
}
/// remove tab
TabHost removeTab(string id) {
assert(_tabControl !is null, "No TabControl set for TabHost");
@ -588,6 +597,11 @@ class TabWidget : VerticalLayout, TabHandler {
_tabControl.selectTab(index, updateAccess);
}
/// get tab content widget by id
Widget tabBody(string id) {
return _tabHost.tabBody(id);
}
/// returns tab item by id (null if index out of range)
TabItem tab(int index) {
return _tabControl.tab(index);