]> git.draconx.ca Git - gob-dx.git/blobdiff - doc/gob2.1.in
Release 2.0.13
[gob-dx.git] / doc / gob2.1.in
index 1f11512121a31fedaccd187cff8496b474971525..9a53cffa7f2f62412a5474538a26c41abb294ce4 100644 (file)
@@ -1,6 +1,6 @@
 .\"
 .\" gob manual page
-.\" (C) 1999,2000,2001,2002 George Lebl <jirka@5z.com>
+.\" (C) 1999,2000,2001,2002,2005 George Lebl <jirka@5z.com>
 .\" 
 .\" This manual page is covered by the terms of the GNU General
 .\" Public License.  
@@ -51,6 +51,11 @@ correctly even on non-GNU compilers.  This option is for purists only.
 (using GNU extensions some warnings are eliminated, some ugly hacks and there
 is better argument type safety, so it\'s good to use them)
 .TP
+.B --no-touch
+Don\'t touch output files unless they really
+changed (implies --no-touch-headers).  Be careful with automake, see section
+PREVENTING SPURIOUS BUILDS.
+.TP
 .B --no-touch-headers
 Don\'t touch the generated header file unless it really changed, this avoids
 spurious rebuilds, but can confuse some make systems (automake in particular),
@@ -59,11 +64,11 @@ unchanged however.
 .TP
 .B --always-private-header
 Always create a \fB<basename>-private.h\fR file, even if it would be empty.
-This is the default.
 .TP
 .B --ondemand-private-header
 Create the private header only if it would have something in it, that is,
 if there are some private data members or protected methods.
+This is the default.
 .TP
 .B --no-private-header
 Never create a private header file.  If we use any private data members,
@@ -91,15 +96,22 @@ and SELF_CLASS macros.
 Do not remove the initial underscore from method names.
 .TP
 .B --always-private-struct
-Always include the private pointer in the public header file.  This is useful for
-files which are part of a library and you want to reserve the right to add some
-private data members without breaking binary compatibility.
+Always include the private pointer in the public header file.  This is useful
+for files which are part of a library and you want to reserve the right to add
+some private data members without breaking binary compatibility.
+.TP
+.B -o --output-dir
+The directory into which output should be placed.
+.TP
+.B --file-sep[=c]
+Replace default \`-\' file name separator.  If no separator character
+is given then none is used.  Only one character can be used.
 
 .SH TYPENAMES
 .PP
 Because we need to parse out different parts of the typename, sometimes you
 need to specify the typename with some special syntax.  Types are specified in
-capitalized form and words are separated by \':\'.  The first word of the type
+capitalized form and words are separated by \`:\'.  The first word of the type
 (which can be empty) is the "namespace".  This fact is for example used for the
 type checking macro and the type macro.  For "Gtk:New:Button", the macros will
 be GTK_IS_NEW_BUTTON and GTK_TYPE_NEW_BUTTON.  This colon separated format of
@@ -109,7 +121,8 @@ types.
 .SH OUTPUT FILES
 .PP
 The filenames are created from the typename.  The words are
-separated by \'-\' and all in lower case.  For example for an object named
+separated by \`-\' (this can be changed with
+\fB--file-sep\fR option) and all in lower case.  For example for an object named
 "Gtk:New:Button", the files are \fBgtk-new-button.c\fR and
 \fBgtk-new-button.h\fR.
 If you are using C++ mode, the output .c file will in fact be a .cc file.
@@ -203,10 +216,13 @@ For example:
   }
 
 .fi
+.PP
+To make an abstract class (to pass G_TYPE_FLAG_ABSTRACT) add \'(abstract)\'
+before the curly braces above.  This works since version 2.0.13.
 
 .SH DATA MEMBERS
 .PP
-There are five types of data members.  Three of them are normal data numbers,
+There are five types of data members.  Three of them are normal data members,
 one is class wide (global) in scope and one is a virtual one, usually linked to
 a normal data member or a class wide data member.  The three normal data
 members are public, protected and private.  Public and protected are basically
@@ -436,7 +452,8 @@ There is a STRING type which has only the extra \'default_value\' attribute.
 .PP
 The OBJECT type is one of the types that doesn\'t have a \'default_value\' and it
 only has an \'object_type\' attribute (in addition to nick and blurb of course)
-that is the exact object type that this property accepts.
+that is the exact object type that this property accepts.  The object_type
+should be as a type, that is for example \'Gtk:Button\'.
 .PP
 There is a BOXED type which is a pointer which has a boxed type defined
 (such that GObject knows how to copy and destroy this pointer).  Here
@@ -517,8 +534,23 @@ are defined by using the \'export\' attribute.
 .PP
 To get bettery type safety on some of the property types, you can specify
 the \'type\' attribute which will add casts where appropriate in code dealing
-with this property.  This is especially useful for POINTER types.  But
-even for others.
+with this property.  This is especially useful for POINTER and OBJECT types.
+But even for others.
+.PP
+You can also override properties from parent objects (that is override their
+implementation, not their attributes).  Do this by adding the
+special \'override\' attribute.  For example if the parent object
+had a \'height\' property then you could override it by
+.nf
+
+  private int height;
+  property INT height
+         (override)
+        set { self->_priv->height = g_value_get_int (VAL); }
+        get { g_value_set_int (VAL, self->_priv->height); };
+
+.fi
+Overriding is supported since gob 2.0.10.
 
 .SH METHODS
 .PP
@@ -725,6 +757,11 @@ would do:
 
 .fi
 .PP
+To use BOXED in the signal arguments you need to tell gob which type of boxed
+argument you want to use.  For this you can just add BOXED_GTK_TYPE_STRING
+instead of BOXED.  For example BOXED_GTK_TYPE_TREE_ITER for GtkTreeIter.
+This works since version 2.0.13.
+.PP
 .B "Override methods:"
 .PP
 If you need to override some method (a signal or a virtual method
@@ -808,9 +845,9 @@ your .c file.  These serve the same function as the above, they make it easier
 to type and easier to change typenames around which can help a lot during
 prototyping stage.  However you should note that the Self type should not be
 used in function prototypes as one of the arguments or as a return value type.
-This is because this is a simple C typedef which is only available inside you
-.c file.  You can disable both the self casting macros and the self type
-aliases by passing --no-self-alias to
+This is because this is a simple C typedef which is only available inside your
+\&.c file and not in the header files.  You can disable both the self casting
+macros and the self type aliases by passing --no-self-alias to gob.
 
 .SH DEALING WITH DIFFERENT GOB VERSIONS
 .PP
@@ -1003,6 +1040,66 @@ for the correct prototypes if you can\'t figure them out from the idl itself.
 Also note that the first argument is not "self", but the servant and you must
 use bonobo_object_from_servant function to get the actual object pointer.
 
+.SH DIRECT LIBGLADE SUPPORT
+.PP
+Gob can simplify writing a libglade class.  Just create a new object that
+derives from a GtkContainer widget.  Then use a "GladeXML" class flag
+with the glade file name, root widget and optional domain  as arguments
+between double quotes.  For example:
+.nf
+
+class My:Glade from Gtk:Window (GladeXML "gob-libglade.glade" "root")
+{
+  ....
+}
+
+.fi
+Note however that then "gob-libglade.glade" would have to be in the current
+directory.  You could specify a path, but that may not work for all
+installations.  You can replace the glade filename with a token to be used
+in the generated .c file and you can then have a macro with the filename,
+as follows:
+.nf
+
+class My:Glade from Gtk:Window (GladeXML GLADE_FILE "root")
+{
+  ....
+}
+
+.fi
+And somewhere in your header files you would have
+.nf
+
+#define GLADE_FILE "/path/to/file.glade"
+
+.fi
+
+You can declare widgets as data members by adding a 'GladeXML' to
+the definition.
+.nf
+
+private Gtk:Button * button1 GladeXML;
+
+.fi
+This will automatically set the "button1" from the GladeXML file.
+
+All signals created with glade are automatically connected if you defined
+those class methods in your class.  For example suppose in glade that
+we set the "connect" signal on button1 to go to on_button1_clicked, then
+in our gob file we can just write:
+.nf
+
+public void
+on_button1_clicked(self, GtkButton * button)
+{
+}
+
+.fi
+
+See the examples directory for a full example.  Note that this feature
+requires version at least 2.0.12.
+
+
 .SH IDENTIFIER CONFLICTS
 .PP
 Gob will need to define some local variables and functions in the generated
@@ -1109,7 +1206,7 @@ check for GOB2 in your configure.in file.  You can use the supplied m4 macro
 which will also check the version of gob.  Basically you include this:
 .nf
 
-  GOB2_CHECK(2.0.0)
+  GOB2_CHECK([2.0.0])
 
 .fi
 This will replace @GOB2@ in your makefiles with the full path of gob2.  Thus
@@ -1126,6 +1223,25 @@ include the generated .c and .h files into BUILT_SOURCES variable.  You
 have to include both the .gob and the .c and .h files in the SOURCES for your
 program.
 
+.SH PREVENTING SPURIOUS BUILDS
+.PP
+When nothing has changed you might not really want to rebuild everything and
+gob provides options --no-touch (since 2.0.13) and --no-touch-headers to avoid
+this.  When working with build systems such as automake you have to be more
+careful as just using those options can cause automake to get confused and you
+will need to use something like the following:
+.nf
+
+  foo_SOURCES = foo.gob foo.gob.stamp foo.c foo.h foo-private.h
+  BUILT_SOURCES = foo.gob.stamp
+  MAINTAINERCLEANFILES = foo.gob.stamp
+
+  %.gob.stamp: %.gob
+          @GOB2@ --no-touch $<
+          @touch $@
+
+.fi 
+
 .SH DEBUGGING
 .PP
 GOB does several things to make debugging the code easier.  First it adds