testsuite/interface.py (Availability.testXOverlay): Extend to test method calling...
authorJohan Dahlin <johan@gnome.org>
Mon, 24 May 2004 10:30:05 +0000 (10:30 +0000)
committerJohan Dahlin <johan@gnome.org>
Mon, 24 May 2004 10:30:05 +0000 (10:30 +0000)
Original commit message from CVS:
* testsuite/interface.py (Availability.testXOverlay): Extend to
test method calling on interfaces

* testsuite/common.py: call pygtk.require first

* gst/gstbin.override (_wrap_gst_bin_get_by_name): Add a
keyword argument recurse and remove
_wrap_gst_bin_get_by_name_recurse_up.

* gst/gst.override (_wrap_gst_element_get_pad_list): Split out bin
functions to ...

* gst/gstbin.override: .. this file

* gst/gst.defs (bin_new): allow NULL for first argument.
(child_state_change): Remove, it's private.

ChangeLog
gst/gst.defs
gst/gst.override
gst/gstbin.override [new file with mode: 0644]
testsuite/common.py
testsuite/interface.py
testsuite/test_interface.py

index faff3ac..6890ffd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2004-05-24  Johan Dahlin  <johan@gnome.org>
+
+       * testsuite/interface.py (Availability.testXOverlay): Extend to
+       test method calling on interfaces
+
+       * testsuite/common.py: call pygtk.require first
+
+       * gst/gstbin.override (_wrap_gst_bin_get_by_name): Add a 
+       keyword argument recurse and remove
+       _wrap_gst_bin_get_by_name_recurse_up. 
+
+       * gst/gst.override (_wrap_gst_element_get_pad_list): Split out bin
+       functions to ...
+
+       * gst/gstbin.override: .. this file
+
+       * gst/gst.defs (bin_new): allow NULL for first argument.
+       (child_state_change): Remove, it's private.
+
 2004-05-04  Johan Dahlin  <johan@gnome.org>
 
        * gst/gst-types.defs (Buffer): Add some fields
index ecc48aa..a7bd0a1 100644 (file)
@@ -70,7 +70,7 @@
   (is-constructor-of "GstBin")
   (return-type "GstElement*")
   (parameters
-    '("const-gchar*" "name")
+    '("const-gchar*" "name" (null-ok) (default "NULL"))
   )
 )
 
   (return-type "GstElementStateReturn")
 )
 
