From: Andy W. <wi...@us...> - 2002-08-08 08:35:41
|
CVS Root: /cvsroot/gstreamer Module: gst-editor Changes by: wingo Date: Thu Aug 08 2002 01:35:40 PDT Log message: * fixed several rendering bugs in the element-ui * added support for enum properties * miscellaneous other fixes, polish Modified files: libs/gst/editor : gsteditor.c gsteditorcanvas.c gsteditorproperty.c libs/gst/element-ui: gst-element-ui-prop-view.c gst-element-ui-prop-view.h gst-element-ui.c gst-element-ui.h src : editor.glade2 Links: http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditor.c.diff?r1=1.21&r2=1.22 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorcanvas.c.diff?r1=1.12&r2=1.13 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/editor/gsteditorproperty.c.diff?r1=1.11&r2=1.12 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui-prop-view.c.diff?r1=1.11&r2=1.12 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui-prop-view.h.diff?r1=1.3&r2=1.4 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui.c.diff?r1=1.9&r2=1.10 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui.h.diff?r1=1.5&r2=1.6 http://cvs.sf.net/cgi-bin/viewcvs.cgi/gstreamer/gst-editor/src/editor.glade2.diff?r1=1.8&r2=1.9 ====Begin Diffs==== Index: gsteditor.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditor.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- gsteditor.c 7 Aug 2002 06:11:34 -0000 1.21 +++ gsteditor.c 8 Aug 2002 08:35:28 -0000 1.22 @@ -31,6 +31,7 @@ GValue *value, GParamSpec *pspec); static void gst_editor_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); +static void gst_editor_dispose (GObject *object); static void gst_editor_connect_func (const gchar *handler_name, GObject *object, const gchar *signal_name, @@ -41,7 +42,10 @@ static gint on_delete_event (GtkWidget *widget, GdkEvent *event, - gpointer data); + GstEditor *editor); +static void on_canvas_notify (GObject *object, + GParamSpec *param, + GstEditor *ui); enum { @@ -94,8 +98,9 @@ parent_class = g_type_class_ref (G_TYPE_OBJECT); - gobject_class->get_property = gst_editor_get_property; - gobject_class->set_property = gst_editor_set_property; + gobject_class->get_property = gst_editor_get_property; + gobject_class->set_property = gst_editor_set_property; + gobject_class->dispose = gst_editor_dispose; g_object_class_install_property (gobject_class, PROP_FILENAME, g_param_spec_string ("filename", "Filename", "File name", @@ -145,7 +150,10 @@ _num_editor_windows++; - g_signal_connect (editor->window, "delete-event", G_CALLBACK (on_delete_event), NULL); + g_signal_connect (editor->window, "delete-event", G_CALLBACK (on_delete_event), editor); + g_signal_connect (editor->canvas, "notify", G_CALLBACK (on_canvas_notify), editor); + g_object_notify (G_OBJECT (editor->canvas), "properties-visible"); +// g_object_notify (G_OBJECT (editor->canvas), "palette-visible")); } static void @@ -187,6 +195,21 @@ } } +static void +gst_editor_dispose (GObject *object) +{ + GstEditor *editor = GST_EDITOR (object); + + gtk_widget_destroy (editor->window); + + _num_editor_windows--; + + g_message ("editor dispose: %d windows remaining", _num_editor_windows); + + if (_num_editor_windows == 0) + gtk_main_quit (); +} + /* we need more control here so... */ static void gst_editor_connect_func (const gchar *handler_name, @@ -447,12 +470,57 @@ } void +gst_editor_on_close (GtkWidget *widget, GstEditor *editor) +{ + g_object_unref (G_OBJECT (editor)); +} + +void gst_editor_on_quit (GtkWidget *widget, GstEditor *editor) { gtk_main_quit (); } void +gst_editor_on_cut (GtkWidget *widget, GstEditor *editor) +{ + g_message ("cut element"); +} + +void +gst_editor_on_copy (GtkWidget *widget, GstEditor *editor) +{ + g_message ("copy element"); +} + +void +gst_editor_on_paste (GtkWidget *widget, GstEditor *editor) +{ + g_message ("paste element"); +} + +void +gst_editor_on_element_remove (GtkWidget *widget, GstEditor *editor) +{ + g_message ("remove element"); +} + +void +gst_editor_show_element_inspector (GtkWidget *widget, GstEditor *editor) +{ + gboolean b; + + g_object_get (editor->canvas, "properties-visible", &b, NULL); + g_object_set (editor->canvas, "properties-visible", !b, NULL); +} + +void +gst_editor_show_utility_palette (GtkWidget *widget, GstEditor *editor) +{ + g_message ("this is a theoretical feature ;)"); +} + +void gst_editor_on_help_contents (GtkWidget *widget, GstEditor *editor) { gnome_help_display ("gst-editor-manual", NULL, NULL); @@ -473,7 +541,6 @@ NULL, NULL, NULL); - gnome_dialog_set_parent(GNOME_DIALOG(about), GTK_WINDOW(editor->window)); gtk_widget_show(about); } @@ -507,14 +574,25 @@ } } -static gint on_delete_event (GtkWidget *widget, GdkEvent *event, gpointer data) +static gint +on_delete_event (GtkWidget *widget, GdkEvent *event, GstEditor *editor) { - _num_editor_windows--; - - g_message ("delete event: %d windows remaining", _num_editor_windows); - - if (_num_editor_windows == 0) - gtk_main_quit (); + g_object_unref (G_OBJECT (editor)); return FALSE; } + +static void +on_canvas_notify (GObject *object, GParamSpec *param, GstEditor *editor) +{ + GValue v = { 0, }; + + if (strcmp (param->name, "properties-visible") == 0) { + g_value_init (&v, param->value_type); + g_object_get_property (object, param->name, &v); + g_object_set_property (G_OBJECT (glade_xml_get_widget (editor->xml, "view-element-inspector")), + "active", &v); + } +} + + Index: gsteditorcanvas.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorcanvas.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- gsteditorcanvas.c 7 Aug 2002 06:35:35 -0000 1.12 +++ gsteditorcanvas.c 8 Aug 2002 08:35:28 -0000 1.13 @@ -32,7 +32,8 @@ enum { PROP_0, PROP_BIN, - PROP_SELECTION + PROP_SELECTION, + PROP_PROPERTIES_VISIBLE }; static void gst_editor_canvas_class_init (GstEditorCanvasClass *klass); @@ -42,6 +43,7 @@ const GValue *value, GParamSpec *pspec); static void gst_editor_canvas_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static void gst_editor_canvas_dispose (GObject *object); static void gst_editor_canvas_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static void on_property_destroyed (GstEditorCanvas *canvas, gpointer stale_pointer); @@ -85,6 +87,7 @@ object_class->set_property = gst_editor_canvas_set_property; object_class->get_property = gst_editor_canvas_get_property; + object_class->dispose = gst_editor_canvas_dispose; g_object_class_install_property (object_class, PROP_BIN, g_param_spec_object ("bin", "bin", "bin", @@ -92,6 +95,9 @@ g_object_class_install_property (object_class, PROP_SELECTION, g_param_spec_object ("selection", "selection", "selection", gst_editor_element_get_type (), G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_PROPERTIES_VISIBLE, + g_param_spec_boolean ("properties-visible", "properties-visible", "properties-visible", + TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); widget_class->size_allocate = gst_editor_canvas_size_allocate; } @@ -124,6 +130,7 @@ gst_editor_canvas_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { gdouble width, height, x, y; + gboolean b; GstEditorCanvas *canvas = GST_EDITOR_CANVAS (object); switch (prop_id) { @@ -152,16 +159,29 @@ if (canvas->selection) { g_object_set (canvas->selection, "active", TRUE, NULL); + if (canvas->property_window) + g_object_set (canvas->property_window, "element", GST_EDITOR_ITEM (canvas->selection)->object, NULL); + } else if (canvas->property_window) { + g_object_set (canvas->property_window, "element", NULL, NULL); + } + + break; + + case PROP_PROPERTIES_VISIBLE: + b = g_value_get_boolean (value); + + if (b) { if (!canvas->property_window) { canvas->property_window = g_object_new (gst_editor_property_get_type (), NULL); g_object_weak_ref (G_OBJECT (canvas->property_window), (GWeakNotify)on_property_destroyed, canvas); } - - g_object_set (canvas->property_window, "element", GST_EDITOR_ITEM (canvas->selection)->object, NULL); - } else if (canvas->property_window) { - g_object_set (canvas->property_window, "element", NULL, NULL); + if (canvas->selection) + g_object_set (canvas->property_window, "element", GST_EDITOR_ITEM (canvas->selection)->object, NULL); + } else if (!b && canvas->property_window) { + g_object_unref (G_OBJECT (canvas->property_window)); + /* the weak ref takes care of setting canvas->property_window = NULL */ } - + break; default: @@ -184,10 +204,23 @@ g_value_set_object (value, G_OBJECT (canvas->selection)); break; + case PROP_PROPERTIES_VISIBLE: + g_value_set_boolean (value, canvas->property_window ? TRUE : FALSE); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } +} + +static void +gst_editor_canvas_dispose (GObject *object) +{ + GstEditorCanvas *canvas = GST_EDITOR_CANVAS (object); + + if (canvas->property_window) + g_object_unref (G_OBJECT (canvas->property_window)); } static void Index: gsteditorproperty.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/editor/gsteditorproperty.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- gsteditorproperty.c 7 Aug 2002 18:45:31 -0000 1.11 +++ gsteditorproperty.c 8 Aug 2002 08:35:28 -0000 1.12 @@ -138,6 +138,7 @@ gtk_widget_show(property->window); property->element_ui = g_object_new (gst_element_ui_get_type (), "view-mode", GST_ELEMENT_UI_VIEW_MODE_FULL, NULL); + gtk_widget_show (property->element_ui); gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (glade_xml_get_widget (property->xml, "scrolledwindow-element-ui")), property->element_ui); Index: gst-element-ui-prop-view.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui-prop-view.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- gst-element-ui-prop-view.c 7 Aug 2002 06:11:34 -0000 1.11 +++ gst-element-ui-prop-view.c 8 Aug 2002 08:35:28 -0000 1.12 @@ -35,6 +35,7 @@ static void on_adjustment_value_changed (GtkAdjustment *adjustment, GstElementUIPropView *pview); static void on_toggle_button_toggled (GtkToggleButton *button, GstElementUIPropView *pview); static void on_entry_activate (GtkEntry *entry, GstElementUIPropView *pview); +static void on_optionmenu_changed (GtkOptionMenu *option, GstElementUIPropView *pview); static GObjectClass *parent_class = NULL; @@ -108,11 +109,12 @@ GtkWidget *entry; GtkWidget *label_upper; GtkWidget *hscale; + GtkWidget *optionmenu; pview->value = g_new0 (GValue, 1); pview->value_mutex = g_mutex_new (); - table_args = gtk_table_new (4, 6, FALSE); + table_args = gtk_table_new (5, 6, FALSE); gtk_widget_show (table_args); gtk_box_pack_start (GTK_BOX (pview), table_args, FALSE, TRUE, 0); @@ -148,10 +150,14 @@ gtk_scale_set_draw_value (GTK_SCALE (hscale), FALSE); gtk_scale_set_digits (GTK_SCALE (hscale), 2); + optionmenu = gtk_option_menu_new (); + gtk_table_attach (GTK_TABLE (table_args), optionmenu, 0, 6, 4, 5, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); + g_signal_connect (spinbutton_adj, "value_changed", G_CALLBACK (on_adjustment_value_changed), pview); g_signal_connect (toggle_off, "toggled", G_CALLBACK (on_toggle_button_toggled), pview); g_signal_connect (toggle_on, "toggled", G_CALLBACK (on_toggle_button_toggled), pview); g_signal_connect (entry, "activate", G_CALLBACK (on_entry_activate), pview); + g_signal_connect (optionmenu, "changed", G_CALLBACK (on_optionmenu_changed), pview); pview->adjustment = spinbutton_adj; pview->label_lower = label_lower; @@ -161,6 +167,7 @@ pview->entry = entry; pview->label_upper = label_upper; pview->hscale = hscale; + pview->optionmenu = optionmenu; } static void @@ -263,6 +270,9 @@ g_signal_handlers_block_by_func (G_OBJECT (pview->toggle_off), G_CALLBACK(on_entry_activate), pview); + g_signal_handlers_block_by_func (G_OBJECT (pview->optionmenu), + G_CALLBACK(on_optionmenu_changed), + pview); g_mutex_lock (pview->value_mutex); @@ -301,11 +311,20 @@ gtk_entry_set_text (GTK_ENTRY (pview->entry), g_value_get_string (pview->value)); break; default: - g_warning ("prop_view_update for type %s not yet implemented", g_type_name (pview->param->value_type)); + if (G_IS_PARAM_SPEC_ENUM (pview->param)) { + gint i = 0, val = g_value_get_enum (pview->value); + while (pview->enum_values[i] != val) i++; + gtk_option_menu_set_history (GTK_OPTION_MENU (pview->optionmenu), i); + } else { + g_warning ("prop_view_update for type %s not yet implemented", g_type_name (pview->param->value_type)); + } } g_mutex_unlock (pview->value_mutex); + g_signal_handlers_unblock_by_func (G_OBJECT (pview->optionmenu), + G_CALLBACK(on_optionmenu_changed), + pview); g_signal_handlers_unblock_by_func (G_OBJECT (pview->toggle_off), G_CALLBACK(on_toggle_button_toggled), pview); @@ -343,6 +362,7 @@ gtk_widget_hide(pview->label_lower); gtk_widget_hide(pview->label_upper); gtk_widget_hide(pview->hscale); + gtk_widget_hide(pview->optionmenu); switch (param->value_type) { case G_TYPE_BOOLEAN: @@ -417,7 +437,41 @@ gtk_widget_show(pview->entry); break; default: - g_warning ("param_changed for type %s not yet implemented", g_type_name (param->value_type)); + if (G_IS_PARAM_SPEC_ENUM (param)) { + GtkWidget *menu, *w; + gint i; + gchar *str; + GEnumClass *class = G_ENUM_CLASS (g_type_class_ref (param->value_type)); + + menu = gtk_menu_new (); + + if (pview->enum_values) + g_free (pview->enum_values); + pview->enum_values = g_new0 (gint, class->n_values); + + for (i=0; i<class->n_values; i++) { + GEnumValue *value = &class->values[i]; + + pview->enum_values[i] = value->value; + str = g_strdup_printf ("%s (%d)", value->value_nick, value->value); + w = gtk_menu_item_new_with_label (str); + g_free (str); + gtk_widget_show (w); + gtk_menu_append (GTK_MENU (menu), w); + } + + g_signal_handlers_block_by_func (G_OBJECT (pview->optionmenu), + G_CALLBACK(on_optionmenu_changed), + pview); + gtk_option_menu_set_menu (GTK_OPTION_MENU (pview->optionmenu), menu); + g_signal_handlers_unblock_by_func (G_OBJECT (pview->optionmenu), + G_CALLBACK(on_optionmenu_changed), + pview); + + gtk_widget_show (pview->optionmenu); + } else { + g_warning ("param_changed for type %s not yet implemented", g_type_name (param->value_type)); + } } gst_element_ui_prop_view_update (pview); @@ -431,17 +485,17 @@ switch (param->value_type) { case G_TYPE_BOOLEAN: - g_object_set (G_OBJECT (pview->element), param->name, - pview->on_pending, NULL); + gst_element_set (pview->element, param->name, + pview->on_pending, NULL); break; case G_TYPE_STRING: - g_object_set (G_OBJECT (pview->element), param->name, - gtk_entry_get_text (GTK_ENTRY (pview->entry)), NULL); + gst_element_set (pview->element, param->name, + gtk_entry_get_text (GTK_ENTRY (pview->entry)), NULL); break; #define CASE_NUMERIC(type_lower, type_upper) \ case G_TYPE_##type_upper: \ - g_object_set (G_OBJECT (pview->element), param->name, \ + gst_element_set (pview->element, param->name, \ (type_lower) GTK_ADJUSTMENT (pview->adjustment)->value, NULL); \ break @@ -457,7 +511,13 @@ #undef CASE_NUMERIC default: - g_warning ("value_changed for type %s not yet implemented", g_type_name (param->value_type)); + if (G_IS_PARAM_SPEC_ENUM (param)) { + gst_element_set (pview->element, param->name, + pview->enum_values[gtk_option_menu_get_history (GTK_OPTION_MENU (pview->optionmenu))], + NULL); + } else { + g_warning ("value_changed for type %s not yet implemented", g_type_name (param->value_type)); + } } gst_element_ui_prop_view_update (pview); @@ -481,3 +541,10 @@ { pview_value_changed (pview); } + +static void +on_optionmenu_changed (GtkOptionMenu *option, GstElementUIPropView *pview) +{ + pview_value_changed (pview); +} + Index: gst-element-ui-prop-view.h =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui-prop-view.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gst-element-ui-prop-view.h 26 May 2002 23:04:00 -0000 1.3 +++ gst-element-ui-prop-view.h 8 Aug 2002 08:35:28 -0000 1.4 @@ -46,6 +46,7 @@ gboolean on_set; GtkObject *adjustment; GtkWidget *optionmenu; + gint *enum_values; GtkWidget *label_lower; GtkWidget *spinbutton; GtkWidget *toggle_on; Index: gst-element-ui.c =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- gst-element-ui.c 7 Aug 2002 06:11:34 -0000 1.9 +++ gst-element-ui.c 8 Aug 2002 08:35:28 -0000 1.10 @@ -33,8 +33,6 @@ static void gst_element_ui_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); -static void on_button_delete_clicked (GtkButton *button, gpointer user_data); -static void on_button_conf_clicked (GtkButton *button, gpointer user_data); static void on_optionmenu_deactivate (GtkWidget *menu, gpointer user_data); static GObjectClass *parent_class = NULL; @@ -125,13 +123,10 @@ gst_element_ui_init (GstElementUI *ui) { GtkWidget *name; - GtkWidget *button_conf; - GtkWidget *button_delete; GtkWidget *optionmenu; GtkWidget *optionmenu_menu; - GtkWidget *hbox_top; - g_object_set (ui, "n-columns", 3, "n-rows", 2, NULL); + g_object_set (ui, "n-columns", 2, "n-rows", 2, NULL); /* event = gtk_event_box_new(); @@ -159,38 +154,20 @@ gtk_widget_hide (pixmap_on); */ - name = gtk_label_new (""); + name = gtk_label_new ("No element selected"); gtk_widget_ref (name); gtk_widget_show (name); - gtk_table_attach (GTK_TABLE (ui), name, 1, 2, 0, 1, GTK_EXPAND|GTK_FILL, GTK_FILL, 2, 2); + gtk_table_attach (GTK_TABLE (ui), name, 0, 2, 0, 1, GTK_EXPAND|GTK_FILL, GTK_FILL, 2, 2); gtk_label_set_justify(GTK_LABEL(name), GTK_JUSTIFY_RIGHT); gtk_widget_set_usize (name, 150, -2); gtk_misc_set_padding (GTK_MISC (name), 2, 0); - hbox_top = gtk_hbox_new (FALSE, 0); - gtk_widget_ref (hbox_top); - gtk_widget_show (hbox_top); - gtk_table_attach (GTK_TABLE (ui), hbox_top, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); - - button_conf = gtk_button_new_with_label ("?"); - gtk_widget_ref (button_conf); - gtk_widget_show (button_conf); - gtk_box_pack_start (GTK_BOX (hbox_top), button_conf, FALSE, FALSE, 0); - - button_delete = gtk_button_new_with_label ("X"); - gtk_widget_ref (button_delete); - gtk_widget_show (button_delete); - gtk_box_pack_start (GTK_BOX (hbox_top), button_delete, FALSE, FALSE, 0); - optionmenu = gtk_option_menu_new (); gtk_widget_ref (optionmenu); - gtk_table_attach (GTK_TABLE (ui), optionmenu, 0, 3, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 2); + gtk_table_attach (GTK_TABLE (ui), optionmenu, 0, 2, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 2); optionmenu_menu = gtk_menu_new (); gtk_option_menu_set_menu (GTK_OPTION_MENU (optionmenu), optionmenu_menu); - g_signal_connect (G_OBJECT (button_conf), "clicked", G_CALLBACK (on_button_conf_clicked), ui); - g_signal_connect (G_OBJECT (button_delete), "clicked", G_CALLBACK (on_button_delete_clicked), ui); - ui->name = name; ui->optionmenu = optionmenu; } @@ -217,19 +194,25 @@ switch (prop_id) { case PROP_ELEMENT: if (ui->element) { - for (i=0; i<ui->nprops; i++) { - gtk_widget_destroy (ui->plabels[i]); - gtk_widget_destroy (GTK_WIDGET (ui->pviews[i])); + if (ui->nprops) { + for (i=0; i<ui->nprops; i++) { + gtk_widget_destroy (ui->plabels[i]); + gtk_widget_destroy (GTK_WIDGET (ui->pviews[i])); + } + g_free (ui->pviews); + ui->pviews = NULL; + g_free (ui->plabels); + ui->plabels = NULL; + ui->nprops = 0; + } else { + gtk_widget_destroy (ui->message); + ui->message = NULL; } - g_free (ui->pviews); - ui->pviews = NULL; - g_free (ui->plabels); - ui->plabels = NULL; - ui->nprops = 0; } ui->element = (GstElement*) g_value_get_object (value); if (!ui->element) { + gtk_label_set_text (GTK_LABEL (ui->name), "No element selected"); return; } @@ -240,39 +223,33 @@ j++; ui->nprops = nprops - j; - if (ui->nprops) + + if (ui->nprops) { ui->params = g_new (GParamSpec*, ui->nprops); - j = 0; - for (i=0; i<nprops; i++) - if (params[i]->flags & G_PARAM_READABLE && params[i]->flags & G_PARAM_WRITABLE - && strcmp (params[i]->name, "name")) - ui->params[j++] = params[i]; + j = 0; + for (i=0; i<nprops; i++) + if (params[i]->flags & G_PARAM_READABLE && params[i]->flags & G_PARAM_WRITABLE + && strcmp (params[i]->name, "name")) + ui->params[j++] = params[i]; - menu = gtk_menu_new (); - for (j=0; j<ui->nprops; j++) { - w = gtk_menu_item_new_with_label(ui->params[j]->name); - gtk_widget_show(w); - gtk_menu_append(GTK_MENU(menu), w); - } - ui->selected = 0; - gtk_widget_show (menu); - gtk_option_menu_set_menu (GTK_OPTION_MENU (ui->optionmenu), menu); + menu = gtk_menu_new (); + for (j=0; j<ui->nprops; j++) { + w = gtk_menu_item_new_with_label(ui->params[j]->name); + gtk_widget_show(w); + gtk_menu_append(GTK_MENU(menu), w); + } + ui->selected = 0; + gtk_widget_show (menu); + gtk_option_menu_set_menu (GTK_OPTION_MENU (ui->optionmenu), menu); - if (ui->view_mode == GST_ELEMENT_UI_VIEW_MODE_COMPACT) - gtk_widget_show (ui->optionmenu); + if (ui->view_mode == GST_ELEMENT_UI_VIEW_MODE_COMPACT) + gtk_widget_show (ui->optionmenu); - gtk_label_set_text (GTK_LABEL (ui->name), - g_strdup_printf ("%s: %s", gst_element_get_factory (ui->element)->details->longname, - gst_object_get_name (GST_OBJECT (ui->element)))); - - g_object_weak_ref (G_OBJECT(ui->element), (GWeakNotify) gst_element_ui_on_element_dispose, ui); - - g_signal_connect (G_OBJECT (menu), "deactivate", G_CALLBACK (on_optionmenu_deactivate), ui); - g_signal_connect (G_OBJECT (ui->element), "notify", G_CALLBACK (gst_element_ui_on_element_notify), ui); + g_signal_connect (G_OBJECT (menu), "deactivate", G_CALLBACK (on_optionmenu_deactivate), ui); + g_signal_connect (G_OBJECT (ui->element), "notify", G_CALLBACK (gst_element_ui_on_element_notify), ui); - if (ui->nprops) { - gtk_table_resize (GTK_TABLE (ui), 3, 2 + ui->nprops); + gtk_table_resize (GTK_TABLE (ui), 2, 2 + ui->nprops); ui->pviews = g_new0 (GstElementUIPropView*, ui->nprops); ui->plabels = g_new0 (GtkWidget*, ui->nprops); @@ -290,7 +267,20 @@ } gst_element_ui_prop_view_update (ui->pviews[ui->selected]); + } else { + gtk_table_resize (GTK_TABLE (ui), 2, 3); + ui->message = gtk_label_new ("This element has no properties."); + gtk_widget_show (ui->message); + gtk_table_attach (GTK_TABLE (ui), ui->message, + 0, 2, 2, 3, GTK_FILL, GTK_FILL, 2, 4); } + + gtk_label_set_text (GTK_LABEL (ui->name), + g_strdup_printf ("%s: %s", gst_element_get_factory (ui->element)->details->longname, + gst_object_get_name (GST_OBJECT (ui->element)))); + + g_object_weak_ref (G_OBJECT(ui->element), (GWeakNotify) gst_element_ui_on_element_dispose, ui); + break; case PROP_VIEW_MODE: ui->view_mode = g_value_get_enum (value); @@ -300,13 +290,6 @@ return; } - if (!ui->nprops) { - gtk_widget_hide (GTK_WIDGET (ui)); - return; - } else { - gtk_widget_show (GTK_WIDGET (ui)); - } - if (ui->view_mode == GST_ELEMENT_UI_VIEW_MODE_COMPACT) { for (i=0; i<ui->nprops; i++) { gtk_widget_hide (ui->plabels[i]); @@ -384,21 +367,6 @@ /* it's possible that some props we excluded can show up here, just let them slide */ -} - -static void -on_button_delete_clicked (GtkButton *button, - gpointer user_data) -{ - g_message ("emit delete signal"); -} - - -static void -on_button_conf_clicked (GtkButton *button, - gpointer user_data) -{ - g_message("I don't do anything"); } static void Index: gst-element-ui.h =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/libs/gst/element-ui/gst-element-ui.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gst-element-ui.h 7 Aug 2002 06:11:34 -0000 1.5 +++ gst-element-ui.h 8 Aug 2002 08:35:28 -0000 1.6 @@ -57,6 +57,7 @@ GtkWidget *name; GtkWidget *optionmenu; + GtkWidget *message; }; struct _GstElementUIClass { Index: editor.glade2 =================================================================== RCS file: /cvsroot/gstreamer/gst-editor/src/editor.glade2,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- editor.glade2 7 Aug 2002 06:35:35 -0000 1.8 +++ editor.glade2 8 Aug 2002 08:35:28 -0000 1.9 @@ -159,7 +159,7 @@ <property name="use_underline">True</property> <child internal-child="image"> - <widget class="GtkImage" id="image3"> + <widget class="GtkImage" id="image13"> <property name="visible">True</property> <property name="stock">gtk-new</property> <property name="icon_size">1</property> @@ -228,6 +228,14 @@ </child> <child> + <widget class="GtkImageMenuItem" id="close1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_CLOSE_ITEM</property> + <signal name="activate" handler="gst_editor_on_close" last_modification_time="Thu, 08 Aug 2002 06:14:10 GMT"/> + </widget> + </child> + + <child> <widget class="GtkImageMenuItem" id="quit1"> <property name="visible">True</property> <property name="stock_item">GNOMEUIINFO_MENU_EXIT_ITEM</property> @@ -240,64 +248,88 @@ </child> <child> - <widget class="GtkMenuItem" id="edit1"> + <widget class="GtkMenuItem" id="element-menu"> <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_EDIT_TREE</property> + <property name="label" translatable="yes">_Element</property> + <property name="use_underline">True</property> <child> - <widget class="GtkMenu" id="edit1_menu"> + <widget class="GtkMenu" id="element-menu_menu"> <child> - <widget class="GtkImageMenuItem" id="cut1"> + <widget class="GtkImageMenuItem" id="element-cut"> <property name="visible">True</property> <property name="stock_item">GNOMEUIINFO_MENU_CUT_ITEM</property> + <signal name="activate" handler="gst_editor_on_cut" last_modification_time="Thu, 08 Aug 2002 06:11:11 GMT"/> </widget> </child> <child> - <widget class="GtkImageMenuItem" id="copy1"> + <widget class="GtkImageMenuItem" id="element-copy"> <property name="visible">True</property> <property name="stock_item">GNOMEUIINFO_MENU_COPY_ITEM</property> + <signal name="activate" handler="gst_editor_on_copy" last_modification_time="Thu, 08 Aug 2002 06:11:11 GMT"/> </widget> </child> <child> - <widget class="GtkImageMenuItem" id="paste1"> + <widget class="GtkImageMenuItem" id="element-paste"> <property name="visible">True</property> <property name="stock_item">GNOMEUIINFO_MENU_PASTE_ITEM</property> + <signal name="activate" handler="gst_editor_on_paste" last_modification_time="Thu, 08 Aug 2002 06:11:11 GMT"/> </widget> </child> <child> - <widget class="GtkImageMenuItem" id="clear1"> + <widget class="GtkImageMenuItem" id="element-remove"> <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_CLEAR_ITEM</property> - </widget> - </child> + <property name="label" translatable="yes">_Remove</property> + <property name="use_underline">True</property> + <signal name="activate" handler="gst_editor_on_element_remove" last_modification_time="Thu, 08 Aug 2002 06:02:36 GMT"/> - <child> - <widget class="GtkMenuItem" id="separator2"> - <property name="visible">True</property> + <child internal-child="image"> + <widget class="GtkImage" id="image14"> + <property name="visible">True</property> + <property name="stock">gtk-delete</property> + <property name="icon_size">1</property> + <property name="xalign">0.5</property> + <property name="yalign">0.5</property> + <property name="xpad">0</property> + <property name="ypad">0</property> + </widget> + </child> </widget> </child> + </widget> + </child> + </widget> + </child> - <child> - <widget class="GtkImageMenuItem" id="properties1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_PROPERTIES_ITEM</property> - </widget> - </child> + <child> + <widget class="GtkMenuItem" id="view1"> + <property name="visible">True</property> + <property name="stock_item">GNOMEUIINFO_MENU_VIEW_TREE</property> + + <child> + <widget class="GtkMenu" id="view1_menu"> <child> - <widget class="GtkMenuItem" id="separator3"> + <widget class="GtkCheckMenuItem" id="view-element-inspector"> <property name="visible">True</property> + <property name="label" translatable="yes">Element _Inspector</property> + <property name="use_underline">True</property> + <property name="active">True</property> + <signal name="activate" handler="gst_editor_show_element_inspector" last_modification_time="Thu, 08 Aug 2002 05:59:20 GMT"/> </widget> </child> <child> - <widget class="GtkImageMenuItem" id="preferences1"> + <widget class="GtkCheckMenuItem" id="utiity_palette1"> <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_PREFERENCES_ITEM</property> + <property name="label" translatable="yes">Utiity _Palette</property> + <property name="use_underline">True</property> + <property name="active">False</property> + <signal name="activate" handler="gst_editor_show_utility_palette" last_modification_time="Thu, 08 Aug 2002 05:59:20 GMT"/> </widget> </child> </widget> @@ -306,13 +338,6 @@ </child> <child> - <widget class="GtkMenuItem" id="view1"> - <property name="visible">True</property> - <property name="stock_item">GNOMEUIINFO_MENU_VIEW_TREE</property> - </widget> - </child> - - <child> <widget class="GtkMenuItem" id="help1"> <property name="visible">True</property> <property name="stock_item">GNOMEUIINFO_MENU_HELP_TREE</property> @@ -329,7 +354,7 @@ <accelerator key="F1" modifiers="0" signal="activate"/> <child internal-child="image"> - <widget class="GtkImage" id="image4"> + <widget class="GtkImage" id="image15"> <property name="visible">True</property> <property name="stock">gtk-help</property> <property name="icon_size">1</property> |