2 * Copyright (C) 2007 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301 USA
25 #include "swfedit_file.h"
28 save (GtkButton
*button
, SwfeditFile
*file
)
33 dialog
= gtk_file_chooser_dialog_new ("Save file...",
34 GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (button
))),
35 GTK_FILE_CHOOSER_ACTION_SAVE
,
36 GTK_STOCK_CANCEL
, GTK_RESPONSE_REJECT
,
37 GTK_STOCK_SAVE
, GTK_RESPONSE_ACCEPT
,
39 gtk_dialog_set_default_response (GTK_DIALOG (dialog
), GTK_RESPONSE_ACCEPT
);
40 gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog
), TRUE
);
41 gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog
), file
->filename
);
42 if (gtk_dialog_run (GTK_DIALOG (dialog
)) == GTK_RESPONSE_ACCEPT
) {
43 g_free (file
->filename
);
44 file
->filename
= gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog
));
45 if (!swfedit_file_save (file
, &error
)) {
46 g_printerr ("Error saving file: %s\n", error
->message
);
50 gtk_widget_destroy (dialog
);
54 cell_renderer_edited (GtkCellRenderer
*renderer
, char *path
,
55 char *new_text
, SwfeditFile
*file
)
59 if (!gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (file
),
61 g_assert_not_reached ();
63 swfedit_token_set_iter (SWFEDIT_TOKEN (file
), &iter
, new_text
);
67 open_window (char *filename
)
70 GtkWidget
*window
, *scroll
, *box
, *button
, *treeview
;
72 GtkTreeViewColumn
*column
;
73 GtkCellRenderer
*renderer
;
76 file
= swfedit_file_new (filename
, &error
);
78 g_printerr ("Error opening file %s: %s\n", filename
, error
->message
);
82 window
= gtk_window_new (GTK_WINDOW_TOPLEVEL
);
83 basename
= g_path_get_basename (filename
);
85 gtk_window_set_title (GTK_WINDOW (window
), basename
);
88 g_signal_connect (window
, "destroy", G_CALLBACK (gtk_main_quit
), NULL
);
90 box
= gtk_vbox_new (FALSE
, 3);
91 gtk_container_add (GTK_CONTAINER (window
), box
);
93 scroll
= gtk_scrolled_window_new (NULL
, NULL
);
94 gtk_box_pack_start (GTK_BOX (box
), scroll
, TRUE
, TRUE
, 0);
96 treeview
= gtk_tree_view_new_with_model (GTK_TREE_MODEL (file
));
97 gtk_container_add (GTK_CONTAINER (scroll
), treeview
);
99 renderer
= gtk_cell_renderer_text_new ();
100 column
= gtk_tree_view_column_new_with_attributes ("Name", renderer
,
101 "text", SWFEDIT_COLUMN_NAME
, "sensitive", SWFEDIT_COLUMN_VALUE_EDITABLE
, NULL
);
102 gtk_tree_view_column_set_resizable (column
, TRUE
);
103 gtk_tree_view_append_column (GTK_TREE_VIEW (treeview
), column
);
105 renderer
= gtk_cell_renderer_text_new ();
106 g_object_set (G_OBJECT (renderer
), "editable", TRUE
, NULL
);
107 g_signal_connect (renderer
, "edited", G_CALLBACK (cell_renderer_edited
), file
);
108 column
= gtk_tree_view_column_new_with_attributes ("Value", renderer
,
109 "text", SWFEDIT_COLUMN_VALUE
, "visible", SWFEDIT_COLUMN_VALUE_VISIBLE
,
110 "sensitive", SWFEDIT_COLUMN_VALUE_EDITABLE
, NULL
);
111 gtk_tree_view_column_set_resizable (column
, TRUE
);
112 gtk_tree_view_append_column (GTK_TREE_VIEW (treeview
), column
);
114 button
= gtk_button_new_from_stock (GTK_STOCK_SAVE
);
115 g_signal_connect (button
, "clicked", G_CALLBACK (save
), file
);
116 gtk_box_pack_start (GTK_BOX (box
), button
, FALSE
, TRUE
, 0);
118 gtk_widget_show_all (window
);
123 main (int argc
, char **argv
)
125 gtk_init (&argc
, &argv
);
128 g_print ("Usage: %s FILENAME\n", argv
[0]);
131 if (open_window (argv
[1])) {