2 * macro_edit.c (c) 2005 Johannes Schmid
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU Library General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 #include "macro-edit.h"
27 on_macro_edit_key_press_event(GtkWidget
*widget
, GdkEventKey
*event
,
30 if (event
->keyval
== GDK_Escape
)
32 gtk_widget_hide (widget
);
39 fill_category_combo (MacroEdit
* edit
, GtkWidget
* combo
)
41 GtkTreeIter iter_user
;
43 GtkTreeModel
*tree_model
= macro_db_get_model (edit
->macro_db
);
45 if (gtk_tree_model_get_iter_first (tree_model
, &iter_user
))
47 gtk_tree_model_iter_next (tree_model
, &iter_user
);
48 if (gtk_tree_model_iter_children
49 (tree_model
, &iter_cat
, &iter_user
))
55 gtk_tree_model_get (tree_model
, &iter_cat
,
59 if (is_category
&& name
)
61 gtk_combo_box_append_text
63 (edit
->category_entry
),
67 while (gtk_tree_model_iter_next
68 (tree_model
, &iter_cat
));
74 on_add_ok_clicked (MacroEdit
* edit
)
76 GtkTextIter begin
, end
;
77 GtkTextBuffer
*buffer
=
78 gtk_text_view_get_buffer (GTK_TEXT_VIEW (edit
->text
));
81 g_return_if_fail (edit
!= NULL
);
82 gtk_text_buffer_get_start_iter (buffer
, &begin
);
83 gtk_text_buffer_get_end_iter (buffer
, &end
);
84 text
= gtk_text_buffer_get_text (buffer
, &begin
, &end
, -1);
86 macro_db_add (edit
->macro_db
,
87 gtk_entry_get_text (GTK_ENTRY (edit
->name_entry
)),
88 gtk_entry_get_text (GTK_ENTRY
89 (GTK_BIN (edit
->category_entry
)->
91 gtk_entry_get_text (GTK_ENTRY (edit
->shortcut_entry
)),
93 gtk_widget_destroy (GTK_WIDGET (edit
));
97 on_add_cancel_clicked (MacroEdit
* edit
)
99 gtk_widget_hide (GTK_WIDGET (edit
));
100 gtk_widget_destroy (GTK_WIDGET (edit
));
104 on_edit_ok_clicked (MacroEdit
* edit
)
106 GtkTextIter begin
, end
;
109 GtkTextBuffer
*buffer
=
110 gtk_text_view_get_buffer (GTK_TEXT_VIEW (edit
->text
));
113 g_return_if_fail (edit
!= NULL
);
114 gtk_tree_selection_get_selected (edit
->select
, &model
, &iter
);
115 gtk_text_buffer_get_start_iter (buffer
, &begin
);
116 gtk_text_buffer_get_end_iter (buffer
, &end
);
117 text
= gtk_text_buffer_get_text (buffer
, &begin
, &end
, -1);
119 macro_db_change (edit
->macro_db
, &iter
,
120 gtk_entry_get_text (GTK_ENTRY (edit
->name_entry
)),
121 gtk_entry_get_text (GTK_ENTRY
122 (GTK_BIN (edit
->category_entry
)->
124 gtk_entry_get_text (GTK_ENTRY
125 (edit
->shortcut_entry
)), text
);
126 gtk_widget_destroy (GTK_WIDGET (edit
));
130 on_edit_cancel_clicked (MacroEdit
* edit
)
132 on_add_cancel_clicked (edit
);
136 on_dialog_response (GtkWidget
* dialog
, gint response
, MacroEdit
* edit
)
138 if (edit
->type
== MACRO_EDIT
)
143 on_edit_ok_clicked (edit
);
146 on_edit_cancel_clicked (edit
);
150 else if (edit
->type
== MACRO_ADD
)
155 on_add_ok_clicked (edit
);
158 on_add_cancel_clicked (edit
);
164 static gpointer parent_class
;
167 macro_edit_dispose (GObject
* edit
)
169 //MacroEdit *medit = MACRO_EDIT (edit);
170 //g_object_unref(medit->gxml);
171 G_OBJECT_CLASS (parent_class
)->dispose (edit
);
175 macro_edit_finalize (GObject
* edit
)
177 //MacroEdit *medit = MACRO_EDIT (edit);
178 //g_object_unref(medit->gxml);
179 G_OBJECT_CLASS (parent_class
)->finalize (edit
);
183 macro_edit_class_init (MacroEditClass
* klass
)
185 GObjectClass
*object_class
= G_OBJECT_CLASS (klass
);
186 parent_class
= g_type_class_peek_parent (klass
);
187 object_class
->dispose
= macro_edit_dispose
;
188 object_class
->finalize
= macro_edit_finalize
;
192 macro_edit_init (MacroEdit
* edit
)
196 edit
->gxml
= glade_xml_new (GLADE_FILE
, "macro_edit_table", NULL
);
198 table
= glade_xml_get_widget (edit
->gxml
, "macro_edit_table");
199 gtk_container_add (GTK_CONTAINER (GTK_DIALOG (edit
)->vbox
), table
);
200 gtk_dialog_add_buttons (GTK_DIALOG (edit
), GTK_STOCK_OK
, OK
,
201 GTK_STOCK_CANCEL
, CANCEL
, NULL
);
202 g_signal_connect (G_OBJECT (edit
), "response",
203 G_CALLBACK (on_dialog_response
), edit
);
204 gtk_window_set_title (GTK_WINDOW (edit
), _("Add/Edit macro"));
206 edit
->name_entry
= glade_xml_get_widget (edit
->gxml
, "macro_name");
207 edit
->category_entry
= gtk_combo_box_entry_new_text ();
208 gtk_widget_show (edit
->category_entry
);
209 gtk_table_attach_defaults (GTK_TABLE (table
),
210 edit
->category_entry
, 1, 2, 2, 3);
211 edit
->shortcut_entry
=
212 glade_xml_get_widget (edit
->gxml
, "macro_shortcut");
213 edit
->text
= glade_xml_get_widget (edit
->gxml
, "macro_text");
218 macro_edit_get_type (void)
220 static GType macro_edit_type
= 0;
221 if (!macro_edit_type
)
223 static const GTypeInfo me_info
= {
224 sizeof (MacroEditClass
),
225 NULL
, /* base_init */
226 NULL
, /* base_finalize */
227 (GClassInitFunc
) macro_edit_class_init
,
228 NULL
, /* class_finalize */
229 NULL
, /* class_data */
232 (GInstanceInitFunc
) macro_edit_init
,
235 g_type_register_static (GTK_TYPE_DIALOG
, "MacroEdit",
238 return macro_edit_type
;
242 macro_edit_new (int type
, MacroDB
* db
)
245 MACRO_EDIT (g_object_new (macro_edit_get_type (), NULL
));
248 fill_category_combo (edit
, edit
->category_entry
);
250 g_signal_connect(G_OBJECT(edit
), "key-press-event",
251 G_CALLBACK(on_macro_edit_key_press_event
), NULL
);
253 return GTK_WIDGET (edit
);
257 macro_edit_fill (MacroEdit
* edit
, GtkTreeSelection
* select
)
262 if (gtk_tree_selection_get_selected (select
, &model
, &iter
))
268 gboolean is_category
;
273 gtk_tree_model_get (model
, &iter
,
275 MACRO_CATEGORY
, &category
,
276 MACRO_SHORTCUT
, &shortcut
,
278 MACRO_IS_CATEGORY
, &is_category
,
279 MACRO_PREDEFINED
, &predefined
, -1);
280 if (!is_category
&& !predefined
)
282 GtkTextBuffer
*text_buffer
;
283 gchar
*shortcut_string
=
284 g_strdup_printf ("%c", shortcut
);
285 gtk_entry_set_text (GTK_ENTRY (edit
->name_entry
),
287 gtk_entry_set_text (GTK_ENTRY
288 (GTK_BIN (edit
->category_entry
)->
290 gtk_entry_set_text (GTK_ENTRY (edit
->shortcut_entry
),
292 g_free (shortcut_string
);
295 gtk_text_view_get_buffer (GTK_TEXT_VIEW
297 gtk_text_buffer_set_text (text_buffer
, text
, -1);
300 edit
->select
= select
;
303 void macro_edit_set_macro (MacroEdit
* edit
, const gchar
* macro
)
305 GtkTextBuffer
* buffer
= gtk_text_view_get_buffer(GTK_TEXT_VIEW(edit
->text
));
306 gtk_text_buffer_set_text(buffer
, macro
, strlen(macro
));