add function names buts still with no content

2001-07-02  Chema Celorio  <chema@celorio.com>

	* src/glade-project-window.c (gpw_copy_cb): add function names buts still with no content

	* src/glade-placeholder.c (glade_placeholder_replace_widget): when adding a widget
	set the selection to that widget.

2001-07-01  Shane Butler  <shane_b@users.sourceforge.net>

 	* src/glade-widget-class.c (glade_widget_class_list_signals): use
 	class->type to avoid duplication etc
 	* src/glade-signals-editor.[ch]: moved lots of functionality into smaller
 	functions, fixed bugs etc.
This commit is contained in:
Chema Celorio 2001-07-03 00:43:28 +00:00 committed by Jose Maria Celorio
parent 513a285a01
commit 9ad326de87
7 changed files with 345 additions and 249 deletions

View File

@ -1,3 +1,17 @@
2001-07-02 Chema Celorio <chema@celorio.com>
* src/glade-project-window.c (gpw_copy_cb): add function names buts still with no content
* src/glade-placeholder.c (glade_placeholder_replace_widget): when adding a widget
set the selection to that widget.
2001-07-01 Shane Butler <shane_b@users.sourceforge.net>
* src/glade-widget-class.c (glade_widget_class_list_signals): use
class->type to avoid duplication etc
* src/glade-signals-editor.[ch]: moved lots of functionality into smaller
functions, fixed bugs etc.
2001-06-28 Ravi Pratap <ravi@che.iitm.ac.in>
* src/glade-project.c : Include string.h

14
TODO
View File

@ -38,7 +38,19 @@ that specifies a file.
- Fix multiple lines GladeEditor text entries. See glade-editor.c,
function : glade_editor_create_input_text.
- Implement tooltips for the "Widget" page of the widget editor.
- The tree view does not remember if the "leafs" are opened or closed
when switching between projects, or when reconstructing it. The tree view
should remember the states of the leafs. Some of this functionality might
have to go into gtk. Also if we have something like :
A
\
B__ C
|
\__ D
When hiding the childs of "A" and showingt htem again, the state of B and its
childs is lost, this should go into gtk+.
NOT-SO-EASY TO IMPLEMENT ITEMS
------------------------------
This items may prove tricky to implement if they are "done right"

View File

@ -29,6 +29,7 @@
#include "glade-widget-class.h"
#include "glade-widget.h"
#include "glade-property.h"
#include "glade-project.h"
#include "glade-project-window.h"
#define GLADE_PLACEHOLDER_ROW_STRING "GladePlaceholderRow"
@ -123,7 +124,7 @@ glade_placeholder_replace_container (GladePlaceholder *placeholder,
}
static void
glade_placeholder_replace_widget (GladePlaceholder *placeholder, GladeWidgetClass *class)
glade_placeholder_replace_widget (GladePlaceholder *placeholder, GladeWidgetClass *class, GladeProject *project)
{
GladeWidget *parent;
GladeWidget *widget;
@ -137,17 +138,19 @@ glade_placeholder_replace_widget (GladePlaceholder *placeholder, GladeWidgetClas
if (parent->class->placeholder_replace != NULL)
parent->class->placeholder_replace (placeholder, widget, parent);
glade_project_selection_set (widget, TRUE);
}
static void
glade_placeholder_on_button_press_event (GladePlaceholder *placeholder, GdkEventButton *event, gpointer not_used)
glade_placeholder_on_button_press_event (GladePlaceholder *placeholder, GdkEventButton *event, GladeProject *project)
{
GladeProjectWindow *gpw;
gpw = glade_project_window_get ();
if (event->button == 1 && event->type == GDK_BUTTON_PRESS && gpw->add_class != NULL) {
glade_placeholder_replace_widget (placeholder, gpw->add_class);
glade_placeholder_replace_widget (placeholder, gpw->add_class, project);
gpw->add_class = NULL;
}
@ -212,12 +215,13 @@ glade_placeholder_on_realize (GladePlaceholder *placeholder, gpointer not_used)
}
static void
glade_placeholder_connect_mouse_signals (GladePlaceholder *placeholder)
glade_placeholder_connect_mouse_signals (GladePlaceholder *placeholder,
GladeProject *project)
{
gtk_signal_connect (GTK_OBJECT (placeholder), "motion_notify_event",
GTK_SIGNAL_FUNC (glade_placeholder_on_motion_notify_event), NULL);
gtk_signal_connect (GTK_OBJECT (placeholder), "button_press_event",
GTK_SIGNAL_FUNC (glade_placeholder_on_button_press_event), NULL);
GTK_SIGNAL_FUNC (glade_placeholder_on_button_press_event), project);
}
static void
glade_placeholder_connect_draw_signals (GladePlaceholder *placeholder)
@ -250,7 +254,7 @@ glade_placeholder_new (GladeWidget *glade_widget)
gtk_widget_show (GTK_WIDGET (placeholder));
glade_placeholder_connect_draw_signals (placeholder);
glade_placeholder_connect_mouse_signals (placeholder);
glade_placeholder_connect_mouse_signals (placeholder, glade_widget->project);
gtk_signal_connect (GTK_OBJECT (placeholder), "destroy",
GTK_SIGNAL_FUNC (glade_placeholder_on_destroy), NULL);

