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 {
46
public string rrserve_path = "rrserve";
48
*Nichrome::nichrome_t ui;
49
*Label::label_t title;
50
*Label::label_t master_label;
51
*Label::label_t master;
52
*Button::button_t master_connect;
53
*Label::label_t remote_label;
54
*Textline::textline_t hostname;
55
*Button::button_t remote_connect;
56
*Label::label_t local_label;
57
*Button::button_t local;
58
*Button::button_t local_connect;
59
*Button::button_t cancel;
63
void stop (bool val) {
65
Nichrome::destroy(ui);
68
void do_ok(*widget_t w, bool state) {
70
host = hostname->text;
75
void do_cancel(*widget_t w, bool state) {
83
bool key_callback(*Textline::textline_t widget, string key) {
85
case "Return": do_ok(widget, true); return true;
91
string master_host = "rr.nickle.org";
93
void do_master(*Button::button_t w, bool state) {
100
void do_remote(*Button::button_t w, bool state) {
102
host = hostname->text;
108
void do_local(*Button::button_t w, bool state) {
115
void do_start_local(*Button::button_t w, bool state) {
117
Process::system(rrserve_path, "rrserve");
121
public bool select() {
122
ui = new("Ricochet Robots Servers", 100, 100);
123
title = new_bold(ui, "Select Server", Label::justify_t.center);
125
master_label = new_left (ui, "Master server:");
126
master = new_left(ui, master_host);
127
master_connect = Button::new(ui, "Connect", do_master);
129
remote_label = new_left (ui, "Another server:");
130
hostname = Textline::new(ui, 40);
131
hostname->callback = key_callback;
132
if (!is_uninit(&host))
133
Textline::set_text(hostname, host);
134
remote_connect = Button::new(ui, "Connect", do_remote);
136
local_label = new_left (ui, "Local server:");
137
local = Button::new(ui, "Start", do_start_local);
138
local_connect = Button::new(ui, "Connect", do_local);
140
cancel = Button::new(ui, "Cancel", do_cancel);
141
*Box::box_t box = Box::new_empty();
143
Box::add_row(box, 0, row++,
144
Box::widget_span_item(title, 4, 1, 1, 0));
145
Box::add_row(box, 0, row++,
146
Box::widget_item(master_label, 0, 1),
148
Box::widget_item(master, 1, 1),
149
Box::widget_item(master_connect, 1, 0));
150
Box::add_row(box, 0, row++,
151
Box::widget_item(remote_label, 0, 1),
153
Box::widget_item(hostname, 1, 1),
154
Box::widget_item(remote_connect, 1, 0));
155
Box::add_row(box, 0, row++,
156
Box::widget_item(local_label, 0, 1),
158
Box::widget_item(local, 1, 1),
159
Box::widget_item(local_connect, 1, 0));
160
Box::add_row(box, 0, row++,
161
Box::widget_item(cancel, 1, 0));
162
Nichrome::set_box(ui, box);
163
set_key_focus(ui, hostname);
164
Nichrome::main_loop(ui);