-(define-method child_state_change
-  (of-object "GstBin")
-  (c-name "gst_bin_child_state_change")
-  (return-type "none")
-  (parameters
-    '("GstElementState" "oldstate")
-    '("GstElementState" "newstate")
-    '("GstElement*" "child")
-  )
-)
-
 (define-method set_pre_iterate_function
   (of-object "GstBin")
   (c-name "gst_bin_set_pre_iterate_function")
index 87ceb11..00a152d 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- Mode: C; ; c-file-style: "python" -*- */
-/* gst-python
+so/* gst-python
  * Copyright (C) 2002 David I. Lehn
  * Copyright (C) 2004 Johan Dahlin
  *
@@ -39,6 +39,7 @@ static PyObject *_wrap_gst_element_factory_make(PyObject *self, PyObject *args,
 
 %%
 include
+  gstbin.override
   gstbuffer.override
   gstpad-handlers.override
 %%
@@ -95,38 +96,6 @@ ignore
   gst_tag_list_copy_value
   gst_trace_read_tsc
 %%
-override gst_bin_iterate
-static PyObject *
-_wrap_gst_bin_iterate(PyGObject *self)
-{
-       int ret;
-
-       pyg_unblock_threads();
-       ret = gst_bin_iterate(GST_BIN(self->obj));
-       pyg_block_threads();
-       return PyInt_FromLong(ret);
-}
-%%
-override gst_bin_get_list
-static PyObject *
-_wrap_gst_bin_get_list(PyGObject *self)
-{
-       GList *elements, *l;
-       PyObject *tuple;
-       int i;
-       
-       elements = (GList*)gst_bin_get_list(GST_BIN(self->obj));
-       tuple = PyTuple_New(g_list_length(elements));
-       for (i = 0, l = elements; l; l = l->next, i++) {
-               GstElement *element = (GstElement*)l->data;
-               if (!element)
-                       continue;
-               PyTuple_SetItem(tuple, i, pygobject_new(G_OBJECT(element)));
-       }
-               
-       return tuple;
-}
-%%
 override gst_element_get_pad_list noargs
 static PyObject *
 _wrap_gst_element_get_pad_list(PyGObject *self)
@@ -268,70 +237,6 @@ _wrap_gst_element_convert(PyGObject *self, PyObject *args, PyObject *kwargs)
        return Py_BuildValue("(bL)", ret, dest_value);
 }
 %%
-override gst_bin_add_many args
-static PyObject *
-_wrap_gst_bin_add_many(PyGObject *self, PyObject *args)
-{
-       PyGObject *element;
-       int i, len;
-
-       len = PyTuple_Size(args);
-       if (len == 0) {
-               PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument");
-               return NULL;
-       }
-       
-    
-       for (i = 0; i < len; i++) {
-               element = (PyGObject*)PyTuple_GetItem(args, i);
-               if (!pygobject_check(element, &PyGstElement_Type))
-               {
-                       PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
-                       return NULL;
-               }
-       }
-       
-       for (i = 0; i < len; i++) {
-               element = (PyGObject*)PyTuple_GetItem(args, i);
-               gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj));
-       }
-
-       Py_INCREF(Py_None);
-       return Py_None;
-}
-%%
-override gst_bin_remove_many args
-static PyObject *
-_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args)
-{
-       PyGObject *element;
-       int i, len;
-
-       len = PyTuple_Size(args);
-       if (len == 0) {
-               PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument");
-               return NULL;
-       }
-       
-    
-       for (i = 0; i < len; i++) {
-               element = (PyGObject*)PyTuple_GetItem(args, i);
-               if (!pygobject_check(element, &PyGstElement_Type))
-               {
-                       PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
-                       return NULL;
-               }
-       }
-       
-       for (i = 0; i < len; i++) {
-               element = (PyGObject*)PyTuple_GetItem(args, i);
-               gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj));
-       }
-
-       Py_INCREF(Py_None);
-       return Py_None;
-}
-%%
 override gst_element_link_many args
 static PyObject *
 _wrap_gst_element_link_many(PyObject *self, PyObject *args)
diff --git a/gst/gstbin.override b/gst/gstbin.override
new file mode 100644 (file)
index 0000000..cc445d6
--- /dev/null
@@ -0,0 +1,143 @@
+/* -*- Mode: C; ; c-file-style: "python" -*- */
+/* gst-python
+ * Copyright (C) 2004 Johan Dahlin
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ * 
+ * Author: Johan Dahlin <johan@gnome.org>
+ */
+
+%%
+ignore
+  gst_bin_get_by_name_recurse_up
+%%
+override gst_bin_add_many args
+static PyObject *
+_wrap_gst_bin_add_many(PyGObject *self, PyObject *args)
+{
+       PyGObject *element;
+       int i, len;
+
+       len = PyTuple_Size(args);
+       if (len == 0) {
+               PyErr_SetString(PyExc_TypeError, "GstBin.add_many requires at least one argument");
+               return NULL;
+       }
+       
+    
+       for (i = 0; i < len; i++) {
+               element = (PyGObject*)PyTuple_GetItem(args, i);
+               if (!pygobject_check(element, &PyGstElement_Type))
+               {
+                       PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
+                       return NULL;
+               }
+       }
+       
+       for (i = 0; i < len; i++) {
+               element = (PyGObject*)PyTuple_GetItem(args, i);
+               gst_bin_add(GST_BIN(self->obj), GST_ELEMENT(element->obj));
+       }
+
+       Py_INCREF(Py_None);
+       return Py_None;
+}
+%%
+override gst_bin_remove_many args
+static PyObject *
+_wrap_gst_bin_remove_many(PyGObject *self, PyObject *args)
+{
+       PyGObject *element;
+       int i, len;
+
+       len = PyTuple_Size(args);
+       if (len == 0) {
+               PyErr_SetString(PyExc_TypeError, "GstBin.remove_many requires at least one argument");
+               return NULL;
+       }
+       
+    
+       for (i = 0; i < len; i++) {
+               element = (PyGObject*)PyTuple_GetItem(args, i);
+               if (!pygobject_check(element, &PyGstElement_Type))
+               {
+                       PyErr_SetString(PyExc_TypeError, "argument must be a GstElement");
+                       return NULL;
+               }
+       }
+       
+       for (i = 0; i < len; i++) {
+               element = (PyGObject*)PyTuple_GetItem(args, i);
+               gst_bin_remove(GST_BIN(self->obj), GST_ELEMENT(element->obj));
+       }
+
+       Py_INCREF(Py_None);
+       return Py_None;
+}
+%%
+override gst_bin_iterate noargs
+static PyObject *
+_wrap_gst_bin_iterate(PyGObject *self)
+{
+       int ret;
+
+       pyg_unblock_threads();
+       ret = gst_bin_iterate(GST_BIN(self->obj));
+       pyg_block_threads();
+       return PyInt_FromLong(ret);
+}
+%%
+override gst_bin_get_list noargs
+static PyObject *
+_wrap_gst_bin_get_list(PyGObject *self)
+{
+       GList *elements, *l;
+       PyObject *tuple;
+       int i;
+       
+       elements = (GList*)gst_bin_get_list(GST_BIN(self->obj));
+       tuple = PyTuple_New(g_list_length(elements));
+       for (i = 0, l = elements; l; l = l->next, i++) {
+               GstElement *element = (GstElement*)l->data;
+               if (!element)
+                       continue;
+               PyTuple_SetItem(tuple, i, pygobject_new(G_OBJECT(element)));
+       }
+               
+       return tuple;
+}
+%%
+override gst_bin_get_by_name kwargs
+static PyObject *
+_wrap_gst_bin_get_by_name(PyGObject *self, PyObject *args, PyObject *kwargs)
+{
+    static char *kwlist[] = { "name", "recurse", NULL };
+    char *name;
+    gboolean recurse = FALSE;
+    GstElement *ret;
+
+    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s|b:GstBin.get_by_name",
+                                    kwlist, &name, &recurse))
+        return NULL;
+    
+    if (recurse)
+           ret = gst_bin_get_by_name_recurse_up(GST_BIN(self->obj), name);
+    else
+           ret = gst_bin_get_by_name(GST_BIN(self->obj), name);
+    
+    /* pygobject_new handles NULL checking */
+    return pygobject_new((GObject *)ret);
+}
index 16cc644..4c53781 100644 (file)
@@ -3,6 +3,11 @@ import os
 import sys
 import unittest
 
