24 #include <arpa/inet.h>
25 #include <core/exception.h>
26 #include <core/exceptions/software.h>
27 #include <gui_utils/service_chooser_dialog.h>
28 #include <gui_utils/service_model.h>
29 #include <netcomm/fawkes/client.h>
30 #include <netcomm/utils/resolver.h>
31 #include <netinet/in.h>
32 #include <sys/socket.h>
33 #include <sys/types.h>
34 #include <utils/system/argparser.h>
40 # define GCONF_DIR "/apps/fawkes/service_chooser_dialog"
41 # define GCONF_PREFIX GCONF_DIR "/"
62 : Gtk::Dialog(title, parent, true), parent_(parent), expander_(
"Manual entry")
79 : Gtk::Dialog(title, parent, true), parent_(parent), expander_(
"Manual entry")
90 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
91 gconf_->set(GCONF_PREFIX
"manual_host", entry_.get_text());
92 gconf_->set(GCONF_PREFIX
"manual_expanded",
true);
94 gconf_->set(GCONF_PREFIX
"manual_expanded",
false);
97 delete service_model_;
101 ServiceChooserDialog::ctor()
103 set_default_size(480, 300);
108 scrollwin_.add(treeview_);
109 scrollwin_.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
111 expander_.add(entry_);
113 entry_.set_activates_default(
true);
115 Glib::ustring default_host(
"localhost");
117 gconf_ = Gnome::Conf::Client::get_default_client();
118 gconf_->add_dir(GCONF_DIR);
119 Gnome::Conf::Value host_val = gconf_->get_without_default(GCONF_PREFIX
"manual_host");
120 if (host_val.get_type() == Gnome::Conf::VALUE_STRING) {
121 default_host = host_val.get_string();
125 char *fawkes_ip = getenv(
"FAWKES_IP");
127 entry_.set_text(fawkes_ip);
129 entry_.set_text(default_host);
131 Gtk::Box *vbox = get_vbox();
132 vbox->pack_start(scrollwin_);
133 vbox->pack_end(expander_, Gtk::PACK_SHRINK);
137 add_button(Gtk::Stock::CANCEL, 0);
138 add_button(Gtk::Stock::OK, 1);
140 set_default_response(1);
142 treeview_.signal_row_activated().connect(
143 sigc::bind(sigc::hide<0>(sigc::hide<0>(sigc::mem_fun(*
this, &ServiceChooserDialog::response))),
146 #ifdef GLIBMM_PROPERTIES_ENABLED
147 expander_.property_expanded().signal_changed().connect(
152 if (gconf_->get_bool(GCONF_PREFIX
"manual_expanded")) {
153 expander_.set_expanded(
true);
168 Glib::ustring & hostname,
169 unsigned short int &port)
171 Glib::RefPtr<Gtk::TreeSelection> treesel = treeview_.get_selection();
172 if (expander_.get_expanded() && !treeview_.has_focus()) {
173 if (entry_.get_text_length() > 0) {
174 std::string tmp_hostname;
176 hostname = tmp_hostname;
182 Gtk::TreeModel::iterator iter = treesel->get_selected();
184 Gtk::TreeModel::Row row = *iter;
190 throw Exception(
"No host selected");
205 struct sockaddr_storage &sockaddr)
207 Glib::RefPtr<Gtk::TreeSelection> treesel = treeview_.get_selection();
208 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
209 throw Exception(
"May not be called for manual entry");
212 Gtk::TreeModel::iterator iter = treesel->get_selected();
214 Gtk::TreeModel::Row row = *iter;
219 throw Exception(
"No host selected");
261 if (expander_.get_expanded()) {
264 treeview_.grab_focus();
279 throw NullPointerException(
"FawkesNetworkClient not set");
281 throw Exception(
"Client is already connected");
285 if (expander_.get_expanded() && !treeview_.has_focus() && entry_.get_text_length() > 0) {
286 Glib::ustring name, hostname;
287 unsigned short int port;
289 client_->
connect(hostname.c_str(), port);
292 struct sockaddr_storage sockaddr;
293 Glib::ustring hostname;
295 client_->
connect(hostname.c_str(), sockaddr);
298 Glib::ustring message = *(e.
begin());
299 Gtk::MessageDialog md(parent_,
305 md.set_title(
"Connection failed");