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;
51
*Button::button_t master_connect;
52
*Textline::textline_t hostname;
53
*Button::button_t remote_connect;
54
*Button::button_t local;
55
*Button::button_t local_connect;
56
*Button::button_t cancel;
60
void stop (bool val) {
62
Nichrome::destroy(ui);
65
void do_ok(*widget_t w, bool state) {
67
host = hostname->text;
72
void do_cancel(*widget_t w, bool state) {
80
bool key_callback(*Textline::textline_t widget, string key) {
82
case "Return": do_ok(widget, true); return true;
88
string master_host = "rr.nickle.org";
90
void do_master(*Button::button_t w, bool state) {
97
void do_remote(*Button::button_t w, bool state) {
99
host = hostname->text;
105
void do_local(*Button::button_t w, bool state) {
112
void do_start_local(*Button::button_t w, bool state) {
114
Process::system(rrserve_path, "rrserve");
118
public bool select() {
119
ui = new("Ricochet Robots Servers", 100, 100);
120
title = new_bold(ui, "Select Server", Label::justify_t.center);
122
master = new_left(ui, master_host);
123
master_connect = Button::new(ui, "Connect", do_master);
125
hostname = Textline::new(ui, 40);
126
hostname->callback = key_callback;
127
if (!is_uninit(&host))
128
Textline::set_text(hostname, host);
129
remote_connect = Button::new(ui, "Connect", do_remote);
131
local = Button::new(ui, "Start local server", do_start_local);
132
local_connect = Button::new(ui, "Connect", do_local);
134
cancel = Button::new(ui, "Cancel", do_cancel);
135
*Box::box_t box = Box::new(Box::dir_t.vertical,
136
Box::widget_item(title, 1, 0),
137
Box::box_item(Box::new(Box::dir_t.horizontal,
138
Box::widget_item(master, 1, 0),
139
Box::widget_item(master_connect))),
140
Box::box_item(Box::new(Box::dir_t.horizontal,
141
Box::widget_item(hostname, 1, 0),
142
Box::widget_item(remote_connect))),
143
Box::box_item(Box::new(Box::dir_t.horizontal,
144
Box::widget_item(local, 1, 0),
145
Box::widget_item(local_connect))),
146
Box::box_item(Box::new(Box::dir_t.horizontal,
148
Box::widget_item(cancel, 0, 0),
151
Nichrome::set_box(ui, box);
152
set_key_focus(ui, hostname);
153
Nichrome::main_loop(ui);