diff options
author | kraxel <kraxel> | 2006-01-31 14:05:09 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2006-01-31 14:05:09 +0000 |
commit | 204520ac1d70a7d6c6084c2ec98560d580f38fa2 (patch) | |
tree | 5fef0b342a450412e74c32de62e45423f987402d /mdns.c | |
parent | c28bc1bc12c466c58a71eeed8f2d38e46008ee2f (diff) | |
download | xenwatch-204520ac1d70a7d6c6084c2ec98560d580f38fa2.tar.gz |
- lots of mdns updates.
Diffstat (limited to 'mdns.c')
-rw-r--r-- | mdns.c | 234 |
1 files changed, 213 insertions, 21 deletions
@@ -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; } |