+import pygtk
+pygtk.require('2.0')
+
+import gobject
+
 # Don't insert before .
 sys.path.insert(1, os.path.join('..'))
 
index 41424d6..00093b8 100644 (file)
@@ -16,5 +16,13 @@ class Availability(unittest.TestCase):
         assert hasattr(interfaces, 'Mixer')
         assert issubclass(interfaces.Mixer, gobject.GInterface)
 
+if getattr(gobject, 'pygtk_version', ()) >= (2,3,92):
+    class FunctionCall(unittest.TestCase):
+        def testXOverlay(self):
+            element = gst.Element('xvimagesink')
+            assert isinstance(element, gst.Element)
+            assert isinstance(element, interfaces.XOverlay)
+            element.set_xwindow_id(0L)
+        
 if __name__ == "__main__":
     unittest.main()
index 41424d6..00093b8 100644 (file)
@@ -16,5 +16,13 @@ class Availability(unittest.TestCase):
         assert hasattr(interfaces, 'Mixer')
         assert issubclass(interfaces.Mixer, gobject.GInterface)
 
+if getattr(gobject, 'pygtk_version', ()) >= (2,3,92):
+    class FunctionCall(unittest.TestCase):
+        def testXOverlay(self):
+            element = gst.Element('xvimagesink')
+            assert isinstance(element, gst.Element)
+            assert isinstance(element, interfaces.XOverlay)
+            element.set_xwindow_id(0L)
+        
 if __name__ == "__main__":
     unittest.main()