2
* Copyright © 2012 Keith Packard <keithp@keithp.com>
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; version 2 of the License.
8
* This program is distributed in the hope that it will be useful, but
9
* WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
* General Public License for more details.
13
* You should have received a copy of the GNU General Public License along
14
* with this program; if not, write to the Free Software Foundation, Inc.,
15
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
19
autoload Client::Window;
20
autoload Client::Link;
21
autoload Client::Update;
22
autoload Client::Userlist;
23
autoload Client::Messages;
24
autoload Client::Games;
29
autoload Nichrome::Button;
30
autoload Nichrome::Box;
31
autoload Nichrome::Label;
32
autoload Nichrome::Toggle;
33
autoload Nichrome::Textline;
34
autoload Nichrome::RRboard;
35
autoload Nichrome::Solid;
39
extend namespace Client {
40
public namespace Host {
47
public string rrserve_path = "rrserve";
50
name = Environ::get("USER");
51
} catch invalid_argument(string message, int id, poly value) {
55
*Nichrome::nichrome_t ui;
56
*Label::label_t name_title;
57
*Label::label_t name_label;
58
*Textline::textline_t name_text;
59
*Label::label_t host_title;
60
*Label::label_t master_label;
61
*Label::label_t master;
62
*Button::button_t master_connect;
63
*Label::label_t remote_label;
64
*Textline::textline_t host_text;
65
*Button::button_t remote_connect;
66
*Label::label_t local_label;
67
*Button::button_t local;
68
*Button::button_t local_connect;
69
*Button::button_t cancel;
73
void stop (bool val) {
74
name = name_text->text;
76
Nichrome::destroy(ui);
79
void do_ok(*widget_t w, bool state) {
81
host = host_text->text;
86
void do_cancel(*widget_t w, bool state) {
94
bool key_callback(*Textline::textline_t widget, string key) {
96
case "Return": do_ok(widget, true); return true;
102
string master_host = "rr.nickle.org";
104
void do_master(*Button::button_t w, bool state) {
111
void do_remote(*Button::button_t w, bool state) {
113
host = host_text->text;
119
void do_local(*Button::button_t w, bool state) {
126
void do_start_local(*Button::button_t w, bool state) {
128
Process::system(rrserve_path, "rrserve");
132
public bool select() {
133
ui = new("Connect to Ricochet Robots Server", 100, 100);
135
name_title = new_bold(ui, "Choose a name", Label::justify_t.center);
137
name_label = new_left(ui, "User name:");
138
name_text = Textline::new(ui, 40);
139
if (!is_uninit(&name))
140
Textline::set_text(name_text, name);
142
host_title = new_bold(ui, "Select a server", Label::justify_t.center);
144
master_label = new_left (ui, "Master server:");
145
master = new_left(ui, master_host);
146
master_connect = Button::new(ui, "Connect", do_master);
148
remote_label = new_left (ui, "Another server:");
149
host_text = Textline::new(ui, 40);
150
host_text->callback = key_callback;
151
if (!is_uninit(&host))
152
Textline::set_text(host_text, host);
153
remote_connect = Button::new(ui, "Connect", do_remote);
155
local_label = new_left (ui, "Local server:");
156
local = Button::new(ui, "Start", do_start_local);
157
local_connect = Button::new(ui, "Connect", do_local);
159
cancel = Button::new(ui, "Cancel", do_cancel);
160
*Box::box_t box = Box::new_empty();
162
Box::add_row(box, 0, row++,
163
Box::widget_span_item(name_title, 4, 1, 1, 0));
164
Box::add_row(box, 0, row++,
165
Box::widget_item(name_label, 0, 1),
167
Box::widget_item(name_text, 1, 0));
168
Box::add_row(box, 0, row++,
169
Box::widget_span_item(host_title, 4, 1, 1, 0));
170
Box::add_row(box, 0, row++,
171
Box::widget_item(master_label, 0, 1),
173
Box::widget_item(master, 1, 1),
174
Box::widget_item(master_connect, 1, 0));
175
Box::add_row(box, 0, row++,
176
Box::widget_item(remote_label, 0, 1),
178
Box::widget_item(host_text, 1, 1),
179
Box::widget_item(remote_connect, 1, 0));
180
Box::add_row(box, 0, row++,
181
Box::widget_item(local_label, 0, 1),
183
Box::widget_item(local, 1, 1),
184
Box::widget_item(local_connect, 1, 0));
185
Box::add_row(box, 0, row++,
186
Box::widget_item(cancel, 1, 0));
187
Nichrome::set_box(ui, box);
188
set_key_focus(ui, host_text);
189
Nichrome::main_loop(ui);