24 #include <core/exception.h> 25 #include <core/exceptions/software.h> 26 #include <netcomm/fawkes/client.h> 27 #include <netcomm/utils/resolver.h> 28 #include <gui_utils/service_chooser_dialog.h> 29 #include <gui_utils/service_model.h> 30 #include <utils/system/argparser.h> 34 #include <sys/types.h> 35 #include <sys/socket.h> 36 #include <arpa/inet.h> 37 #include <netinet/in.h> 40 # define GCONF_DIR "/apps/fawkes/service_chooser_dialog" 41 # define GCONF_PREFIX GCONF_DIR"/" 65 : Gtk::Dialog(title, parent, true),
66 __parent(parent), __expander(
"Manual entry")
84 : Gtk::Dialog(title, parent, true),
85 __parent(parent), __expander(
"Manual entry")
97 if (__expander.get_expanded() && ! __treeview.has_focus() && __entry.get_text_length() > 0 ) {
98 __gconf->set(GCONF_PREFIX
"manual_host", __entry.get_text());
99 __gconf->set(GCONF_PREFIX
"manual_expanded",
true);
101 __gconf->set(GCONF_PREFIX
"manual_expanded",
false);
104 delete __service_model;
109 ServiceChooserDialog::ctor()
111 set_default_size(480, 300);
116 __scrollwin.add(__treeview);
117 __scrollwin.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
119 __expander.add(__entry);
121 __entry.set_activates_default(
true);
123 Glib::ustring default_host(
"localhost");
125 __gconf = Gnome::Conf::Client::get_default_client();
126 __gconf->add_dir(GCONF_DIR);
127 Gnome::Conf::Value host_val =
128 __gconf->get_without_default(GCONF_PREFIX
"manual_host");
129 if (host_val.get_type() == Gnome::Conf::VALUE_STRING) {
130 default_host = host_val.get_string();
134 char * fawkes_ip = getenv(
"FAWKES_IP");
135 if (fawkes_ip) __entry.set_text(fawkes_ip);
136 else __entry.set_text(default_host);
138 Gtk::Box *vbox = get_vbox();
139 vbox->pack_start(__scrollwin);
140 vbox->pack_end(__expander, Gtk::PACK_SHRINK);
144 add_button(Gtk::Stock::CANCEL, 0);
145 add_button(Gtk::Stock::OK, 1);
147 set_default_response(1);
149 __treeview.signal_row_activated().connect(sigc::bind(sigc::hide<0>(sigc::hide<0>(sigc::mem_fun(*
this, &ServiceChooserDialog::response))), 1));
152 #ifdef GLIBMM_PROPERTIES_ENABLED 157 if (__gconf->get_bool(GCONF_PREFIX
"manual_expanded")) {
158 __expander.set_expanded(
true);
174 Glib::ustring &hostname,
175 unsigned short int &port)
177 Glib::RefPtr<Gtk::TreeSelection> treesel = __treeview.get_selection();
178 if (__expander.get_expanded() && !__treeview.has_focus()) {
179 if ( __entry.get_text_length() > 0 ) {
180 std::string tmp_hostname;
182 hostname = tmp_hostname;
188 Gtk::TreeModel::iterator iter = treesel->get_selected();
190 Gtk::TreeModel::Row row = *iter;
211 struct sockaddr_storage &sockaddr)
213 Glib::RefPtr<Gtk::TreeSelection> treesel = __treeview.get_selection();
214 if (__expander.get_expanded() && !__treeview.has_focus() && __entry.get_text_length() > 0) {
215 throw Exception(
"May not be called for manual entry");
218 Gtk::TreeModel::iterator iter = treesel->get_selected();
220 Gtk::TreeModel::Row row = *iter;
269 if (__expander.get_expanded()) {
270 __entry.grab_focus();
272 __treeview.grab_focus();
292 if (__expander.get_expanded() && !__treeview.has_focus() && __entry.get_text_length() > 0 ) {
293 Glib::ustring name, hostname;
294 unsigned short int port;
296 __client->
connect(hostname.c_str(), port);
299 struct sockaddr_storage sockaddr;
300 Glib::ustring hostname;
302 __client->
connect(hostname.c_str(), sockaddr);
306 Glib::ustring message = *(e.
begin());
307 Gtk::MessageDialog md(__parent, message,
false,
308 Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK,
310 md.set_title(
"Connection failed");
Abstract base class for widgets that allow to view the detected services of a certain type...
virtual void on_expander_changed()
Signal handler for expander event.
ServiceRecord & get_column_record()
Access the column record.
Simple Fawkes network client.
Fawkes library namespace.
ServiceChooserDialog(Gtk::Window &parent, FawkesNetworkClient *client, Glib::ustring title="Select Service", const char *service="_fawkes._tcp")
Constructor.
void connect()
Connect to remote.
Glib::RefPtr< Gtk::ListStore > & get_list_store()
Get a reference to the model.
A NULL pointer was supplied where not allowed.
Gtk::TreeModelColumn< struct sockaddr_storage > sockaddr
sockaddr structure
Base class for exceptions in Fawkes.
void run_and_connect()
Run dialog and try to connect.
iterator begin()
Get iterator for messages.
void get_raw_address(struct sockaddr *addr, socklen_t addr_size)
Get raw address.
Gtk::TreeModelColumn< unsigned short > port
The port the service is running on.
virtual ~ServiceChooserDialog()
Destructor.
Gtk::TreeModelColumn< Glib::ustring > addrport
Address:port string.
Gtk::TreeModelColumn< Glib::ustring > name
The name of the service.
bool connected() const
Check if connection is alive.
void get_selected_service(Glib::ustring &name, Glib::ustring &hostname, unsigned short int &port)
Get selected service.
Gtk::TreeModelColumn< Glib::ustring > ipaddr
The IP address as string of the host the service is running on.
static void parse_hostport_s(const char *s, char **host, unsigned short int *port)
Parse host:port string.