Mailing List Archive

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@list.nessus.org
http://mail.nessus.org/mailman/listinfo/nessus-cvs