some editor changes= loading of save pipelines (not working) added include in gstdebug.h for getpid property loading ...
Original commit message from CVS: some editor changes= loading of save pipelines (not working) added include in gstdebug.h for getpid property loading implemented GstXML can now be queried for the toplevel elements.
This commit is contained in:
parent
da03fde054
commit
c6ac8a0f6b
@ -27,7 +27,9 @@
|
|||||||
|
|
||||||
extern gboolean _gst_plugin_spew;
|
extern gboolean _gst_plugin_spew;
|
||||||
|
|
||||||
int main(int argc,char *argv[]) {
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
GstEditorProject *project;
|
GstEditorProject *project;
|
||||||
|
|
||||||
bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
|
bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR);
|
||||||
@ -35,14 +37,19 @@ int main(int argc,char *argv[]) {
|
|||||||
|
|
||||||
_gst_plugin_spew = TRUE;
|
_gst_plugin_spew = TRUE;
|
||||||
gst_init(&argc,&argv);
|
gst_init(&argc,&argv);
|
||||||
gst_plugin_load_all();
|
|
||||||
gst_plugin_load("gstelements");
|
|
||||||
gnome_init("GST Graph Editor",VERSION,argc,argv);
|
gnome_init("GST Graph Editor",VERSION,argc,argv);
|
||||||
glade_init();
|
glade_init();
|
||||||
glade_gnome_init();
|
glade_gnome_init();
|
||||||
|
|
||||||
|
|
||||||
project = gst_editor_project_new();
|
if (argc > 1) {
|
||||||
|
project = gst_editor_project_new_from_file(argv[1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
project = gst_editor_project_new();
|
||||||
|
|
||||||
|
g_assert (project != NULL);
|
||||||
|
|
||||||
gst_editor_project_view_new(project);
|
gst_editor_project_view_new(project);
|
||||||
|
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
@ -593,6 +593,77 @@
|
|||||||
<ypad>0</ypad>
|
<ypad>0</ypad>
|
||||||
</widget>
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkVBox</class>
|
||||||
|
<name>vbox4</name>
|
||||||
|
<homogeneous>False</homogeneous>
|
||||||
|
<spacing>0</spacing>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkScrolledWindow</class>
|
||||||
|
<name>scrolledwindow6</name>
|
||||||
|
<hscrollbar_policy>GTK_POLICY_ALWAYS</hscrollbar_policy>
|
||||||
|
<vscrollbar_policy>GTK_POLICY_ALWAYS</vscrollbar_policy>
|
||||||
|
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
|
||||||
|
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
|
||||||
|
<child>
|
||||||
|
<padding>0</padding>
|
||||||
|
<expand>True</expand>
|
||||||
|
<fill>True</fill>
|
||||||
|
</child>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkCTree</class>
|
||||||
|
<name>ctree2</name>
|
||||||
|
<can_focus>True</can_focus>
|
||||||
|
<columns>2</columns>
|
||||||
|
<column_widths>187,80</column_widths>
|
||||||
|
<selection_mode>GTK_SELECTION_SINGLE</selection_mode>
|
||||||
|
<show_titles>True</show_titles>
|
||||||
|
<shadow_type>GTK_SHADOW_IN</shadow_type>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<child_name>CTree:title</child_name>
|
||||||
|
<name>label20</name>
|
||||||
|
<label>Pad</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>0.5</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<child_name>CTree:title</child_name>
|
||||||
|
<name>label21</name>
|
||||||
|
<label>Value</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>0.5</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
|
||||||
|
<widget>
|
||||||
|
<class>GtkLabel</class>
|
||||||
|
<child_name>Notebook:tab</child_name>
|
||||||
|
<name>label19</name>
|
||||||
|
<label>Pads</label>
|
||||||
|
<justify>GTK_JUSTIFY_CENTER</justify>
|
||||||
|
<wrap>False</wrap>
|
||||||
|
<xalign>0.5</xalign>
|
||||||
|
<yalign>0.5</yalign>
|
||||||
|
<xpad>0</xpad>
|
||||||
|
<ypad>0</ypad>
|
||||||
|
</widget>
|
||||||
|
|
||||||
<widget>
|
<widget>
|
||||||
<class>GtkVBox</class>
|
<class>GtkVBox</class>
|
||||||
<name>vbox3</name>
|
<name>vbox3</name>
|
||||||
|
@ -23,6 +23,9 @@ gchar *s = N_("Standard Elements");
|
|||||||
gchar *s = N_("Tree select...");
|
gchar *s = N_("Tree select...");
|
||||||
gchar *s = N_("Properties");
|
gchar *s = N_("Properties");
|
||||||
gchar *s = N_("Element");
|
gchar *s = N_("Element");
|
||||||
|
gchar *s = N_("Pad");
|
||||||
|
gchar *s = N_("Value");
|
||||||
|
gchar *s = N_("Pads");
|
||||||
gchar *s = N_("Signal");
|
gchar *s = N_("Signal");
|
||||||
gchar *s = N_("Handler");
|
gchar *s = N_("Handler");
|
||||||
gchar *s = N_("Data");
|
gchar *s = N_("Data");
|
||||||
|
@ -99,7 +99,9 @@ static void on_name_changed(GstEditorElement *element, gpointer data) {
|
|||||||
*
|
*
|
||||||
* Returns: Freshly created GstEditor widget.
|
* Returns: Freshly created GstEditor widget.
|
||||||
*/
|
*/
|
||||||
GstEditor *gst_editor_new(GstElement *element) {
|
GstEditor*
|
||||||
|
gst_editor_new (GstElement *element)
|
||||||
|
{
|
||||||
GstEditor *editor;
|
GstEditor *editor;
|
||||||
|
|
||||||
g_return_val_if_fail(element != NULL, NULL);
|
g_return_val_if_fail(element != NULL, NULL);
|
||||||
@ -117,10 +119,6 @@ GstEditor *gst_editor_new(GstElement *element) {
|
|||||||
/* get the canvas widget */
|
/* get the canvas widget */
|
||||||
editor->canvaswidget = gst_editor_canvas_get_canvas(editor->canvas);
|
editor->canvaswidget = gst_editor_canvas_get_canvas(editor->canvas);
|
||||||
|
|
||||||
/* add the canvas to the scrolled window */
|
|
||||||
/*gtk_container_add(GTK_CONTAINER(editor->scrollwindow),
|
|
||||||
editor->canvaswidget);
|
|
||||||
*/
|
|
||||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(editor->scrollwindow),
|
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(editor->scrollwindow),
|
||||||
editor->canvaswidget);
|
editor->canvaswidget);
|
||||||
|
|
||||||
@ -129,6 +127,28 @@ GstEditor *gst_editor_new(GstElement *element) {
|
|||||||
|
|
||||||
gtk_widget_set_usize(GTK_WIDGET(editor),400,400);
|
gtk_widget_set_usize(GTK_WIDGET(editor),400,400);
|
||||||
|
|
||||||
|
if (GST_IS_BIN (element)) {
|
||||||
|
GList *elements;
|
||||||
|
|
||||||
|
elements = gst_bin_get_list (GST_BIN(element));
|
||||||
|
|
||||||
|
while (elements) {
|
||||||
|
GstElement *child = (GstElement *)elements->data;
|
||||||
|
|
||||||
|
if (GST_IS_BIN (child)) {
|
||||||
|
g_print ("new bin \n");
|
||||||
|
gst_editor_bin_new (GST_EDITOR_BIN(editor->canvas),GST_BIN(child),
|
||||||
|
"x",10.0,"y",10.0,"width",50.0,"height",20.0,NULL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g_print ("new element \n");
|
||||||
|
gst_editor_element_new (GST_EDITOR_BIN(editor->canvas),child,
|
||||||
|
"x",10.0,"y",10.0,"width",50.0,"height",20.0,NULL);
|
||||||
|
}
|
||||||
|
elements = g_list_next (elements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_show_all(GTK_WIDGET(editor));
|
gtk_widget_show_all(GTK_WIDGET(editor));
|
||||||
|
|
||||||
return editor;
|
return editor;
|
||||||
|
@ -104,6 +104,8 @@ GstEditorBin *gst_editor_bin_new(GstEditorBin *parent,GstBin *bin,
|
|||||||
first_arg_name,args);
|
first_arg_name,args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return editorbin;
|
return editorbin;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -267,5 +269,7 @@ void gst_editor_bin_add(GstEditorBin *bin,GstEditorElement *element) {
|
|||||||
bin->elements = g_list_prepend(bin->elements,element);
|
bin->elements = g_list_prepend(bin->elements,element);
|
||||||
|
|
||||||
/* add the real element to the real bin */
|
/* add the real element to the real bin */
|
||||||
gst_bin_add(GST_BIN(GST_EDITOR_ELEMENT(bin)->element),element->element);
|
if (!gst_object_get_parent (GST_OBJECT (element->element))) {
|
||||||
|
gst_bin_add(GST_BIN(GST_EDITOR_ELEMENT(bin)->element),element->element);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -196,10 +196,12 @@ const gchar *gst_editor_element_get_name(GstEditorElement *element) {
|
|||||||
return gst_element_get_name(element->element);
|
return gst_element_get_name(element->element);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gst_editor_element_construct(GstEditorElement *element,
|
void
|
||||||
GstEditorBin *parent,
|
gst_editor_element_construct(GstEditorElement *element,
|
||||||
const gchar *first_arg_name,
|
GstEditorBin *parent,
|
||||||
va_list args) {
|
const gchar *first_arg_name,
|
||||||
|
va_list args)
|
||||||
|
{
|
||||||
GtkObject *obj = GTK_OBJECT(element);
|
GtkObject *obj = GTK_OBJECT(element);
|
||||||
GSList *arg_list = NULL, *info_list = NULL;
|
GSList *arg_list = NULL, *info_list = NULL;
|
||||||
gchar *error;
|
gchar *error;
|
||||||
|
@ -28,10 +28,11 @@
|
|||||||
#include "gsteditorimage.h"
|
#include "gsteditorimage.h"
|
||||||
|
|
||||||
/* class functions */
|
/* class functions */
|
||||||
static void gst_editor_project_class_init(GstEditorProjectClass *klass);
|
static void gst_editor_project_class_init (GstEditorProjectClass *klass);
|
||||||
static void gst_editor_project_init(GstEditorProject *project);
|
static void gst_editor_project_init (GstEditorProject *project);
|
||||||
static void gst_editor_project_set_arg(GtkObject *object,GtkArg *arg,guint id);
|
|
||||||
static void gst_editor_project_get_arg(GtkObject *object,GtkArg *arg,guint id);
|
static void gst_editor_project_set_arg (GtkObject *object,GtkArg *arg,guint id);
|
||||||
|
static void gst_editor_project_get_arg (GtkObject *object,GtkArg *arg,guint id);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ARG_0,
|
ARG_0,
|
||||||
@ -47,7 +48,8 @@ enum {
|
|||||||
static GtkObjectClass *parent_class;
|
static GtkObjectClass *parent_class;
|
||||||
static guint gst_editor_project_signals[LAST_SIGNAL] = { 0 };
|
static guint gst_editor_project_signals[LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
GtkType gst_editor_project_get_type() {
|
GtkType gst_editor_project_get_type (void)
|
||||||
|
{
|
||||||
static GtkType project_type = 0;
|
static GtkType project_type = 0;
|
||||||
|
|
||||||
if (!project_type) {
|
if (!project_type) {
|
||||||
@ -66,7 +68,9 @@ GtkType gst_editor_project_get_type() {
|
|||||||
return project_type;
|
return project_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_class_init(GstEditorProjectClass *klass) {
|
static void
|
||||||
|
gst_editor_project_class_init (GstEditorProjectClass *klass)
|
||||||
|
{
|
||||||
GtkObjectClass *object_class;
|
GtkObjectClass *object_class;
|
||||||
|
|
||||||
object_class = (GtkObjectClass*)klass;
|
object_class = (GtkObjectClass*)klass;
|
||||||
@ -97,11 +101,15 @@ static void gst_editor_project_class_init(GstEditorProjectClass *klass) {
|
|||||||
object_class->get_arg = gst_editor_project_get_arg;
|
object_class->get_arg = gst_editor_project_get_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_init(GstEditorProject *project) {
|
static void
|
||||||
|
gst_editor_project_init (GstEditorProject *project)
|
||||||
|
{
|
||||||
project->toplevelelements = NULL;
|
project->toplevelelements = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
GstEditorProject *gst_editor_project_new() {
|
GstEditorProject*
|
||||||
|
gst_editor_project_new (void)
|
||||||
|
{
|
||||||
GstEditorProject *editorproject;
|
GstEditorProject *editorproject;
|
||||||
|
|
||||||
editorproject = GST_EDITOR_PROJECT(gtk_type_new(GST_TYPE_EDITOR_PROJECT));
|
editorproject = GST_EDITOR_PROJECT(gtk_type_new(GST_TYPE_EDITOR_PROJECT));
|
||||||
@ -109,16 +117,54 @@ GstEditorProject *gst_editor_project_new() {
|
|||||||
return editorproject;
|
return editorproject;
|
||||||
}
|
}
|
||||||
|
|
||||||
GstEditorProject *gst_editor_project_new_from_file(const guchar *fname) {
|
GstEditorProject *
|
||||||
|
gst_editor_project_new_from_file (const guchar *fname)
|
||||||
|
{
|
||||||
GstEditorProject *editorproject;
|
GstEditorProject *editorproject;
|
||||||
|
GstXML *xml;
|
||||||
|
GList *elements;
|
||||||
|
|
||||||
|
g_return_if_fail (fname != NULL);
|
||||||
|
|
||||||
editorproject = gst_editor_project_new();
|
editorproject = gst_editor_project_new();
|
||||||
|
|
||||||
|
xml = gst_xml_new (fname, NULL);
|
||||||
|
|
||||||
|
elements = gst_xml_get_topelements(xml);
|
||||||
|
|
||||||
|
while (elements) {
|
||||||
|
GstElement *element = (GstElement *) elements->data;
|
||||||
|
|
||||||
|
gst_editor_project_add_toplevel_element (editorproject, element);
|
||||||
|
|
||||||
|
elements = g_list_next (elements);
|
||||||
|
}
|
||||||
|
|
||||||
return editorproject;
|
return editorproject;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gst_editor_project_add_toplevel_element(GstEditorProject *project, GstElement *element) {
|
void
|
||||||
|
gst_editor_project_save_as (GstEditorProject *project, const guchar *fname)
|
||||||
|
{
|
||||||
|
GList *elements;
|
||||||
|
|
||||||
|
g_return_if_fail (fname != NULL);
|
||||||
|
g_return_if_fail (project != NULL);
|
||||||
|
|
||||||
|
elements = project->toplevelelements;
|
||||||
|
|
||||||
|
while (elements) {
|
||||||
|
GstElement *element = (GstElement *) elements->data;
|
||||||
|
|
||||||
|
xmlSaveFile (fname, gst_xml_write (element));
|
||||||
|
|
||||||
|
elements = g_list_next (elements);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
gst_editor_project_add_toplevel_element (GstEditorProject *project, GstElement *element)
|
||||||
|
{
|
||||||
g_return_if_fail(project != NULL);
|
g_return_if_fail(project != NULL);
|
||||||
g_return_if_fail(GST_IS_EDITOR_PROJECT(project));
|
g_return_if_fail(GST_IS_EDITOR_PROJECT(project));
|
||||||
g_return_if_fail(element != NULL);
|
g_return_if_fail(element != NULL);
|
||||||
@ -131,7 +177,9 @@ void gst_editor_project_add_toplevel_element(GstEditorProject *project, GstEleme
|
|||||||
gtk_signal_emit(GTK_OBJECT(project),gst_editor_project_signals[ELEMENT_ADDED], element);
|
gtk_signal_emit(GTK_OBJECT(project),gst_editor_project_signals[ELEMENT_ADDED], element);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_set_arg(GtkObject *object,GtkArg *arg,guint id) {
|
static void
|
||||||
|
gst_editor_project_set_arg (GtkObject *object, GtkArg *arg, guint id)
|
||||||
|
{
|
||||||
GstEditorProject *project;
|
GstEditorProject *project;
|
||||||
|
|
||||||
/* get the major types of this object */
|
/* get the major types of this object */
|
||||||
@ -144,7 +192,9 @@ static void gst_editor_project_set_arg(GtkObject *object,GtkArg *arg,guint id) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_get_arg(GtkObject *object,GtkArg *arg,guint id) {
|
static void
|
||||||
|
gst_editor_project_get_arg (GtkObject *object, GtkArg *arg, guint id)
|
||||||
|
{
|
||||||
GstEditorProject *project;
|
GstEditorProject *project;
|
||||||
|
|
||||||
/* get the major types of this object */
|
/* get the major types of this object */
|
||||||
|
@ -56,11 +56,16 @@ struct _GstEditorProjectClass {
|
|||||||
GstEditorElement *element);
|
GstEditorElement *element);
|
||||||
};
|
};
|
||||||
|
|
||||||
GtkType gst_editor_project_get_type();
|
GtkType gst_editor_project_get_type (void);
|
||||||
GstEditorProject *gst_editor_project_new();
|
|
||||||
GstEditorProject *gst_editor_project_new_from_file(const guchar *fname);
|
|
||||||
void gst_editor_project_add_toplevel_element(GstEditorProject *project, GstElement *element);
|
|
||||||
|
|
||||||
|
GstEditorProject* gst_editor_project_new (void);
|
||||||
|
GstEditorProject* gst_editor_project_new_from_file (const guchar *fname);
|
||||||
|
void gst_editor_project_save (GstEditorProject *project);
|
||||||
|
void gst_editor_project_save_as (GstEditorProject *project,
|
||||||
|
const guchar *fname);
|
||||||
|
|
||||||
|
void gst_editor_project_add_toplevel_element (GstEditorProject *project,
|
||||||
|
GstElement *element);
|
||||||
|
|
||||||
#define GST_TYPE_EDITOR_PROJECT_VIEW \
|
#define GST_TYPE_EDITOR_PROJECT_VIEW \
|
||||||
(gst_editor_project_view_get_type())
|
(gst_editor_project_view_get_type())
|
||||||
@ -88,7 +93,8 @@ struct _GstEditorProjectViewClass {
|
|||||||
GtkObjectClass parent_class;
|
GtkObjectClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
GtkType gst_editor_project_view_get_type();
|
GtkType gst_editor_project_view_get_type (void);
|
||||||
GstEditorProjectView *gst_editor_project_view_new(GstEditorProject *project);
|
|
||||||
|
GstEditorProjectView* gst_editor_project_view_new (GstEditorProject *project);
|
||||||
|
|
||||||
#endif /* __GST_EDITOR_PROJECT_H__ */
|
#endif /* __GST_EDITOR_PROJECT_H__ */
|
||||||
|
@ -28,10 +28,11 @@
|
|||||||
#include "gsteditorimage.h"
|
#include "gsteditorimage.h"
|
||||||
|
|
||||||
/* class functions */
|
/* class functions */
|
||||||
static void gst_editor_project_view_class_init(GstEditorProjectViewClass *klass);
|
static void gst_editor_project_view_class_init (GstEditorProjectViewClass *klass);
|
||||||
static void gst_editor_project_view_init(GstEditorProjectView *project_view);
|
static void gst_editor_project_view_init (GstEditorProjectView *project_view);
|
||||||
static void gst_editor_project_view_set_arg(GtkObject *object,GtkArg *arg,guint id);
|
|
||||||
static void gst_editor_project_view_get_arg(GtkObject *object,GtkArg *arg,guint id);
|
static void gst_editor_project_view_set_arg (GtkObject *object, GtkArg *arg, guint id);
|
||||||
|
static void gst_editor_project_view_get_arg (GtkObject *object, GtkArg *arg, guint id);
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
ARG_0,
|
ARG_0,
|
||||||
@ -44,7 +45,9 @@ enum {
|
|||||||
static GtkObjectClass *parent_class;
|
static GtkObjectClass *parent_class;
|
||||||
//static guint gst_editor_project_view_signals[LAST_SIGNAL] = { 0 };
|
//static guint gst_editor_project_view_signals[LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
GtkType gst_editor_project_view_get_type() {
|
GtkType
|
||||||
|
gst_editor_project_view_get_type(void)
|
||||||
|
{
|
||||||
static GtkType project_view_type = 0;
|
static GtkType project_view_type = 0;
|
||||||
|
|
||||||
if (!project_view_type) {
|
if (!project_view_type) {
|
||||||
@ -63,7 +66,9 @@ GtkType gst_editor_project_view_get_type() {
|
|||||||
return project_view_type;
|
return project_view_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_view_class_init(GstEditorProjectViewClass *klass) {
|
static void
|
||||||
|
gst_editor_project_view_class_init (GstEditorProjectViewClass *klass)
|
||||||
|
{
|
||||||
GtkObjectClass *object_class;
|
GtkObjectClass *object_class;
|
||||||
|
|
||||||
object_class = (GtkObjectClass*)klass;
|
object_class = (GtkObjectClass*)klass;
|
||||||
@ -74,16 +79,19 @@ static void gst_editor_project_view_class_init(GstEditorProjectViewClass *klass)
|
|||||||
object_class->get_arg = gst_editor_project_view_get_arg;
|
object_class->get_arg = gst_editor_project_view_get_arg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_view_init(GstEditorProjectView *project) {
|
static void
|
||||||
|
gst_editor_project_view_init (GstEditorProjectView *project)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GstEditorProject *project;
|
GstEditorProjectView *view;
|
||||||
GModule *symbols;
|
GModule *symbols;
|
||||||
} connect_struct;
|
} connect_struct;
|
||||||
|
|
||||||
/* we need more control here so... */
|
/* we need more control here so... */
|
||||||
static void gst_editor_project_connect_func (const gchar *handler_name,
|
static void
|
||||||
|
gst_editor_project_connect_func (const gchar *handler_name,
|
||||||
GtkObject *object,
|
GtkObject *object,
|
||||||
const gchar *signal_name,
|
const gchar *signal_name,
|
||||||
const gchar *signal_data,
|
const gchar *signal_data,
|
||||||
@ -98,13 +106,16 @@ static void gst_editor_project_connect_func (const gchar *handler_name,
|
|||||||
g_warning("GstEditorProject: could not find signal handler '%s'.", handler_name);
|
g_warning("GstEditorProject: could not find signal handler '%s'.", handler_name);
|
||||||
else {
|
else {
|
||||||
if (after)
|
if (after)
|
||||||
gtk_signal_connect_after(object, signal_name, func, (gpointer) data->project);
|
gtk_signal_connect_after(object, signal_name, func, (gpointer) data->view);
|
||||||
else
|
else
|
||||||
gtk_signal_connect(object, signal_name, func, (gpointer) data->project);
|
gtk_signal_connect(object, signal_name, func, (gpointer) data->view);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_element_selected(GstEditorProjectView *view, GtkType type, GstEditorPalette *palette) {
|
static void
|
||||||
|
gst_editor_project_element_selected (GstEditorProjectView *view,
|
||||||
|
GtkType type, GstEditorPalette *palette)
|
||||||
|
{
|
||||||
GstElement *element;
|
GstElement *element;
|
||||||
|
|
||||||
element = gtk_type_new(type);
|
element = gtk_type_new(type);
|
||||||
@ -115,7 +126,10 @@ static void gst_editor_project_element_selected(GstEditorProjectView *view, GtkT
|
|||||||
gst_editor_project_add_toplevel_element(view->project, element);
|
gst_editor_project_add_toplevel_element(view->project, element);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void on_name_change(GstEditorProjectView *view, GstEditorElement *element, GstEditor *editor) {
|
static void
|
||||||
|
on_name_change (GstEditorProjectView *view,
|
||||||
|
GstEditorElement *element, GstEditor *editor)
|
||||||
|
{
|
||||||
gint row;
|
gint row;
|
||||||
gchar *text;
|
gchar *text;
|
||||||
guint8 spacing;
|
guint8 spacing;
|
||||||
@ -129,7 +143,9 @@ static void on_name_change(GstEditorProjectView *view, GstEditorElement *element
|
|||||||
spacing, pixmap, mask);
|
spacing, pixmap, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void view_on_element_added(GstEditorProjectView *view, GstElement *element) {
|
static void
|
||||||
|
view_on_element_added (GstEditorProjectView *view, GstElement *element)
|
||||||
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gint row;
|
gint row;
|
||||||
GstEditorImage *image;
|
GstEditorImage *image;
|
||||||
@ -145,12 +161,102 @@ static void view_on_element_added(GstEditorProjectView *view, GstElement *elemen
|
|||||||
gtk_clist_set_pixtext(GTK_CLIST(view->list), row, 0, name, 3, image->pixmap, image->bitmap);
|
gtk_clist_set_pixtext(GTK_CLIST(view->list), row, 0, name, 3, image->pixmap, image->bitmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
GstEditorProjectView *gst_editor_project_view_new(GstEditorProject *project) {
|
typedef struct {
|
||||||
|
GtkWidget *selection;
|
||||||
|
GstEditorProjectView *view;
|
||||||
|
} file_select;
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_save_as_file_selected (GtkWidget *button,
|
||||||
|
file_select *data)
|
||||||
|
{
|
||||||
|
GtkWidget *selector = data->selection;
|
||||||
|
GstEditorProjectView *view = data->view;
|
||||||
|
|
||||||
|
gchar *file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION(selector));
|
||||||
|
gst_editor_project_save_as (view->project, file_name);
|
||||||
|
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
on_save_as1_activate (GtkWidget *widget,
|
||||||
|
GstEditorProjectView *view)
|
||||||
|
{
|
||||||
|
GtkWidget *file_selector;
|
||||||
|
file_select *file_data = g_new0 (file_select, 1);
|
||||||
|
|
||||||
|
file_selector = gtk_file_selection_new("Please select a file for saving.");
|
||||||
|
|
||||||
|
file_data->selection = file_selector;
|
||||||
|
file_data->view = view;
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (on_save_as_file_selected),
|
||||||
|
file_data);
|
||||||
|
|
||||||
|
/* Ensure that the dialog box is destroyed when the user clicks a button. */
|
||||||
|
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||||
|
(gpointer) file_selector);
|
||||||
|
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->cancel_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||||
|
(gpointer) file_selector);
|
||||||
|
|
||||||
|
/* Display that dialog */
|
||||||
|
gtk_widget_show (file_selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_load_file_selected (GtkWidget *button,
|
||||||
|
file_select *data)
|
||||||
|
{
|
||||||
|
GtkWidget *selector = data->selection;
|
||||||
|
GstEditorProjectView *view = data->view;
|
||||||
|
|
||||||
|
gchar *file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION(selector));
|
||||||
|
//gst_editor_project_load (view->project, file_name);
|
||||||
|
|
||||||
|
g_free (data);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
on_open1_activate (GtkWidget *widget,
|
||||||
|
GstEditorProjectView *view)
|
||||||
|
{
|
||||||
|
GtkWidget *file_selector;
|
||||||
|
file_select *file_data = g_new0 (file_select, 1);
|
||||||
|
|
||||||
|
file_selector = gtk_file_selection_new("Please select a file to load.");
|
||||||
|
|
||||||
|
file_data->selection = file_selector;
|
||||||
|
file_data->view = view;
|
||||||
|
|
||||||
|
gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (on_load_file_selected),
|
||||||
|
file_data);
|
||||||
|
|
||||||
|
/* Ensure that the dialog box is destroyed when the user clicks a button. */
|
||||||
|
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->ok_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||||
|
(gpointer) file_selector);
|
||||||
|
gtk_signal_connect_object (GTK_OBJECT (GTK_FILE_SELECTION(file_selector)->cancel_button),
|
||||||
|
"clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy),
|
||||||
|
(gpointer) file_selector);
|
||||||
|
|
||||||
|
/* Display that dialog */
|
||||||
|
gtk_widget_show (file_selector);
|
||||||
|
}
|
||||||
|
|
||||||
|
GstEditorProjectView*
|
||||||
|
gst_editor_project_view_new (GstEditorProject *project)
|
||||||
|
{
|
||||||
GstEditorProjectView *view;
|
GstEditorProjectView *view;
|
||||||
GtkWidget *main_window;
|
GtkWidget *main_window;
|
||||||
connect_struct data;
|
connect_struct data;
|
||||||
GModule *symbols;
|
GModule *symbols;
|
||||||
GstEditorPalette *palette;
|
GstEditorPalette *palette;
|
||||||
|
GList *elements;
|
||||||
|
|
||||||
view = GST_EDITOR_PROJECT_VIEW(gtk_type_new(GST_TYPE_EDITOR_PROJECT_VIEW));
|
view = GST_EDITOR_PROJECT_VIEW(gtk_type_new(GST_TYPE_EDITOR_PROJECT_VIEW));
|
||||||
|
|
||||||
@ -158,14 +264,12 @@ GstEditorProjectView *gst_editor_project_view_new(GstEditorProject *project) {
|
|||||||
|
|
||||||
symbols = g_module_open(NULL, 0);
|
symbols = g_module_open(NULL, 0);
|
||||||
|
|
||||||
data.project = project;
|
data.view = view;
|
||||||
data.symbols = symbols;
|
data.symbols = symbols;
|
||||||
|
|
||||||
view->xml = glade_xml_new("editor.glade", "main_project_window");
|
view->xml = glade_xml_new("editor.glade", "main_project_window");
|
||||||
glade_xml_signal_autoconnect_full (view->xml, gst_editor_project_connect_func, &data);
|
glade_xml_signal_autoconnect_full (view->xml, gst_editor_project_connect_func, &data);
|
||||||
|
|
||||||
gtk_signal_connect_object(GTK_OBJECT(project), "element_added", view_on_element_added, GTK_OBJECT(view));
|
|
||||||
|
|
||||||
main_window = glade_xml_get_widget(view->xml, "main_project_window");
|
main_window = glade_xml_get_widget(view->xml, "main_project_window");
|
||||||
gtk_widget_show(main_window);
|
gtk_widget_show(main_window);
|
||||||
|
|
||||||
@ -177,10 +281,25 @@ GstEditorProjectView *gst_editor_project_view_new(GstEditorProject *project) {
|
|||||||
|
|
||||||
gst_editor_property_get();
|
gst_editor_property_get();
|
||||||
|
|
||||||
|
elements = project->toplevelelements;
|
||||||
|
|
||||||
|
while (elements) {
|
||||||
|
GstElement *element = (GstElement *)elements->data;
|
||||||
|
|
||||||
|
g_print ("add\n");
|
||||||
|
view_on_element_added (view, element);
|
||||||
|
|
||||||
|
elements = g_list_next (elements);
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_signal_connect_object(GTK_OBJECT(project), "element_added", view_on_element_added, GTK_OBJECT(view));
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_view_set_arg(GtkObject *object,GtkArg *arg,guint id) {
|
static void
|
||||||
|
gst_editor_project_view_set_arg (GtkObject *object,GtkArg *arg,guint id)
|
||||||
|
{
|
||||||
GstEditorProjectView *project_view;
|
GstEditorProjectView *project_view;
|
||||||
|
|
||||||
/* get the major types of this object */
|
/* get the major types of this object */
|
||||||
@ -193,7 +312,9 @@ static void gst_editor_project_view_set_arg(GtkObject *object,GtkArg *arg,guint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gst_editor_project_view_get_arg(GtkObject *object,GtkArg *arg,guint id) {
|
static void
|
||||||
|
gst_editor_project_view_get_arg (GtkObject *object,GtkArg *arg,guint id)
|
||||||
|
{
|
||||||
GstEditorProjectView *project_view;
|
GstEditorProjectView *project_view;
|
||||||
|
|
||||||
/* get the major types of this object */
|
/* get the major types of this object */
|
||||||
|
@ -592,6 +592,7 @@ gst_bin_src_wrapper (int argc,char *argv[])
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
static void
|
static void
|
||||||
gst_bin_pullfunc_proxy (GstPad *pad)
|
gst_bin_pullfunc_proxy (GstPad *pad)
|
||||||
{
|
{
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <gst/gstobject.h>
|
||||||
#include <gst/gstmeta.h>
|
#include <gst/gstmeta.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -26,6 +26,8 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gmodule.h>
|
#include <gmodule.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <gst/gsttrace.h>
|
#include <gst/gsttrace.h>
|
||||||
|
|
||||||
/* for include files that make too much noise normally */
|
/* for include files that make too much noise normally */
|
||||||
|
@ -829,7 +829,8 @@ gst_pad_load_and_connect (xmlNodePtr parent,
|
|||||||
field = field->next;
|
field = field->next;
|
||||||
}
|
}
|
||||||
g_return_if_fail(pad != NULL);
|
g_return_if_fail(pad != NULL);
|
||||||
g_return_if_fail(peer != NULL);
|
|
||||||
|
if (peer == NULL) return;
|
||||||
|
|
||||||
split = g_strsplit(peer, ".", 2);
|
split = g_strsplit(peer, ".", 2);
|
||||||
|
|
||||||
|
@ -362,6 +362,7 @@ gst_props_save_thyself (GstProps *props, xmlNodePtr parent)
|
|||||||
switch (entry->propstype) {
|
switch (entry->propstype) {
|
||||||
case GST_PROPS_LIST_ID_NUM:
|
case GST_PROPS_LIST_ID_NUM:
|
||||||
subtree = xmlNewChild (parent, NULL, "list", NULL);
|
subtree = xmlNewChild (parent, NULL, "list", NULL);
|
||||||
|
xmlNewProp (subtree, "name", g_quark_to_string (entry->propid));
|
||||||
g_list_foreach (entry->data.list_data.entries, (GFunc) gst_props_save_thyself_func, subtree);
|
g_list_foreach (entry->data.list_data.entries, (GFunc) gst_props_save_thyself_func, subtree);
|
||||||
default:
|
default:
|
||||||
gst_props_save_thyself_func (entry, parent);
|
gst_props_save_thyself_func (entry, parent);
|
||||||
@ -373,9 +374,74 @@ gst_props_save_thyself (GstProps *props, xmlNodePtr parent)
|
|||||||
return parent;
|
return parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static GstPropsEntry*
|
||||||
|
gst_props_load_thyself_func (xmlNodePtr field)
|
||||||
|
{
|
||||||
|
GstPropsEntry *entry;
|
||||||
|
|
||||||
|
entry = g_new0 (GstPropsEntry, 1);
|
||||||
|
|
||||||
|
if (!strcmp(field->name, "int")) {
|
||||||
|
entry->propstype = GST_PROPS_INT_ID_NUM;
|
||||||
|
entry->propid = g_quark_from_string (xmlGetProp(field, "name"));
|
||||||
|
sscanf (xmlGetProp(field, "value"), "%d", &entry->data.int_data);
|
||||||
|
}
|
||||||
|
else if (!strcmp(field->name, "range")) {
|
||||||
|
entry->propstype = GST_PROPS_INT_RANGE_ID_NUM;
|
||||||
|
entry->propid = g_quark_from_string (xmlGetProp(field, "name"));
|
||||||
|
sscanf (xmlGetProp(field, "min"), "%d", &entry->data.int_range_data.min);
|
||||||
|
sscanf (xmlGetProp(field, "max"), "%d", &entry->data.int_range_data.max);
|
||||||
|
}
|
||||||
|
else if (!strcmp(field->name, "boolean")) {
|
||||||
|
entry->propstype = GST_PROPS_BOOL_ID_NUM;
|
||||||
|
entry->propid = g_quark_from_string (xmlGetProp(field, "name"));
|
||||||
|
if (!strcmp (xmlGetProp(field, "value"), "false")) entry->data.bool_data = 0;
|
||||||
|
else entry->data.bool_data = 1;
|
||||||
|
}
|
||||||
|
else if (!strcmp(field->name, "fourcc")) {
|
||||||
|
entry->propstype = GST_PROPS_FOURCC_ID_NUM;
|
||||||
|
entry->propid = g_quark_from_string (xmlGetProp(field, "name"));
|
||||||
|
sscanf (xmlGetProp(field, "hexvalue"), "%08x", &entry->data.fourcc_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
GstProps*
|
GstProps*
|
||||||
gst_props_load_thyself (xmlNodePtr parent)
|
gst_props_load_thyself (xmlNodePtr parent)
|
||||||
{
|
{
|
||||||
return NULL;
|
GstProps *props = g_new0 (GstProps, 1);
|
||||||
|
xmlNodePtr field = parent->childs;
|
||||||
|
|
||||||
|
while (field) {
|
||||||
|
if (!strcmp (field->name, "list")) {
|
||||||
|
GstPropsEntry *entry;
|
||||||
|
xmlNodePtr subfield = field->childs;
|
||||||
|
|
||||||
|
entry = g_new0 (GstPropsEntry, 1);
|
||||||
|
entry->propstype = GST_PROPS_LIST_ID_NUM;
|
||||||
|
entry->propid = g_quark_from_string (xmlGetProp(field, "name"));
|
||||||
|
|
||||||
|
while (subfield) {
|
||||||
|
GstPropsEntry *subentry = gst_props_load_thyself_func (subfield);
|
||||||
|
|
||||||
|
entry->data.list_data.entries = g_list_prepend (entry->data.list_data.entries, subentry);
|
||||||
|
|
||||||
|
subfield = subfield->next;
|
||||||
|
}
|
||||||
|
entry->data.list_data.entries = g_list_reverse (entry->data.list_data.entries);
|
||||||
|
props->properties = g_slist_insert_sorted (props->properties, entry, props_compare_func);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GstPropsEntry *entry;
|
||||||
|
|
||||||
|
entry = gst_props_load_thyself_func (field);
|
||||||
|
|
||||||
|
props->properties = g_slist_insert_sorted (props->properties, entry, props_compare_func);
|
||||||
|
}
|
||||||
|
field = field->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
return props;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -167,7 +167,6 @@ gst_thread_get_arg (GtkObject *object,
|
|||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case ARG_CREATE_THREAD:
|
case ARG_CREATE_THREAD:
|
||||||
g_print("gstthread: query thread %d\n", GST_FLAG_IS_SET (object, GST_THREAD_CREATE));
|
|
||||||
GTK_VALUE_BOOL (*arg) = GST_FLAG_IS_SET (object, GST_THREAD_CREATE);
|
GTK_VALUE_BOOL (*arg) = GST_FLAG_IS_SET (object, GST_THREAD_CREATE);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
37
gst/gstxml.c
37
gst/gstxml.c
@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
#include "gstxml.h"
|
#include "gstxml.h"
|
||||||
|
|
||||||
static void gst_xml_class_init(GstXMLClass *klass);
|
static void gst_xml_class_init (GstXMLClass *klass);
|
||||||
static void gst_xml_init(GstXML *xml);
|
static void gst_xml_init (GstXML *xml);
|
||||||
|
|
||||||
static GstObjectClass *parent_class = NULL;
|
static GstObjectClass *parent_class = NULL;
|
||||||
|
|
||||||
@ -85,7 +85,9 @@ xmlDocPtr gst_xml_write(GstElement *element) {
|
|||||||
*
|
*
|
||||||
* Returns: a pointer to a new GstElement
|
* Returns: a pointer to a new GstElement
|
||||||
*/
|
*/
|
||||||
GstXML *gst_xml_new(const guchar *fname, const guchar *root) {
|
GstXML*
|
||||||
|
gst_xml_new (const guchar *fname, const guchar *root)
|
||||||
|
{
|
||||||
xmlDocPtr doc;
|
xmlDocPtr doc;
|
||||||
xmlNodePtr field;
|
xmlNodePtr field;
|
||||||
GstXML *xml;
|
GstXML *xml;
|
||||||
@ -106,19 +108,42 @@ GstXML *gst_xml_new(const guchar *fname, const guchar *root) {
|
|||||||
xml = GST_XML(gtk_type_new(GST_TYPE_XML));
|
xml = GST_XML(gtk_type_new(GST_TYPE_XML));
|
||||||
|
|
||||||
xml->elements = g_hash_table_new(g_str_hash, g_str_equal);
|
xml->elements = g_hash_table_new(g_str_hash, g_str_equal);
|
||||||
|
xml->topelements = NULL;
|
||||||
|
|
||||||
field = doc->root->childs;
|
field = doc->root->childs;
|
||||||
|
|
||||||
while (field) {
|
while (field) {
|
||||||
if (!strcmp(field->name, "element")) {
|
if (!strcmp(field->name, "element")) {
|
||||||
gst_element_load_thyself(field, xml->elements);
|
GstElement *element;
|
||||||
|
|
||||||
|
element = gst_element_load_thyself(field, xml->elements);
|
||||||
|
|
||||||
|
xml->topelements = g_list_prepend (xml->topelements, element);
|
||||||
}
|
}
|
||||||
field = field->next;
|
field = field->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xml->topelements = g_list_reverse (xml->topelements);
|
||||||
|
|
||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gst_xml_get_topelements:
|
||||||
|
* @xml: The GstXML to get the elements from
|
||||||
|
*
|
||||||
|
* retrive a list of toplevel elements
|
||||||
|
*
|
||||||
|
* Returns: a GList of elements
|
||||||
|
*/
|
||||||
|
GList*
|
||||||
|
gst_xml_get_topelements (GstXML *xml)
|
||||||
|
{
|
||||||
|
g_return_val_if_fail (xml != NULL, NULL);
|
||||||
|
|
||||||
|
return xml->topelements;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gst_xml_get_element:
|
* gst_xml_get_element:
|
||||||
* @xml: The GstXML to get the element from
|
* @xml: The GstXML to get the element from
|
||||||
@ -130,7 +155,9 @@ GstXML *gst_xml_new(const guchar *fname, const guchar *root) {
|
|||||||
*
|
*
|
||||||
* Returns: a pointer to a new GstElement
|
* Returns: a pointer to a new GstElement
|
||||||
*/
|
*/
|
||||||
GstElement *gst_xml_get_element(GstXML *xml, const guchar *name) {
|
GstElement*
|
||||||
|
gst_xml_get_element (GstXML *xml, const guchar *name)
|
||||||
|
{
|
||||||
GstElement *element;
|
GstElement *element;
|
||||||
|
|
||||||
g_return_val_if_fail(xml != NULL, NULL);
|
g_return_val_if_fail(xml != NULL, NULL);
|
||||||
|
@ -46,6 +46,7 @@ struct _GstXML {
|
|||||||
GtkObject object;
|
GtkObject object;
|
||||||
|
|
||||||
GHashTable *elements;
|
GHashTable *elements;
|
||||||
|
GList *topelements;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstXMLClass {
|
struct _GstXMLClass {
|
||||||
@ -61,6 +62,7 @@ xmlDocPtr gst_xml_write (GstElement *element);
|
|||||||
GstXML* gst_xml_new (const guchar *fname, const guchar *root);
|
GstXML* gst_xml_new (const guchar *fname, const guchar *root);
|
||||||
|
|
||||||
GstElement* gst_xml_get_element (GstXML *xml, const guchar *name);
|
GstElement* gst_xml_get_element (GstXML *xml, const guchar *name);
|
||||||
|
GList* gst_xml_get_topelements (GstXML *xml);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,35 @@ dump_factories (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_factory (gchar *name)
|
||||||
|
{
|
||||||
|
GstElementFactory *factory;
|
||||||
|
|
||||||
|
factory = gst_elementfactory_find (name);
|
||||||
|
|
||||||
|
if (factory) {
|
||||||
|
GList *padtemplates = factory->padtemplates;
|
||||||
|
xmlDocPtr doc;
|
||||||
|
|
||||||
|
doc = xmlNewDoc ("1.0");
|
||||||
|
doc->root = xmlNewDocNode (doc, NULL, "templates", NULL);
|
||||||
|
|
||||||
|
while (padtemplates) {
|
||||||
|
xmlNodePtr parent;
|
||||||
|
GstPadTemplate *template = (GstPadTemplate *) padtemplates->data;
|
||||||
|
|
||||||
|
parent = xmlNewChild (doc->root, NULL, "template", NULL);
|
||||||
|
|
||||||
|
gst_padtemplate_save_thyself (template, parent);
|
||||||
|
|
||||||
|
padtemplates = g_list_next (padtemplates);
|
||||||
|
}
|
||||||
|
|
||||||
|
xmlDocDump(stdout, doc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_types (void)
|
dump_types (void)
|
||||||
{
|
{
|
||||||
@ -117,4 +146,7 @@ int main(int argc,char *argv[])
|
|||||||
dump_types ();
|
dump_types ();
|
||||||
|
|
||||||
gst_type_dump ();
|
gst_type_dump ();
|
||||||
|
|
||||||
|
dump_factory ("lame");
|
||||||
|
dump_factory ("mpeg_play");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user