[turbine] Add support for creating abstract types



commit 5287f59670fb207b1fbb14fa03bcfcf408548cc4
Author: Thomas Wood <thos gnome org>
Date:   Sun Sep 27 14:31:44 2009 +0100

    Add support for creating abstract types

 src/turbine/__init__.py |   28 ++++++++++++++++++++++------
 src/turbine/turbine.xml |   24 +++++++++++++++++++-----
 2 files changed, 41 insertions(+), 11 deletions(-)
---
diff --git a/src/turbine/__init__.py b/src/turbine/__init__.py
index 1183a79..5b85787 100755
--- a/src/turbine/__init__.py
+++ b/src/turbine/__init__.py
@@ -43,11 +43,23 @@ PACKAGE_COPYRIGHT = "Copyright 2009 Intel Corporation\n" \
 def make_iface_init_func_name (iface):
     return (iface.replace ('_TYPE', '') + '_iface_init').lower()
 
+def make_indent (str):
+    result = ""
+    while (len (str) > len (result)):
+        result += ' '
+    return result
+
 def make_type_definition (data):
     define_type = ''
     define_extra = ''
 
     if (len (data['interfaces']) > 0):
+
+        if (data['abstract']):
+            define_macro = "G_DEFINE_ABSTRACT_TYPE_WITH_CODE";
+        else:
+            define_macro = "G_DEFINE_TYPE_WITH_CODE"
+
         define_extra = "\n"
         for row in data['interfaces']:
             define_type += "static void " + make_iface_init_func_name (row[0]) \
@@ -56,18 +68,22 @@ def make_type_definition (data):
                             + make_iface_init_func_name (row[0]) \
                             + " (" + row[1] + " *iface)\n" \
                             + "{\n\n}\n\n";
-        define_type += "\nG_DEFINE_TYPE_WITH_CODE ("+ data['class_camel'] \
+        define_type += "\n" + define_macro + " ("+ data['class_camel'] \
                        + ", " \
                        + data['class_lower'] + ", " + data['parent'] + ","
         for row in data['interfaces']:
             iface = row[0]
-            define_type = define_type + '\n                         ' + \
-                          "G_IMPLEMENT_INTERFACE (" + iface + ', ' + \
+            define_type = define_type + '\n' + make_indent (define_macro) + \
+                          "  G_IMPLEMENT_INTERFACE (" + iface + ', ' + \
                            make_iface_init_func_name (iface) + ')'
         define_type += ')'
     else:
-      define_type = "G_DEFINE_TYPE ("+ data['class_camel'] + ", " \
-                    + data['class_lower'] + ", " + data['parent'] + ')'
+        if (data['abstract']):
+            define_macro = "G_DEFINE_ABSTRACT_TYPE"
+        else:
+            define_macro = "G_DEFINE_TYPE"
+        define_type = define_macro + " ("+ data['class_camel'] + ", " \
+                      + data['class_lower'] + ", " + data['parent'] + ')'
 
     return (define_type, define_extra)
 
@@ -107,7 +123,7 @@ def make_class_init(data):
 def handle_post(button, ui):
     string_keys = ("class_camel", "class_lower", "package_upper",
                    "object_upper", "parent", "parent_camel");
-    bool_keys = ("props", "finalize", "dispose", "private");
+    bool_keys = ("props", "finalize", "dispose", "private", "abstract");
     data = {}
 
     model = ui.get_object ('interfaces-model')
diff --git a/src/turbine/turbine.xml b/src/turbine/turbine.xml
index 853763a..b4b4767 100644
--- a/src/turbine/turbine.xml
+++ b/src/turbine/turbine.xml
@@ -80,7 +80,7 @@
                     <property name="left_padding">12</property>
                     <child>
                       <object class="GtkTable" id="table1">
-                        <property name="n_rows">4</property>
+                        <property name="n_rows">5</property>
                         <property name="n_columns">2</property>
                         <property name="column_spacing">6</property>
                         <property name="row_spacing">6</property>
@@ -181,6 +181,20 @@
                             <property name="bottom_attach">2</property>
                           </packing>
                         </child>
+                        <child>
+                          <object class="GtkCheckButton" id="abstract">
+                            <property name="label" translatable="yes">Abstract type</property>
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="draw_indicator">True</property>
+                          </object>
+                          <packing>
+                            <property name="right_attach">2</property>
+                            <property name="top_attach">4</property>
+                            <property name="bottom_attach">5</property>
+                          </packing>
+                        </child>
                       </object>
                     </child>
                   </object>
@@ -423,8 +437,8 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkCheckButton" id="props">
-                            <property name="label" translatable="yes">Include GObject property get/set</property>
+                          <object class="GtkCheckButton" id="finalize">
+                            <property name="label" translatable="yes">Include finalize</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
                             <property name="active">True</property>
@@ -435,8 +449,8 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkCheckButton" id="finalize">
-                            <property name="label" translatable="yes">Include finalize</property>
+                          <object class="GtkCheckButton" id="props">
+                            <property name="label" translatable="yes">Include GObject property get/set</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
                             <property name="active">True</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]