aboutsummaryrefslogtreecommitdiffstats
path: root/mdns.c
diff options
context:
space:
mode:
authorkraxel <kraxel>2006-01-31 14:05:09 +0000
committerkraxel <kraxel>2006-01-31 14:05:09 +0000
commit204520ac1d70a7d6c6084c2ec98560d580f38fa2 (patch)
tree5fef0b342a450412e74c32de62e45423f987402d /mdns.c
parentc28bc1bc12c466c58a71eeed8f2d38e46008ee2f (diff)
downloadxenwatch-204520ac1d70a7d6c6084c2ec98560d580f38fa2.tar.gz
- lots of mdns updates.
Diffstat (limited to 'mdns.c')
-rw-r--r--mdns.c234
1 files changed, 213 insertions, 21 deletions
diff --git a/mdns.c b/mdns.c
index c7375b9..fac5752 100644
--- a/mdns.c
+++ b/mdns.c
@@ -51,9 +51,19 @@ enum {
ST_NUM_COLS
};
+static int str_sort[] = {
+ ST_COL_NAME,
+ ST_COL_TYPE,
+ ST_COL_DOMAIN,
+ ST_COL_INTERFACE,
+ ST_COL_PROTOCOL,
+ ST_COL_HOSTNAME,
+};
+
struct mdns_window {
GtkListStore *store;
GtkWidget *toplevel, *view, *status;
+ GtkActionGroup *ag;
int standalone;
const AvahiPoll *poll_api;
@@ -495,7 +505,73 @@ int mdns_browse(struct mdns_window *mdns,
/* ---------------------------------------------------------------------- */
-static void menu_cb_close(GtkWidget *whatever, gpointer userdata)
+static void menu_cb_view_col(GtkToggleAction *action, gpointer userdata, int id)
+{
+ struct mdns_window *mdns = userdata;
+ GtkTreeViewColumn *col;
+ gboolean active;
+
+ active = gtk_toggle_action_get_active(action);
+ col = gtk_tree_view_get_column(GTK_TREE_VIEW(mdns->view), id);
+ gtk_tree_view_column_set_visible(col, active);
+}
+
+static void menu_cb_view_col_type(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_TYPE);
+}
+
+static void menu_cb_view_col_domain(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_DOMAIN);
+}
+
+static void menu_cb_view_col_interface(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_INTERFACE);
+}
+
+static void menu_cb_view_col_protocol(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_PROTOCOL);
+}
+
+static void menu_cb_view_col_hostname(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_HOSTNAME);
+}
+
+static void menu_cb_view_col_addr(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_ADDR);
+}
+
+static void menu_cb_view_col_port(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_PORT);
+}
+
+static void menu_cb_view_col_path(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_PATH);
+}
+
+static void menu_cb_view_col_url(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_URL);
+}
+
+static void menu_cb_view_col_xen_dom_id(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_XEN_DOM_ID);
+}
+
+static void menu_cb_view_col_xen_vm_uuid(GtkToggleAction *action, gpointer userdata)
+{
+ menu_cb_view_col(action, userdata, ST_COL_XEN_VM_UUID);
+}
+
+static void menu_cb_close(GtkAction *action, gpointer userdata)
{
struct mdns_window *mdns = userdata;
@@ -521,6 +597,9 @@ static const GtkActionEntry entries[] = {
.name = "FileMenu",
.label = "_File",
},{
+ .name = "ViewMenu",
+ .label = "_View",
+ },{
.name = "Close",
.stock_id = GTK_STOCK_CLOSE,
.label = "_Close",
@@ -529,12 +608,84 @@ static const GtkActionEntry entries[] = {
},
};
+static const GtkToggleActionEntry tentries[] = {
+ {
+ .name = "ColType",
+ .label = "Type",
+ .callback = G_CALLBACK(menu_cb_view_col_type),
+ .is_active = 1,
+ },{
+ .name = "ColDomain",
+ .label = "Domain",
+ .callback = G_CALLBACK(menu_cb_view_col_domain),
+ .is_active = 1,
+ },{
+ .name = "ColInterface",
+ .label = "Interface",
+ .callback = G_CALLBACK(menu_cb_view_col_interface),
+ .is_active = 1,
+ },{
+ .name = "ColProtocol",
+ .label = "Protocol",
+ .callback = G_CALLBACK(menu_cb_view_col_protocol),
+ .is_active = 1,
+ },{
+ .name = "ColHostname",
+ .label = "Hostname",
+ .callback = G_CALLBACK(menu_cb_view_col_hostname),
+ .is_active = 1,
+ },{
+ .name = "ColAddress",
+ .label = "Address",
+ .callback = G_CALLBACK(menu_cb_view_col_addr),
+ .is_active = 1,
+ },{
+ .name = "ColPort",
+ .label = "Port",
+ .callback = G_CALLBACK(menu_cb_view_col_port),
+ .is_active = 1,
+ },{
+ .name = "ColPath",
+ .label = "Path",
+ .callback = G_CALLBACK(menu_cb_view_col_path),
+ .is_active = 1,
+ },{
+ .name = "ColURL",
+ .label = "URL",
+ .callback = G_CALLBACK(menu_cb_view_col_url),
+ .is_active = 1,
+ },{
+ .name = "ColXenDomID",
+ .label = "Xen dom-id",
+ .callback = G_CALLBACK(menu_cb_view_col_xen_dom_id),
+ .is_active = 1,
+ },{
+ .name = "ColXenVmUUID",
+ .label = "Xen vm-uuid",
+ .callback = G_CALLBACK(menu_cb_view_col_xen_vm_uuid),
+ .is_active = 1,
+ }
+};
+
static char ui_xml[] =
"<ui>"
" <menubar name='MainMenu'>"
" <menu action='FileMenu'>"
" <menuitem action='Close'/>"
" </menu>"
+" <menu action='ViewMenu'>"
+" <menuitem action='ColType'/>"
+" <menuitem action='ColDomain'/>"
+" <menuitem action='ColInterface'/>"
+" <menuitem action='ColProtocol'/>"
+" <menuitem action='ColHostname'/>"
+" <menuitem action='ColAddress'/>"
+" <menuitem action='ColPort'/>"
+" <menuitem action='ColPath'/>"
+" <menuitem action='ColURL'/>"
+" <menuitem action='ColXenDomID'/>"
+" <menuitem action='ColXenVmUUID'/>"
+" </menu>"
" </menubar>"
" <toolbar action='ToolBar'>"
" <toolitem action='Close'/>"
@@ -567,6 +718,8 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns)
GtkCellRenderer *renderer;
GtkTreeSortable *sortable;
GtkWidget *view;
+ GtkTreeViewColumn *col;
+ int i;
view = gtk_tree_view_new();
gtk_tree_view_set_model(GTK_TREE_VIEW(view),
@@ -576,37 +729,37 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns)
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "name", renderer,
+ (GTK_TREE_VIEW(view), -1, "Name", renderer,
"text", ST_COL_NAME,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "type", renderer,
+ (GTK_TREE_VIEW(view), -1, "Type", renderer,
"text", ST_COL_TYPE,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "domain", renderer,
+ (GTK_TREE_VIEW(view), -1, "Domain", renderer,
"text", ST_COL_DOMAIN,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "if", renderer,
+ (GTK_TREE_VIEW(view), -1, "If", renderer,
"text", ST_COL_INTERFACE,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "proto", renderer,
+ (GTK_TREE_VIEW(view), -1, "Proto", renderer,
"text", ST_COL_PROTOCOL,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "hostname", renderer,
+ (GTK_TREE_VIEW(view), -1, "Hostname", renderer,
"text", ST_COL_HOSTNAME,
NULL);
@@ -615,37 +768,37 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns)
"xalign", 1.0,
NULL);
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "address", renderer,
+ (GTK_TREE_VIEW(view), -1, "Address", renderer,
"text", ST_COL_ADDR,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "port", renderer,
+ (GTK_TREE_VIEW(view), -1, "Port", renderer,
"text", ST_COL_PORT,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "path", renderer,
+ (GTK_TREE_VIEW(view), -1, "Path", renderer,
"text", ST_COL_PATH,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "url", renderer,
+ (GTK_TREE_VIEW(view), -1, "URL", renderer,
"text", ST_COL_URL,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "id", renderer,
+ (GTK_TREE_VIEW(view), -1, "ID", renderer,
"text", ST_COL_XEN_DOM_ID,
NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_insert_column_with_attributes
- (GTK_TREE_VIEW(view), -1, "vm", renderer,
+ (GTK_TREE_VIEW(view), -1, "VM", renderer,
"text", ST_COL_XEN_VM_UUID,
NULL);
@@ -655,22 +808,58 @@ static GtkWidget *mdns_create_view(struct mdns_window *mdns)
(GTK_TREE_VIEW(view), -1, "", renderer,
NULL);
+ /* sort bits */
sortable = GTK_TREE_SORTABLE(mdns->store);
- gtk_tree_sortable_set_sort_func(sortable, ST_COL_NAME,
- gtk_sort_iter_compare_str,
- GINT_TO_POINTER(ST_COL_NAME), NULL);
+ for (i = 0; i < sizeof(str_sort)/sizeof(str_sort[0]); i++) {
+ gtk_tree_sortable_set_sort_func(sortable, str_sort[i],
+ gtk_sort_iter_compare_str,
+ GINT_TO_POINTER(str_sort[i]), NULL);
+ col = gtk_tree_view_get_column(GTK_TREE_VIEW(view), str_sort[i]);
+ gtk_tree_view_column_set_sort_column_id(col, str_sort[i]);
+ }
gtk_tree_sortable_set_sort_column_id(sortable, ST_COL_NAME,
GTK_SORT_ASCENDING);
return view;
}
-struct mdns_window *mdns_create_window(int standalone)
+static void set_default_visible_cols(struct mdns_window *mdns, int url, int xen)
+{
+ GtkToggleAction *ta;
+
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColType"));
+ gtk_toggle_action_set_active(ta, FALSE);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColDomain"));
+ gtk_toggle_action_set_active(ta, FALSE);
+
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColInterface"));
+ gtk_toggle_action_set_active(ta, TRUE);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColProtocol"));
+ gtk_toggle_action_set_active(ta, TRUE);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColHostname"));
+ gtk_toggle_action_set_active(ta, TRUE);
+
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColAddress"));
+ gtk_toggle_action_set_active(ta, !xen && !url);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColPort"));
+ gtk_toggle_action_set_active(ta, !xen && !url);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColPath"));
+ gtk_toggle_action_set_active(ta, !xen && !url);
+
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColURL"));
+ gtk_toggle_action_set_active(ta, url);
+
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColXenDomID"));
+ gtk_toggle_action_set_active(ta, xen);
+ ta = GTK_TOGGLE_ACTION(gtk_action_group_get_action(mdns->ag, "ColXenVmUUID"));
+ gtk_toggle_action_set_active(ta, xen);
+}
+
+struct mdns_window *mdns_create_window(int standalone, int url, int xen)
{
struct mdns_window *mdns;
GtkWidget *vbox, *menubar, *toolbar, *scroll;
GtkAccelGroup *accel;
- GtkActionGroup *ag;
GtkUIManager *ui;
GError *err;
@@ -690,9 +879,11 @@ struct mdns_window *mdns_create_window(int standalone)
/* menu + toolbar */
ui = gtk_ui_manager_new();
- ag = gtk_action_group_new("MenuActions");
- gtk_action_group_add_actions(ag, entries, G_N_ELEMENTS(entries), mdns);
- gtk_ui_manager_insert_action_group(ui, ag, 0);
+ mdns->ag = gtk_action_group_new("MenuActions");
+ gtk_action_group_add_actions(mdns->ag, entries, G_N_ELEMENTS(entries), mdns);
+ gtk_action_group_add_toggle_actions(mdns->ag, tentries,
+ G_N_ELEMENTS(tentries), mdns);
+ gtk_ui_manager_insert_action_group(ui, mdns->ag, 0);
accel = gtk_ui_manager_get_accel_group(ui);
gtk_window_add_accel_group(GTK_WINDOW(mdns->toplevel), accel);
@@ -747,6 +938,7 @@ struct mdns_window *mdns_create_window(int standalone)
gtk_container_add(GTK_CONTAINER(scroll), mdns->view);
gtk_box_pack_end(GTK_BOX(vbox), mdns->status, FALSE, TRUE, 0);
+ set_default_visible_cols(mdns, url, xen);
return mdns;
}