mirror of
https://gitlab.gnome.org/GNOME/glade.git
synced 2025-09-26 00:05:38 -04:00
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:
parent
513a285a01
commit
9ad326de87
14
ChangeLog
14
ChangeLog
@ -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
14
TODO
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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 ===================== */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user