23 #include "netloggui.h"
25 #include <gui_utils/logview.h>
26 #include <gui_utils/avahi_dispatcher.h>
27 #include <gui_utils/connection_dispatcher.h>
28 #include <gui_utils/service_chooser_dialog.h>
29 #include <netcomm/fawkes/client.h>
30 #include <netcomm/dns-sd/avahi_thread.h>
32 #include <netinet/in.h>
34 using namespace fawkes;
49 const Glib::RefPtr<Gtk::Builder> &builder)
50 : Gtk::Window(cobject)
52 builder->get_widget(
"vbox_main", vbox_main);
53 builder->get_widget(
"lab_no_connection", lab_no_connection);
54 builder->get_widget(
"tb_connection", tb_connection);
55 builder->get_widget(
"tb_exit", tb_exit);
56 builder->get_widget(
"tb_clear", tb_clear);
58 vbox_main->pack_end(ntb_logviewers);
61 avahi_dispatcher->
signal_service_added().connect(sigc::retype_return<void>(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_service_added)));
62 avahi_dispatcher->
signal_service_removed().connect(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_service_removed));
65 avahi_thread->
start();
66 avahi_thread->
watch_service(
"_fawkes._tcp", avahi_dispatcher);
68 tb_connection->signal_clicked().connect(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_connection_clicked));
69 tb_exit->signal_clicked().connect(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_exit_clicked));
70 tb_clear->signal_clicked().connect(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_clear_clicked));
79 delete avahi_dispatcher;
86 NetLogGuiGtkWindow::on_connection_clicked()
90 struct sockaddr_in saddr;
91 socklen_t saddr_size =
sizeof(
struct sockaddr_in);
92 Glib::ustring name, hostname, ipaddr;
93 unsigned short int port = 1910;
94 std::list<std::string> txt;
98 ssd.get_selected_service (name, hostname, ipaddr, port);
99 ssd.get_raw_address((
struct sockaddr *)&saddr, saddr_size);
101 hostname.c_str(), port,
102 (
struct sockaddr *)&saddr,
104 page = on_service_added(service);
108 Gtk::ScrolledWindow *scrolled =
dynamic_cast<Gtk::ScrolledWindow *
>(ntb_logviewers.get_nth_page(page));
109 LogView *logview =
dynamic_cast<LogView *
>(scrolled->get_child());
113 Glib::ustring message = *(e.
begin());
114 Gtk::MessageDialog md(*
this, message,
false,
115 Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK,
117 md.set_title(
"Connection failed");
120 ntb_logviewers.remove_page(page);
127 NetLogGuiGtkWindow::on_exit_clicked()
134 NetLogGuiGtkWindow::on_clear_clicked()
136 int page = ntb_logviewers.get_current_page();
138 Gtk::ScrolledWindow *scrolled =
dynamic_cast<Gtk::ScrolledWindow *
>(ntb_logviewers.get_nth_page(page));
148 if ( ntb_logviewers.get_n_pages() == 0 ) {
149 lab_no_connection->hide();
153 ntb_logviewers.show();
156 Gtk::HBox *hbox = Gtk::manage(
new Gtk::HBox(
false, 4));
157 Gtk::Button *button = Gtk::manage(
new Gtk::Button());
158 Gtk::Image *image = Gtk::manage(
new Gtk::Image(Gtk::Stock::CONNECT, Gtk::ICON_SIZE_BUTTON));
160 button->set_relief(Gtk::RELIEF_NONE);
161 Gtk::Label *label = Gtk::manage(
new Gtk::Label());
162 label->set_markup(Glib::ustring(
"<b>") + service->
host() +
"</b>\n" + service->
addr_string());
163 label->set_line_wrap();
164 Gtk::Label *invisible = Gtk::manage(
new Gtk::Label(Glib::ustring(service->
name()) +
"::" + service->
type() +
"::" + service->
domain()));
165 Gtk::ScrolledWindow *scrolled = Gtk::manage(
new Gtk::ScrolledWindow());
166 scrolled->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
171 hbox->pack_start(*button);
172 hbox->pack_start(*label);
173 hbox->pack_start(*invisible);
175 button->signal_clicked().connect(sigc::bind(sigc::mem_fun(*
this, &NetLogGuiGtkWindow::on_connbut_clicked), image, logview));
186 int rv = ntb_logviewers.append_page(*logview, *hbox);
195 bool removed =
false;
199 for (
int i = 0; ! removed && (i < ntb_logviewers.get_n_pages()); ++i) {
200 Gtk::Widget *child = ntb_logviewers.get_nth_page(i);
201 Gtk::Widget *tab_label = ntb_logviewers.get_tab_label(*child);
202 Gtk::HBox *hbox =
dynamic_cast<Gtk::HBox *
>(tab_label);
205 std::vector<Gtk::Widget *> children = hbox->get_children();
206 Gtk::Widget *w = children[2];
208 Gtk::Label *label =
dynamic_cast<Gtk::Label *
>(w);
210 Glib::ustring s = Glib::ustring(service->
name()) +
"::" + service->
type() +
"::" + service->
domain();
211 if (label->get_text() == s) {
212 ntb_logviewers.remove_page(i);
221 if ( ntb_logviewers.get_n_pages() == 0 ) {
222 ntb_logviewers.hide();
226 lab_no_connection->show();
232 NetLogGuiGtkWindow::on_connbut_clicked(Gtk::Image *image,
fawkes::LogView *logview)
241 Glib::ustring message = *(e.
begin());
242 Gtk::MessageDialog md(*
this, message,
false,
243 Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK,
245 md.set_title(
"Connection failed");
253 NetLogGuiGtkWindow::on_connected(Gtk::Image *image)
255 image->set(Gtk::Stock::DISCONNECT, Gtk::ICON_SIZE_BUTTON);
260 NetLogGuiGtkWindow::on_disconnected(Gtk::Image *image)
262 image->set(Gtk::Stock::CONNECT, Gtk::ICON_SIZE_BUTTON);