View File

@ -46,9 +46,6 @@ static void gpw_show_clipboard_cb (void) {};
static void gpw_undo_cb (void) {};
static void gpw_redo_cb (void) {};
static void gpw_cut_cb (void) {};
static void gpw_copy_cb (void) {};
static void gpw_paste_cb (void) {};
static void gpw_delete_cb (void) {};
static void gpw_about_cb (void) {};
@ -87,12 +84,31 @@ gpw_quit_cb (void)
gtk_main_quit ();
}
static void
gpw_copy_cb (void)
{
g_print ("Copy !\n");
}
static void
gpw_cut_cb (void)
{
g_print ("Cut !\n");
}
static void
gpw_paste_cb (void)
{
g_print ("Paste !\n");
}
static void
gpw_delete_event (GtkWindow *w, gpointer not_used)
{
gpw_quit_cb ();
}
static GtkItemFactoryEntry menu_items[] =
{
/* ============ FILE ===================== */

View File

@ -30,144 +30,193 @@
#include "glade-signal-editor.h"
static void
glade_signal_editor_append_column (GtkTreeView *view, const gint col_num, const gchar *name)
{
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (name, renderer,
"text", col_num, NULL);
gtk_tree_view_append_column (view, column);
}
static gboolean
glade_signal_editor_dialog_list_cb (GtkTreeSelection *lst_select,
GtkTreeModel *lst_model, GtkTreePath *lst_path, GList *list)
glade_signal_editor_dialog_list_select_cb (GtkTreeSelection *lst_select,
GtkTreeModel *lst_model, GtkTreePath *lst_path, GladeSignalEditor *editor)
{
GtkTreeIter iter;
GValue *label;
GList *list = NULL;
GladeWidgetClassSignal *signal;
label = g_new0 (GValue, 1);
gtk_tree_model_get_iter (lst_model, &iter, lst_path);
gtk_tree_model_get_value (lst_model, &iter, 0, label);
list = editor->class->signals;
for ( ; list != NULL; list = list->next) {
if (!strcmp (list->data, label->data[0].v_pointer)) {
return FALSE;
signal = (GladeWidgetClassSignal *) list->data;
if (!strcmp (signal->name, label->data[0].v_pointer)) {
return TRUE;
}
}
return TRUE;
return FALSE;
}
static void
glade_signal_editor_dialog_cb (GtkButton *button, GladeSignalEditor *editor)
static GtkWidget *
glade_signal_editor_dialog_construct_list (GladeSignalEditor *editor)
{
GtkTreeSelection *selection;
GtkTreeStore *model;
GtkTreeView *view;
GtkWidget *view_widget;
model = gtk_tree_store_new (1, G_TYPE_STRING);
view_widget = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
view = GTK_TREE_VIEW (view_widget);
g_object_unref (G_OBJECT (model));
glade_signal_editor_append_column (view, 0, _("Signals"));
selection = gtk_tree_view_get_selection (view);
gtk_tree_selection_set_select_function (selection,
(GtkTreeSelectionFunc) glade_signal_editor_dialog_list_select_cb,
editor, NULL);
gtk_widget_set_usize (view_widget, 150, 200);
return view_widget;
}
static GtkWidget *
glade_signal_editor_dialog_construct (GladeSignalEditor *editor, GtkWidget **view)
{
GtkWidget *dialog;
GtkWidget *vbox;
GList *list;
GladeWidgetClassSignal *signal;
gchar *type;
gint response;
GtkTreeModel *lst_model;
GtkTreeView *lst_view;
GtkCellRenderer *lst_cellr;
GtkTreeViewColumn *lst_column;
GtkTreeSelection *lst_select;
GValue *label;
GtkTreeIter *parent_iter = NULL;
GtkTreeIter *iter = NULL;
GtkTreeSelection *lst_selected;
GtkWidget *scroll;
GList *widget_class_list = NULL;
GtkWidget *vbox;
g_return_if_fail (editor->class->signals != NULL);
dialog = gtk_dialog_new_with_buttons (_("Select signal"),
NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
dialog = gtk_dialog_new_with_buttons (
_("Select signal"),
NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
vbox = gtk_bin_get_child (GTK_BIN (dialog));
scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start_defaults (GTK_BOX (vbox), GTK_WIDGET (scroll));
*view = glade_signal_editor_dialog_construct_list (editor);
gtk_container_add (GTK_CONTAINER (scroll), *view);
lst_model = GTK_TREE_MODEL (gtk_tree_store_new (1, G_TYPE_STRING));
gtk_widget_show_all (vbox);
lst_view = GTK_TREE_VIEW (gtk_tree_view_new_with_model (GTK_TREE_MODEL (lst_model)));
gtk_widget_set_usize (GTK_WIDGET (lst_view), 150, 200);
gtk_container_add (GTK_CONTAINER (scroll), GTK_WIDGET (lst_view));
return dialog;
}
g_object_unref (G_OBJECT (lst_model));
lst_cellr = gtk_cell_renderer_text_new ();
lst_column = gtk_tree_view_column_new_with_attributes (_("Signals"), lst_cellr,
"text", 0, NULL);
gtk_tree_view_append_column (lst_view, lst_column);
type = "";
static GtkTreeIter *
glade_signal_editor_dialog_append_signal (GtkTreeStore *lst_model,
const gchar *label_text, GtkTreeIter *parent)
{
GtkTreeIter *iter;
GValue *label;
label = g_new0 (GValue, 1);
label = g_value_init (label, G_TYPE_STRING);
iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent);
label->data[0].v_pointer = (gchar *) label_text;
gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label);
return iter;
}
static void
glade_signal_editor_dialog_load_signals (GladeSignalEditor *editor, GtkWidget *view)
{
GtkTreeStore *lst_model;
gchar *type;
GtkTreeIter *parent = NULL;
GList *list = NULL;
GladeWidgetClassSignal *signal;
type = "";
lst_model = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
for (list = editor->class->signals; list != NULL; list = list->next) {
signal = (GladeWidgetClassSignal *) list->data;
if (!strcmp (type, signal->type)) {
iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent_iter);
label->data[0].v_pointer = signal->name;
gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label);
} else {
parent_iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (GTK_TREE_STORE (lst_model), parent_iter, NULL);
label->data[0].v_pointer = signal->type;
gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), parent_iter, 0, label);
widget_class_list = g_list_append(widget_class_list, g_strdup (signal->type));
iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (GTK_TREE_STORE (lst_model), iter, parent_iter);
label->data[0].v_pointer = signal->name;
gtk_tree_store_set_value (GTK_TREE_STORE (lst_model), iter, 0, label);
type = signal->type;
}
if (strcmp (type, signal->type)) {
parent = glade_signal_editor_dialog_append_signal (lst_model, signal->type, NULL);
type = signal->type;
}
glade_signal_editor_dialog_append_signal (lst_model, signal->name, parent);
}
}
lst_select = gtk_tree_view_get_selection (GTK_TREE_VIEW (lst_view));
gtk_tree_selection_set_select_function (lst_select, (GtkTreeSelectionFunc) glade_signal_editor_dialog_list_cb,
widget_class_list, NULL);
gtk_widget_show_all (vbox);
response = gtk_dialog_run (GTK_DIALOG (dialog));
static void
glade_signal_editor_dialog_cb (GtkButton *button, GladeSignalEditor *editor)
{
GValue *label;
GtkTreeIter *iter;
GtkTreeModel *lst_model;
GtkTreeSelection *lst_selected;
GtkWidget *dialog;
GtkWidget *view;
switch (response) {
case GTK_RESPONSE_ACCEPT:
lst_selected = gtk_tree_view_get_selection (lst_view);
iter = g_new0 (GtkTreeIter, 1);
if (gtk_tree_selection_get_selected (lst_selected, &lst_model, iter)) {
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (lst_model), iter, 0, label);
gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), (gchar *) label->data[0].v_pointer);
}
break;
g_return_if_fail (editor->class->signals != NULL);
default:
dialog = glade_signal_editor_dialog_construct (editor, &view);
glade_signal_editor_dialog_load_signals (editor, view);
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
case GTK_RESPONSE_ACCEPT:
lst_model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
lst_selected = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
iter = g_new0 (GtkTreeIter, 1);
if (gtk_tree_selection_get_selected (lst_selected, &lst_model, iter)) {
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (lst_model, iter, 0, label);
gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), (gchar *) label->data[0].v_pointer);
}
break;
default:
break;
}
gtk_widget_destroy (dialog);
}
/* glade_signal_editor_update_signal () will add a 'signal' to the list of
* signals displayed by the signal editor if 'iter' is NULL, otherwise it will
* update the item at position 'iter' to the value of 'signal'
*/
static void
glade_signal_editor_append_signal (GladeSignalEditor *editor, GladeWidgetSignal *signal)
glade_signal_editor_update_signal (GladeSignalEditor *editor, GladeWidgetSignal *signal,
GtkTreeIter *iter)
{
GtkTreeStore *lst_model;
GtkTreeIter *iter;
GValue *label;
lst_model = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list)));
iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (lst_model, iter, NULL);
if (iter == NULL) {
iter = g_new0 (GtkTreeIter, 1);
gtk_tree_store_append (lst_model, iter, NULL);
}
label = g_new0 (GValue, 1);
label = g_value_init (label, G_TYPE_STRING);
@ -224,16 +273,15 @@ glade_signal_editor_after_cb (GtkToggleButton *button, GladeSignalEditor *editor
}
}
static void
glade_signal_editor_add_cb (GladeSignalEditor *editor)
static gboolean
glade_signal_editor_validate_entries (GladeSignalEditor *editor)
{
GladeWidgetSignal *signal;
GtkWidget *dialog;
gchar *name_text;
gchar *handler_text;
GtkWidget *dialog;
g_return_if_fail (editor != NULL);
g_return_if_fail (editor->widget != NULL);
GList *list;
gboolean found;
GladeWidgetClassSignal *signal;
name_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_name_entry));
if (!strcmp (name_text, "")) {
@ -242,10 +290,31 @@ glade_signal_editor_add_cb (GladeSignalEditor *editor)
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
_("Please enter a signal name"));
_("Please enter a valid signal name"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return;
return FALSE;
}
/* check that signal exists */
found = FALSE;
for (list = editor->class->signals; list != NULL; list = list->next) {
signal = (GladeWidgetClassSignal *) list->data;
if (!strcmp (signal->name, name_text)) {
found = TRUE;
break;
}
}
if (found == FALSE) {
/* FIXME: Should fix to use Gnome APIs or a glade dialog */
dialog = gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
_("Please enter a valid signal name"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return FALSE;
}
handler_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_handler_entry));
@ -258,17 +327,16 @@ glade_signal_editor_add_cb (GladeSignalEditor *editor)
_("Please enter a signal handler"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return;
return FALSE;
}
signal = g_new0 (GladeWidgetSignal, 1);
signal->name = g_strdup (name_text);
signal->handler = g_strdup (handler_text);
signal->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(editor->signal_after_button));
editor->widget->signals = g_list_append (editor->widget->signals, signal);
glade_signal_editor_append_signal (editor, signal);
return TRUE;
}
static void
glade_signal_editor_clear_entries (GladeSignalEditor *editor)
{
g_return_if_fail (editor != NULL);
gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), "");
gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), "");
@ -276,91 +344,114 @@ glade_signal_editor_add_cb (GladeSignalEditor *editor)
(editor->signal_after_button), FALSE);
}
static GladeWidgetSignal *
glade_signal_editor_get_signal_at_iter (GladeSignalEditor *editor, GtkTreeIter *iter)
{
GladeWidgetSignal *signal;
GtkTreeModel *model;
GValue *label;
signal = g_new0 (GladeWidgetSignal, 1);
model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list));
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 0, label);
signal->name = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 1, label);
signal->handler = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), iter, 2, label);
if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes")))
signal->after = TRUE;
else
signal->after = FALSE;
return signal;
}
/* glade_signal_editor_update_widget_signal () is used to add signal to a
* widget's internal list of signals. If old_signal is NULL, the signal
* is appended to the list, however if a signal is supplied as old_signal,
* the func will find that signal and update it rather than add a new signal
*/
static GladeWidgetSignal *
glade_signal_editor_update_widget_signal (GladeSignalEditor *editor,
GladeWidgetSignal *old_signal)
{
GladeWidgetSignal *signal = NULL;
GladeWidgetSignal *sigtmp;
GList *list;
if (old_signal == NULL) {
signal = g_new0 (GladeWidgetSignal, 1);
editor->widget->signals = g_list_append (editor->widget->signals, signal);
} else {
for (list = editor->widget->signals; list != NULL; list = list->next) {
sigtmp = (GladeWidgetSignal *) list->data;
if (!strcmp (sigtmp->name, old_signal->name) &&
!strcmp (sigtmp->handler, old_signal->handler) &&
sigtmp->after == old_signal->after) {
signal = sigtmp;
break;
}
}
}
g_return_val_if_fail (signal != NULL, NULL);
signal->name = g_strdup ((gchar *) gtk_entry_get_text (GTK_ENTRY
(editor->signal_name_entry)));
signal->handler = g_strdup ((gchar *) gtk_entry_get_text (GTK_ENTRY
(editor->signal_handler_entry)));
signal->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON
(editor->signal_after_button));
return signal;
}
static void
glade_signal_editor_add_cb (GladeSignalEditor *editor)
{
GladeWidgetSignal *signal;
g_return_if_fail (editor != NULL);
g_return_if_fail (editor->widget != NULL);
if (!glade_signal_editor_validate_entries (editor))
return;
signal = glade_signal_editor_update_widget_signal (editor, NULL);
glade_signal_editor_update_signal (editor, signal, NULL);
glade_signal_editor_clear_entries (editor);
}
static void
glade_signal_editor_update_cb (GladeSignalEditor *editor)
{
GtkTreeIter iter;
GtkTreeSelection *select;
GtkTreeModel *model;
GladeWidgetSignal signal;
GladeWidgetSignal *sig;
GValue *label;
GList *list;
gchar *name_text;
gchar *handler_text;
GtkWidget *dialog;
GladeWidgetSignal *old_sig;
GladeWidgetSignal *new_sig;
g_return_if_fail (editor != NULL);
g_return_if_fail (editor->widget != NULL);
name_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_name_entry));
if (!strcmp (name_text, "")) {
/* FIXME: Should fix to use Gnome APIs or a glade dialog */
dialog = gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
_("Please enter a signal name"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
if (!glade_signal_editor_validate_entries (editor))
return;
}
handler_text = (gchar *) gtk_entry_get_text (GTK_ENTRY (editor->signal_handler_entry));
if (!strcmp (handler_text, "")) {
/* FIXME: Should fix to use Gnome APIs or a glade dialog */
dialog = gtk_message_dialog_new (NULL,
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_CLOSE,
_("Please enter a signal handler"));
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
return;
}
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->signals_list));
model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list));
if (gtk_tree_selection_get_selected (select, &model, &iter)) {
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 0, label);
signal.name = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 1, label);
signal.handler = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 2, label);
if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes")))
signal.after = TRUE;
else
signal.after = FALSE;
if (gtk_tree_selection_get_selected (select, &model, &iter) == TRUE) {
old_sig = glade_signal_editor_get_signal_at_iter (editor, &iter);
label = g_new0 (GValue, 1);
label = g_value_init (label, G_TYPE_STRING);
label->data[0].v_pointer = name_text;
gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 0, label);
label->data[0].v_pointer = handler_text;
gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 1, label);
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->signal_after_button))) {
label->data[0].v_pointer = _("Yes");
} else {
label->data[0].v_pointer = _("No");
}
gtk_tree_store_set_value (GTK_TREE_STORE (model), &iter, 2, label);
list = editor->widget->signals;
for ( ; list != NULL; list = list->next) {
sig = (GladeWidgetSignal *) list->data;
if (!strcmp (sig->name, signal.name) &&
!strcmp (sig->handler, signal.handler) &&
sig->after == signal.after) {
sig->name = g_strdup (name_text);
sig->handler = g_strdup (handler_text);
sig->after = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (editor->signal_after_button));
break;
}
}
new_sig = glade_signal_editor_update_widget_signal (editor, old_sig);
glade_signal_editor_update_signal (editor, new_sig, &iter);
}
}
@ -370,9 +461,8 @@ glade_signal_editor_delete_cb (GladeSignalEditor *editor)
GtkTreeIter iter;
GtkTreeSelection *select;
GtkTreeModel *model;
GladeWidgetSignal signal;
GladeWidgetSignal *signal;
GladeWidgetSignal *sig;
GValue *label;
GList *list;
g_return_if_fail (editor != NULL);
@ -381,32 +471,23 @@ glade_signal_editor_delete_cb (GladeSignalEditor *editor)
select = gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->signals_list));
model = gtk_tree_view_get_model (GTK_TREE_VIEW (editor->signals_list));
if (gtk_tree_selection_get_selected (select, &model, &iter)) {
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 0, label);
signal.name = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 1, label);
signal.handler = (gchar *) label->data[0].v_pointer;
label = g_new0 (GValue, 1);
gtk_tree_model_get_value (GTK_TREE_MODEL (model), &iter, 2, label);
if (!strcmp ((gchar *) label->data[0].v_pointer, _("Yes")))
signal.after = TRUE;
else
signal.after = FALSE;
if (gtk_tree_selection_get_selected (select, &model, &iter) == TRUE) {
signal = glade_signal_editor_get_signal_at_iter (editor, &iter);
gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
list = editor->widget->signals;
for ( ; list != NULL; list = list->next) {
sig = (GladeWidgetSignal *) list->data;
if (!strcmp (sig->name, signal.name) &&
!strcmp (sig->handler, signal.handler) &&
sig->after == signal.after) {
if (!strcmp (sig->name, signal->name) &&
!strcmp (sig->handler, signal->handler) &&
sig->after == signal->after) {
editor->widget->signals = g_list_remove (editor->widget->signals, list->data);
break;
}
}
glade_signal_editor_clear_entries (editor);
}
}
@ -415,24 +496,8 @@ glade_signal_editor_clear_cb (GladeSignalEditor *editor)
{
g_return_if_fail (editor != NULL);
g_return_if_fail (editor->widget != NULL);
gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), "");
gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), "");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(editor->signal_after_button), FALSE);
}
static void
glade_signal_editor_append_column (GtkTreeView *view, const gchar *name)
{
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (name, renderer,
"text", 0, NULL);
gtk_tree_view_append_column (view, column);
glade_signal_editor_clear_entries (editor);
}
static GtkWidget *
@ -450,9 +515,9 @@ glade_signal_editor_construct_signals_list (GladeSignalEditor *editor)
g_object_unref (G_OBJECT (model));
glade_signal_editor_append_column (view, _("Signal"));
glade_signal_editor_append_column (view, _("Handler"));
glade_signal_editor_append_column (view, _("After"));
glade_signal_editor_append_column (view, 0, _("Signal"));
glade_signal_editor_append_column (view, 1, _("Handler"));
glade_signal_editor_append_column (view, 2, _("After"));
selection = gtk_tree_view_get_selection (view);
gtk_tree_selection_set_select_function (selection,
@ -516,7 +581,7 @@ glade_signal_editor_construct_table (GladeSignalEditor *editor)
/* The Yes/No button */
hbox = gtk_hbox_new (FALSE, 0);
button = gtk_toggle_button_new ();
button = gtk_toggle_button_new_with_label (_("No"));
gtk_signal_connect (GTK_OBJECT (button), "toggled",
GTK_SIGNAL_FUNC (glade_signal_editor_after_cb),
editor);
@ -594,10 +659,10 @@ glade_signal_editor_construct (GladeSignalEditor *editor)
gtk_container_add (GTK_CONTAINER (scroll), editor->signals_list);
table = glade_signal_editor_construct_table (editor);
gtk_box_pack_start_defaults (GTK_BOX (vbox), table);
gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
hbox = glade_signal_editor_construct_buttons (editor);
gtk_box_pack_start_defaults (GTK_BOX (vbox), hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show_all (editor->main_window);
}
@ -624,15 +689,6 @@ glade_signal_editor_new (void)
return editor;
}
static void
glade_signal_editor_set_contents (GladeSignalEditor *editor)
{
gtk_entry_set_text (GTK_ENTRY (editor->signal_name_entry), "");
gtk_entry_set_text (GTK_ENTRY (editor->signal_handler_entry), "");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(editor->signal_after_button), FALSE);
}
void
glade_signal_editor_load_widget (GladeSignalEditor *editor, GladeWidget *widget)
{
@ -646,12 +702,12 @@ glade_signal_editor_load_widget (GladeSignalEditor *editor, GladeWidget *widget)
editor->widget = widget;
editor->class = widget->class;
glade_signal_editor_set_contents (editor);
glade_signal_editor_clear_entries (editor);
list = widget->signals;
for (; list != NULL; list = list->next) {
signal = list->data;
glade_signal_editor_append_signal (editor, signal);
glade_signal_editor_update_signal (editor, signal, NULL);
}
}

