Index: propedit.c =================================================================== --- propedit.c (revision 2753) +++ propedit.c (revision 2754) @@ -12,6 +12,9 @@ GtkWidget *val_box; /* combo box */ GtkListStore *vals; /* model of the combo box */ int stock_val; /* 1 if the value in the entry box is being edited from the combo */ + + /* buttons */ + GtkWidget *apply; } propedit_dialog_t; static void val_combo_changed_cb(GtkComboBox * combo, propedit_dialog_t *dlg) @@ -25,7 +28,7 @@ } } -static void val_entry_changed_cb(GtkComboBox * combo, propedit_dialog_t *dlg) +static void val_entry_changed_cb(GtkWidget *entry, propedit_dialog_t *dlg) { if (dlg->stock_val == 0) gtk_combo_box_set_active(GTK_COMBO_BOX(dlg->val_box), -1); @@ -55,16 +58,50 @@ gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(dlg->tree), -1, name, renderer, "text", col, NULL); } +static void list_cursor_changed_cb(GtkWidget *tree, propedit_dialog_t *dlg) +{ + GtkTreeSelection *tsel; + GtkTreeModel *tm; + GtkTreePath *path; + GtkTreeIter iter; + const char *prop, *comm; + + tsel = gtk_tree_view_get_selection(GTK_TREE_VIEW(dlg->tree)); + if (tsel == NULL) + return; + + gtk_tree_selection_get_selected(tsel, &tm, &iter); + if (iter.stamp == 0) + return; + + gtk_tree_model_get(tm, &iter, 0, &prop, 1, &comm, -1); + + printf("prop: %s!\n", prop); + + val_combo_reset(dlg); + val_combo_add(dlg, prop); + val_combo_add(dlg, "val0"); + val_combo_add(dlg, "val1"); + + gtk_entry_set_text(GTK_ENTRY(dlg->entry_val), comm); +} + +static void do_apply(GtkWidget *tree, propedit_dialog_t *dlg) +{ + printf("Apply!\n"); +} + int main(int argc, char *argv[]) { static propedit_dialog_t dlg; - GtkWidget *window, *vbox_tree, *vbox_edit, *hbox_win, *label; + GtkWidget *window, *vbox_tree, *vbox_edit, *hbox_win, *label, *hbx, *btn, *dummy, *box_val_edit; + GtkCellRenderer *renderer ; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_window_set_default_size(GTK_WINDOW(window), 600, 500); + gtk_window_set_default_size(GTK_WINDOW(window), 400, 300); gtk_window_set_title(GTK_WINDOW(window), "Property edit"); hbox_win = gtk_hbox_new(FALSE, 0); @@ -100,7 +137,7 @@ label = gtk_label_new("(preview)"); gtk_box_pack_start(GTK_BOX(vbox_edit), label, TRUE, TRUE, 4); - label = gtk_label_new("Change value"); + label = gtk_label_new("Change property of all objects"); gtk_box_pack_start(GTK_BOX(vbox_edit), label, FALSE, TRUE, 4); prop_add(&dlg, "foo/bar", "15", "10", "20", "17.2"); @@ -107,35 +144,46 @@ prop_add(&dlg, "foo/baz", "1", "1", "2", "1.2"); prop_add(&dlg, "string", "ho", NULL, NULL, NULL); + g_signal_connect(G_OBJECT(dlg.tree), "cursor-changed", G_CALLBACK(list_cursor_changed_cb), &dlg); + + /* value edit */ - GtkWidget *hbox_val_edit; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); + renderer = gtk_cell_renderer_text_new(); dlg.stock_val = 0; dlg.vals = gtk_list_store_new(1, G_TYPE_STRING); - hbox_val_edit = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox_edit), hbox_val_edit, FALSE, TRUE, 4); + box_val_edit = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox_edit), box_val_edit, FALSE, TRUE, 4); /* combo */ - val_combo_reset(&dlg); - val_combo_add(&dlg, "val0"); - val_combo_add(&dlg, "val1"); - dlg.val_box = gtk_combo_box_new_with_model(GTK_TREE_MODEL(dlg.vals)); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(dlg.val_box), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(dlg.val_box), renderer, "text", 0, NULL); - gtk_box_pack_start(GTK_BOX(hbox_val_edit), dlg.val_box, FALSE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(box_val_edit), dlg.val_box, FALSE, TRUE, 0); g_signal_connect(G_OBJECT(dlg.val_box), "changed", G_CALLBACK(val_combo_changed_cb), &dlg); /* entry */ - dlg.entry_val = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(hbox_val_edit), dlg.entry_val, TRUE, TRUE, 4); + gtk_box_pack_start(GTK_BOX(box_val_edit), dlg.entry_val, TRUE, TRUE, 0); g_signal_connect(G_OBJECT(dlg.entry_val), "changed", G_CALLBACK(val_entry_changed_cb), &dlg); + /* Apply button */ + hbx = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox_edit), hbx, FALSE, TRUE, 4); + dummy = gtk_vbox_new(FALSE, 0); /* dummy box to eat up free space on the left */ + gtk_box_pack_start(GTK_BOX(hbx), dummy, TRUE, TRUE, 4); + + btn = gtk_button_new_with_label("Close"); + gtk_box_pack_start(GTK_BOX(hbx), btn, FALSE, TRUE, 4); + + dlg.apply = gtk_button_new_with_label("Apply"); + gtk_box_pack_start(GTK_BOX(hbx), dlg.apply, FALSE, TRUE, 4); + g_signal_connect(G_OBJECT(dlg.apply), "clicked", G_CALLBACK(do_apply), &dlg); + + gtk_widget_show_all(window); gtk_main();