mirror of https://github.com/buggins/dlangui.git
IRC client example: settings dialog is working - #201
This commit is contained in:
parent
44faf49b7b
commit
d50c71695b
|
@ -211,6 +211,7 @@
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder name="ui">
|
<Folder name="ui">
|
||||||
<File path="src\ircclient\ui\frame.d" />
|
<File path="src\ircclient\ui\frame.d" />
|
||||||
|
<File path="src\ircclient\ui\settings.d" />
|
||||||
<File path="src\ircclient\ui\settingsdlg.d" />
|
<File path="src\ircclient\ui\settingsdlg.d" />
|
||||||
</Folder>
|
</Folder>
|
||||||
</Folder>
|
</Folder>
|
||||||
|
|
|
@ -1,24 +1,21 @@
|
||||||
module ircclient.ui.frame;
|
module ircclient.ui.frame;
|
||||||
|
|
||||||
import dlangui;
|
import dlangui;
|
||||||
import dlangui.dialogs.filedlg;
|
|
||||||
import dlangui.dialogs.dialog;
|
import dlangui.dialogs.dialog;
|
||||||
import dlangui.dml.dmlhighlight;
|
import dlangui.core.settings;
|
||||||
|
|
||||||
import std.array : replaceFirst;
|
import std.array : replaceFirst;
|
||||||
|
|
||||||
import ircclient.net.client;
|
import ircclient.net.client;
|
||||||
import ircclient.ui.settingsdlg;
|
import ircclient.ui.settingsdlg;
|
||||||
|
import ircclient.ui.settings;
|
||||||
|
|
||||||
import std.string : startsWith, indexOf;
|
import std.string : startsWith, indexOf;
|
||||||
|
import std.path;
|
||||||
|
|
||||||
// action codes
|
// action codes
|
||||||
enum IDEActions : int {
|
enum IRCActions : int {
|
||||||
//ProjectOpen = 1010000,
|
FileExit = 12300,
|
||||||
FileNew = 1010000,
|
|
||||||
FileOpen,
|
|
||||||
FileSave,
|
|
||||||
FileSaveAs,
|
|
||||||
FileSaveAll,
|
|
||||||
FileClose,
|
|
||||||
FileExit,
|
|
||||||
EditPreferences,
|
EditPreferences,
|
||||||
Connect,
|
Connect,
|
||||||
Disconnect,
|
Disconnect,
|
||||||
|
@ -26,32 +23,30 @@ enum IDEActions : int {
|
||||||
}
|
}
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
const Action ACTION_FILE_NEW = new Action(IDEActions.FileNew, "MENU_FILE_NEW"c, "document-new", KeyCode.KEY_N, KeyFlag.Control);
|
const Action ACTION_FILE_EXIT = new Action(IRCActions.FileExit, "MENU_FILE_EXIT"c, "document-close"c, KeyCode.KEY_X, KeyFlag.Alt);
|
||||||
const Action ACTION_FILE_SAVE = (new Action(IDEActions.FileSave, "MENU_FILE_SAVE"c, "document-save", KeyCode.KEY_S, KeyFlag.Control)).disableByDefault();
|
|
||||||
const Action ACTION_FILE_SAVE_AS = (new Action(IDEActions.FileSaveAs, "MENU_FILE_SAVE_AS"c)).disableByDefault();
|
|
||||||
const Action ACTION_FILE_OPEN = new Action(IDEActions.FileOpen, "MENU_FILE_OPEN"c, "document-open", KeyCode.KEY_O, KeyFlag.Control);
|
|
||||||
const Action ACTION_FILE_EXIT = new Action(IDEActions.FileExit, "MENU_FILE_EXIT"c, "document-close"c, KeyCode.KEY_X, KeyFlag.Alt);
|
|
||||||
const Action ACTION_EDIT_COPY = (new Action(EditorActions.Copy, "MENU_EDIT_COPY"c, "edit-copy"c, KeyCode.KEY_C, KeyFlag.Control)).addAccelerator(KeyCode.INS, KeyFlag.Control).disableByDefault();
|
const Action ACTION_EDIT_COPY = (new Action(EditorActions.Copy, "MENU_EDIT_COPY"c, "edit-copy"c, KeyCode.KEY_C, KeyFlag.Control)).addAccelerator(KeyCode.INS, KeyFlag.Control).disableByDefault();
|
||||||
const Action ACTION_EDIT_PASTE = (new Action(EditorActions.Paste, "MENU_EDIT_PASTE"c, "edit-paste"c, KeyCode.KEY_V, KeyFlag.Control)).addAccelerator(KeyCode.INS, KeyFlag.Shift).disableByDefault();
|
const Action ACTION_EDIT_PASTE = (new Action(EditorActions.Paste, "MENU_EDIT_PASTE"c, "edit-paste"c, KeyCode.KEY_V, KeyFlag.Control)).addAccelerator(KeyCode.INS, KeyFlag.Shift).disableByDefault();
|
||||||
const Action ACTION_EDIT_CUT = (new Action(EditorActions.Cut, "MENU_EDIT_CUT"c, "edit-cut"c, KeyCode.KEY_X, KeyFlag.Control)).addAccelerator(KeyCode.DEL, KeyFlag.Shift).disableByDefault();
|
const Action ACTION_EDIT_CUT = (new Action(EditorActions.Cut, "MENU_EDIT_CUT"c, "edit-cut"c, KeyCode.KEY_X, KeyFlag.Control)).addAccelerator(KeyCode.DEL, KeyFlag.Shift).disableByDefault();
|
||||||
const Action ACTION_EDIT_UNDO = (new Action(EditorActions.Undo, "MENU_EDIT_UNDO"c, "edit-undo"c, KeyCode.KEY_Z, KeyFlag.Control)).disableByDefault();
|
const Action ACTION_EDIT_UNDO = (new Action(EditorActions.Undo, "MENU_EDIT_UNDO"c, "edit-undo"c, KeyCode.KEY_Z, KeyFlag.Control)).disableByDefault();
|
||||||
const Action ACTION_EDIT_REDO = (new Action(EditorActions.Redo, "MENU_EDIT_REDO"c, "edit-redo"c, KeyCode.KEY_Y, KeyFlag.Control)).addAccelerator(KeyCode.KEY_Z, KeyFlag.Control|KeyFlag.Shift).disableByDefault();
|
const Action ACTION_EDIT_REDO = (new Action(EditorActions.Redo, "MENU_EDIT_REDO"c, "edit-redo"c, KeyCode.KEY_Y, KeyFlag.Control)).addAccelerator(KeyCode.KEY_Z, KeyFlag.Control|KeyFlag.Shift).disableByDefault();
|
||||||
const Action ACTION_EDIT_INDENT = (new Action(EditorActions.Indent, "MENU_EDIT_INDENT"c, "edit-indent"c, KeyCode.TAB, 0)).addAccelerator(KeyCode.KEY_BRACKETCLOSE, KeyFlag.Control).disableByDefault();
|
|
||||||
const Action ACTION_EDIT_UNINDENT = (new Action(EditorActions.Unindent, "MENU_EDIT_UNINDENT"c, "edit-unindent", KeyCode.TAB, KeyFlag.Shift)).addAccelerator(KeyCode.KEY_BRACKETOPEN, KeyFlag.Control).disableByDefault();
|
|
||||||
const Action ACTION_EDIT_TOGGLE_LINE_COMMENT = (new Action(EditorActions.ToggleLineComment, "MENU_EDIT_TOGGLE_LINE_COMMENT"c, null, KeyCode.KEY_DIVIDE, KeyFlag.Control)).disableByDefault();
|
|
||||||
const Action ACTION_EDIT_TOGGLE_BLOCK_COMMENT = (new Action(EditorActions.ToggleBlockComment, "MENU_EDIT_TOGGLE_BLOCK_COMMENT"c, null, KeyCode.KEY_DIVIDE, KeyFlag.Control|KeyFlag.Shift)).disableByDefault();
|
|
||||||
|
|
||||||
const Action ACTION_EDIT_PREFERENCES = (new Action(IDEActions.EditPreferences, "MENU_EDIT_PREFERENCES"c, "document-properties"c, KeyCode.F9, 0));
|
const Action ACTION_EDIT_PREFERENCES = (new Action(IRCActions.EditPreferences, "MENU_EDIT_PREFERENCES"c, "document-properties"c, KeyCode.F9, 0));
|
||||||
|
|
||||||
const Action ACTION_CONNECT = (new Action(IDEActions.Connect, "MENU_CONNECT"c, "connect"c, KeyCode.F5, 0)).disableByDefault();
|
const Action ACTION_CONNECT = (new Action(IRCActions.Connect, "MENU_CONNECT"c, "connect"c, KeyCode.F5, 0)).disableByDefault();
|
||||||
const Action ACTION_DISCONNECT = (new Action(IDEActions.Disconnect, "MENU_DISCONNECT"c, "disconnect"c, KeyCode.F5, 0)).disableByDefault();
|
const Action ACTION_DISCONNECT = (new Action(IRCActions.Disconnect, "MENU_DISCONNECT"c, "disconnect"c, KeyCode.F5, 0)).disableByDefault();
|
||||||
|
|
||||||
const Action ACTION_HELP_ABOUT = new Action(IDEActions.HelpAbout, "MENU_HELP_ABOUT"c, "document-open"c, KeyCode.F1, 0);
|
const Action ACTION_HELP_ABOUT = new Action(IRCActions.HelpAbout, "MENU_HELP_ABOUT"c, "document-open"c, KeyCode.F1, 0);
|
||||||
|
|
||||||
class IRCFrame : AppFrame, IRCClientCallback {
|
class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
|
|
||||||
MenuItem mainMenuItems;
|
MenuItem mainMenuItems;
|
||||||
IRCClient _client;
|
IRCClient _client;
|
||||||
|
IRCSettings _settings;
|
||||||
|
|
||||||
|
|
||||||
|
this() {
|
||||||
|
}
|
||||||
|
|
||||||
~this() {
|
~this() {
|
||||||
if (_client)
|
if (_client)
|
||||||
|
@ -60,6 +55,10 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
|
|
||||||
override protected void initialize() {
|
override protected void initialize() {
|
||||||
_appName = "DlangUI_IRCClient";
|
_appName = "DlangUI_IRCClient";
|
||||||
|
_settings = new IRCSettings(buildNormalizedPath(settingsDir, "settings.json"));
|
||||||
|
_settings.load();
|
||||||
|
_settings.updateDefaults();
|
||||||
|
_settings.save();
|
||||||
super.initialize();
|
super.initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +89,7 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
tb.addButtons(//ACTION_FILE_NEW, ACTION_FILE_OPEN, ACTION_FILE_SAVE, ACTION_SEPARATOR,
|
tb.addButtons(//ACTION_FILE_NEW, ACTION_FILE_OPEN, ACTION_FILE_SAVE, ACTION_SEPARATOR,
|
||||||
ACTION_CONNECT,
|
ACTION_CONNECT,
|
||||||
ACTION_DISCONNECT,
|
ACTION_DISCONNECT,
|
||||||
|
ACTION_SEPARATOR,
|
||||||
ACTION_EDIT_PREFERENCES,
|
ACTION_EDIT_PREFERENCES,
|
||||||
ACTION_HELP_ABOUT);
|
ACTION_HELP_ABOUT);
|
||||||
|
|
||||||
|
@ -108,19 +108,19 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
override bool handleAction(const Action a) {
|
override bool handleAction(const Action a) {
|
||||||
if (a) {
|
if (a) {
|
||||||
switch (a.id) {
|
switch (a.id) {
|
||||||
case IDEActions.FileExit:
|
case IRCActions.FileExit:
|
||||||
if (onCanClose())
|
if (onCanClose())
|
||||||
window.close();
|
window.close();
|
||||||
return true;
|
return true;
|
||||||
case IDEActions.HelpAbout:
|
case IRCActions.HelpAbout:
|
||||||
window.showMessageBox(UIString("About DlangUI IRC Client"d),
|
window.showMessageBox(UIString("About DlangUI IRC Client"d),
|
||||||
UIString("DLangUI IRC Client\n(C) Vadim Lopatin, 2015\nhttp://github.com/buggins/dlangui\nSimple IRC client"d));
|
UIString("DLangUI IRC Client\n(C) Vadim Lopatin, 2015\nhttp://github.com/buggins/dlangui\nSimple IRC client"d));
|
||||||
return true;
|
return true;
|
||||||
case IDEActions.EditPreferences:
|
case IRCActions.EditPreferences:
|
||||||
showPreferences();
|
showPreferences();
|
||||||
return true;
|
return true;
|
||||||
case IDEActions.Connect:
|
case IRCActions.Connect:
|
||||||
case IDEActions.Disconnect:
|
case IRCActions.Disconnect:
|
||||||
if (!_client || _client.state == SocketState.Disconnected)
|
if (!_client || _client.state == SocketState.Disconnected)
|
||||||
connect();
|
connect();
|
||||||
else
|
else
|
||||||
|
@ -134,13 +134,15 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
}
|
}
|
||||||
|
|
||||||
void showPreferences() {
|
void showPreferences() {
|
||||||
SettingsDialog dlg = new SettingsDialog(this);
|
IRCSettings s = _settings.clone();
|
||||||
|
SettingsDialog dlg = new SettingsDialog(this, s, !_client || _client.state == SocketState.Disconnected);
|
||||||
dlg.dialogResult = delegate(Dialog dlg, const Action result) {
|
dlg.dialogResult = delegate(Dialog dlg, const Action result) {
|
||||||
if (result.id == ACTION_APPLY.id) {
|
if (result.id == ACTION_APPLY.id || result.id == ACTION_CONNECT.id) {
|
||||||
//Log.d("settings after edit:\n", s.toJSON(true));
|
_settings.applySettings(s.setting);
|
||||||
//_settings.applySettings(s);
|
_settings.save();
|
||||||
//applySettings(_settings);
|
}
|
||||||
//_settings.save();
|
if (result.id == ACTION_CONNECT.id) {
|
||||||
|
connect();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
dlg.show();
|
dlg.show();
|
||||||
|
@ -149,17 +151,14 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
/// override to handle specific actions state (e.g. change enabled state for supported actions)
|
/// override to handle specific actions state (e.g. change enabled state for supported actions)
|
||||||
override bool handleActionStateRequest(const Action a) {
|
override bool handleActionStateRequest(const Action a) {
|
||||||
switch (a.id) {
|
switch (a.id) {
|
||||||
case IDEActions.HelpAbout:
|
case IRCActions.HelpAbout:
|
||||||
case IDEActions.FileNew:
|
case IRCActions.EditPreferences:
|
||||||
case IDEActions.FileSave:
|
|
||||||
case IDEActions.FileOpen:
|
|
||||||
case IDEActions.EditPreferences:
|
|
||||||
a.state = ACTION_STATE_ENABLED;
|
a.state = ACTION_STATE_ENABLED;
|
||||||
return true;
|
return true;
|
||||||
case IDEActions.Connect:
|
case IRCActions.Connect:
|
||||||
a.state = !_client || _client.state == SocketState.Disconnected ? ACTION_STATE_ENABLED : ACTION_STATE_INVISIBLE;
|
a.state = !_client || _client.state == SocketState.Disconnected ? ACTION_STATE_ENABLED : ACTION_STATE_INVISIBLE;
|
||||||
return true;
|
return true;
|
||||||
case IDEActions.Disconnect:
|
case IRCActions.Disconnect:
|
||||||
a.state = !_client || _client.state == SocketState.Disconnected ? ACTION_STATE_INVISIBLE : ACTION_STATE_ENABLED;
|
a.state = !_client || _client.state == SocketState.Disconnected ? ACTION_STATE_INVISIBLE : ACTION_STATE_ENABLED;
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
|
@ -185,7 +184,7 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
_client.socket = connection;
|
_client.socket = connection;
|
||||||
_client.callback = this;
|
_client.callback = this;
|
||||||
}
|
}
|
||||||
_client.connect("irc.freenode.net", 6667);
|
_client.connect(_settings.host, _settings.port);
|
||||||
}
|
}
|
||||||
|
|
||||||
IRCWindow getOrCreateWindowFor(string party) {
|
IRCWindow getOrCreateWindowFor(string party) {
|
||||||
|
@ -201,9 +200,11 @@ class IRCFrame : AppFrame, IRCClientCallback {
|
||||||
void onIRCConnect(IRCClient client) {
|
void onIRCConnect(IRCClient client) {
|
||||||
IRCWindow w = getOrCreateWindowFor(client.hostPort);
|
IRCWindow w = getOrCreateWindowFor(client.hostPort);
|
||||||
w.addLine("connected to " ~ client.hostPort);
|
w.addLine("connected to " ~ client.hostPort);
|
||||||
client.sendMessage("USER username 0 * :Real name");
|
client.sendMessage("USER " ~ _settings.userName ~ " 0 * :" ~ _settings.userRealName);
|
||||||
client.nick("dlangui_irc");
|
client.nick(_settings.nick);
|
||||||
client.join("#clienttest");
|
string channel = _settings.defChannel;
|
||||||
|
if (_settings.joinOnConnect && channel.length > 1 && channel.startsWith("#"))
|
||||||
|
client.join(channel);
|
||||||
statusLine.setStatusText(toUTF32("Connected to " ~ client.hostPort));
|
statusLine.setStatusText(toUTF32("Connected to " ~ client.hostPort));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
module ircclient.ui.settings;
|
||||||
|
|
||||||
|
import dlangui.core.settings;
|
||||||
|
|
||||||
|
class IRCSettings : SettingsFile {
|
||||||
|
this(string filename) {
|
||||||
|
super(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
IRCSettings clone() {
|
||||||
|
IRCSettings res = new IRCSettings(filename);
|
||||||
|
res.applySettings(setting);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
override void updateDefaults() {
|
||||||
|
// def server
|
||||||
|
serverSettings.setStringDef("host", "irc.freenode.net");
|
||||||
|
serverSettings.setUintegerDef("port", 6667);
|
||||||
|
// def user
|
||||||
|
userSettings.setStringDef("username", "user");
|
||||||
|
userSettings.setStringDef("realname", "User");
|
||||||
|
userSettings.setStringDef("nick", "dlanguiIRC");
|
||||||
|
userSettings.setStringDef("alternick", "d_IRC_client");
|
||||||
|
// channel settings
|
||||||
|
channelSettings.setStringDef("channelName", "#d");
|
||||||
|
channelSettings.setBooleanDef("joinOnConnect", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@property Setting serverSettings() { return _setting.objectByPath("server", true); }
|
||||||
|
|
||||||
|
@property string host() { return serverSettings.getString("host", "irc.freenode.net"); }
|
||||||
|
@property void host(string s) { serverSettings.setString("host", s); }
|
||||||
|
@property ushort port() { return cast(ushort)serverSettings.getUinteger("port", 6667); }
|
||||||
|
@property void port(ushort v) { serverSettings.setUinteger("port", v); }
|
||||||
|
|
||||||
|
@property Setting channelSettings() { return _setting.objectByPath("channels/startup", true); }
|
||||||
|
|
||||||
|
@property string defChannel() { return channelSettings.getString("channelName", ""); }
|
||||||
|
@property void defChannel(string s) { channelSettings.setString("channelName", s); }
|
||||||
|
@property bool joinOnConnect() { return channelSettings.getBoolean("joinOnConnect", true); }
|
||||||
|
@property void joinOnConnect(bool v) { channelSettings.setBoolean("joinOnConnect", v); }
|
||||||
|
|
||||||
|
@property Setting userSettings() { return _setting.objectByPath("user", true); }
|
||||||
|
|
||||||
|
@property string nick() { return userSettings.getString("nick", ""); }
|
||||||
|
@property void nick(string s) { userSettings.setString("nick", s); }
|
||||||
|
@property string alternateNick() { return userSettings.getString("alternick", ""); }
|
||||||
|
@property void alternateNick(string s) { userSettings.setString("alternick", s); }
|
||||||
|
@property string userName() { return userSettings.getString("username", "user"); }
|
||||||
|
@property void userName(string s) { userSettings.setString("username", s); }
|
||||||
|
@property string userRealName() { return userSettings.getString("realname", "User"); }
|
||||||
|
@property void userRealName(string s) { userSettings.setString("realname", s); }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,19 @@ import dlangui.dialogs.dialog;
|
||||||
import dlangui.widgets.widget;
|
import dlangui.widgets.widget;
|
||||||
import dlangui.dml.parser;
|
import dlangui.dml.parser;
|
||||||
import ircclient.ui.frame;
|
import ircclient.ui.frame;
|
||||||
|
import ircclient.ui.settings;
|
||||||
|
|
||||||
class SettingsDialog : Dialog {
|
class SettingsDialog : Dialog {
|
||||||
IRCFrame _frame;
|
IRCFrame _frame;
|
||||||
this(IRCFrame parent) {
|
IRCSettings _settings;
|
||||||
|
bool _allowConnect;
|
||||||
|
this(IRCFrame parent, IRCSettings settings, bool allowConnect) {
|
||||||
super(UIString("IRC Client Settings"d), parent.window,
|
super(UIString("IRC Client Settings"d), parent.window,
|
||||||
DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
|
DialogFlag.Modal | DialogFlag.Resizable | DialogFlag.Popup, 500, 400);
|
||||||
_icon = "dlangui-logo1";
|
_icon = "dlangui-logo1";
|
||||||
_frame = parent;
|
_frame = parent;
|
||||||
|
_settings = settings;
|
||||||
|
_allowConnect = allowConnect;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// override to implement creation of dialog controls
|
/// override to implement creation of dialog controls
|
||||||
|
@ -31,23 +36,23 @@ class SettingsDialog : Dialog {
|
||||||
layoutWidth: fill; layoutHeight: wrap
|
layoutWidth: fill; layoutHeight: wrap
|
||||||
|
|
||||||
TextWidget { text: "IRC Server host name" }
|
TextWidget { text: "IRC Server host name" }
|
||||||
EditLine { id: edHost; text: "irc.freenode.net"; layoutWidth: fill; minWidth: 400 }
|
EditLine { id: edHost; layoutWidth: fill; minWidth: 400 }
|
||||||
TextWidget { text: "IRC Server port" }
|
TextWidget { text: "IRC Server port" }
|
||||||
EditLine { id: edHost; text: "6667"; layoutWidth: fill }
|
EditLine { id: edPort; layoutWidth: fill }
|
||||||
TextWidget { text: " " }
|
TextWidget { text: " " }
|
||||||
TextWidget { text: " " }
|
TextWidget { text: " " }
|
||||||
TextWidget { text: "Nickname" }
|
TextWidget { text: "Nickname" }
|
||||||
EditLine { id: edHost; text: "dlangui_test"; layoutWidth: fill }
|
EditLine { id: edNick; layoutWidth: fill }
|
||||||
TextWidget { text: "Alternate nickname" }
|
TextWidget { text: "Alternate nickname" }
|
||||||
EditLine { id: edHost; text: "dlangui_tst2"; layoutWidth: fill }
|
EditLine { id: edAlternateNick; layoutWidth: fill }
|
||||||
TextWidget { text: "Username" }
|
TextWidget { text: "Username" }
|
||||||
EditLine { id: edHost; text: "user"; layoutWidth: fill }
|
EditLine { id: edUsername; layoutWidth: fill }
|
||||||
TextWidget { text: "Real name" }
|
TextWidget { text: "Real name" }
|
||||||
EditLine { id: edHost; text: "User Real Name"; layoutWidth: fill }
|
EditLine { id: edRealName; layoutWidth: fill }
|
||||||
TextWidget { text: " " }
|
TextWidget { text: " " }
|
||||||
TextWidget { text: " " }
|
TextWidget { text: " " }
|
||||||
TextWidget { text: "Channel to join on connect" }
|
TextWidget { text: "Channel to join on connect" }
|
||||||
EditLine { id: edHost; text: "#d"; layoutWidth: fill }
|
EditLine { id: edChannel; layoutWidth: fill }
|
||||||
TextWidget { text: " " }
|
TextWidget { text: " " }
|
||||||
CheckBox { id: cbCreateWorkspace; text: "Connect on startup"; checked: true }
|
CheckBox { id: cbCreateWorkspace; text: "Connect on startup"; checked: true }
|
||||||
}
|
}
|
||||||
|
@ -59,11 +64,41 @@ class SettingsDialog : Dialog {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
addChild(content);
|
addChild(content);
|
||||||
addChild(createButtonsPanel([ACTION_APPLY, ACTION_CANCEL], 0, 0));
|
addChild(createButtonsPanel(_allowConnect ? [ACTION_CONNECT, ACTION_APPLY, ACTION_CANCEL] : [ACTION_APPLY, ACTION_CANCEL], 0, 0));
|
||||||
|
settingsToControls();
|
||||||
|
}
|
||||||
|
|
||||||
|
void settingsToControls() {
|
||||||
|
childById("edHost").text = toUTF32(_settings.host);
|
||||||
|
childById("edPort").text = toUTF32(to!string(_settings.port));
|
||||||
|
childById("edNick").text = toUTF32(_settings.nick);
|
||||||
|
childById("edAlternateNick").text = toUTF32(_settings.alternateNick);
|
||||||
|
childById("edUsername").text = toUTF32(_settings.userName);
|
||||||
|
childById("edRealName").text = toUTF32(_settings.userRealName);
|
||||||
|
childById("edChannel").text = toUTF32(_settings.defChannel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void controlsToSettings() {
|
||||||
|
_settings.host = toUTF8(childById("edHost").text);
|
||||||
|
try {
|
||||||
|
_settings.port = cast(ushort)to!ulong(childById("edPort").text);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// ignore
|
||||||
|
_settings.port = 6667;
|
||||||
|
}
|
||||||
|
_settings.nick = toUTF8(childById("edNick").text);
|
||||||
|
_settings.alternateNick = toUTF8(childById("edAlternateNick").text);
|
||||||
|
_settings.userName = toUTF8(childById("edUsername").text);
|
||||||
|
_settings.userRealName = toUTF8(childById("edRealName").text);
|
||||||
|
_settings.defChannel = toUTF8(childById("edChannel").text);
|
||||||
}
|
}
|
||||||
|
|
||||||
override void close(const Action action) {
|
override void close(const Action action) {
|
||||||
Action newaction = action.clone();
|
Action newaction = action.clone();
|
||||||
|
if (action.id != ACTION_CANCEL.id) {
|
||||||
|
controlsToSettings();
|
||||||
|
// TODO: validate
|
||||||
|
}
|
||||||
//if (action.id == IDEActions.FileNewWorkspace || action.id == IDEActions.FileNewProject) {
|
//if (action.id == IDEActions.FileNewWorkspace || action.id == IDEActions.FileNewProject) {
|
||||||
// newaction.objectParam = _result;
|
// newaction.objectParam = _result;
|
||||||
//}
|
//}
|
||||||
|
|
Loading…
Reference in New Issue