SF.net SVN: geany: [1626] trunk
eht16 at users.sourceforge.net
eht16 at xxxxx
Sun Jun 17 15:14:06 UTC 2007
Revision: 1626
http://svn.sourceforge.net/geany/?rev=1626&view=rev
Author: eht16
Date: 2007-06-17 08:14:04 -0700 (Sun, 17 Jun 2007)
Log Message:
-----------
Apply patch from Alexander Rodin to improve the class builder code(thanks).
Modified Paths:
--------------
trunk/ChangeLog
trunk/src/templates.c
trunk/src/tools.c
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2007-06-15 17:16:06 UTC (rev 1625)
+++ trunk/ChangeLog 2007-06-17 15:14:04 UTC (rev 1626)
@@ -1,3 +1,9 @@
+2007-06-17 Enrico Tröger <enrico.troeger at uvena.de>
+
+ * src/templates.c, src/tools.c: Apply patch from Alexander Rodin to
+ improve the class builder code(thanks).
+
+
2007-06-15 Frank Lanitz <frank at frank.uvena.de>
* src/about.c: Update of about dialog.
Modified: trunk/src/templates.c
===================================================================
--- trunk/src/templates.c 2007-06-15 17:16:06 UTC (rev 1625)
+++ trunk/src/templates.c 2007-06-17 15:14:04 UTC (rev 1626)
@@ -315,7 +315,7 @@
static void {class_name_low}_class_init({class_name}Class *klass)\n\
{\n\
{gtk_destructor_registration}\n\
- parent_class = gtk_type_class({base_gtype});\n\
+ parent_class = ({base_name}Class*)g_type_class_peek({base_gtype});\n\
g_type_class_add_private((gpointer)klass, sizeof({class_name}Private));\n\
}\n\
\n\
Modified: trunk/src/tools.c
===================================================================
--- trunk/src/tools.c 2007-06-15 17:16:06 UTC (rev 1625)
+++ trunk/src/tools.c 2007-06-17 15:14:04 UTC (rev 1626)
@@ -83,10 +83,10 @@
static void sc_fill_store(GtkTreeStore *store);
static gboolean sc_insert(GtkTreeModel *model, GtkTreeIter *iter);
-static void on_set_sensitive_toggled(GtkWidget *toggle_button, GtkWidget *target_widget);
-static void on_class_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg);
-static void on_base_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg);
-static void on_create_class(CreateClassDialog *cc_dlg);
+static void cc_dlg_on_set_sensitive_toggled(GtkWidget *toggle_button, GtkWidget *target_widget);
+static void cc_dlg_on_class_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg);
+static void cc_dlg_on_base_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg);
+static void cc_dlg_on_create_class(CreateClassDialog *cc_dlg);
void tools_show_dialog_insert_special_chars()
@@ -932,15 +932,16 @@
GtkWidget *vbox;
GtkWidget *hbox;
GtkWidget *label;
- GtkWidget *action_area;
- GtkWidget *cancel_button;
- GtkWidget *ok_button;
cc_dlg = g_new0(CreateClassDialog, 1);
cc_dlg->class_type = type;
- cc_dlg->dialog = gtk_dialog_new();
- gtk_window_set_title(GTK_WINDOW(cc_dlg->dialog), _("Create class"));
+ cc_dlg->dialog = gtk_dialog_new_with_buttons(_("Create class"),
+ GTK_WINDOW(app->window),
+ GTK_DIALOG_MODAL,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ GTK_STOCK_OK, GTK_RESPONSE_OK,
+ NULL);
gtk_container_set_border_width(GTK_CONTAINER(cc_dlg->dialog), 5);
g_signal_connect_swapped(G_OBJECT(cc_dlg->dialog), "destroy",
G_CALLBACK(g_free), (gpointer)cc_dlg);
@@ -969,7 +970,7 @@
gtk_box_pack_start(GTK_BOX(hbox), cc_dlg->class_name_entry, TRUE, TRUE, 0);
gtk_widget_show(cc_dlg->class_name_entry);
g_signal_connect(G_OBJECT(cc_dlg->class_name_entry), "changed",
- G_CALLBACK(on_class_name_entry_changed), cc_dlg);
+ G_CALLBACK(cc_dlg_on_class_name_entry_changed), cc_dlg);
hbox = gtk_hbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(vbox), hbox);
@@ -1014,11 +1015,11 @@
cc_dlg->base_name_entry = gtk_entry_new();
if (type == GEANY_CLASS_TYPE_GTK)
- gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_name_entry), "GtkObject");
+ gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_name_entry), "GObject");
gtk_container_add(GTK_CONTAINER(hbox), cc_dlg->base_name_entry);
gtk_widget_show(cc_dlg->base_name_entry);
g_signal_connect(G_OBJECT(cc_dlg->base_name_entry), "changed",
- G_CALLBACK(on_base_name_entry_changed), (gpointer)cc_dlg);
+ G_CALLBACK(cc_dlg_on_base_name_entry_changed), (gpointer)cc_dlg);
hbox = gtk_hbox_new(FALSE, 10);
gtk_container_add(GTK_CONTAINER(vbox), hbox);
@@ -1030,7 +1031,7 @@
cc_dlg->base_header_entry = gtk_entry_new();
if (type == GEANY_CLASS_TYPE_GTK)
- gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_header_entry), "gtk/gtkobject.h");
+ gtk_entry_set_text(GTK_ENTRY(cc_dlg->base_header_entry), "glib-object.h");
gtk_container_add(GTK_CONTAINER(hbox), cc_dlg->base_header_entry);
gtk_widget_show(cc_dlg->base_header_entry);
@@ -1082,38 +1083,27 @@
gtk_container_add(GTK_CONTAINER(vbox), hbox);
gtk_widget_show(hbox);
g_signal_connect(G_OBJECT(cc_dlg->create_constructor_box), "toggled",
- G_CALLBACK(on_set_sensitive_toggled), (gpointer)hbox);
+ G_CALLBACK(cc_dlg_on_set_sensitive_toggled), (gpointer)hbox);
label = gtk_label_new(_("GTK+ constructor type"));
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
gtk_widget_show(label);
cc_dlg->gtk_constructor_type_entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(cc_dlg->gtk_constructor_type_entry), "GtkObject");
+ gtk_entry_set_text(GTK_ENTRY(cc_dlg->gtk_constructor_type_entry), "GObject");
gtk_container_add(GTK_CONTAINER(hbox), cc_dlg->gtk_constructor_type_entry);
gtk_widget_show(cc_dlg->gtk_constructor_type_entry);
}
- action_area = GTK_DIALOG(cc_dlg->dialog)->action_area;
+ if (gtk_dialog_run(GTK_DIALOG(cc_dlg->dialog)) == GTK_RESPONSE_OK)
+ cc_dlg_on_create_class(cc_dlg);
- cancel_button = gtk_button_new_from_stock(GTK_STOCK_CANCEL);
- gtk_container_add(GTK_CONTAINER(action_area), cancel_button);
- gtk_widget_show(cancel_button);
-
- g_signal_connect_swapped(G_OBJECT(cancel_button), "clicked",
- G_CALLBACK(gtk_object_destroy), (gpointer)cc_dlg->dialog);
-
- ok_button = gtk_button_new_from_stock(GTK_STOCK_OK);
- gtk_container_add(GTK_CONTAINER(action_area), ok_button);
- gtk_widget_show(ok_button);
- g_signal_connect_swapped(G_OBJECT(ok_button), "clicked",
- G_CALLBACK(on_create_class), (gpointer)cc_dlg);
-
- gtk_widget_show(cc_dlg->dialog);
+ gtk_widget_destroy(cc_dlg->dialog);
+// g_object_unref(G_OBJECT(cc_dlg->dialog));
}
-static void on_set_sensitive_toggled(GtkWidget *toggle_button, GtkWidget *target_widget)
+static void cc_dlg_on_set_sensitive_toggled(GtkWidget *toggle_button, GtkWidget *target_widget)
{
g_return_if_fail(toggle_button != NULL);
g_return_if_fail(GTK_IS_TOGGLE_BUTTON(toggle_button));
@@ -1125,7 +1115,7 @@
}
-static void on_class_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg)
+static void cc_dlg_on_class_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg)
{
gchar *class_name_down;
gchar *class_header;
@@ -1171,7 +1161,7 @@
}
-static void on_base_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg)
+static void cc_dlg_on_base_name_entry_changed(GtkWidget *entry, CreateClassDialog *cc_dlg)
{
gchar *base_name_splitted;
gchar *base_header;
@@ -1182,9 +1172,12 @@
g_return_if_fail(cc_dlg != NULL);
base_name_splitted = str_case_split(gtk_entry_get_text(GTK_ENTRY(entry)), '_');
- tmp = g_strdup_printf("%s%s.h",
- g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(entry)), "gtk", 3) ? "": "gtk/",
- gtk_entry_get_text(GTK_ENTRY(entry)));
+ if (! g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(entry)), "gtk", 3))
+ tmp = g_strconcat("gtk/", gtk_entry_get_text(GTK_ENTRY(entry)), ".h", NULL);
+ else if (utils_str_equal(gtk_entry_get_text(GTK_ENTRY(entry)), "GObject"))
+ tmp = g_strdup("glib-object.h");
+ else
+ tmp = g_strconcat(gtk_entry_get_text(GTK_ENTRY(entry)), ".h", NULL);
base_header = g_ascii_strdown(tmp, -1);
g_free(tmp);
@@ -1194,11 +1187,11 @@
{
gchar *base_gtype;
if (! g_ascii_strncasecmp(gtk_entry_get_text(GTK_ENTRY(entry)), "gtk", 3))
- {
tmp = g_strdup_printf("%.3s_TYPE%s",
base_name_splitted,
base_name_splitted + 3);
- }
+ else if (utils_str_equal(gtk_entry_get_text(GTK_ENTRY(entry)), "GObject"))
+ tmp = g_strdup("G_TYPE_OBJECT");
else
tmp = g_strconcat(base_name_splitted, "_TYPE", NULL);
base_gtype = g_ascii_strup(tmp, -1);
@@ -1213,7 +1206,7 @@
}
-static void on_create_class(CreateClassDialog *cc_dlg)
+static void cc_dlg_on_create_class(CreateClassDialog *cc_dlg)
{
ClassInfo *class_info;
gint idx;
@@ -1231,7 +1224,7 @@
tmp = str_case_split(class_info->class_name, '_');
class_info->class_name_up = g_ascii_strup(tmp, -1);
class_info->class_name_low = g_ascii_strdown(class_info->class_name_up, -1);
- if (*gtk_entry_get_text(GTK_ENTRY(cc_dlg->base_name_entry)) != '\0')
+ if (! utils_str_equal(gtk_entry_get_text(GTK_ENTRY(cc_dlg->base_name_entry)), ""))
{
class_info->base_name = g_strdup(gtk_entry_get_text(GTK_ENTRY(cc_dlg->base_name_entry)));
class_info->base_include = g_strdup_printf("\n#include %c%s%c\n",
@@ -1241,6 +1234,11 @@
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cc_dlg->base_header_global_box)) ?
'>' : '\"');
}
+ else
+ {
+ class_info->base_name = g_strdup("");
+ class_info->base_include = g_strdup("");
+ }
class_info->header = g_strdup(gtk_entry_get_text(GTK_ENTRY(cc_dlg->header_entry)));
class_info->header_guard = g_ascii_strup(class_info->header, -1);
g_strdelimit(class_info->header_guard, ".", '_');
@@ -1249,13 +1247,15 @@
case GEANY_CLASS_TYPE_CPP:
{
class_info->source = g_strdup(gtk_entry_get_text(GTK_ENTRY(cc_dlg->source_entry)));
- if (class_info->base_name != NULL)
+ if (! utils_str_equal(class_info->base_name, ""))
class_info->base_decl = g_strdup_printf(": public %s", class_info->base_name);
+ else
+ class_info->base_decl = g_strdup("");
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cc_dlg->create_constructor_box)))
{
gchar *base_constructor;
- if (class_info->base_name == NULL)
+ if (utils_str_equal(class_info->base_name, ""))
base_constructor = g_strdup("");
else
base_constructor = g_strdup_printf("\t: %s()\n", class_info->base_name);
@@ -1264,6 +1264,11 @@
class_info->class_name, class_info->class_name, base_constructor);
g_free(base_constructor);
}
+ else
+ {
+ class_info->constructor_decl = g_strdup("");
+ class_info->constructor_impl = g_strdup("");
+ }
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cc_dlg->create_destructor_box)))
{
class_info->destructor_decl =
@@ -1271,6 +1276,11 @@
class_info->destructor_impl = g_strdup_printf("\n%s::~%s()\n{\n\t\n}\n",
class_info->class_name, class_info->class_name);
}
+ else
+ {
+ class_info->destructor_decl = g_strdup("");
+ class_info->destructor_impl = g_strdup("");
+ }
break;
}
case GEANY_CLASS_TYPE_GTK:
@@ -1293,37 +1303,48 @@
gtk_entry_get_text(GTK_ENTRY(cc_dlg->gtk_constructor_type_entry)),
class_info->class_name_up);
}
+ else
+ {
+ class_info->constructor_decl = g_strdup("");
+ class_info->constructor_impl = g_strdup("");
+ }
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cc_dlg->create_destructor_box)))
{
class_info->gtk_destructor_registration =
- g_strdup_printf("GtkObjectClass *object_class;\n\n"
- "\tobject_class = (GtkObjectClass*)klass;\n\n"
- "\tobject_class->destroy = %s_destroy;\n",
+ g_strdup_printf("GObjectClass *g_object_class;\n\n"
+ "\tg_object_class = G_OBJECT_CLASS(klass);\n\n"
+ "\tg_object_class->finalize = %s_finalize;\n",
class_info->class_name_low);
class_info->destructor_decl =
- g_strdup_printf("static void %s_destroy\t\t\t(GtkObject *object);\n",
+ g_strdup_printf("static void %s_finalize\t\t\t(GObject *object);\n",
class_info->class_name_low);
class_info->destructor_impl = g_strdup_printf("\n"
- "void %s_destroy(GtkObject *object)\n"
+ "void %s_finalize(GObject *object)\n"
"{\n"
"\t%s *self;\n\n"
"\tg_return_if_fail(object != NULL);\n"
"\tg_return_if_fail(IS_%s(object));\n\n"
"\tself = %s(object);\n\n"
- "\tif (GTK_OBJECT_CLASS(parent_class)->destroy)\n"
- "\t\t(* GTK_OBJECT_CLASS(parent_class)->destroy)(object);\n"
+ "\tif (G_OBJECT_CLASS(parent_class)->finalize)\n"
+ "\t\t(* G_OBJECT_CLASS(parent_class)->finalize)(object);\n"
"}\n",
class_info->class_name_low,
class_info->class_name,
class_info->class_name_up,
class_info->class_name_up);
}
+ else
+ {
+ class_info->gtk_destructor_registration = g_strdup("");
+ class_info->destructor_decl = g_strdup("");
+ class_info->destructor_impl = g_strdup("");
+ }
break;
}
}
// only create the files if the filename is not empty
- if (*class_info->source != '\0')
+ if (! utils_str_equal(class_info->source, ""))
{
text = templates_get_template_class_source(class_info);
idx = document_new_file(class_info->source, NULL);
@@ -1331,7 +1352,7 @@
g_free(text);
}
- if (*class_info->header != '\0')
+ if (! utils_str_equal(class_info->header, ""))
{
text = templates_get_template_class_header(class_info);
idx = document_new_file(class_info->header, NULL);
@@ -1339,8 +1360,6 @@
g_free(text);
}
- gtk_object_destroy(GTK_OBJECT(cc_dlg->dialog));
-
utils_free_pointers(tmp, class_info->class_name, class_info->class_name_up,
class_info->base_name, class_info->class_name_low, class_info->base_include,
class_info->header, class_info->header_guard, class_info->source, class_info->base_decl,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Commits
mailing list