
jan at nessus
Mar 5, 2007, 1:54 PM
Post #1 of 1
(1579 views)
Permalink
|
|
NessusClient/nessus/prefs_dialog prefs_context.c, 1.12, 1.13 prefs_dialog_scan_opt.h, 1.3, 1.4 prefs_dialog_scan_opt.c, 1.6, 1.7
|
|
Update of /usr/local/cvs/NessusClient/nessus/prefs_dialog In directory raccoon.nessus.org:/tmp/cvs-serv37680 Modified Files: prefs_context.c prefs_dialog_scan_opt.h prefs_dialog_scan_opt.c Log Message: Replace deprecated GtkList by GtkTreeView for the scanner list. This also means to change to a MVC (Model-View-Controller) handling as already applied for the other plugin selections. Index: prefs_context.c =================================================================== RCS file: /usr/local/cvs/NessusClient/nessus/prefs_dialog/prefs_context.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- prefs_context.c 20 Nov 2006 23:28:00 -0000 1.12 +++ prefs_context.c 5 Mar 2007 21:54:03 -0000 1.13 @@ -193,7 +193,7 @@ if(prefs_has_options(context)) { prefs_dialog_set_defaults(context, MainDialog); - fill_scanner_list(context, arg_get_value(MainDialog, "SCAN_OPTIONS")); + fill_scanner_list(context, arg_get_value(arg_get_value(MainDialog, "SCAN_OPTIONS"), "SCANNERS_LIST")); fill_plugins_family(context, arg_get_value(MainDialog, "PLUGINS")); fill_rules_list(context, arg_get_value(MainDialog, "USER")); prefs_plugins_prefs_redraw(context, arg_get_value(MainDialog, "PLUGINS_PREFS")); Index: prefs_dialog_scan_opt.h =================================================================== RCS file: /usr/local/cvs/NessusClient/nessus/prefs_dialog/prefs_dialog_scan_opt.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- prefs_dialog_scan_opt.h 25 Apr 2006 15:36:10 -0000 1.3 +++ prefs_dialog_scan_opt.h 5 Mar 2007 21:54:03 -0000 1.4 @@ -32,6 +32,6 @@ #include "context.h" struct arglist *prefs_dialog_scan_opt(struct context *); -void fill_scanner_list(struct context *, struct arglist *); +void fill_scanner_list(struct context *, GtkListStore *); void prefs_dialog_scan_opt_readonly(struct arglist *, gboolean); #endif Index: prefs_dialog_scan_opt.c =================================================================== RCS file: /usr/local/cvs/NessusClient/nessus/prefs_dialog/prefs_dialog_scan_opt.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- prefs_dialog_scan_opt.c 6 Feb 2007 22:02:50 -0000 1.6 +++ prefs_dialog_scan_opt.c 5 Mar 2007 21:54:03 -0000 1.7 @@ -40,7 +40,80 @@ #include "../nessus_i18n.h" -static void scanner_infos_cb(GtkWidget *, struct arglist *); +/* column IDs of scanner TreeView Model */ +enum { + COL_NAME, + COL_PLUGIN, + NUM_COLS +}; + +/* Set the "active" property of the toggle cell renderer + */ +static void +active_data_func(tree_column, cell, model, iter, data) + GtkTreeViewColumn *tree_column; + GtkCellRenderer *cell; + GtkTreeModel *model; + GtkTreeIter *iter; + gpointer data; +{ + struct nessus_plugin *plugin; + gboolean is_active = FALSE; + GObject *tree_view = G_OBJECT(data); + + gtk_tree_model_get(model, iter, COL_PLUGIN, &plugin, -1); + is_active = plugin->enabled == 0 ? 0:1; + + g_object_set(G_OBJECT(cell), "active", is_active, NULL); + + /* the cell is activatable if the tree is not in read-only mode */ + g_object_set(G_OBJECT(cell), "activatable", + (gboolean)!GPOINTER_TO_INT(g_object_get_data(tree_view, "read-only")), + NULL); +} + +/* Toggle the active/launch flag of a plugin + * + * This function is called when the checkbox in the scanners + * tree view widget has been toggled by the user. + * + * This function expects the tree view in the data parameter. The + * path_str must describe the path in the model of that tree view. + */ +static void +prefs_scanner_list_toggle_callback(cell, path_str, data) + GtkCellRendererToggle *cell; + gchar *path_str; + gpointer data; +{ + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(data)); + GtkTreeIter iter; + struct nessus_plugin * plugin; + + gtk_tree_model_get_iter_from_string(model, &iter, path_str); + gtk_tree_model_get(model, &iter, COL_PLUGIN, &plugin, -1); + plugin->enabled = ! plugin->enabled; +} + +/* Called when the user double clicks on a row of the scanner tree view. + * Pop up the plugin info dialog. + */ +static void +scanners_row_activated(treeview, path, column, user_data) + GtkTreeView *treeview; + GtkTreePath *path; + GtkTreeViewColumn *column; + gpointer user_data; +{ + GtkTreeModel * model = gtk_tree_view_get_model(treeview); + GtkTreeIter iter; + char * plugin_name; + + gtk_tree_model_get_iter(model, &iter, path); + gtk_tree_model_get(model, &iter, COL_NAME, &plugin_name, -1); + + plugin_info_window_setup(Context->scanners, plugin_name); +} struct arglist *prefs_dialog_scan_opt(context) struct context *context; @@ -58,8 +131,11 @@ GtkWidget * unscanned_as_closed; GtkWidget * entry; GtkWidget * scanners_window; - GtkWidget * list; - + GtkListStore * store; + GtkWidget * tree; + GtkCellRenderer * renderer; + GtkTreeViewColumn * column; + struct arglist * ctrls = emalloc(sizeof(struct arglist)); frame = gtk_frame_new(_("General scan options")); @@ -166,118 +242,71 @@ gtk_box_pack_start(GTK_BOX(box), use_mac_addr, FALSE, FALSE, 0); gtk_widget_show(use_mac_addr); - scanners_window = gtk_scrolled_window_new(NULL,NULL); - read_only_set_recurse(scanners_window); - gtk_container_border_width(GTK_CONTAINER(scanners_window), 0); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scanners_window), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_box_pack_end(GTK_BOX(box), scanners_window, TRUE, TRUE, 0); - gtk_widget_show(scanners_window); - label = gtk_label_new(_("Port scanner:")); - gtk_box_pack_end(GTK_BOX(box), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); gtk_misc_set_alignment((GtkMisc *)label, 0, 1); gtk_widget_show(label); - - list = gtk_list_new(); - arg_add_value(ctrls, "SCANNERS_LIST", ARG_PTR, -1, list); - gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scanners_window), list); - gtk_signal_connect(GTK_OBJECT(list), - "selection_changed", - GTK_SIGNAL_FUNC(scanner_infos_cb), - ctrls); - - - gtk_widget_show(list); - fill_scanner_list(context, ctrls); - return(ctrls); -} -static -void prefs_scanner_list_toggle_callback(w, scanner) - GtkWidget * w; - struct nessus_plugin * scanner; -{ - int state = GTK_TOGGLE_BUTTON(w)->active; - scanner->enabled = state; + store = gtk_list_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_POINTER); + + arg_add_value(ctrls, "SCANNERS_LIST", ARG_PTR, -1, store); + + tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); + + renderer = gtk_cell_renderer_text_new(); + column = gtk_tree_view_column_new_with_attributes (_("Name"), + renderer, "text", COL_NAME, NULL); + gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); + g_signal_connect(G_OBJECT(tree), "row-activated", + G_CALLBACK(scanners_row_activated), NULL); + + renderer = gtk_cell_renderer_toggle_new(); + g_signal_connect(renderer, "toggled", + G_CALLBACK(prefs_scanner_list_toggle_callback), tree); + column = gtk_tree_view_column_new_with_attributes(_("Active"), renderer, + NULL); + gtk_tree_view_column_set_cell_data_func(column, renderer, active_data_func, + tree, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column); + g_object_set_data(G_OBJECT(column), "colnum", GINT_TO_POINTER(1)); + gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); + gtk_widget_show(tree); + + fill_scanner_list(context, store); + + scanners_window = gtk_scrolled_window_new(NULL,NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scanners_window), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_box_pack_end(GTK_BOX(box), scanners_window, TRUE, TRUE, 0); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scanners_window), + tree); + gtk_widget_show(scanners_window); + + return(ctrls); } -void -fill_scanner_list(context, ctrls) +/* Clean the store and then fill it with the Scanners of the given + * context. + */ +void +fill_scanner_list(context, store) struct context *context; - struct arglist *ctrls; + GtkListStore *store; { - GtkTooltips * tooltips; - struct nessus_plugin * scans = context->scanners; - GList * dlist = NULL; - - dlist = arg_get_value(ctrls, "DLIST"); - if(dlist)gtk_list_remove_items(GTK_LIST(arg_get_value(ctrls, "SCANNERS_LIST")), - dlist); - dlist = NULL; - tooltips = gtk_tooltips_new(); - while(scans != NULL ) - { - GtkWidget * item; - GtkWidget * box; - GtkWidget * button; - GtkWidget * label; - - item = gtk_list_item_new(); - if( scans->summary != NULL ) - gtk_tooltips_set_tip(tooltips, item, - (gchar *)scans->summary,""); - button = gtk_check_button_new(); - gtk_widget_set_usize(button, 15, 15); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), - scans->enabled); - label = gtk_label_new(scans->name); - box = gtk_hbox_new(FALSE,5); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, FALSE, 0); - gtk_widget_show(label); - gtk_box_pack_end(GTK_BOX(box), button, FALSE, FALSE,0); - - gtk_container_add(GTK_CONTAINER(item), box); - gtk_signal_connect(GTK_OBJECT(button), - "clicked", - GTK_SIGNAL_FUNC(prefs_scanner_list_toggle_callback), - scans); - - gtk_widget_show(button); - gtk_widget_show(box); - gtk_widget_show(item); - dlist = g_list_append(dlist, item); - gtk_object_set_data(GTK_OBJECT(item), - "list_item_data", - scans->name); - scans = scans->next; - } - gtk_tooltips_enable(tooltips); - if(arg_get_type(ctrls, "DLIST")<0) - arg_add_value(ctrls, "DLIST", ARG_PTR, -1, dlist); - else - arg_set_value(ctrls, "DLIST", -1, dlist); - - gtk_list_append_items(GTK_LIST(arg_get_value(ctrls, "SCANNERS_LIST")), dlist); -} + GtkTreeIter iter; + struct nessus_plugin * scans = context->scanners; + gtk_list_store_clear(store); -static void -scanner_infos_cb(widget, ctrls) - GtkWidget * widget; - struct arglist * ctrls; -{ - GtkObject * list_item; - char * scanner; - GList * dlist; - GtkWidget * list = arg_get_value(ctrls, "SCANNERS_LIST"); - - dlist = GTK_LIST(list)->selection; - if(!dlist)return; - - list_item = GTK_OBJECT(dlist->data); - scanner = gtk_object_get_data(list_item,"list_item_data"); - plugin_info_window_setup(Context->scanners, scanner); + while (scans != NULL ) + { + gtk_list_store_append(store, &iter); /* Acquire an iterator */ + gtk_list_store_set(store, &iter, + COL_NAME, scans->name, + COL_PLUGIN, scans, + -1); + scans = scans->next; + } } void _______________________________________________ Nessus-cvs mailing list Nessus-cvs[at]list.nessus.org http://mail.nessus.org/mailman/listinfo/nessus-cvs
|