Pārlūkot izejas kodu

Various documentation fixes

BearishSun 9 gadi atpakaļ
vecāks
revīzija
aa8cfb9f60

+ 1 - 0
.gitignore

@@ -9,5 +9,6 @@ data
 Intermediate
 Intermediate
 Dependencies
 Dependencies
 Builds
 Builds
+Documentation/html
 *.aps
 *.aps
 *.opendb
 *.opendb

+ 3 - 3
Documentation/Manuals/Native/manuals.md

@@ -2,7 +2,7 @@ Manuals									{#manuals}
 ===============
 ===============
 [TOC]
 [TOC]
 
 
-Here you will find a list of all manuals relating to Banshee's native code and their short descriptions. The manuals are for the most part unrelated so you can read them in the order needed.
+Here you will find a list of all manuals relating to Banshee's native code and their short descriptions. The manuals are for the most part unrelated so you can read them in the order that interests you.
 
 
 Name                                      | Description
 Name                                      | Description
 ------------------------------------------|-------------
 ------------------------------------------|-------------
@@ -19,8 +19,8 @@ Name                                      | Description
 [Scripting](@ref scripting)               | Shows you how to interact with the scripting system, and how to expose C++ objects to the scripting API.
 [Scripting](@ref scripting)               | Shows you how to interact with the scripting system, and how to expose C++ objects to the scripting API.
 [Render API](@ref renderAPI)              | Explains how to use the render API to use the graphics pipeline and draw objects. 
 [Render API](@ref renderAPI)              | Explains how to use the render API to use the graphics pipeline and draw objects. 
 [Textures](@ref textures)                 | Shows you how to create, use and manipulate textures.
 [Textures](@ref textures)                 | Shows you how to create, use and manipulate textures.
-[Meshes](@ref meshes)                     | Shows you how to create, use and manipulate textures.
+[Meshes](@ref meshes)                     | Shows you how to create, use and manipulate meshes.
 [Utilities](@ref utilities)               | Provides an overview of a variety of utility systems used throughout Banshee.
 [Utilities](@ref utilities)               | Provides an overview of a variety of utility systems used throughout Banshee.
 [Quick reference](@ref quickref)          | Provides a few bits of commonly required information, that might be hard to remember otherwise.
 [Quick reference](@ref quickref)          | Provides a few bits of commonly required information, that might be hard to remember otherwise.
-[Porting](@ref porting)                   | Information about how to go on about porting Banshee to a different system.
+[Porting](@ref porting)                   | Information about how to go on about porting Banshee to a different operating system.
 [Code style](@ref style)                  | Information about code style used when writing Banshee.
 [Code style](@ref style)                  | Information about code style used when writing Banshee.

+ 12 - 12
Documentation/Manuals/Native/rtti.md

@@ -3,7 +3,7 @@ Run-time type information						{#rtti}
 [TOC]
 [TOC]
 
 
 This manual describes how is run-time type information (RTTI) used to provide meta-information about C++ classes during program execution. In Banshee specifically it allows you to:
 This manual describes how is run-time type information (RTTI) used to provide meta-information about C++ classes during program execution. In Banshee specifically it allows you to:
- - Ability to serialize/deserialize objects with no additional code 
+ - Serialize/deserialize objects with no additional code 
  - Get name of a class, and exact polymorphic type of an object (including safe casting)
  - Get name of a class, and exact polymorphic type of an object (including safe casting)
  - Get the hierarchy of base/derived classes of a specific type
  - Get the hierarchy of base/derived classes of a specific type
  - Iterate over all fields in an object, find their name and type, get/set their value
  - Iterate over all fields in an object, find their name and type, get/set their value
@@ -16,7 +16,7 @@ RTTI doesn't automatically work on all classes. You must manually specify the in
  - Making sure your class derives from `IReflectable` and implements the required methods
  - Making sure your class derives from `IReflectable` and implements the required methods
  - Implement a `RTTIType` class
  - Implement a `RTTIType` class
  
  
-# Adding RTTI to your own objects
+# Adding RTTI to your own objects {#rtti_a}
 Assume you have a simple object you want to serialize:
 Assume you have a simple object you want to serialize:
 ~~~~~~~~~~~~~{.cpp}
 ~~~~~~~~~~~~~{.cpp}
 class Texture
 class Texture
@@ -82,16 +82,16 @@ This is the minimum you need to do to add a RTTI type. However there are some ad
 
 
 Important thing to note about RTTI type fields is that they all require a unique ID. This ID ensures that serialized data isn't broken if the layout of the object changes during development. This means you can add new fields, or remove old ones and expect data saved using an older version to "just work". You do need to ensure never to assign an ID of a previously removed field to a new field. You also need to change the ID if the field's type changes (i.e. it used to be `int` but now it's `long`).
 Important thing to note about RTTI type fields is that they all require a unique ID. This ID ensures that serialized data isn't broken if the layout of the object changes during development. This means you can add new fields, or remove old ones and expect data saved using an older version to "just work". You do need to ensure never to assign an ID of a previously removed field to a new field. You also need to change the ID if the field's type changes (i.e. it used to be `int` but now it's `long`).
 
 
-# Advanced field types
+# Advanced field types  {#rtti_b}
 
 
 When registering fields with the RTTI type, the systems supports a several sets of `add*Field` methods, each expecting a unique name/id, but different getter/setter methods and each field type has a special purpose.
 When registering fields with the RTTI type, the systems supports a several sets of `add*Field` methods, each expecting a unique name/id, but different getter/setter methods and each field type has a special purpose.
 
 
-## Plain fields
+## Plain fields  {#rtti_b_a}
 In the example above we have shown how to provide getter/setter methods for fields of `int` type. These fields are considered "plain" fields by the engine, and fields for types like `float`, `bool` and any other built-in language type also falls into this category.
 In the example above we have shown how to provide getter/setter methods for fields of `int` type. These fields are considered "plain" fields by the engine, and fields for types like `float`, `bool` and any other built-in language type also falls into this category.
 
 
 You register plain fields by calling `addPlainField`. The getter/setter methods must return/accept a reference to the value of the field.
 You register plain fields by calling `addPlainField`. The getter/setter methods must return/accept a reference to the value of the field.
 
 
-## Reflectable fields
+## Reflectable fields  {#rtti_b_b}
 Reflectable fields contain types deriving from `IReflectable`, that is complex objects that contain their own RTTI types. For example if we were to add a `Material` class to our example, it might contain a texture. In such case we would provide getter/setter methods like so:
 Reflectable fields contain types deriving from `IReflectable`, that is complex objects that contain their own RTTI types. For example if we were to add a `Material` class to our example, it might contain a texture. In such case we would provide getter/setter methods like so:
 ~~~~~~~~~~~~~{.cpp}
 ~~~~~~~~~~~~~{.cpp}
 class Material : public IReflectable
 class Material : public IReflectable
@@ -119,7 +119,7 @@ As you can see the reflectable field is similar to a plain field, only the `addR
 
 
 The problem with this approach is that during serialization whenever a material references a texture, that entire texture will end up being serialized with it. This is something you normally want to avoid since multiple materials will usually be referencing the same texture. For that purpose "Reflectable pointer" fields exist.
 The problem with this approach is that during serialization whenever a material references a texture, that entire texture will end up being serialized with it. This is something you normally want to avoid since multiple materials will usually be referencing the same texture. For that purpose "Reflectable pointer" fields exist.
 
 
-## Reflectable pointer fields
+## Reflectable pointer fields  {#rtti_b_c}
 This fields are similar to reflectable fields, as they also contain types deriving from `IReflectable`. However they only return a pointer to the owned object, instead of copying the object by value. This is relevant for serialization as the system will be smart enough to detect multiple fields pointing to the same instance of an `IReflectable` object, and only serialize it once (instead of every time it is encountered). When deserializing the system will also properly restore the pointers, so that all fields keep pointing to the same instance.
 This fields are similar to reflectable fields, as they also contain types deriving from `IReflectable`. However they only return a pointer to the owned object, instead of copying the object by value. This is relevant for serialization as the system will be smart enough to detect multiple fields pointing to the same instance of an `IReflectable` object, and only serialize it once (instead of every time it is encountered). When deserializing the system will also properly restore the pointers, so that all fields keep pointing to the same instance.
 
 
 Reflectable pointer getter/setter methods must return shared pointers to the instance. For example if we modified our Material class like so:
 Reflectable pointer getter/setter methods must return shared pointers to the instance. For example if we modified our Material class like so:
@@ -145,7 +145,7 @@ class MaterialRTTI : public RTTIType<Material, IReflectable, MaterialRTTI>
 };
 };
 ~~~~~~~~~~~~~
 ~~~~~~~~~~~~~
 
 
-## Array fields
+## Array fields  {#rtti_b_d}
 Each of the valid field types (plain/reflectable/reflectable pointer), also come in array form. The array form requires two additional getter/setter methods that return/set array size, and normal getter/setter require an extra index parameter. For example if we wanted to extend our material so it contains multiple textures:
 Each of the valid field types (plain/reflectable/reflectable pointer), also come in array form. The array form requires two additional getter/setter methods that return/set array size, and normal getter/setter require an extra index parameter. For example if we wanted to extend our material so it contains multiple textures:
 ~~~~~~~~~~~~~{.cpp}
 ~~~~~~~~~~~~~{.cpp}
 class Material : public IReflectable
 class Material : public IReflectable
@@ -180,7 +180,7 @@ Methods for registering array fields are:
 
 
 They all follow the same syntax as in the example above.
 They all follow the same syntax as in the example above.
  
  
-## Advanced plain fields
+## Advanced plain fields  {#rtti_b_e}
 Although plain fields are primarily intended for simple built-in types, sometimes it also needs to be used on complex types. For example a `std::string` is often used as a field type, but it is not a simple built-in type, nor can we make it derive from `IReflectable`. For these purposes you can use `RTTIPlainType`. This is a templated class you can specialize for your specific type. 
 Although plain fields are primarily intended for simple built-in types, sometimes it also needs to be used on complex types. For example a `std::string` is often used as a field type, but it is not a simple built-in type, nor can we make it derive from `IReflectable`. For these purposes you can use `RTTIPlainType`. This is a templated class you can specialize for your specific type. 
 
 
 It provides methods for serializing/deserializing and retrieving object size. It has no advanced functionality like versioning (so if the structure of the type changes, it will break any previously serialized data), or keeping references to other objects.
 It provides methods for serializing/deserializing and retrieving object size. It has no advanced functionality like versioning (so if the structure of the type changes, it will break any previously serialized data), or keeping references to other objects.
@@ -232,15 +232,15 @@ If possible you should prefer implementing an `IReflectable` for complex objects
  - char* rttiWriteElem(Type&, char*); // Serializes the element into the provided buffer and returns offset into the buffer after the written data
  - char* rttiWriteElem(Type&, char*); // Serializes the element into the provided buffer and returns offset into the buffer after the written data
  - UINT32 rttiGetElemSize(Type&); // Returns a size of a specific plain type
  - UINT32 rttiGetElemSize(Type&); // Returns a size of a specific plain type
 
 
-# Advanced serialization
+# Advanced serialization  {#rtti_c}
 Implementations of `RTTIType` can optionally implement `onSerializationStarted´, `onSerializationEnded`, `onDeserializationStarted` and `onDeserializationEnded` methods. As their names imply they will get called during serialization/deserialization and allow you to do any pre- or post-processing of the data. Most other systems (other than serialization) that access field data will also call these functions before reading, and after writing field data.
 Implementations of `RTTIType` can optionally implement `onSerializationStarted´, `onSerializationEnded`, `onDeserializationStarted` and `onDeserializationEnded` methods. As their names imply they will get called during serialization/deserialization and allow you to do any pre- or post-processing of the data. Most other systems (other than serialization) that access field data will also call these functions before reading, and after writing field data.
 
 
 Each of those methods accepts an `IReflectable` pointer to the object currently being processed. Each type that implements `IReflectable` also comes with a `mRTTIData` field which is of `Any` type, and can be used for storing temporary data during serialization/deserialization (primarily along the methods above).
 Each of those methods accepts an `IReflectable` pointer to the object currently being processed. Each type that implements `IReflectable` also comes with a `mRTTIData` field which is of `Any` type, and can be used for storing temporary data during serialization/deserialization (primarily along the methods above).
 
 
-# Using RTTI
+# Using RTTI  {#rtti_d}
 Once you have an object with a RTTI type fully implement it you can use it for various purposes:
 Once you have an object with a RTTI type fully implement it you can use it for various purposes:
 
 
-## Getting object information
+## Getting object information  {#rtti_d_a}
 ~~~~~~~~~~~~~{.cpp}
 ~~~~~~~~~~~~~{.cpp}
 IReflectable* myObject = ...;
 IReflectable* myObject = ...;
 
 
@@ -268,7 +268,7 @@ rttiField->isArray(); // Does the field contain an array
 // Use that type to access the field values (not shown here, but has the same effect as get/set methods on RTTIType* shown above, only more efficient)
 // Use that type to access the field values (not shown here, but has the same effect as get/set methods on RTTIType* shown above, only more efficient)
 ~~~~~~~~~~~~~
 ~~~~~~~~~~~~~
 
 
-## Serialization
+## Serialization  {#rtti_d_b}
 Serialization uses all the features shown in the chapter above in order to serialize an `IReflectable` object into a stream of bytes, and vice versa. By default binary serialization is used, but user can implement textual serialization (like XML or JSON) using the RTTI system, if needed.
 Serialization uses all the features shown in the chapter above in order to serialize an `IReflectable` object into a stream of bytes, and vice versa. By default binary serialization is used, but user can implement textual serialization (like XML or JSON) using the RTTI system, if needed.
 
 
 Binary serialized data can be output to memory, or to a file using: `MemorySerializer`, `FileEncoder`, `FileDecoder`. Their usage is simple:
 Binary serialized data can be output to memory, or to a file using: `MemorySerializer`, `FileEncoder`, `FileDecoder`. Their usage is simple:

+ 2 - 2
Documentation/Mono-3.8.0-IntegrationGuide.txt

@@ -20,8 +20,8 @@ to:
 
 
 In mini-amd64.h:
 In mini-amd64.h:
   Find where definitions of MONO_ARCH_NOMAP32BIT are for various platforms, and below them add:
   Find where definitions of MONO_ARCH_NOMAP32BIT are for various platforms, and below them add:
-   #ifdef HOST_WIN32
-   #define MONO_ARCH_NOMAP32BIT
+   #ifdef HOST_WIN32
+   #define MONO_ARCH_NOMAP32BIT
    #endif
    #endif
 
 
  - Compile mono project with desired configuration (debug/release, 32/64 bit, SGen builds were not tested). You will receive mono-2.0.dll and mono-2.0.lib as output.
  - Compile mono project with desired configuration (debug/release, 32/64 bit, SGen builds were not tested). You will receive mono-2.0.dll and mono-2.0.lib as output.

+ 6 - 6
Doxyfile

@@ -1149,7 +1149,7 @@ HTML_FILE_EXTENSION    = .html
 # of the possible markers and block names see the documentation.
 # of the possible markers and block names see the documentation.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_HEADER            = 
+HTML_HEADER            = header.html
 
 
 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
 # generated HTML page. If the tag is left blank doxygen will generate a standard
 # generated HTML page. If the tag is left blank doxygen will generate a standard
@@ -1159,7 +1159,7 @@ HTML_HEADER            =
 # that doxygen normally uses.
 # that doxygen normally uses.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_FOOTER            = 
+HTML_FOOTER            = footer.html
 
 
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
 # sheet that is used by each HTML page. It can be used to fine-tune the look of
 # sheet that is used by each HTML page. It can be used to fine-tune the look of
@@ -1184,7 +1184,7 @@ HTML_STYLESHEET        =
 # list). For an example see the documentation.
 # list). For an example see the documentation.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_EXTRA_STYLESHEET  = 
+HTML_EXTRA_STYLESHEET  = doxystyle.css
 
 
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the HTML output directory. Note
 # other source files which should be copied to the HTML output directory. Note
@@ -1205,7 +1205,7 @@ HTML_EXTRA_FILES       =
 # Minimum value: 0, maximum value: 359, default value: 220.
 # Minimum value: 0, maximum value: 359, default value: 220.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_HUE    = 37
 
 
 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
 # in the HTML output. For a value of 0 the output will use grayscales only. A
 # in the HTML output. For a value of 0 the output will use grayscales only. A
@@ -1213,7 +1213,7 @@ HTML_COLORSTYLE_HUE    = 220
 # Minimum value: 0, maximum value: 255, default value: 100.
 # Minimum value: 0, maximum value: 255, default value: 100.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_SAT    = 212
 
 
 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
 # luminance component of the colors in the HTML output. Values below 100
 # luminance component of the colors in the HTML output. Values below 100
@@ -1224,7 +1224,7 @@ HTML_COLORSTYLE_SAT    = 100
 # Minimum value: 40, maximum value: 240, default value: 80.
 # Minimum value: 40, maximum value: 240, default value: 80.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 
-HTML_COLORSTYLE_GAMMA  = 80
+HTML_COLORSTYLE_GAMMA  = 100
 
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
 # page will contain the date and time when the page was generated. Setting this
 # page will contain the date and time when the page was generated. Setting this

+ 5 - 5
Source/BansheeCore/Source/BsCJoint.cpp

@@ -260,13 +260,13 @@ namespace BansheeEngine
 
 
 			rotation = worldRot * rotation;
 			rotation = worldRot * rotation;
 			position = worldRot.rotate(position) + rigidbody->SO()->getWorldPosition();
 			position = worldRot.rotate(position) + rigidbody->SO()->getWorldPosition();
-		}
 
 
-		// Transform to space local to the joint
-		Quaternion invRotation = SO()->getWorldRotation().inverse();
+			// Transform to space local to the joint
+			Quaternion invRotation = SO()->getWorldRotation().inverse();
 
 
-		position = invRotation.rotate(position - SO()->getWorldPosition());
-		rotation = invRotation * rotation;
+			position = invRotation.rotate(position - SO()->getWorldPosition());
+			rotation = invRotation * rotation;
+		}
 	}
 	}
 	
 	
 	void CJoint::triggerOnJointBroken()
 	void CJoint::triggerOnJointBroken()

+ 8 - 1
Source/BansheeEditor/Include/BsGUIColorField.h

@@ -37,10 +37,17 @@ namespace BansheeEngine
 		/** @copydoc GUIElement::setTint */
 		/** @copydoc GUIElement::setTint */
 		virtual void setTint(const Color& color) override;
 		virtual void setTint(const Color& color) override;
 
 
+		Event<void()> onClicked; /**< Triggered when the user clicks on the GUI element. */
+
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/** @copydoc GUIElement::_getOptimalSize */
 		/** @copydoc GUIElement::_getOptimalSize */
 		Vector2I _getOptimalSize() const override;
 		Vector2I _getOptimalSize() const override;
 
 
-		Event<void()> onClicked; /**< Triggered when the user clicks on the GUI element. */
+		/** @} */
+
 	protected:
 	protected:
 		virtual ~GUIColorField();
 		virtual ~GUIColorField();
 
 

+ 7 - 1
Source/BansheeEditor/Include/BsGUISliderField.h

@@ -51,13 +51,19 @@ namespace BansheeEngine
 		/** @copydoc GUIElement::setTint */
 		/** @copydoc GUIElement::setTint */
 		void setTint(const Color& color) override;
 		void setTint(const Color& color) override;
 
 
+		Event<void(float)> onValueChanged; /**< Triggers when the field value changes. */
+
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/**
 		/**
 		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
 		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
 		 * event.
 		 * event.
 		 */
 		 */
 		void _setValue(float value, bool triggerEvent);
 		void _setValue(float value, bool triggerEvent);
 
 
-		Event<void(float)> onValueChanged; /**< Triggers when the field value changes. */
+		/** @} */
 	protected:
 	protected:
 		virtual ~GUISliderField();
 		virtual ~GUISliderField();
 
 

+ 7 - 1
Source/BansheeEditor/Include/BsGUIToggleField.h

@@ -36,13 +36,19 @@ namespace BansheeEngine
 		/** @copydoc GUIElement::setTint */
 		/** @copydoc GUIElement::setTint */
 		void setTint(const Color& color) override;
 		void setTint(const Color& color) override;
 
 
+		Event<void(bool)> onValueChanged; /** Triggered when the value of the toggle changes. */
+
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/**
 		/**
 		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
 		 * Sets a new value in the input field, and also allows you to choose should the field trigger an onValueChanged
 		 * event.
 		 * event.
 		 */
 		 */
 		void _setValue(bool value, bool triggerEvent);
 		void _setValue(bool value, bool triggerEvent);
 
 
-		Event<void(bool)> onValueChanged; /** Triggered when the value of the toggle changes. */
+		/** @} */
 	protected:
 	protected:
 		virtual ~GUIToggleField() { }
 		virtual ~GUIToggleField() { }
 
 

+ 9 - 3
Source/BansheeEditor/Include/BsProjectLibrary.h

@@ -224,9 +224,6 @@ namespace BansheeEngine
 		/** Returns the path to the project's resource folder where all the assets are stored. */
 		/** Returns the path to the project's resource folder where all the assets are stored. */
 		const Path& getResourcesFolder() const { return mResourcesFolder; }
 		const Path& getResourcesFolder() const { return mResourcesFolder; }
 
 
-		/**	Returns the resource manifest managed by the project library. */
-		const ResourceManifestPtr& _getManifest() const { return mResourceManifest; }
-
 		/**
 		/**
 		 * Saves all the project library data so it may be restored later, at the default save location in the project
 		 * Saves all the project library data so it may be restored later, at the default save location in the project
 		 * folder. Project must be loaded when calling this.
 		 * folder. Project must be loaded when calling this.
@@ -251,6 +248,15 @@ namespace BansheeEngine
 		/** Triggered when a resource is being (re)imported. Path provided is absolute. */
 		/** Triggered when a resource is being (re)imported. Path provided is absolute. */
 		Event<void(const Path&)> onEntryImported; 
 		Event<void(const Path&)> onEntryImported; 
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
+		/**	Returns the resource manifest managed by the project library. */
+		const ResourceManifestPtr& _getManifest() const { return mResourceManifest; }
+
+		/** @} */
+
 		static const Path RESOURCES_DIR;
 		static const Path RESOURCES_DIR;
 		static const Path INTERNAL_RESOURCES_DIR;
 		static const Path INTERNAL_RESOURCES_DIR;
 	private:
 	private:

+ 6 - 0
Source/BansheeEngine/Include/BsCCamera.h

@@ -193,9 +193,15 @@ namespace BansheeEngine
 		/** @copydoc Camera::setMain */	
 		/** @copydoc Camera::setMain */	
 		void setMain(bool main);
 		void setMain(bool main);
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/** Returns the internal camera that is used for majority of operations by this component. */
 		/** Returns the internal camera that is used for majority of operations by this component. */
 		CameraPtr _getCamera() const { updateView(); return mInternal; }
 		CameraPtr _getCamera() const { updateView(); return mInternal; }
 
 
+		/** @} */
+
     protected:
     protected:
 		/** Checks if the world transform of the camera changed, and if needed updates the view matrix. */
 		/** Checks if the world transform of the camera changed, and if needed updates the view matrix. */
 		void updateView() const;
 		void updateView() const;

+ 6 - 0
Source/BansheeEngine/Include/BsCLight.h

@@ -83,9 +83,15 @@ namespace BansheeEngine
 	    /** @copydoc Light::getBounds  */
 	    /** @copydoc Light::getBounds  */
 		Sphere getBounds() const;
 		Sphere getBounds() const;
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
 	    /**	Returns the light that this component wraps. */
 	    /**	Returns the light that this component wraps. */
 		SPtr<Light> _getLight() const { return mInternal; }
 		SPtr<Light> _getLight() const { return mInternal; }
 
 
+		/** @} */
+
     protected:
     protected:
 		mutable SPtr<Light> mInternal;
 		mutable SPtr<Light> mInternal;
 
 

+ 6 - 0
Source/BansheeEngine/Include/BsCRenderable.h

@@ -48,9 +48,15 @@ namespace BansheeEngine
 		/** @copydoc Component::calculateBounds */
 		/** @copydoc Component::calculateBounds */
 		bool calculateBounds(Bounds& bounds) override;
 		bool calculateBounds(Bounds& bounds) override;
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/** Returns the internal renderable that is used for majority of operations by this component. */
 		/** Returns the internal renderable that is used for majority of operations by this component. */
 		RenderablePtr _getRenderable() const { return mInternal; }
 		RenderablePtr _getRenderable() const { return mInternal; }
 
 
+		/** @} */
+
 	private:
 	private:
 		/**	Updates the world transform if the SceneObject transform changed. */
 		/**	Updates the world transform if the SceneObject transform changed. */
 		void updateTransform() const;
 		void updateTransform() const;

+ 9 - 3
Source/BansheeEngine/Include/BsGUIScrollArea.h

@@ -71,9 +71,6 @@ namespace BansheeEngine
 		static GUIScrollArea* create(const GUIOptions& options, const String& scrollBarStyle = StringUtil::BLANK, 
 		static GUIScrollArea* create(const GUIOptions& options, const String& scrollBarStyle = StringUtil::BLANK, 
 			const String& scrollAreaStyle = StringUtil::BLANK);
 			const String& scrollAreaStyle = StringUtil::BLANK);
 
 
-		/** @copydoc GUIElementContainer::_getElementType */
-		virtual ElementType _getElementType() const override { return ElementType::ScrollArea; }
-
 		/**	Returns the scroll area layout that you may use to add elements inside the scroll area. */
 		/**	Returns the scroll area layout that you may use to add elements inside the scroll area. */
 		GUILayout& getLayout() const { return *mContentLayout; }
 		GUILayout& getLayout() const { return *mContentLayout; }
 
 
@@ -136,6 +133,15 @@ namespace BansheeEngine
 		 * horizontal scrollbar.
 		 * horizontal scrollbar.
 		 */
 		 */
 		static const UINT32 ScrollBarWidth;
 		static const UINT32 ScrollBarWidth;
+
+		/** @name Internal 
+		 *  @{
+		 */
+
+		/** @copydoc GUIElementContainer::_getElementType */
+		virtual ElementType _getElementType() const override { return ElementType::ScrollArea; }
+
+		/** @} */
 	protected:
 	protected:
 		~GUIScrollArea();
 		~GUIScrollArea();
 
 

+ 6 - 0
Source/BansheeEngine/Include/BsPlainText.h

@@ -24,12 +24,18 @@ namespace BansheeEngine
 		/**	Creates a new text file resource with the specified string. */
 		/**	Creates a new text file resource with the specified string. */
 		static HPlainText create(const WString& data);
 		static HPlainText create(const WString& data);
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/**
 		/**
 		 * Creates an include file resource with the specified include string.
 		 * Creates an include file resource with the specified include string.
 		 *
 		 *
 		 * @note	Internal method. Use create() for normal use.
 		 * @note	Internal method. Use create() for normal use.
 		 */
 		 */
 		static PlainTextPtr _createPtr(const WString& data);
 		static PlainTextPtr _createPtr(const WString& data);
+
+		/** @} */
 	private:
 	private:
 		PlainText(const WString& data);
 		PlainText(const WString& data);
 
 

+ 6 - 0
Source/BansheeEngine/Include/BsScriptCode.h

@@ -30,12 +30,18 @@ namespace BansheeEngine
 		/**	Creates a new script code resource with the specified source code. */
 		/**	Creates a new script code resource with the specified source code. */
 		static HScriptCode create(const WString& data, bool editorScript = false);
 		static HScriptCode create(const WString& data, bool editorScript = false);
 
 
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/**
 		/**
 		 * Creates a new scriptcode resource with the specified source string.
 		 * Creates a new scriptcode resource with the specified source string.
 		 *
 		 *
 		 * @note	Internal method. Use "create" for normal use.
 		 * @note	Internal method. Use "create" for normal use.
 		 */
 		 */
 		static ScriptCodePtr _createPtr(const WString& data, bool editorScript = false);
 		static ScriptCodePtr _createPtr(const WString& data, bool editorScript = false);
+
+		/** @} */
 	private:
 	private:
 		ScriptCode(const WString& data, bool editorScript);
 		ScriptCode(const WString& data, bool editorScript);
 
 

+ 5 - 1
Source/MBansheeEditor/Scene/Gizmos/JointGizmos.cs

@@ -26,9 +26,13 @@ namespace BansheeEditor
             if (rigidbody != null)
             if (rigidbody != null)
             {
             {
                 Quaternion worldRot = rigidbody.SceneObject.Rotation;
                 Quaternion worldRot = rigidbody.SceneObject.Rotation;
-
                 anchor = worldRot.Rotate(anchor) + rigidbody.SceneObject.Position;
                 anchor = worldRot.Rotate(anchor) + rigidbody.SceneObject.Position;
             }
             }
+            else
+            {
+                Quaternion worldRot = joint.SceneObject.Rotation;
+                anchor = worldRot.Rotate(anchor) + joint.SceneObject.Position;
+            }
 
 
             return anchor;
             return anchor;
         }
         }

+ 4 - 0
Source/MBansheeEngine/Physics/D6Joint.cs

@@ -280,6 +280,10 @@ namespace BansheeEngine
                 @internal.swingLimit = new LimitConeRange();
                 @internal.swingLimit = new LimitConeRange();
                 @internal.motion = new D6JointMotion[(int)D6JointAxis.Count];
                 @internal.motion = new D6JointMotion[(int)D6JointAxis.Count];
                 @internal.drives = new D6JointDrive[(int)D6JointDriveType.Count];
                 @internal.drives = new D6JointDrive[(int)D6JointDriveType.Count];
+                @internal.drivePosition = Vector3.Zero;
+                @internal.driveRotation = Quaternion.Identity;
+                @internal.driveLinearVelocity = Vector3.Zero;
+                @internal.driveAngularVelocity = Vector3.Zero;
             }
             }
         }
         }
     }
     }

+ 3 - 0
Source/MBansheeEngine/Physics/DistanceJoint.cs

@@ -176,10 +176,12 @@ namespace BansheeEngine
             else
             else
                 newFlags &= ~flag;
                 newFlags &= ~flag;
 
 
+            Debug.Log("SET FLAG" + flag + " - " + enabled + " - " + newFlags + " - " + [email protected]);
             if (newFlags == [email protected])
             if (newFlags == [email protected])
                 return false;
                 return false;
 
 
             [email protected] = newFlags;
             [email protected] = newFlags;
+            Debug.Log([email protected]);
             return true;
             return true;
         }
         }
 
 
@@ -194,6 +196,7 @@ namespace BansheeEngine
         /// <inheritdoc/>
         /// <inheritdoc/>
         internal override NativeJoint CreateNative()
         internal override NativeJoint CreateNative()
         {
         {
+            Debug.Log("CREATE: " + [email protected]);
             NativeDistanceJoint joint = new NativeDistanceJoint(commonData.@internal, data.@internal);
             NativeDistanceJoint joint = new NativeDistanceJoint(commonData.@internal, data.@internal);
 
 
             return joint;
             return joint;

+ 9 - 10
Source/MBansheeEngine/Physics/Joint.cs

@@ -335,13 +335,13 @@ namespace BansheeEngine
 
 
                 rotation = worldRot * rotation;
                 rotation = worldRot * rotation;
                 position = worldRot.Rotate(position) + rigidbody.SceneObject.Position;
                 position = worldRot.Rotate(position) + rigidbody.SceneObject.Position;
-            }
 
 
-            // Transform to space local to the joint
-            Quaternion invRotation = SceneObject.Rotation.Inverse;
+                // Transform to space local to the joint
+                Quaternion invRotation = SceneObject.Rotation.Inverse;
 
 
-            position = invRotation.Rotate(position - SceneObject.Position);
-            rotation = invRotation * rotation;
+                position = invRotation.Rotate(position - SceneObject.Position);
+                rotation = invRotation * rotation;
+            }
         }
         }
 
 
         /// <summary>
         /// <summary>
@@ -355,7 +355,6 @@ namespace BansheeEngine
 
 
             GetLocalTransform(body, out localPos, out localRot);
             GetLocalTransform(body, out localPos, out localRot);
 
 
-
             native.SetPosition(body, localPos);
             native.SetPosition(body, localPos);
             native.SetRotation(body, localRot);
             native.SetRotation(body, localRot);
 	    }
 	    }
@@ -371,16 +370,16 @@ namespace BansheeEngine
             public SerializableData()
             public SerializableData()
             {
             {
                 @internal.bodies = new IntPtr[2];
                 @internal.bodies = new IntPtr[2];
-                @internal.positions = new Vector3[2];
-                @internal.rotations = new Quaternion[2];
+                @internal.positions = new Vector3[2] { Vector3.Zero, Vector3.Zero };
+                @internal.rotations = new Quaternion[2] { Quaternion.Identity, Quaternion.Identity };
                 @internal.breakForce = float.MaxValue;
                 @internal.breakForce = float.MaxValue;
                 @internal.breakTorque = float.MaxValue;
                 @internal.breakTorque = float.MaxValue;
                 @internal.enableCollision = false;
                 @internal.enableCollision = false;
             }
             }
 
 
             public Rigidbody[] bodies = new Rigidbody[2];
             public Rigidbody[] bodies = new Rigidbody[2];
-            public Vector3[] positions = new Vector3[2];
-            public Quaternion[] rotations = new Quaternion[2];
+            public Vector3[] positions = new Vector3[2] { Vector3.Zero, Vector3.Zero };
+            public Quaternion[] rotations = new Quaternion[2] { Quaternion.Identity, Quaternion.Identity };
         }
         }
     }
     }
 
 

+ 8 - 2
Source/SBansheeEditor/Include/BsGUIGameObjectField.h

@@ -162,6 +162,13 @@ namespace BansheeEngine
 		/**	Sets the game object referenced by the field. */
 		/**	Sets the game object referenced by the field. */
 		void setValue(const HGameObject& value);
 		void setValue(const HGameObject& value);
 
 
+		/**	Triggered whenever the referenced game object changes. */
+		Event<void(const HGameObject&)> onValueChanged;
+
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/** @copydoc GUIElement::setTint */
 		/** @copydoc GUIElement::setTint */
 		virtual void setTint(const Color& color) override;
 		virtual void setTint(const Color& color) override;
 
 
@@ -171,8 +178,7 @@ namespace BansheeEngine
 		/** @copydoc GUIElement::_getOptimalSize */
 		/** @copydoc GUIElement::_getOptimalSize */
 		Vector2I _getOptimalSize() const override;
 		Vector2I _getOptimalSize() const override;
 
 
-		/**	Triggered whenever the referenced game object changes. */
-		Event<void(const HGameObject&)> onValueChanged;
+		/** @} */
 	private:
 	private:
 		virtual ~GUIGameObjectField();
 		virtual ~GUIGameObjectField();
 
 

+ 11 - 5
Source/SBansheeEditor/Include/BsGUIResourceField.h

@@ -174,17 +174,23 @@ namespace BansheeEngine
 		/** @copydoc GUIElement::setTint */
 		/** @copydoc GUIElement::setTint */
 		virtual void setTint(const Color& color) override;
 		virtual void setTint(const Color& color) override;
 
 
+		/**
+		 * Triggered whenever the referenced resource changes. Provides	a weak handle of the resource, or empty handle if
+		 * no resource is referenced.
+		 */
+		Event<void(const WeakResourceHandle<Resource>&)> onValueChanged;
+
+		/** @name Internal 
+		 *  @{
+		 */
+
 		/** @copydoc GUIElement::_updateLayoutInternal */
 		/** @copydoc GUIElement::_updateLayoutInternal */
 		void _updateLayoutInternal(const GUILayoutData& data) override;
 		void _updateLayoutInternal(const GUILayoutData& data) override;
 
 
 		/** @copydoc GUIElement::_getOptimalSize */
 		/** @copydoc GUIElement::_getOptimalSize */
 		Vector2I _getOptimalSize() const override;
 		Vector2I _getOptimalSize() const override;
 
 
-		/**
-		 * Triggered whenever the referenced resource changes. Provides	a weak handle of the resource, or empty handle if
-		 * no resource is referenced.
-		 */
-		Event<void(const WeakResourceHandle<Resource>&)> onValueChanged;
+		/** @} */
 	private:
 	private:
 		virtual ~GUIResourceField();
 		virtual ~GUIResourceField();
 
 

+ 177 - 0
doxystyle.css

@@ -0,0 +1,177 @@
+/* Global */
+body, table, div, p, dl {
+	font: 14px/22px Lato,Roboto,sans-serif;
+}
+
+h1 {
+	margin-top: 0.47em;
+	margin-bottom: 0.07em;
+	padding: 0px 0px 5px 0px;
+	border-bottom: 2px solid #CD8512;
+}
+
+h2 {
+	margin-top: 0.37em;
+	margin-bottom: 0.07em;
+	padding: 0px 0px 5px 0px;
+	border-bottom: 1px solid #CD8512;
+}
+
+h3 {
+	margin-top: 0.27em;
+	margin-bottom: 0.07em;
+	padding: 0px 0px 5px 0px;
+	border-bottom: 1px dashed #CD8512;
+}
+
+/* Nav bar */
+.tabs, .tabs2, .tabs3 {
+	background-color: #ffb750;
+	background-image: none;
+    font-family: Lato,'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+	border-bottom: 1px solid #CD8512;
+}
+
+.tablist li {
+    background-image: none;
+}
+
+.tablist a {
+	background-image: none;
+}
+
+.tablist a:hover {
+    background-image: none;
+}
+
+.tablist li.current a {
+    background-image: none;
+}
+
+/* Second nav bar */
+.navpath ul {	
+	background-color: #ffd599;
+	background-image: none;
+	border-bottom: 1px solid #CD8512;
+}
+
+.navpath li
+{
+	background-image: none;
+	border-right: 1px solid #CD8512;
+}
+
+.navpath li:last-child
+{
+	background-image: none;
+	border-right: 0px;
+}
+
+/* Page header */
+div.header {
+	background-image: none;
+}
+
+div.headertitle {
+	padding: 3px 5px 3px 10px;
+}
+
+/* Members */
+.memproto, dl.reflist dt {
+	background-image: none;
+	background-color: #ffd599;
+	/* opera specific markup */
+	box-shadow: none;
+	/* firefox specific markup */
+	-moz-box-shadow: none;
+	/* webkit specific markup */
+	-webkit-box-shadow: none;
+}
+
+.memdoc, dl.reflist dd {
+	padding: 1px 10px 2px 10px;
+	background-color: #FEFCF9;
+	border-top-width: 0;
+	background-image: none;
+	/* opera specific markup */
+	box-shadow: none;
+	/* firefox specific markup */
+	-moz-box-shadow: none;
+	/* webkit specific markup */
+	-webkit-box-shadow: none;
+}
+
+/* TOC */
+
+div.toc li {
+	font: 10px/1.2 Lato,Verdana,DejaVu Sans,Geneva,sans-serif;
+}
+
+div.toc h3 {
+	font: bold 12px/1.2 Lato,Arial,FreeSans,sans-serif;
+}
+
+div.toc {
+	margin: 0 10px 10px 10px;
+}
+
+/* Search */
+#MSearchField {
+    background-image: none;
+	background-color: white;
+	border-top: 1px solid black;
+	border-bottom: 1px solid black;
+	height: 17px;
+	top: -1px;
+    font: 9pt Lato, Arial, Verdana, sans-serif;
+}
+
+#MSearchBox .left {
+	background-color: white;
+    background-image: none;
+	border-top: 1px solid black;
+	border-bottom: 1px solid black;
+	border-left: 1px solid black;
+}
+
+#MSearchBox .right {
+	background-color: white;
+    background-image: none;
+	border-top: 1px solid black;
+	border-bottom: 1px solid black;
+	border-right: 1px solid black;
+}
+
+/* Other */
+
+.title {
+	font: bold 24px/28px Lato,Roboto,sans-serif;
+}
+
+table.directory {
+    font: 400 14px Lato,Roboto,sans-serif;
+}
+
+.navpath li.navelem a {
+	font-family: Lato, 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;   
+}
+
+.navpath li.navelem a:hover {
+	color:#ffffff;
+	text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9);
+}
+
+table.doxtable th {
+	background-color: #ffb750;
+}
+
+dl.note {
+	border-color: #ffb750;
+}
+
+#projectname
+{
+	font: 300% Lato, Tahoma, Arial,sans-serif;
+	margin: 0px;
+	padding: 2px 0px;
+}

+ 4 - 0
footer.html

@@ -0,0 +1,4 @@
+<!-- HTML footer for doxygen 1.8.10-->
+<!-- start footer part -->
+</body>
+</html>

+ 56 - 0
header.html

@@ -0,0 +1,56 @@
+<!-- HTML header for doxygen 1.8.10-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
+<meta http-equiv="X-UA-Compatible" content="IE=9"/>
+<meta name="generator" content="Doxygen $doxygenversion"/>
+<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
+<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
+<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
+<link href='http://fonts.googleapis.com/css?family=Lato:normal,bold' rel='stylesheet' type='text/css'>
+<script type="text/javascript" src="$relpath^jquery.js"></script>
+<script type="text/javascript" src="$relpath^dynsections.js"></script>
+$treeview
+$search
+$mathjax
+<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
+$extrastylesheet
+</head>
+<body>
+<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
+
+<!--BEGIN TITLEAREA-->
+<div id="titlearea">
+<table cellspacing="0" cellpadding="0">
+ <tbody>
+ <tr style="height: 56px;">
+  <!--BEGIN PROJECT_LOGO-->
+  <td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
+  <!--END PROJECT_LOGO-->
+  <!--BEGIN PROJECT_NAME-->
+  <td id="projectalign" style="padding-left: 0.5em;">
+   <div id="projectname">$projectname
+   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
+   </div>
+   <!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
+  </td>
+  <!--END PROJECT_NAME-->
+  <!--BEGIN !PROJECT_NAME-->
+   <!--BEGIN PROJECT_BRIEF-->
+    <td style="padding-left: 0.5em;">
+    <div id="projectbrief">$projectbrief</div>
+    </td>
+   <!--END PROJECT_BRIEF-->
+  <!--END !PROJECT_NAME-->
+  <!--BEGIN DISABLE_INDEX-->
+   <!--BEGIN SEARCHENGINE-->
+   <td>$searchbox</td>
+   <!--END SEARCHENGINE-->
+  <!--END DISABLE_INDEX-->
+ </tr>
+ </tbody>
+</table>
+</div>
+<!--END TITLEAREA-->
+<!-- end header part -->

+ 205 - 0
layout.xml

@@ -0,0 +1,205 @@
+<doxygenlayout version="1.0">
+  <!-- Generated by doxygen 1.8.7 -->
+  <!-- Navigation index tabs for HTML output -->
+  <navindex>
+    <tab type="mainpage" visible="yes" title=""/>
+    <tab type="modules" visible="yes"
+                        title="API reference"
+                        intro="API reference with classes separated in logical groups."/>
+
+    <tab type="classlist" visible="true"
+                            title="Class list"
+                            intro="A complete list of all classes."/>
+    <tab type="pages" visible="yes" title="Manual" intro=""/>
+
+
+    <!-- We don't use what's below -->
+    <tab type="namespaces" visible="no" title="">
+      <tab type="namespacelist" visible="no" title="" intro=""/>
+      <tab type="namespacemembers" visible="no" title="" intro=""/>
+    </tab>
+
+    <tab type="examples" visible="no" title="" intro=""/>
+
+    <tab type="classes" visible="no" title="">
+      <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
+      <tab type="hierarchy" visible="no" title="" intro=""/>
+    </tab>
+
+    <tab type="files" visible="no" title="">
+      <tab type="globals" visible="no" title="" intro=""/>
+    </tab>
+  </navindex>
+
+  <!-- Layout definition for a class page -->
+  <class>
+    <briefdescription visible="no"/>
+    <detaileddescription title="Description"/>
+	<inheritancegraph visible="$CLASS_GRAPH"/>
+    <memberdecl>
+      <related title="Synopsis of methods" subtitle=" "/>
+      <nestedclasses visible="no" title=""/>
+      <friends title=""/>
+      <membergroups visible="yes"/>
+      <publicmethods title="Methods"/>
+      <publicstaticmethods title="Static methods"/>
+      <publicattributes title="Fields"/>
+      <publicstaticattributes title="Static fields"/>
+	  
+      <!-- We don't use what's below -->
+      <publictypes title=""/>
+      <services title=""/>
+      <interfaces title=""/>
+      <publicslots title=""/>
+      <signals title=""/>
+      <protectedtypes title=""/>
+      <protectedslots title=""/>
+      <packagetypes title=""/>
+      <packagemethods title=""/>
+      <packagestaticmethods title=""/>
+      <packageattributes title=""/>
+      <packagestaticattributes title=""/>
+      <properties title=""/>
+      <events title=""/>
+      <privatetypes title=""/>
+      <privateslots title=""/>
+      <privatemethods title=""/>
+      <privatestaticmethods title=""/>
+      <privateattributes title=""/>
+      <privatestaticattributes title=""/>
+    </memberdecl>
+    <memberdef>
+      <related title="Methods"/>
+      <functions title="Method documentation"/>
+      <variables title=""/>
+      <inlineclasses title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+
+      <!-- This is not for C++ -->
+      <services title=""/>
+      <interfaces title=""/>
+      <constructors title=""/>
+      <properties title=""/>
+      <events title=""/>
+    </memberdef>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <collaborationgraph visible="$COLLABORATION_GRAPH"/>	
+    <allmemberslink visible="yes"/>
+    <usedfiles visible="$SHOW_USED_FILES"/>
+    <authorsection visible="yes"/>
+  </class>
+
+  <!-- Layout definition for a namespace page -->
+  <namespace>
+    <briefdescription visible="yes"/>
+    <memberdecl>
+      <nestednamespaces visible="yes" title=""/>
+      <constantgroups visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <inlineclasses title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </namespace>
+
+  <!-- Layout definition for a file page -->
+  <file>
+    <briefdescription visible="yes"/>
+    <includes visible="$SHOW_INCLUDE_FILES"/>
+    <includegraph visible="$INCLUDE_GRAPH"/>
+    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
+    <sourcelink visible="yes"/>
+    <memberdecl>
+      <classes visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <constantgroups visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+    <memberdef>
+      <inlineclasses title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <functions title=""/>
+      <variables title=""/>
+    </memberdef>
+    <authorsection/>
+  </file>
+
+  <!-- Layout definition for a group page -->
+  <group>
+    <briefdescription visible="no"/>
+    <detaileddescription title="Description"/>
+
+    <groupgraph visible="$GROUP_GRAPHS"/>
+    <memberdecl>
+      <nestedgroups visible="yes" title=""/>
+      <dirs visible="yes" title=""/>
+      <files visible="yes" title=""/>
+      <namespaces visible="yes" title=""/>
+      <classes visible="yes" title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+      <membergroups visible="yes"/>
+    </memberdecl>
+    <memberdef>
+      <pagedocs/>
+      <inlineclasses title=""/>
+      <defines title=""/>
+      <typedefs title=""/>
+      <enums title=""/>
+      <enumvalues title=""/>
+      <functions title=""/>
+      <variables title=""/>
+      <signals title=""/>
+      <publicslots title=""/>
+      <protectedslots title=""/>
+      <privateslots title=""/>
+      <events title=""/>
+      <properties title=""/>
+      <friends title=""/>
+    </memberdef>
+    <authorsection visible="yes"/>
+  </group>
+
+  <!-- Layout definition for a directory page -->
+  <directory>
+    <briefdescription visible="yes"/>
+    <directorygraph visible="yes"/>
+    <memberdecl>
+      <dirs visible="yes"/>
+      <files visible="yes"/>
+    </memberdecl>
+    <detaileddescription title=""/>
+  </directory>
+</doxygenlayout>
+