View File

@ -7,9 +7,8 @@ G_BEGIN_DECLS
#define GLADE_SIGNAL_EDITOR(e) ((GladeSignalEditor *)e)
#define GLADE_IS_SIGNAL_EDITOR(e) (e != NULL)
/* The GladeSignalEditor is used to
*
*
/* The GladeSignalEditor is used to house the signal editor interface and
* associated functionality.
*/
struct _GladeSignalEditor {
@ -22,7 +21,7 @@ struct _GladeSignalEditor {
GtkWidget *signal_name_entry;
GtkWidget *signal_handler_entry;
GtkWidget *signal_after_button; /* A GtkToggleButton */
GtkWidget *signal_after_button;
/* Buttons */
GtkWidget *add_button;

View File

@ -113,15 +113,10 @@ glade_widget_class_list_signals (GladeWidgetClass *class)
guint num_signals;
GladeWidgetClassSignal *cur;
g_return_val_if_fail (class->type != 0, NULL);
signals = NULL;
/* FIXME: This should work. Apparently this is because you need to have an
* instance of an object before you can get its type?!? need to fix this
* to use class->type when bighead applys his patch. - shane
*/
type = g_type_from_name (class->name);
g_return_val_if_fail (type != 0, NULL);
type = class->type;
while (g_type_is_a (type, GTK_TYPE_OBJECT)) {
if (G_TYPE_IS_INSTANTIATABLE (type) || G_TYPE_IS_INTERFACE (type)) {
sig_ids = g_signal_list_ids (type, &num_signals);