Changeset 546
- Timestamp:
- 07/29/08 15:44:50 (4 months ago)
- Files:
-
- trunk/src/gtk/TreeModel.d (modified) (6 diffs)
- trunk/src/gtkc/gobjecttypes.d (modified) (1 diff)
- trunk/src/gtkc/gtk.d (modified) (1 diff)
- trunk/wrap/APILookupGtk.txt (modified) (3 diffs)
- trunk/wrap/utils/GtkDClass.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/gtk/TreeModel.d
r541 r546 29 29 * realStrct= 30 30 * ctorStrct= 31 * clss = TreeModel31 * clss = 32 32 * interf = 33 33 * class Code: Yes 34 34 * interface Code: No 35 35 * template for: 36 * extend = ObjectG36 * extend = 37 37 * implements: 38 * - TreeModelIF39 38 * prefixes: 40 39 * omit structs: … … 43 42 * omit signals: 44 43 * imports: 44 * - glib.Str 45 * - gobject.Type 45 46 * - gobject.ObjectG 46 * - glib.Str 47 * - gobject.Signals 48 * - gobject.Value 47 49 * - gtk.TreeIter 48 50 * - gtk.TreePath 49 * - gobject.Value50 51 * - gtk.TreeModelT 51 52 * - gtk.TreeModelIF 52 * - gobject.Signals 53 * - gtkc.gobject 54 * - gtkc.Loader 55 * - gtkc.paths 53 56 * structWrap: 54 57 * module aliases: … … 65 68 66 69 70 private import glib.Str; 71 private import gobject.Type; 67 72 private import gobject.ObjectG; 68 private import glib.Str; 73 private import gobject.Signals; 74 private import gobject.Value; 69 75 private import gtk.TreeIter; 70 76 private import gtk.TreePath; 71 private import gobject.Value;72 77 private import gtk.TreeModelT; 73 78 private import gtk.TreeModelIF; 74 private import gobject.Signals; 75 76 77 79 private import gtkc.gobject; 80 private import gtkc.Loader; 81 private import gtkc.paths; 82 83 84 85 86 struct CustomTreeModelClass 87 { 88 // Padding, not perssent in the GtkD structs. 89 GType g_type; 90 GSList* construct_properties; 91 92 GObjectClass parentClass; 93 94 // padding 95 gpointer dummy[7]; 96 } 97 98 //We need this function for the interface implementation. 99 extern(C) GType function()gtk_tree_model_get_type; 100 101 private Symbol[] links = [{ "gtk_tree_model_get_type", cast(void**)>k_tree_model_get_type}]; 78 102 79 103 /** … … 81 105 public class TreeModel : ObjectG, TreeModelIF 82 106 { 107 static GObjectClass* parentClass = null; 108 109 static this() 110 { 111 Linker linker; 112 113 linker = new Linker(libPath ~ importLibs[LIBRARY.GTK] ); 114 linker.link(links); 115 } 83 116 84 117 // Minimal implementation. … … 89 122 { 90 123 return cast(void*)gtkTreeModel; 124 } 125 126 public this () 127 { 128 auto p = super(customTreeModelgetType(), null); 129 gtkTreeModel = cast(GtkTreeModel*) p.getObjectGStruct(); 130 131 objectGSetDataFull("customTreeModel", cast(void*)this); 91 132 } 92 133 … … 102 143 } 103 144 145 //Check if there already is a D object for this gtk struct 146 void* ptr = g_object_get_data(cast(GObject*) gtkTreeModel, Str.toStringz("customTreeModel")); 147 if( ptr !is null ) 148 { 149 this = cast(TreeModel)ptr; 150 return; 151 } 152 104 153 super(cast(GObject*)gtkTreeModel); 105 154 this.gtkTreeModel = gtkTreeModel; 106 155 } 107 156 108 /** 109 */ 157 158 extern(C) 159 { 160 /* 161 * here we register our new type and its interfaces 162 * with the type system. If you want to implement 163 * additional interfaces like GtkTreeSortable, you 164 * will need to do it here. 165 */ 166 167 static GType customTreeModelgetType() 168 { 169 GType customTreeModelType = GType.INVALID; 170 171 /* Some boilerplate type registration stuff */ 172 if (customTreeModelType == GType.INVALID) 173 { 174 GTypeInfo customTreeModelInfo = 175 { 176 CustomTreeModelClass.sizeof, /* class size */ 177 null, /* base_init */ 178 null, /* base_finalize */ 179 cast(GClassInitFunc) &customTreeModelClassInit,/* class init function */ 180 null, /* class finalize */ 181 null, /* class_data */ 182 CustomTreeModelClass.sizeof + 1, /* instance size */ 183 0, /* n_preallocs */ 184 cast(GInstanceInitFunc) &customTreeModelInit /* instance init */ 185 }; 186 GInterfaceInfo treeModelInfo = 187 { 188 cast(GInterfaceInitFunc) &customTreeModelInit, 189 null, 190 null 191 }; 192 193 /* First register the new derived type with the GObject type system */ 194 customTreeModelType = Type.registerStatic (GType.OBJECT, "CustomTreeModel", 195 &customTreeModelInfo, cast(GTypeFlags)0); 196 197 /* Now register our GtkTreeModel interface with the type system */ 198 Type.addInterfaceStatic (customTreeModelType, gtk_tree_model_get_type() /*GTK_TYPE_TREE_MODEL*/, &treeModelInfo); 199 } 200 201 return customTreeModelType; 202 } 203 204 /* 205 * boilerplate GObject/GType stuff. 206 * Init callback for the type system, 207 * called once when our new class is created. 208 */ 209 210 static void customTreeModelClassInit (void* klass) 211 { 212 GObjectClass* objectClass; 213 214 parentClass = cast(GObjectClass*) Type.classPeekParent(klass); 215 objectClass = cast(GObjectClass*) klass; 216 217 objectClass.finalize = &customTreeModelFinalize; 218 } 219 220 /* 221 * init callback for the interface registration 222 * in customTreeModelGetType. Here we override 223 * the GtkTreeModel interface functions that 224 * we implement. 225 */ 226 227 static void customTreeModelInit (GtkTreeModelIface *iface) 228 { 229 iface.getFlags = &customTreeModelGetFlags; 230 iface.getNColumns = &customTreeModelGetNColumns; 231 iface.getColumnType = &customTreeModelGetColumnType; 232 iface.getIter = &customTreeModelGetIter; 233 iface.getPath = &customTreeModelGetPath; 234 iface.getValue = &customTreeModelGetValue; 235 iface.iterNext = &customTreeModelIterNext; 236 iface.iterChildren = &customTreeModelIterChildren; 237 iface.iterHasChild = &customTreeModelIterHasChild; 238 iface.iterNChildren = &customTreeModelIterNChildren; 239 iface.iterNthChild = &customTreeModelIterNthChild; 240 iface.iterParent = &customTreeModelIterParent; 241 } 242 243 /* 244 * this is called just before a custom list is 245 * destroyed. Free dynamically allocated memory here. 246 */ 247 248 static void customTreeModelFinalize (GObject *object) 249 { 250 /* must chain up - finalize parent */ 251 parentClass.finalize(object); 252 } 253 254 static GtkTreeModelFlags customTreeModelGetFlags(GtkTreeModel *tree_model) 255 { 256 auto tm = new TreeModel(tree_model); 257 258 return tm.getFlags(); 259 } 260 261 static int customTreeModelGetNColumns(GtkTreeModel *tree_model) 262 { 263 auto tm = new TreeModel(tree_model); 264 265 return tm.getNColumns(); 266 } 267 268 static GType customTreeModelGetColumnType(GtkTreeModel *tree_model, int index) 269 { 270 auto tm = new TreeModel(tree_model); 271 272 return tm.getColumnType(index); 273 } 274 275 static gboolean customTreeModelGetIter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path) 276 { 277 auto tm = new TreeModel(tree_model); 278 279 return tm.getIter(new TreeIter(iter), new TreePath(path)); 280 } 281 282 static GtkTreePath* customTreeModelGetPath(GtkTreeModel *tree_model, GtkTreeIter *iter) 283 { 284 auto tm = new TreeModel(tree_model); 285 TreePath path = tm.getPath(new TreeIter(iter)); 286 287 return (path is null) ? null : path.getTreePathStruct(); 288 } 289 290 static void customTreeModelGetValue(GtkTreeModel *tree_model, GtkTreeIter *iter, int column, GValue *value) 291 { 292 auto tm = new TreeModel(tree_model); 293 294 tm.getValue(new TreeIter(iter), column, new Value(value)); 295 } 296 297 static gboolean customTreeModelIterNext(GtkTreeModel *tree_model, GtkTreeIter *iter) 298 { 299 auto tm = new TreeModel(tree_model); 300 301 return tm.iterNext(new TreeIter(iter)); 302 } 303 304 static gboolean customTreeModelIterChildren(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent) 305 { 306 auto tm = new TreeModel(tree_model); 307 308 return tm.iterChildren(new TreeIter(iter), new TreeIter(parent)); 309 } 310 311 static gboolean customTreeModelIterHasChild(GtkTreeModel *tree_model, GtkTreeIter *iter) 312 { 313 auto tm = new TreeModel(tree_model); 314 315 return tm.iterHasChild(new TreeIter(iter)); 316 } 317 318 static int customTreeModelIterNChildren(GtkTreeModel *tree_model, GtkTreeIter *iter) 319 { 320 auto tm = new TreeModel(tree_model); 321 322 return tm.iterNChildren(new TreeIter(iter)); 323 } 324 325 static gboolean customTreeModelIterNthChild(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, int n) 326 { 327 auto tm = new TreeModel(tree_model); 328 329 return tm.iterNthChild(new TreeIter(iter), new TreeIter(parent), n); 330 } 331 332 static gboolean customTreeModelIterParent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child) 333 { 334 auto tm = new TreeModel(tree_model); 335 336 return tm.iterParent(new TreeIter(iter), new TreeIter(child)); 337 } 338 } 110 339 } 340 341 /** 342 */ 343 trunk/src/gtkc/gobjecttypes.d
r543 r546 233 233 * An opaque structure used as the base of all interface types. 234 234 */ 235 public struct GTypeInterface{} 235 public struct GTypeInterface 236 { 237 GType gType; /* iface type */ 238 GType gInstanceType; 239 } 236 240 237 241 trunk/src/gtkc/gtk.d
r525 r546 1417 1417 1418 1418 1419 // gtk. TreeModel1419 // gtk. 1420 1420 1421 1421 trunk/wrap/APILookupGtk.txt
r541 r546 2834 2834 2835 2835 2836 2836 2837 file: 2837 class: TreeModel 2838 extend: ObjectG 2839 implements: TreeModelIF 2838 import: glib.Str 2839 import: gobject.Type 2840 2840 import: gobject.ObjectG 2841 2842 # imports for TreeModel Interface 2843 import: glib.Str 2841 import: gobject.Signals 2842 import: gobject.Value 2844 2843 import: gtk.TreeIter 2845 2844 import: gtk.TreePath 2846 import: gobject.Value2847 2845 import: gtk.TreeModelT 2848 2846 import: gtk.TreeModelIF 2849 import: gobject.Signals 2847 import: gtkc.gobject 2848 import: gtkc.Loader 2849 import: gtkc.paths 2850 2850 2851 2851 code: start 2852 struct CustomTreeModelClass 2853 { 2854 // Padding, not perssent in the GtkD structs. 2855 GType g_type; 2856 GSList* construct_properties; 2857 2858 GObjectClass parentClass; 2859 2860 // padding 2861 gpointer dummy[7]; 2862 } 2863 2864 //We need this function for the interface implementation. 2865 extern(C) GType function()gtk_tree_model_get_type; 2866 2867 private Symbol[] links = [{ "gtk_tree_model_get_type", cast(void**)>k_tree_model_get_type}]; 2868 2869 /** 2870 */ 2871 public class TreeModel : ObjectG, TreeModelIF 2872 { 2873 static GObjectClass* parentClass = null; 2874 2875 static this() 2876 { 2877 Linker linker; 2878 2879 linker = new Linker(libPath ~ importLibs[LIBRARY.GTK] ); 2880 linker.link(links); 2881 } 2882 2852 2883 // Minimal implementation. 2853 2884 mixin TreeModelT!(GtkTreeModel); 2854 2885 2855 2886 /** the main Gtk struct as a void* */ 2856 2887 protected override void* getStruct() … … 2858 2889 return cast(void*)gtkTreeModel; 2859 2890 } 2891 2892 public this () 2893 { 2894 auto p = super(customTreeModelgetType(), null); 2895 gtkTreeModel = cast(GtkTreeModel*) p.getObjectGStruct(); 2896 2897 objectGSetDataFull("customTreeModel", cast(void*)this); 2898 } 2860 2899 2861 2900 /** … … 2870 2909 } 2871 2910 2911 //Check if there already is a D object for this gtk struct 2912 void* ptr = g_object_get_data(cast(GObject*) gtkTreeModel, Str.toStringz("customTreeModel")); 2913 if( ptr !is null ) 2914 { 2915 this = cast(TreeModel)ptr; 2916 return; 2917 } 2918 2872 2919 super(cast(GObject*)gtkTreeModel); 2873 2920 this.gtkTreeModel = gtkTreeModel; 2874 2921 } 2922 2923 2924 extern(C) 2925 { 2926 /* 2927 * here we register our new type and its interfaces 2928 * with the type system. If you want to implement 2929 * additional interfaces like GtkTreeSortable, you 2930 * will need to do it here. 2931 */ 2932 2933 static GType customTreeModelgetType() 2934 { 2935 GType customTreeModelType = GType.INVALID; 2936 2937 /* Some boilerplate type registration stuff */ 2938 if (customTreeModelType == GType.INVALID) 2939 { 2940 GTypeInfo customTreeModelInfo = 2941 { 2942 CustomTreeModelClass.sizeof, /* class size */ 2943 null, /* base_init */ 2944 null, /* base_finalize */ 2945 cast(GClassInitFunc) &customTreeModelClassInit,/* class init function */ 2946 null, /* class finalize */ 2947 null, /* class_data */ 2948 CustomTreeModelClass.sizeof + 1, /* instance size */ 2949 0, /* n_preallocs */ 2950 cast(GInstanceInitFunc) &customTreeModelInit /* instance init */ 2951 }; 2952 GInterfaceInfo treeModelInfo = 2953 { 2954 cast(GInterfaceInitFunc) &customTreeModelInit, 2955 null, 2956 null 2957 }; 2958 2959 /* First register the new derived type with the GObject type system */ 2960 customTreeModelType = Type.registerStatic (GType.OBJECT, "CustomTreeModel", 2961 &customTreeModelInfo, cast(GTypeFlags)0); 2962 2963 /* Now register our GtkTreeModel interface with the type system */ 2964 Type.addInterfaceStatic (customTreeModelType, gtk_tree_model_get_type() /*GTK_TYPE_TREE_MODEL*/, &treeModelInfo); 2965 } 2966 2967 return customTreeModelType; 2968 } 2969 2970 /* 2971 * boilerplate GObject/GType stuff. 2972 * Init callback for the type system, 2973 * called once when our new class is created. 2974 */ 2975 2976 static void customTreeModelClassInit (void* klass) 2977 { 2978 GObjectClass* objectClass; 2979 2980 parentClass = cast(GObjectClass*) Type.classPeekParent(klass); 2981 objectClass = cast(GObjectClass*) klass; 2982 2983 objectClass.finalize = &customTreeModelFinalize; 2984 } 2985 2986 /* 2987 * init callback for the interface registration 2988 * in customTreeModelGetType. Here we override 2989 * the GtkTreeModel interface functions that 2990 * we implement. 2991 */ 2992 2993 static void customTreeModelInit (GtkTreeModelIface *iface) 2994 { 2995 iface.getFlags = &customTreeModelGetFlags; 2996 iface.getNColumns = &customTreeModelGetNColumns; 2997 iface.getColumnType = &customTreeModelGetColumnType; 2998 iface.getIter = &customTreeModelGetIter; 2999 iface.getPath = &customTreeModelGetPath; 3000 iface.getValue = &customTreeModelGetValue; 3001 iface.iterNext = &customTreeModelIterNext; 3002 iface.iterChildren = &customTreeModelIterChildren; 3003 iface.iterHasChild = &customTreeModelIterHasChild; 3004 iface.iterNChildren = &customTreeModelIterNChildren; 3005 iface.iterNthChild = &customTreeModelIterNthChild; 3006 iface.iterParent = &customTreeModelIterParent; 3007 } 3008 3009 /* 3010 * this is called just before a custom list is 3011 * destroyed. Free dynamically allocated memory here. 3012 */ 3013 3014 static void customTreeModelFinalize (GObject *object) 3015 { 3016 /* must chain up - finalize parent */ 3017 parentClass.finalize(object); 3018 } 3019 3020 static GtkTreeModelFlags customTreeModelGetFlags(GtkTreeModel *tree_model) 3021 { 3022 auto tm = new TreeModel(tree_model); 3023 3024 return tm.getFlags(); 3025 } 3026 3027 static int customTreeModelGetNColumns(GtkTreeModel *tree_model) 3028 { 3029 auto tm = new TreeModel(tree_model); 3030 3031 return tm.getNColumns(); 3032 } 3033 3034 static GType customTreeModelGetColumnType(GtkTreeModel *tree_model, int index) 3035 { 3036 auto tm = new TreeModel(tree_model); 3037 3038 return tm.getColumnType(index); 3039 } 3040 3041 static gboolean customTreeModelGetIter(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreePath *path) 3042 { 3043 auto tm = new TreeModel(tree_model); 3044 3045 return tm.getIter(new TreeIter(iter), new TreePath(path)); 3046 } 3047 3048 static GtkTreePath* customTreeModelGetPath(GtkTreeModel *tree_model, GtkTreeIter *iter) 3049 { 3050 auto tm = new TreeModel(tree_model); 3051 TreePath path = tm.getPath(new TreeIter(iter)); 3052 3053 return (path is null) ? null : path.getTreePathStruct(); 3054 } 3055 3056 static void customTreeModelGetValue(GtkTreeModel *tree_model, GtkTreeIter *iter, int column, GValue *value) 3057 { 3058 auto tm = new TreeModel(tree_model); 3059 3060 tm.getValue(new TreeIter(iter), column, new Value(value)); 3061 } 3062 3063 static gboolean customTreeModelIterNext(GtkTreeModel *tree_model, GtkTreeIter *iter) 3064 { 3065 auto tm = new TreeModel(tree_model); 3066 3067 return tm.iterNext(new TreeIter(iter)); 3068 } 3069 3070 static gboolean customTreeModelIterChildren(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent) 3071 { 3072 auto tm = new TreeModel(tree_model); 3073 3074 return tm.iterChildren(new TreeIter(iter), new TreeIter(parent)); 3075 } 3076 3077 static gboolean customTreeModelIterHasChild(GtkTreeModel *tree_model, GtkTreeIter *iter) 3078 { 3079 auto tm = new TreeModel(tree_model); 3080 3081 return tm.iterHasChild(new TreeIter(iter)); 3082 } 3083 3084 static int customTreeModelIterNChildren(GtkTreeModel *tree_model, GtkTreeIter *iter) 3085 { 3086 auto tm = new TreeModel(tree_model); 3087 3088 return tm.iterNChildren(new TreeIter(iter)); 3089 } 3090 3091 static gboolean customTreeModelIterNthChild(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *parent, int n) 3092 { 3093 auto tm = new TreeModel(tree_model); 3094 3095 return tm.iterNthChild(new TreeIter(iter), new TreeIter(parent), n); 3096 } 3097 3098 static gboolean customTreeModelIterParent(GtkTreeModel *tree_model, GtkTreeIter *iter, GtkTreeIter *child) 3099 { 3100 auto tm = new TreeModel(tree_model); 3101 3102 return tm.iterParent(new TreeIter(iter), new TreeIter(child)); 3103 } 3104 } 3105 } 2875 3106 code: end 2876 3107 outFile: TreeModel 3108 2877 3109 2878 3110 trunk/wrap/utils/GtkDClass.d
r543 r546 1737 1737 getStructInternals(structDef, convParms); 1738 1738 collectedStructs ~= "\n}"; 1739 } 1740 else if ( structName == "GTypeInterface") 1741 { 1742 //Special case to get custom treemodels working. 1743 collectedStructs ~= "public struct GTypeInterface"; 1744 collectedStructs ~= "{"; 1745 collectedStructs ~= "\tGType gType; /* iface type */"; 1746 collectedStructs ~= "\tGType gInstanceType;"; 1747 collectedStructs ~= "}"; 1739 1748 } 1740 1749 else
