r3370: Initial work on Add Key/Delete Key/Add Value/Mod Value/Del Value support in
authorJelmer Vernooij <jelmer@samba.org>
Fri, 29 Oct 2004 14:53:23 +0000 (14:53 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:02 +0000 (13:05 -0500)
gregedit
(This used to be commit 33f429c61f2859e3ad60fa38823174bbd331d91a)

source4/gtk/tools/gregedit.c
source4/lib/registry/tools/regdiff.c

index dfca6cef1999fdd7ab1046d710ae224cca48692e..ed543691728481f11bf310875bcd4d5ac509d797 100644 (file)
@@ -36,6 +36,205 @@ static GtkWidget* create_openfilewin (void);
 static GtkWidget* create_savefilewin (void);
 struct registry_context *registry = NULL;
 
+static GtkWidget* create_FindDialog (void)
+{
+  GtkWidget *FindDialog;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *vbox1;
+  GtkWidget *hbox1;
+  GtkWidget *label6;
+  GtkWidget *entry_pattern;
+  GtkWidget *frame3;
+  GtkWidget *alignment3;
+  GtkWidget *vbox2;
+  GtkWidget *checkbutton1;
+  GtkWidget *checkbutton2;
+  GtkWidget *checkbutton3;
+  GtkWidget *label7;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *cancelbutton2;
+  GtkWidget *okbutton2;
+
+  FindDialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (FindDialog), "Find Key or Value");
+  gtk_window_set_type_hint (GTK_WINDOW (FindDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox2 = GTK_DIALOG (FindDialog)->vbox;
+
+  vbox1 = gtk_vbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox1, TRUE, TRUE, 0);
+
+  hbox1 = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (vbox1), hbox1, TRUE, TRUE, 0);
+
+  label6 = gtk_label_new ("Find String");
+  gtk_box_pack_start (GTK_BOX (hbox1), label6, FALSE, FALSE, 0);
+
+  entry_pattern = gtk_entry_new ();
+  gtk_box_pack_start (GTK_BOX (hbox1), entry_pattern, TRUE, TRUE, 0);
+
+  frame3 = gtk_frame_new (NULL);
+  gtk_box_pack_start (GTK_BOX (vbox1), frame3, TRUE, TRUE, 0);
+  gtk_frame_set_shadow_type (GTK_FRAME (frame3), GTK_SHADOW_NONE);
+
+  alignment3 = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_container_add (GTK_CONTAINER (frame3), alignment3);
+  gtk_alignment_set_padding (GTK_ALIGNMENT (alignment3), 0, 0, 12, 0);
+
+  vbox2 = gtk_vbox_new (FALSE, 0);
+  gtk_container_add (GTK_CONTAINER (alignment3), vbox2);
+
+  checkbutton1 = gtk_check_button_new_with_mnemonic ("_Key Names");
+  gtk_box_pack_start (GTK_BOX (vbox2), checkbutton1, FALSE, FALSE, 0);
+
+  checkbutton2 = gtk_check_button_new_with_mnemonic ("_Value Names");
+  gtk_box_pack_start (GTK_BOX (vbox2), checkbutton2, FALSE, FALSE, 0);
+
+  checkbutton3 = gtk_check_button_new_with_mnemonic ("Value _Data");
+  gtk_box_pack_start (GTK_BOX (vbox2), checkbutton3, FALSE, FALSE, 0);
+
+  label7 = gtk_label_new ("<b>Search in</b>");
+  gtk_frame_set_label_widget (GTK_FRAME (frame3), label7);
+  gtk_label_set_use_markup (GTK_LABEL (label7), TRUE);
+
+  dialog_action_area2 = GTK_DIALOG (FindDialog)->action_area;
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+
+  cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_dialog_add_action_widget (GTK_DIALOG (FindDialog), cancelbutton2, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
+
+  okbutton2 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_dialog_add_action_widget (GTK_DIALOG (FindDialog), okbutton2, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
+
+  gtk_widget_show_all (dialog_vbox2);
+
+  return FindDialog;
+}
+
+static GtkWidget* create_SetValueDialog (void)
+{
+  GtkWidget *SetValueDialog;
+  GtkWidget *dialog_vbox1;
+  GtkWidget *table1;
+  GtkWidget *label3;
+  GtkWidget *label4;
+  GtkWidget *label5;
+  GtkWidget *entry_value_name;
+  GtkWidget *value_data;
+  GtkWidget *combo_data_type;
+  GtkWidget *dialog_action_area1;
+  GtkWidget *cancelbutton1;
+  GtkWidget *okbutton1;
+
+  SetValueDialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (SetValueDialog), "Set Registry Value");
+  GTK_WINDOW (SetValueDialog)->type = GTK_WINDOW_POPUP;
+  gtk_window_set_position (GTK_WINDOW (SetValueDialog), GTK_WIN_POS_CENTER);
+  gtk_window_set_resizable (GTK_WINDOW (SetValueDialog), FALSE);
+  gtk_window_set_type_hint (GTK_WINDOW (SetValueDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox1 = GTK_DIALOG (SetValueDialog)->vbox;
+
+  table1 = gtk_table_new (3, 2, FALSE);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox1), table1, TRUE, TRUE, 0);
+
+  label3 = gtk_label_new ("Value name:");
+  gtk_table_attach (GTK_TABLE (table1), label3, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label3), 0, 0.5);
+
+  label4 = gtk_label_new ("Data Type:");
+  gtk_table_attach (GTK_TABLE (table1), label4, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label4), 0, 0.5);
+
+  label5 = gtk_label_new ("Data:");
+  gtk_table_attach (GTK_TABLE (table1), label5, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label5), 0, 0.5);
+
+  entry_value_name = gtk_entry_new ();
+  gtk_table_attach (GTK_TABLE (table1), entry_value_name, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  value_data = gtk_entry_new ();
+  gtk_table_attach (GTK_TABLE (table1), value_data, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  combo_data_type = gtk_combo_box_entry_new_text ();
+  gtk_table_attach (GTK_TABLE (table1), combo_data_type, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  dialog_action_area1 = GTK_DIALOG (SetValueDialog)->action_area;
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
+
+  cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_dialog_add_action_widget (GTK_DIALOG (SetValueDialog), cancelbutton1, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
+
+  okbutton1 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_dialog_add_action_widget (GTK_DIALOG (SetValueDialog), okbutton1, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
+
+  gtk_widget_show_all (dialog_vbox1);
+
+  return SetValueDialog;
+}
+
+static GtkWidget* create_NewKeyDialog (void)
+{
+  GtkWidget *NewKeyDialog;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *hbox1;
+  GtkWidget *label6;
+  GtkWidget *entry_key_name;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *cancelbutton2;
+  GtkWidget *okbutton2;
+
+  NewKeyDialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (NewKeyDialog), "New Registry Key");
+  GTK_WINDOW (NewKeyDialog)->type = GTK_WINDOW_POPUP;
+  gtk_window_set_position (GTK_WINDOW (NewKeyDialog), GTK_WIN_POS_CENTER);
+  gtk_window_set_resizable (GTK_WINDOW (NewKeyDialog), FALSE);
+  gtk_window_set_type_hint (GTK_WINDOW (NewKeyDialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox2 = GTK_DIALOG (NewKeyDialog)->vbox;
+
+  hbox1 = gtk_hbox_new (FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), hbox1, TRUE, TRUE, 0);
+
+  label6 = gtk_label_new ("Name:");
+  gtk_box_pack_start (GTK_BOX (hbox1), label6, FALSE, FALSE, 0);
+
+  entry_key_name = gtk_entry_new ();
+  gtk_box_pack_start (GTK_BOX (hbox1), entry_key_name, TRUE, TRUE, 0);
+
+  dialog_action_area2 = GTK_DIALOG (NewKeyDialog)->action_area;
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+
+  cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_dialog_add_action_widget (GTK_DIALOG (NewKeyDialog), cancelbutton2, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
+
+  okbutton2 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_dialog_add_action_widget (GTK_DIALOG (NewKeyDialog), okbutton2, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
+
+  gtk_widget_show_all (dialog_vbox2);
+
+  return NewKeyDialog;
+}
+
+
 static void expand_key(GtkTreeView *treeview, GtkTreeIter *parent, GtkTreePath *arg2)
 {
        GtkTreeIter firstiter, iter, tmpiter;
@@ -230,34 +429,30 @@ static void on_quit_activate                       (GtkMenuItem     *menuitem,
 }
 
 
-static void on_cut_activate                        (GtkMenuItem     *menuitem,
+static void on_delete_activate                     (GtkMenuItem     *menuitem,
                                                                                gpointer         user_data)
 {
        /* FIXME */
 }
 
-
-static void on_copy_activate                       (GtkMenuItem     *menuitem,
+static void on_add_key_activate                     (GtkMenuItem     *menuitem,
                                                                                gpointer         user_data)
 {
        /* FIXME */
 }
 
-
-static void on_paste_activate                      (GtkMenuItem     *menuitem,
+static void on_add_value_activate                     (GtkMenuItem     *menuitem,
                                                                                gpointer         user_data)
 {
        /* FIXME */
 }
 
-
-static void on_delete_activate                     (GtkMenuItem     *menuitem,
+static void on_find_activate                     (GtkMenuItem     *menuitem,
                                                                                gpointer         user_data)
 {
        /* FIXME */
 }
 
-
 static void on_about_activate                      (GtkMenuItem     *menuitem,
                                                                                gpointer         user_data)
 {
@@ -322,12 +517,11 @@ static GtkWidget* create_mainwin (void)
        GtkWidget *open_remote;
        GtkWidget *separatormenuitem1;
        GtkWidget *quit;
-       GtkWidget *men_edit;
-       GtkWidget *men_edit_menu;
-       GtkWidget *cut;
-       GtkWidget *copy;
-       GtkWidget *paste;
+       GtkWidget *men_key;
+       GtkWidget *men_key_menu;
        GtkWidget *delete;
+       GtkWidget *find;
+       GtkWidget *add_key, *add_value;
        GtkCellRenderer *renderer;
        GtkTreeViewColumn *curcol;
        GtkWidget *help;
@@ -418,27 +612,30 @@ static GtkWidget* create_mainwin (void)
        quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
        gtk_container_add (GTK_CONTAINER (menu_file_menu), quit);
 
-       men_edit = gtk_menu_item_new_with_mnemonic ("_Edit");
-       gtk_container_add (GTK_CONTAINER (menubar), men_edit);
+       men_key = gtk_menu_item_new_with_mnemonic ("_Key");
+       gtk_container_add (GTK_CONTAINER (menubar), men_key);
+
+       men_key_menu = gtk_menu_new ();
+       gtk_menu_item_set_submenu (GTK_MENU_ITEM (men_key), men_key_menu);
 
-       men_edit_menu = gtk_menu_new ();
-       gtk_menu_item_set_submenu (GTK_MENU_ITEM (men_edit), men_edit_menu);
+       add_key = gtk_image_menu_item_new_with_mnemonic("Add _Subkey");
+       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_key), gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU));
 
-       cut = gtk_image_menu_item_new_from_stock ("gtk-cut", accel_group);
-       gtk_widget_set_sensitive(cut, False);
-       gtk_container_add (GTK_CONTAINER (men_edit_menu), cut);
+       gtk_widget_set_sensitive(add_key, False);
+       gtk_container_add (GTK_CONTAINER (men_key_menu), add_key);
 
-       copy = gtk_image_menu_item_new_from_stock ("gtk-copy", accel_group);
-       gtk_widget_set_sensitive(copy, False);
-       gtk_container_add (GTK_CONTAINER (men_edit_menu), copy);
+       add_value = gtk_image_menu_item_new_with_mnemonic("Add _Value");
+       gtk_widget_set_sensitive(add_value, False);
+       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (add_value), gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_MENU));
+       gtk_container_add (GTK_CONTAINER (men_key_menu), add_value);
 
-       paste = gtk_image_menu_item_new_from_stock ("gtk-paste", accel_group);
-       gtk_widget_set_sensitive(paste, False);
-       gtk_container_add (GTK_CONTAINER (men_edit_menu), paste);
+       find = gtk_image_menu_item_new_from_stock ("gtk-find", accel_group);
+       gtk_widget_set_sensitive(find, False);
+       gtk_container_add (GTK_CONTAINER (men_key_menu), find);
 
        delete = gtk_image_menu_item_new_from_stock ("gtk-delete", accel_group);
        gtk_widget_set_sensitive(delete, False);
-       gtk_container_add (GTK_CONTAINER (men_edit_menu), delete);
+       gtk_container_add (GTK_CONTAINER (men_key_menu), delete);
 
        help = gtk_menu_item_new_with_mnemonic ("_Help");
        gtk_container_add (GTK_CONTAINER (menubar), help);
@@ -525,14 +722,14 @@ static GtkWidget* create_mainwin (void)
        g_signal_connect ((gpointer) quit, "activate",
                                          G_CALLBACK (on_quit_activate),
                                          NULL);
-       g_signal_connect ((gpointer) cut, "activate",
-                                         G_CALLBACK (on_cut_activate),
+       g_signal_connect ((gpointer) add_key, "activate",
+                                         G_CALLBACK (on_add_key_activate),
                                          NULL);
-       g_signal_connect ((gpointer) copy, "activate",
-                                         G_CALLBACK (on_copy_activate),
+       g_signal_connect ((gpointer) add_value, "activate",
+                                         G_CALLBACK (on_add_value_activate),
                                          NULL);
-       g_signal_connect ((gpointer) paste, "activate",
-                                         G_CALLBACK (on_paste_activate),
+       g_signal_connect ((gpointer) find, "activate",
+                                         G_CALLBACK (on_find_activate),
                                          NULL);
        g_signal_connect ((gpointer) delete, "activate",
                                          G_CALLBACK (on_delete_activate),
@@ -634,3 +831,5 @@ static GtkWidget* create_savefilewin (void)
        talloc_destroy(mem_ctx);
        return 0;
 }
+
+
index 41a29e46d39732182448f4cc48dffb72a7c9bdc0..bedf3222d1de46ca0123774b334462cc373977a9 100644 (file)
@@ -115,7 +115,7 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
        const char *credentials1= NULL, *credentials2 = NULL;
        char *outputfile = NULL;
        FILE *fd = stdout;
-       struct registry_context *h1, *h2;
+       struct registry_context *h1 = NULL, *h2;
        int from_null = 0;
        int i;
        WERROR error, error2;
@@ -165,7 +165,7 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
                        fprintf(stderr, "Unable to open '%s' with backend '%s'\n", location1, backend1);
                        return 1;
                }
-       }
+       } 
 
        location2 = poptGetArg(pc);
        if(!location2) {
@@ -196,8 +196,8 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
 
        error2 = error = WERR_OK; 
 
-       for(i = 0; i < h1->num_hives && i < h2->num_hives; i++) {
-               writediff(h1->hives[i]->root, h2->hives[i]->root, fd); 
+       for(i = 0; (!h1 || i < h1->num_hives) && i < h2->num_hives; i++) {
+               writediff(h1?h1->hives[i]->root:NULL, h2->hives[i]->root, fd); 
        }
 
        fclose(fd);