<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://cegui.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Timotei</id>
		<title>CEGUI Wiki - Crazy Eddie's GUI System (Open Source) - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://cegui.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Timotei"/>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/Special:Contributions/Timotei"/>
		<updated>2026-07-07T17:02:56Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=BuildStatus&amp;diff=5542</id>
		<title>BuildStatus</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=BuildStatus&amp;diff=5542"/>
				<updated>2014-10-23T18:51:30Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Created page with &amp;quot;[![Build status v0-8 Branch](https://ci.appveyor.com/api/projects/status/6sugcxlg65e6aogb/branch/v0-8?svg=true)](https://ci.appveyor.com/project/timootei/cegui/branch/v0-8) [!...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[![Build status v0-8 Branch](https://ci.appveyor.com/api/projects/status/6sugcxlg65e6aogb/branch/v0-8?svg=true)](https://ci.appveyor.com/project/timootei/cegui/branch/v0-8)&lt;br /&gt;
[![Build status v0 Branch](https://ci.appveyor.com/api/projects/status/6sugcxlg65e6aogb/branch/v0?svg=true)](https://ci.appveyor.com/project/timootei/cegui/branch/v0)&lt;br /&gt;
[![Build status default Branch](https://ci.appveyor.com/api/projects/status/6sugcxlg65e6aogb/branch/default?svg=true)](https://ci.appveyor.com/project/timootei/cegui/branch/default)&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=Developer_Team&amp;diff=5502</id>
		<title>Developer Team</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=Developer_Team&amp;diff=5502"/>
				<updated>2014-08-21T21:19:02Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Add myself to the team :)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Something about the team should go here&lt;br /&gt;
&lt;br /&gt;
* [[User:Crazyeddie]] - project lead, project creator, programmer, wizard in his spare time&lt;br /&gt;
* [[User:Kulik]] - programmer (focus on all parts of CEGUI, especially the CEGUI Animation features, Unix support), CEED creator, GSoC mentor&lt;br /&gt;
* [[User:Ident]] - programmer (focus on the Renderers for OpenGL, OpenGL 3.2+ Core Profile, Direct3D11 and Ogre Renderer, as well as the CEED Look n' Feel Editor, Windows/Visual Studio support, the ColourPicker widget), also reviews mustard in his spare time&lt;br /&gt;
* [[User:Timotei]] - programmer (focus on the non-focus, new input system, new model-view widgets, SDK builder)&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5492</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5492"/>
				<updated>2014-08-15T18:44:14Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
This acts as a &amp;quot;dumb token&amp;quot; that it's entirely model's task to understand/process it.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* modelData : void *&lt;br /&gt;
&lt;br /&gt;
==ItemDataRole==&lt;br /&gt;
This is an enum, that contains the types of data the model is requested to provide.&lt;br /&gt;
&lt;br /&gt;
Enum members:&lt;br /&gt;
* Text&lt;br /&gt;
* ImageDecoration&lt;br /&gt;
* Tooltip&lt;br /&gt;
* &amp;lt;etc&amp;gt;&lt;br /&gt;
* UserDefined (used as a base for user-defined custom roles)&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view.&lt;br /&gt;
This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* childrenCount(modelIndex)&lt;br /&gt;
* makeIndex(child, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getData(modelIndex, role)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* ChildrenAdded - startIndex, count&lt;br /&gt;
* ChildrenRemoved - startIndex, count&lt;br /&gt;
* ChildrenDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of children for root&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=Imagedecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=text)&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-child elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of children for index&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=parentModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=imageDecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=Text)&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with child model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
We want to measure how well the new views perform compared to the old ones.&lt;br /&gt;
&lt;br /&gt;
==Tested views/widgets==&lt;br /&gt;
The following combinations of related views/widgets will be compared:&lt;br /&gt;
* ListWidget, ListView - Listbox, ItemListbox&lt;br /&gt;
* TreeView, TreeWidget - Tree&lt;br /&gt;
&lt;br /&gt;
==Process==&lt;br /&gt;
Before running the performance tests be sure to be in RELEASE mode.&lt;br /&gt;
The process of measuring the performance consists of executing the following steps. After each one, the render step should be called, to simulate a real usage:&lt;br /&gt;
&lt;br /&gt;
For list views/widgets&lt;br /&gt;
* Insert 5000 items&lt;br /&gt;
* Clear list&lt;br /&gt;
* Insert 10000 items&lt;br /&gt;
* Delete first 1500 items&lt;br /&gt;
* Repeat the following 17 times&lt;br /&gt;
** Delete 13 items&lt;br /&gt;
* Delete last 1230 items&lt;br /&gt;
* Clear list&lt;br /&gt;
* Insert 500 items&lt;br /&gt;
* Insert 100 items after the 100'th item&lt;br /&gt;
* Sort items ascending&lt;br /&gt;
* Sort items descending&lt;br /&gt;
&lt;br /&gt;
For the tree views/widgets:&lt;br /&gt;
* Insert 100 root items, each with 100 items&lt;br /&gt;
* Expand all items&lt;br /&gt;
* Clear first 3 root item's children&lt;br /&gt;
* Sort&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5491</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5491"/>
				<updated>2014-08-15T15:54:29Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
This acts as a &amp;quot;dumb token&amp;quot; that it's entirely model's task to understand/process it.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* modelData : void *&lt;br /&gt;
&lt;br /&gt;
==ItemDataRole==&lt;br /&gt;
This is an enum, that contains the types of data the model is requested to provide.&lt;br /&gt;
&lt;br /&gt;
Enum members:&lt;br /&gt;
* Text&lt;br /&gt;
* ImageDecoration&lt;br /&gt;
* Tooltip&lt;br /&gt;
* &amp;lt;etc&amp;gt;&lt;br /&gt;
* UserDefined (used as a base for user-defined custom roles)&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view.&lt;br /&gt;
This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* childrenCount(modelIndex)&lt;br /&gt;
* makeIndex(child, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getData(modelIndex, role)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* ChildrenAdded - startIndex, count&lt;br /&gt;
* ChildrenRemoved - startIndex, count&lt;br /&gt;
* ChildrenDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of children for root&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=Imagedecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=text)&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-child elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of children for index&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=parentModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=imageDecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=Text)&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with child model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
We want to measure how well the new views perform compared to the old ones.&lt;br /&gt;
&lt;br /&gt;
==Tested views/widgets==&lt;br /&gt;
The following combinations of related views/widgets will be compared:&lt;br /&gt;
* ListWidget, ListView - Listbox, ItemListbox&lt;br /&gt;
* TreeView, TreeWidget - Tree&lt;br /&gt;
&lt;br /&gt;
==Process==&lt;br /&gt;
Before running the performance tests be sure to be in RELEASE mode.&lt;br /&gt;
The process of measuring the performance will be the following:&lt;br /&gt;
&lt;br /&gt;
For list views/widgets&lt;br /&gt;
* Insert 5000 items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear list&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 10000 items&lt;br /&gt;
* Render&lt;br /&gt;
* Delete first 1500 items&lt;br /&gt;
* Render&lt;br /&gt;
* Repeat the following 17 times&lt;br /&gt;
** Delete 13 items&lt;br /&gt;
** Render&lt;br /&gt;
* Delete last 1230 items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear list&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 500 items&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 100 items after the 100'th item&lt;br /&gt;
* Render&lt;br /&gt;
* Sort items ascending&lt;br /&gt;
* Render&lt;br /&gt;
* Sort items descending&lt;br /&gt;
* Render&lt;br /&gt;
&lt;br /&gt;
For the tree views/widgets:&lt;br /&gt;
* Insert 100 root items, each with 100 items&lt;br /&gt;
* Render&lt;br /&gt;
* Expand all items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear first 3 root item's children&lt;br /&gt;
* Render&lt;br /&gt;
* Sort&lt;br /&gt;
* Render&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5473</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5473"/>
				<updated>2014-08-08T19:29:25Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Add performance process&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
This acts as a &amp;quot;dumb token&amp;quot; that it's entirely model's task to understand/process it.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* modelData : void *&lt;br /&gt;
&lt;br /&gt;
==ItemDataRole==&lt;br /&gt;
This is an enum, that contains the types of data the model is requested to provide.&lt;br /&gt;
&lt;br /&gt;
Enum members:&lt;br /&gt;
* Text&lt;br /&gt;
* ImageDecoration&lt;br /&gt;
* Tooltip&lt;br /&gt;
* &amp;lt;etc&amp;gt;&lt;br /&gt;
* UserDefined (used as a base for user-defined custom roles)&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view.&lt;br /&gt;
This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* childrenCount(modelIndex)&lt;br /&gt;
* makeIndex(child, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getData(modelIndex, role)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* ChildrenAdded - startIndex, count&lt;br /&gt;
* ChildrenRemoved - startIndex, count&lt;br /&gt;
* ChildrenDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of children for root&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=Imagedecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=text)&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-child elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of children for index&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=parentModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=imageDecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=Text)&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with child model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;br /&gt;
&lt;br /&gt;
=Performance=&lt;br /&gt;
We want to measure how well the new views perform compared to the old ones.&lt;br /&gt;
&lt;br /&gt;
==Tested views/widgets==&lt;br /&gt;
The following combinations of related views/widgets will be compared:&lt;br /&gt;
* ListWidget, ListView - Listbox, ItemListbox&lt;br /&gt;
* TreeView, TreeWidget - Tree&lt;br /&gt;
&lt;br /&gt;
==Process==&lt;br /&gt;
The process of measuring the performance will be the following:&lt;br /&gt;
&lt;br /&gt;
For each view/widget&lt;br /&gt;
* Insert 1000 items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear list&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 1001 items&lt;br /&gt;
* Render&lt;br /&gt;
* Delete first 150 items&lt;br /&gt;
* Render&lt;br /&gt;
* Repeat the following 17 times&lt;br /&gt;
** Delete 13 items&lt;br /&gt;
** Render&lt;br /&gt;
* Delete last 123 items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear list&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 137 items&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 10 items after the 100'th item&lt;br /&gt;
* Render&lt;br /&gt;
* Clear list&lt;br /&gt;
* Render&lt;br /&gt;
* Insert 1000 items&lt;br /&gt;
* Render&lt;br /&gt;
* Sort items&lt;br /&gt;
* Render&lt;br /&gt;
&lt;br /&gt;
For the tree-based views/widgets only:&lt;br /&gt;
* Insert 100 root items, each with 100 items&lt;br /&gt;
* Render&lt;br /&gt;
* Expand all items&lt;br /&gt;
* Render&lt;br /&gt;
* Clear first 3 root item's children&lt;br /&gt;
* Render&lt;br /&gt;
* Sort&lt;br /&gt;
* Render&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5287</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5287"/>
				<updated>2014-05-23T21:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* List rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
This acts as a &amp;quot;dumb token&amp;quot; that it's entirely model's task to understand/process it.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* modelData : void *&lt;br /&gt;
&lt;br /&gt;
==ItemDataRole==&lt;br /&gt;
This is an enum, that contains the types of data the model is requested to provide.&lt;br /&gt;
&lt;br /&gt;
Enum members:&lt;br /&gt;
* Text&lt;br /&gt;
* ImageDecoration&lt;br /&gt;
* Tooltip&lt;br /&gt;
* &amp;lt;etc&amp;gt;&lt;br /&gt;
* UserDefined (used as a base for user-defined custom roles)&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view.&lt;br /&gt;
This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* childrenCount(modelIndex)&lt;br /&gt;
* makeIndex(child, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getData(modelIndex, role)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* ChildrenAdded - startIndex, count&lt;br /&gt;
* ChildrenRemoved - startIndex, count&lt;br /&gt;
* ChildrenDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of children for root&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=Imagedecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=text)&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-child elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of children for index&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=parentModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=imageDecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=Text)&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with child model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5286</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5286"/>
				<updated>2014-05-23T21:26:53Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: update: dumb model index, itemdata role and row/column -&amp;gt; children&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
This acts as a &amp;quot;dumb token&amp;quot; that it's entirely model's task to understand/process it.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* modelData : void *&lt;br /&gt;
&lt;br /&gt;
==ItemDataRole==&lt;br /&gt;
This is an enum, that contains the types of data the model is requested to provide.&lt;br /&gt;
&lt;br /&gt;
Enum members:&lt;br /&gt;
* Text&lt;br /&gt;
* ImageDecoration&lt;br /&gt;
* Tooltip&lt;br /&gt;
* &amp;lt;etc&amp;gt;&lt;br /&gt;
* UserDefined (used as a base for user-defined custom roles)&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view.&lt;br /&gt;
This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* childrenCount(modelIndex)&lt;br /&gt;
* makeIndex(child, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getData(modelIndex, role)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* ChildrenAdded - startIndex, count&lt;br /&gt;
* ChildrenRemoved - startIndex, count&lt;br /&gt;
* ChildrenDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of rows for root&lt;br /&gt;
* For each row (value=[0, rowCount))&lt;br /&gt;
** Create row model index (row=current row value, parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for row index&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for row index&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of children for index&lt;br /&gt;
* For each child (value=[0, childrenCount))&lt;br /&gt;
** Create child model index (parent=parentModelIndex)&lt;br /&gt;
** Query the image to be displayed for child index (Role=imageDecoration)&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for child index (Role=Text)&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with child model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5285</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5285"/>
				<updated>2014-05-19T23:09:16Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: add tree rendering workflow (part 1)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex *&lt;br /&gt;
* indexModelData : void *&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
==ItemModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getString(modelIndex)&lt;br /&gt;
* getImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - startIndex, count&lt;br /&gt;
* Rows/ColumnsRemoved - startIndex, count&lt;br /&gt;
* Rows/ColumnsDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of rows for root&lt;br /&gt;
* For each row (value=[0, rowCount))&lt;br /&gt;
** Create row model index (row=current row value, parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for row index&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for row index&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;br /&gt;
===Full/first-time rendering===&lt;br /&gt;
Triggered first time, or when whole model changes.&lt;br /&gt;
&lt;br /&gt;
Recursive rendering procedure starting with a model index&lt;br /&gt;
* &amp;gt; Given a parent model index&lt;br /&gt;
* Query the number of rows for index&lt;br /&gt;
* For each row (value=[0, rowCount))&lt;br /&gt;
** Create row model index (row=current row value, parent=parent&amp;lt;odelIndex)&lt;br /&gt;
** Query the image to be displayed for row index&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for row index&lt;br /&gt;
** Draw text&lt;br /&gt;
** Call procedure with row model index.&lt;br /&gt;
&lt;br /&gt;
Actual rendering:&lt;br /&gt;
* Call procedure defined above with root model index (parent = 0)&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
===Item(s) modified/isolated rendering===&lt;br /&gt;
Triggered when some parts of the model changed, but not all.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=Talk:NewModelViewArchitecture&amp;diff=5283</id>
		<title>Talk:NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=Talk:NewModelViewArchitecture&amp;diff=5283"/>
				<updated>2014-05-19T17:18:39Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Created page with &amp;quot;Talk about NewModelViewArchitecture page.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Talk about NewModelViewArchitecture page.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5282</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5282"/>
				<updated>2014-05-18T22:04:40Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* ModelIndex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex *&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getString(modelIndex)&lt;br /&gt;
* getImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - startIndex, count&lt;br /&gt;
* Rows/ColumnsRemoved - startIndex, count&lt;br /&gt;
* Rows/ColumnsDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of rows for root&lt;br /&gt;
* For each row (value=[0, rowCount))&lt;br /&gt;
** Create row model index (row=current row value, parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for row index&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for row index&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5281</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5281"/>
				<updated>2014-05-18T22:03:08Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* List rendering */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getString(modelIndex)&lt;br /&gt;
* getImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - startIndex, count&lt;br /&gt;
* Rows/ColumnsRemoved - startIndex, count&lt;br /&gt;
* Rows/ColumnsDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
* Create root model index (parent=0)&lt;br /&gt;
* Query the number of rows for root&lt;br /&gt;
* For each row (value=[0, rowCount))&lt;br /&gt;
** Create row model index (row=current row value, parent=rootModelIndex)&lt;br /&gt;
** Query the image to be displayed for row index&lt;br /&gt;
** Draw image&lt;br /&gt;
** Query the text to be displayed for row index&lt;br /&gt;
** Draw text&lt;br /&gt;
* Render non-row elements&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5280</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5280"/>
				<updated>2014-05-18T21:57:55Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: add initial section for workflows&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getString(modelIndex)&lt;br /&gt;
* getImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - startIndex, count&lt;br /&gt;
* Rows/ColumnsRemoved - startIndex, count&lt;br /&gt;
* Rows/ColumnsDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;br /&gt;
&lt;br /&gt;
=Workflow examples=&lt;br /&gt;
==List rendering==&lt;br /&gt;
&lt;br /&gt;
==Tree rendering==&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5279</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5279"/>
				<updated>2014-05-18T21:30:29Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* ViewModel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getString(modelIndex)&lt;br /&gt;
* getImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - startIndex, count&lt;br /&gt;
* Rows/ColumnsRemoved - startIndex, count&lt;br /&gt;
* Rows/ColumnsDataChanged - startIndex, count&lt;br /&gt;
&lt;br /&gt;
TODO: Should we instead allow for a rectangular notification area? Like: startIndex / endIndex ?&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5266</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5266"/>
				<updated>2014-05-14T21:38:36Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: ModelIndex invalidation problem statement + 2 solutions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getItemDisplayString(modelIndex)&lt;br /&gt;
* getItemDisplayImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - start, count&lt;br /&gt;
* Rows/ColumnsRemoved - start, count&lt;br /&gt;
* Rows/ColumnsDataChanged - start, count&lt;br /&gt;
&lt;br /&gt;
==ModelIndex Invalidation==&lt;br /&gt;
Views might (read: will) store indices for a faster rendering or operations on the view. But these indices might become invalid if:&lt;br /&gt;
* the underlying model instance changes (i.e.: model is set to another instance)&lt;br /&gt;
** Solution: Just invalidate the memorized indices&lt;br /&gt;
* an index from the &amp;quot;middle&amp;quot; is removed&lt;br /&gt;
** Solution1: Create persistent model indices, like Qt does. &lt;br /&gt;
*** Con: too much management required, prone to errors.&lt;br /&gt;
** Solution2: Query the model for validity&lt;br /&gt;
*** ''isValid'' will be moved to the ViewModel&lt;br /&gt;
** Solution3: Other?&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5265</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5265"/>
				<updated>2014-05-14T21:29:55Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: ModelIndex and ViewModel details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
- decide on another concepts than row/column&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identifies uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
Properties:&lt;br /&gt;
* row : size_t&lt;br /&gt;
* column : size_t&lt;br /&gt;
* parent : ModelIndex&lt;br /&gt;
* modelData : void * (protected)&lt;br /&gt;
&lt;br /&gt;
Methods:&lt;br /&gt;
* isValid&lt;br /&gt;
&lt;br /&gt;
Since ModelIndex will be '''friend''' with the ViewModel, only the VM will be able to use the model data and thus prevent View(s) to use it by mistake.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
Structure-related methods:&lt;br /&gt;
* rowCount(modelIndex)&lt;br /&gt;
* columnCount(modelIndex)&lt;br /&gt;
* makeIndex(row, column, parentModelIndex)&lt;br /&gt;
* getParentIndex(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Data-provider methods:&lt;br /&gt;
* getItemDisplayString(modelIndex)&lt;br /&gt;
* getItemDisplayImage(modelIndex)&lt;br /&gt;
&lt;br /&gt;
Events:&lt;br /&gt;
* Rows/ColumnsAdded - start, count&lt;br /&gt;
* Rows/ColumnsRemoved - start, count&lt;br /&gt;
* Rows/ColumnsDataChanged - start, count&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5263</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5263"/>
				<updated>2014-05-13T22:08:17Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: rename to *View&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identify uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList -&amp;gt; ComboView&lt;br /&gt;
* Tree -&amp;gt; TreeView&lt;br /&gt;
* ListBox -&amp;gt; ListView&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* GridView&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by GridView)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5238</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5238"/>
				<updated>2014-05-07T22:24:10Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: first draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;br /&gt;
&lt;br /&gt;
=Introduction=&lt;br /&gt;
The new architecture aims to unify the underlying implementation of several widgets so that they will use a common base model provider. This will involve a lot of ABI and API breakage.&lt;br /&gt;
&lt;br /&gt;
=Proposed architecture=&lt;br /&gt;
TODO&lt;br /&gt;
&lt;br /&gt;
==ModelIndex==&lt;br /&gt;
Identify uniquely items in the model.&lt;br /&gt;
&lt;br /&gt;
==ViewModel==&lt;br /&gt;
The model for the view, that provides data like items count to the view. This is implemented by the developers that want to use this new architecture.&lt;br /&gt;
&lt;br /&gt;
=Affected widgets=&lt;br /&gt;
===Changed (to the new architecture) widgets===&lt;br /&gt;
* ComboBox + ComboDropList&lt;br /&gt;
* Tree&lt;br /&gt;
* ListBox&lt;br /&gt;
&lt;br /&gt;
===New widgets===&lt;br /&gt;
* Grid&lt;br /&gt;
* ListBoxWidget (combines model &amp;amp; view together for simple usage cases)&lt;br /&gt;
&lt;br /&gt;
===Removed/deprecated widgets===&lt;br /&gt;
* MultiColumnList (replaced by Grid)&lt;br /&gt;
* ItemListbox (duplicated by ListBox)&lt;br /&gt;
&lt;br /&gt;
===To decide===&lt;br /&gt;
* ItemListBase &lt;br /&gt;
** It's used in other places like: MenuBase and ScrolledItemListBase&lt;br /&gt;
** Remove the other usages as well?&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5237</id>
		<title>NewModelViewArchitecture</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=NewModelViewArchitecture&amp;diff=5237"/>
				<updated>2014-05-07T21:12:10Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: initial commit.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Homepage for the WIP Model-View architecture for CEGUI widgets!&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=News_Archive&amp;diff=5114</id>
		<title>News Archive</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=News_Archive&amp;diff=5114"/>
				<updated>2014-01-21T20:34:55Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Small date fix for mass import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== CEGUI Version 0.8.2 released! by ''' [[User:Crazyeddie|Crazyeddie]] 12th June 2013 ===&lt;br /&gt;
See more details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6460 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.8.1 released! by ''' [[User:Crazyeddie|Crazyeddie]] 5th June 2013 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6458 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.8.0 released! by ''' [[User:Crazyeddie|Crazyeddie]] 26th May 2013 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6453 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.9 released! by ''' [[User:Crazyeddie|Crazyeddie]] 13th January 2013 === &lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6323 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.8 released! by ''' [[User:Crazyeddie|Crazyeddie]] 8th January 2013 === &lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6320 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 11 release by ''' [[User:Kulik|Kulik]] 4th November 2012 === &lt;br /&gt;
Unstable snapshot11 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6270 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 10 release by ''' [[User:Kulik|Kulik]] 28th July 2012 === &lt;br /&gt;
Unstable snapshot10 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6175 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 9 release by ''' [[User:Kulik|Kulik]] 15th July 2012 === &lt;br /&gt;
Unstable snapshot9 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6159 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.7 released! by ''' [[User:Crazyeddie|Crazyeddie]] 23rd June 2012 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6141 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 8 release by ''' [[User:Kulik|Kulik]] 10th June 2012 === &lt;br /&gt;
Unstable snapshot8 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6128 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 7 release by ''' [[User:Kulik|Kulik]] 22nd April 2012 === &lt;br /&gt;
Unstable snapshot7 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6089 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI is participating in Google Summer of Code 2012! by ''' [[User:Kulik|Kulik]] 19th March 2012 ===&lt;br /&gt;
Read more details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=10&amp;amp;t=6032 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.6 released! by ''' [[User:Crazyeddie|Crazyeddie]] 22nd January 2012 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5978 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 6 release by ''' [[User:Kulik|Kulik]] 9th January 2012 === &lt;br /&gt;
Unstable snapshot6 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5965 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 5 release by ''' [[User:Kulik|Kulik]] 29th November 2011 === &lt;br /&gt;
Unstable snapshot5 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5905 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 4 release by ''' [[User:Kulik|Kulik]] 31th August 2011 === &lt;br /&gt;
Unstable snapshot4 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5799 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 3 release by ''' [[User:Kulik|Kulik]] 31th July 2011 === &lt;br /&gt;
Unstable snapshot3 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5750 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 2 release by ''' [[User:Kulik|Kulik]] 6th June 2011 === &lt;br /&gt;
Unstable snapshot2 preview release, capable of imageset editing and some layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5640 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== First public CEGUI Unified editor release by ''' [[User:Kulik|Kulik]] 1th May 2011 === &lt;br /&gt;
Unstable snapshot preview release, capable of imageset editing and some layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5565 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== Wiki has undertaken major changes! by ''' [[User:Kulik|Kulik]] 6th March 2011 ===&lt;br /&gt;
The amount of maintenance work has been lowered and the overall usefulness of the wiki has (hopefully) been much increased.&lt;br /&gt;
More details in this [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=1&amp;amp;t=5449 forum thread].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.5 released! by ''' [[User:Crazyeddie|Crazyeddie]] 20th November 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5280 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.4 released! by ''' [[User:Crazyeddie|Crazyeddie]] 11th October 2010 ===&lt;br /&gt;
Emergency fix for 0.7.3 release! [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5182 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.3 released! by ''' [[User:Crazyeddie|Crazyeddie]] 8th October 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5182 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.2 released! by ''' [[User:Crazyeddie|Crazyeddie]] 29th August 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5096 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CELayoutEditor 0.7.1 released for Windows! by ''' [[User:scriptkid|scriptkid]] 1th January 2010 ===&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.7.1]] page for the link.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Pirate Princess&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 25th November 2009 ===&lt;br /&gt;
Pirate Princess is a semi-casual word game based adventure, just finished and on sale. Of course it uses CEGUI (a lot!). Check out the website:&lt;br /&gt;
[http://www.moonpod.com/English/about_pirateprincess.php Pirate Princess - A word game based adventure!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.7.1 is Released! by ''' [[User:scriptkid|scriptkid]] 26th October 2009 ===&lt;br /&gt;
See the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=4443 details here]&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Cube Combat&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 20th October 2009 ===&lt;br /&gt;
Cube Combat is a bomberman remake game, which uses CEGUI. It looks &amp;amp; feels nice and polished. Check out the website:&lt;br /&gt;
[http://www.cubecombat.net Cube Combat - A 3D bomberman remake!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.7.0 is Released! by ''' [[User:CrazyEddie|CrazyEddie]] 20th September 2009 ===&lt;br /&gt;
See the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=4340 details here]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.6.3 release of the Layout Editor! by ''' [[User:scriptkid|scriptkid]] 9th June 2009 ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Snakeworlds&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 3rd April 2009 ===&lt;br /&gt;
Snakeworlds is a snake remake game, which uses CEGUI. Check out the website:&lt;br /&gt;
[http://www.snakeworldsgame.com Snakeworlds - A spherical snake game!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.6.2 Released! by ''' [[User:CrazyEddie|CrazyEddie]] 3rd December 2008 ===&lt;br /&gt;
&lt;br /&gt;
Read the [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3712/ buzz]&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.x in-progress LayoutEditor! by ''' [[User:scriptkid|scriptkid]] 2th August 2008 ===&lt;br /&gt;
&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.6.x]] page for the link (bottom of the page!).&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.x in-progress LayoutEditor! by ''' [[User:scriptkid|scriptkid]] 7th May 2008 ===&lt;br /&gt;
&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.6.0]] page for the link (bottom of the page!).&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.0 Release of CEGUI and tools! by ''' [[User:The CEGUI Development Team|The CEGUI Development Team]] 27th March 2008 ===&lt;br /&gt;
The Crazy Eddie's GUI System project (crayzedsgui on sourceforge.net) is pleased to announce the release of version 0.6.0 of the Crazy Eddie's GUI System library and associated CELayoutEditor and CEImagesetEditor tools.&lt;br /&gt;
&lt;br /&gt;
Founded in 2003, Crazy Eddie's GUI System has consistently been one of the favourite choices for the serious game or multimedia developer needing a mature, stable and flexible rendered GUI solution. The library is open source, highly configurable and offers virtually unrivalled skinning opportunities via its &amp;quot;Falagard&amp;quot; XML skinning system. Crazy Eddie's GUI System library is released under the MIT license, thus offering the ultimate flexibility for all usage scenarios.&lt;br /&gt;
&lt;br /&gt;
The 0.6.0 release comes some 16 months after the previous release, and marks the official return of Paul D Turner (CrazyEddie) as project leader and as a permanent member on the development team.&lt;br /&gt;
&lt;br /&gt;
For more information about Crazy Eddie's GUI System see the project website at http://www.cegui.org.uk. Support requests for the library and associated tools, in the first instance, should be directed at the Crazy Eddie's GUI System project forums at http://forums.cegui.org.uk.&lt;br /&gt;
&lt;br /&gt;
You can get the files at the [[Downloads|CEGUI Downloads page]].&lt;br /&gt;
&lt;br /&gt;
See also this forum thread: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=13973&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New MSVC++ 9 binary packages for CEGUI and [[SILLY]] by ''' [[User:CrazyEddie|CrazyEddie]] 3rd February 2008 ===&lt;br /&gt;
We have released binary dependency packages and pre-built SDK packages for both [[SILLY]] 0.1.0 and CEGUI 0.5.0b for use with Microsoft's Visual C++ 9 (2008 edition) compiler.&lt;br /&gt;
&lt;br /&gt;
See the [[Downloads]] page and the announcement on the [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2965 forums] for additional information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 18th December 2007 ===&lt;br /&gt;
A new update that adds new features to the property grid, improves exception handling, adds version information and more misc stuff has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2825/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEImagesetEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 10th December 2007 ===&lt;br /&gt;
A new update that adds VS2003 &amp;amp; VS2005 solutions and modifies configuration settings has been &lt;br /&gt;
committed to the CEImagesetEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2822/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 06th December 2007 ===&lt;br /&gt;
A new update that adds Vectored Exception Handling (VEH) support, stack trace info to all thrown exceptions and&lt;br /&gt;
other misc stuff has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2821/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New Widget: GroupBox ''' [[User:Scriptkid|Scriptkid]] 02th December 2007 ===&lt;br /&gt;
A new update adds Levia's GroupBox to the trunk. Thanks to Levia!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEGUI SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 30th November 2007 ===&lt;br /&gt;
A new update that adds RTTI info to debug builds and performs some logger modifications has been committed to the CEGUI SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2816/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 22th November 2007 ===&lt;br /&gt;
A new update that includes important bug fixes and internal changes that increase performance and code quality has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2811/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEGUI SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 10th November 2007 ===&lt;br /&gt;
A new update that adds type, file name and line number to all thrown exceptions has been committed to the CEGUI SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2799/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New developments by ''' [[User:Scriptkid|Scriptkid]] 06th November 2007 ===&lt;br /&gt;
Starting a few weeks ago, new development is being done on CEGUI, mainly on its tools. User [[User:fjeronimo|fjeronimo]] has made some valuable modifications already. Besides that, we are moving through the Mantis list and verifying+fixing bugs. We will keep you up-to-date regarding these matters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0b source packages by [[User:CrazyEddie|CrazyEddie]] 28th November 2006 ===&lt;br /&gt;
We have issued new versions of the 0.5.0 source packages - the previous ones were missing the files for the Microsoft Direct3D based renderer modules, the packages contain no other changes Thanks go to dmail for raising this issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0b binary packages for Win32 by [[User:CrazyEddie|CrazyEddie]] 14th November 2006 ===&lt;br /&gt;
The Win32 binary dependency and SDK packages released on the 6th contained an inconsistency related to the [[SILLY]] library. Today I have issued a new set of binary packages which have been fixed - the new version is known as 0.5.0b, and contains no other changes. Many thanks to forum member vasmann for alerting me to the issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0 stable by [[User:CrazyEddie|CrazyEddie]] 6th November 2006 ===&lt;br /&gt;
It has been almost a year in the making, but it is finally here! The CEGUI development team is immensely proud to announce the release of Crazy Eddie's GUI System 0.5.0 - the first stable release of code in the 0.5.x series.&lt;br /&gt;
&lt;br /&gt;
There are pretty vast changes in this release from the previous stable (0.4.1) - many of these changes are breaking, so please agian review [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]] to see details of most of these changes.&lt;br /&gt;
&lt;br /&gt;
This release consists of various files that you may need, depending on your usage of the system. We are providing source packages, documentation packages, dependency packages, and binary SDK packages (for VC7.1 and VC8).&lt;br /&gt;
&lt;br /&gt;
To coincide with this release, we are also happy to announce a stable 0.1.0 release of Simple Image Loading LibrarY (SILLY), and the 0.5.0 release of the CELayoutEditor. Please see the [[Downloads|downloads page]] for full details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.5.0 Release Candidate 2 by [[User:Dalfy|Dalfy]] 13rd august 2006 ===&lt;br /&gt;
We are pleased to announce the second release candidate of the 0.5 branches of CEGUI. There has been a lot of changes between 0.4.1 and 0.5.0. They are listed in [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]]. Please have a try at it and help us get a final release soon. Check the download page. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.5.0 Release Candidate 1 by [[User:Dalfy|Dalfy]] 20th June 2006 ===&lt;br /&gt;
We are pleased to announce the first release candidate of the 0.5 branches of CEGUI. There has been a lot of changes between 0.4.1 and 0.5.0. They are listed in [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]]. Please have a try at it and help us get a final release soon by sending a lot of bug report in Mantis bug tracker. The download page for CEGUI-0.5.0-RC1 contains some typos but most link are already valid and mirrored on sourceforge. The link on the download page are going to be fixed during the day. &lt;br /&gt;
&lt;br /&gt;
For any question regarding this release you can use either the forum either irc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Migration to Subversion by [[User:CrazyEddie|CrazyEddie]] 3rd April 2006 ===&lt;br /&gt;
We have taken the decision to migrate the code for main CEGUI Mk-2 library and the CELayoutEditor tool from using the CVS revision control system, over to Subversion (SVN). If you're using the stable releases, this will not affect you at all. If you're using code out of some branch of CVS, then you will need to switch to SVN instead - we will not be maintaining both repositories. You will find that for general usage, CVS and SVN are similar, and have similar commands. For Windows users, we heartily recommend the use of [http://tortoisesvn.tigris.org/ TortoiseSVN].&lt;br /&gt;
&lt;br /&gt;
For full details of how to obtain the source code from the subversion repository, please see the page [[Obtaining the library source from Subversion|HOWTO: Obtain the library source from subversion]]&lt;br /&gt;
&lt;br /&gt;
All 'ceguiaddons' projects will continue to use CVS for revision control.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Site Moved (again) ===&lt;br /&gt;
We have now moved the site back to the sourceforge servers, and made a few changes as to the way the site is handled in general - as you have probably noticed!&lt;br /&gt;
&lt;br /&gt;
Basically the main 'content' areas of the site are now entirely wiki based, and we also have a few other bits installed to handle certain requirements where the wiki is less suited to the task.&lt;br /&gt;
&lt;br /&gt;
The features of the new site are:&lt;br /&gt;
* Wiki based system for all main site content&lt;br /&gt;
* phpBB2 being used for community forums&lt;br /&gt;
* Coppermine based gallery&lt;br /&gt;
* Mantis for all bug and feature tracking&lt;br /&gt;
* Single, unified, log-in for all site areas&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=News_Archive&amp;diff=5113</id>
		<title>News Archive</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=News_Archive&amp;diff=5113"/>
				<updated>2014-01-19T13:40:38Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Small fix for mass import&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== CEGUI Version 0.8.2 released! by ''' [[User:Crazyeddie|Crazyeddie]] 12th June 2013 ===&lt;br /&gt;
See more details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6460 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.8.1 released! by ''' [[User:Crazyeddie|Crazyeddie]] 5th June 2013 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6458 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.8.0 released! by ''' [[User:Crazyeddie|Crazyeddie]] 26th May 2013 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6453 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.9 released! by ''' [[User:Crazyeddie|Crazyeddie]] 13th January 2013 === &lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6323 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.8 released! by ''' [[User:Crazyeddie|Crazyeddie]] 8th January 2013 === &lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6320 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 11 release by ''' [[User:Kulik|Kulik]] 4th November 2012 === &lt;br /&gt;
Unstable snapshot11 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6270 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 10 release by ''' [[User:Kulik|Kulik]] 28th July 2012 === &lt;br /&gt;
Unstable snapshot10 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6175 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 9 release by ''' [[User:Kulik|Kulik]] 15th July 2012 === &lt;br /&gt;
Unstable snapshot9 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6159 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.7 released! by ''' [[User:Crazyeddie|Crazyeddie]] 23rd June 2012 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=6141 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 8 release by ''' [[User:Kulik|Kulik]] 10th June 2012 === &lt;br /&gt;
Unstable snapshot8 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6128 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 7 release by ''' [[User:Kulik|Kulik]] 22nd April 2012 === &lt;br /&gt;
Unstable snapshot7 preview release, capable of imageset editing, layout editing and some animation editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=6089 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI is participating in Google Summer of Code 2012! by ''' [[User:Kulik|Kulik]] 19th March 2012 ===&lt;br /&gt;
Read more details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=10&amp;amp;t=6032 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.6 released! by ''' [[User:Crazyeddie|Crazyeddie]] 22nd January 2012 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5978 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 6 release by ''' [[User:Kulik|Kulik]] 9th January 2012 === &lt;br /&gt;
Unstable snapshot6 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5965 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 5 release by ''' [[User:Kulik|Kulik]] 29th November 2011 === &lt;br /&gt;
Unstable snapshot5 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5905 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 4 release by ''' [[User:Kulik|Kulik]] 31th August 2011 === &lt;br /&gt;
Unstable snapshot4 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5799 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 3 release by ''' [[User:Kulik|Kulik]] 31th July 2011 === &lt;br /&gt;
Unstable snapshot3 preview release, capable of imageset editing and layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5750 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Unified editor snapshot 2 release by ''' [[User:Kulik|Kulik]] 6th June 2011 === &lt;br /&gt;
Unstable snapshot2 preview release, capable of imageset editing and some layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5640 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== First public CEGUI Unified editor release by ''' [[User:Kulik|Kulik]] 1th May 2011 === &lt;br /&gt;
Unstable snapshot preview release, capable of imageset editing and some layout editing - read more in the [http://cegui.org.uk/phpBB2/viewtopic.php?f=15&amp;amp;t=5565 announcement thread]&lt;br /&gt;
&lt;br /&gt;
=== Wiki has undertaken major changes! by ''' [[User:Kulik|Kulik]] 6th March 2011 ===&lt;br /&gt;
The amount of maintenance work has been lowered and the overall usefulness of the wiki has (hopefully) been much increased.&lt;br /&gt;
More details in this [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=1&amp;amp;t=5449 forum thread].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.5 released! by ''' [[User:Crazyeddie|Crazyeddie]] 20th November 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5280 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.4 released! by ''' [[User:Crazyeddie|Crazyeddie]] 11th October 2010 ===&lt;br /&gt;
Emergency fix for 0.7.3 release! [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5182 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.3 released! by ''' [[User:Crazyeddie|Crazyeddie]] 8th October 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5182 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI Version 0.7.2 released! by ''' [[User:Crazyeddie|Crazyeddie]] 29th August 2010 ===&lt;br /&gt;
Read all the details in the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=5096 official announcement].&lt;br /&gt;
&lt;br /&gt;
=== CELayoutEditor 0.7.1 released for Windows! by ''' [[User:scriptkid|scriptkid]] 1th January 2010 ===&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.7.1]] page for the link.&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Pirate Princess&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 25th November 2009 ===&lt;br /&gt;
Pirate Princess is a semi-casual word game based adventure, just finished and on sale. Of course it uses CEGUI (a lot!). Check out the website:&lt;br /&gt;
[http://www.moonpod.com/English/about_pirateprincess.php Pirate Princess - A word game based adventure!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.7.1 is Released! by ''' [[User:scriptkid|scriptkid]] 26th October 2009 ===&lt;br /&gt;
See the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=4443 details here]&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Cube Combat&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 20th October 2009 ===&lt;br /&gt;
Cube Combat is a bomberman remake game, which uses CEGUI. It looks &amp;amp; feels nice and polished. Check out the website:&lt;br /&gt;
[http://www.cubecombat.net Cube Combat - A 3D bomberman remake!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.7.0 is Released! by ''' [[User:CrazyEddie|CrazyEddie]] 20th September 2009 ===&lt;br /&gt;
See the [http://www.cegui.org.uk/phpBB2/viewtopic.php?f=6&amp;amp;t=4340 details here]&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.6.3 release of the Layout Editor! by ''' [[User:scriptkid|scriptkid]] 9th June 2009 ===&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;Snakeworlds&amp;quot; (game) released! by ''' [[User:scriptkid|scriptkid]] 3rd April 2009 ===&lt;br /&gt;
Snakeworlds is a snake remake game, which uses CEGUI. Check out the website:&lt;br /&gt;
[http://www.snakeworldsgame.com Snakeworlds - A spherical snake game!].&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.6.2 Released! by ''' [[User:CrazyEddie|CrazyEddie]] 3rd December 2008 ===&lt;br /&gt;
&lt;br /&gt;
Read the [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=3712/ buzz]&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.x in-progress LayoutEditor! by ''' [[User:scriptkid|scriptkid]] 2th August 2008 ===&lt;br /&gt;
&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.6.x]] page for the link (bottom of the page!).&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.x in-progress LayoutEditor! by ''' [[User:scriptkid|scriptkid]] 7th May 2008 ===&lt;br /&gt;
&lt;br /&gt;
See the [[CELayoutEditor Downloads 0.6.0]] page for the link (bottom of the page!).&lt;br /&gt;
&lt;br /&gt;
=== New 0.6.0 Release of CEGUI and tools! by ''' [[User:The CEGUI Development Team|The CEGUI Development Team]] 27th March 2008 ===&lt;br /&gt;
The Crazy Eddie's GUI System project (crayzedsgui on sourceforge.net) is pleased to announce the release of version 0.6.0 of the Crazy Eddie's GUI System library and associated CELayoutEditor and CEImagesetEditor tools.&lt;br /&gt;
&lt;br /&gt;
Founded in 2003, Crazy Eddie's GUI System has consistently been one of the favourite choices for the serious game or multimedia developer needing a mature, stable and flexible rendered GUI solution. The library is open source, highly configurable and offers virtually unrivalled skinning opportunities via its &amp;quot;Falagard&amp;quot; XML skinning system. Crazy Eddie's GUI System library is released under the MIT license, thus offering the ultimate flexibility for all usage scenarios.&lt;br /&gt;
&lt;br /&gt;
The 0.6.0 release comes some 16 months after the previous release, and marks the official return of Paul D Turner (CrazyEddie) as project leader and as a permanent member on the development team.&lt;br /&gt;
&lt;br /&gt;
For more information about Crazy Eddie's GUI System see the project website at http://www.cegui.org.uk. Support requests for the library and associated tools, in the first instance, should be directed at the Crazy Eddie's GUI System project forums at http://forums.cegui.org.uk.&lt;br /&gt;
&lt;br /&gt;
You can get the files at the [[Downloads|CEGUI Downloads page]].&lt;br /&gt;
&lt;br /&gt;
See also this forum thread: http://www.cegui.org.uk/phpBB2/viewtopic.php?p=13973&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New MSVC++ 9 binary packages for CEGUI and [[SILLY]] by ''' [[User:CrazyEddie|CrazyEddie]] 3rd February 2008 ===&lt;br /&gt;
We have released binary dependency packages and pre-built SDK packages for both [[SILLY]] 0.1.0 and CEGUI 0.5.0b for use with Microsoft's Visual C++ 9 (2008 edition) compiler.&lt;br /&gt;
&lt;br /&gt;
See the [[Downloads]] page and the announcement on the [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2965 forums] for additional information.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 18th December 2007 ===&lt;br /&gt;
A new update that adds new features to the property grid, improves exception handling, adds version information and more misc stuff has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2825/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEImagesetEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 10th December 2007 ===&lt;br /&gt;
A new update that adds VS2003 &amp;amp; VS2005 solutions and modifies configuration settings has been &lt;br /&gt;
committed to the CEImagesetEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2822/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 06th December 2007 ===&lt;br /&gt;
A new update that adds Vectored Exception Handling (VEH) support, stack trace info to all thrown exceptions and&lt;br /&gt;
other misc stuff has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2821/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New Widget: GroupBox ''' [[User:Scriptkid|Scriptkid]] 02th December 2007 ===&lt;br /&gt;
A new update adds Levia's GroupBox to the trunk. Thanks to Levia!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEGUI SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 30th November 2007 ===&lt;br /&gt;
A new update that adds RTTI info to debug builds and performs some logger modifications has been committed to the CEGUI SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2816/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CELayoutEditor SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 22th November 2007 ===&lt;br /&gt;
A new update that includes important bug fixes and internal changes that increase performance and code quality has been committed to the CELayoutEditor SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2811/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New CEGUI SVN trunk update by ''' [[User:fjeronimo|fjeronimo]] 10th November 2007 ===&lt;br /&gt;
A new update that adds type, file name and line number to all thrown exceptions has been committed to the CEGUI SVN trunk.&lt;br /&gt;
&lt;br /&gt;
More details can be found in the following [http://www.cegui.org.uk/phpBB2/viewtopic.php?t=2799/ forum entry].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== New developments by ''' [[User:Scriptkid|Scriptkid]] 06th November 2007 ===&lt;br /&gt;
Starting a few weeks ago, new development is being done on CEGUI, mainly on its tools. User [[User:fjeronimo|fjeronimo]] has made some valuable modifications already. Besides that, we are moving through the Mantis list and verifying+fixing bugs. We will keep you up-to-date regarding these matters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0b source packages by [[User:CrazyEddie|CrazyEddie]] 28th November 2006 ===&lt;br /&gt;
We have issued new versions of the 0.5.0 source packages - the previous ones were missing the files for the Microsoft Direct3D based renderer modules, the packages contain no other changes Thanks go to dmail for raising this issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0b binary packages for Win32 by [[User:CrazyEddie|CrazyEddie]] 14th November 2006 ===&lt;br /&gt;
The Win32 binary dependency and SDK packages released on the 6th contained an inconsistency related to the [[SILLY]] library. Today I have issued a new set of binary packages which have been fixed - the new version is known as 0.5.0b, and contains no other changes. Many thanks to forum member vasmann for alerting me to the issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Release of 0.5.0 stable by [[User:CrazyEddie|CrazyEddie]] 6th November 2006 ===&lt;br /&gt;
It has been almost a year in the making, but it is finally here! The CEGUI development team is immensely proud to announce the release of Crazy Eddie's GUI System 0.5.0 - the first stable release of code in the 0.5.x series.&lt;br /&gt;
&lt;br /&gt;
There are pretty vast changes in this release from the previous stable (0.4.1) - many of these changes are breaking, so please agian review [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]] to see details of most of these changes.&lt;br /&gt;
&lt;br /&gt;
This release consists of various files that you may need, depending on your usage of the system. We are providing source packages, documentation packages, dependency packages, and binary SDK packages (for VC7.1 and VC8).&lt;br /&gt;
&lt;br /&gt;
To coincide with this release, we are also happy to announce a stable 0.1.0 release of Simple Image Loading LibrarY (SILLY), and the 0.5.0 release of the CELayoutEditor. Please see the [[Downloads|downloads page]] for full details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.5.0 Release Candidate 2 by [[User:Dalfy|Dalfy]] 13 august 2006 ===&lt;br /&gt;
We are pleased to announce the second release candidate of the 0.5 branches of CEGUI. There has been a lot of changes between 0.4.1 and 0.5.0. They are listed in [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]]. Please have a try at it and help us get a final release soon. Check the download page. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== CEGUI 0.5.0 Release Candidate 1 by [[User:Dalfy|Dalfy]] 20 June 2006 ===&lt;br /&gt;
We are pleased to announce the first release candidate of the 0.5 branches of CEGUI. There has been a lot of changes between 0.4.1 and 0.5.0. They are listed in [[Changes and Porting Tips for 0.5.0|Release Notes 0.5.X]]. Please have a try at it and help us get a final release soon by sending a lot of bug report in Mantis bug tracker. The download page for CEGUI-0.5.0-RC1 contains some typos but most link are already valid and mirrored on sourceforge. The link on the download page are going to be fixed during the day. &lt;br /&gt;
&lt;br /&gt;
For any question regarding this release you can use either the forum either irc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Migration to Subversion by [[User:CrazyEddie|CrazyEddie]] 11:13, 3 April 2006 (PDT) ===&lt;br /&gt;
We have taken the decision to migrate the code for main CEGUI Mk-2 library and the CELayoutEditor tool from using the CVS revision control system, over to Subversion (SVN). If you're using the stable releases, this will not affect you at all. If you're using code out of some branch of CVS, then you will need to switch to SVN instead - we will not be maintaining both repositories. You will find that for general usage, CVS and SVN are similar, and have similar commands. For Windows users, we heartily recommend the use of [http://tortoisesvn.tigris.org/ TortoiseSVN].&lt;br /&gt;
&lt;br /&gt;
For full details of how to obtain the source code from the subversion repository, please see the page [[Obtaining the library source from Subversion|HOWTO: Obtain the library source from subversion]]&lt;br /&gt;
&lt;br /&gt;
All 'ceguiaddons' projects will continue to use CVS for revision control.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Site Moved (again) ===&lt;br /&gt;
We have now moved the site back to the sourceforge servers, and made a few changes as to the way the site is handled in general - as you have probably noticed!&lt;br /&gt;
&lt;br /&gt;
Basically the main 'content' areas of the site are now entirely wiki based, and we also have a few other bits installed to handle certain requirements where the wiki is less suited to the task.&lt;br /&gt;
&lt;br /&gt;
The features of the new site are:&lt;br /&gt;
* Wiki based system for all main site content&lt;br /&gt;
* phpBB2 being used for community forums&lt;br /&gt;
* Coppermine based gallery&lt;br /&gt;
* Mantis for all bug and feature tracking&lt;br /&gt;
* Single, unified, log-in for all site areas&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4953</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4953"/>
				<updated>2013-07-19T21:02:02Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Semantics Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
* Payload:&lt;br /&gt;
** float[2]&lt;br /&gt;
** PointerSource enum member&lt;br /&gt;
*** PS_Left&lt;br /&gt;
*** PS_Middle&lt;br /&gt;
*** PS_Right&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseMove + injectMousePosition&lt;br /&gt;
* PointerMove&lt;br /&gt;
injectMouseButtonDown&lt;br /&gt;
* PointerHold (PointerSource)&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL + CLICK)&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerActivate (PointerSource)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivate (PointerSource)&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
&amp;lt;strike&amp;gt;'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&amp;lt;/strike&amp;gt;: YES&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&amp;lt;/strike&amp;gt;: We go for 'PointerSource' enum in the Semantic Event payload.&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* GoToPreviousCharacter (left arrow)&lt;br /&gt;
* GoToPreviousWord (CTRL + left arrow)&lt;br /&gt;
* GoToNextCharacter (right arrow)&lt;br /&gt;
* GoToNextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
injectMouseWheelChange&lt;br /&gt;
* VerticalScroll&lt;br /&gt;
* HorizontalScroll&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4952</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4952"/>
				<updated>2013-07-19T09:18:33Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Proposed design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
* Payload:&lt;br /&gt;
** float[2]&lt;br /&gt;
** PointerSource enum member&lt;br /&gt;
*** PS_Left&lt;br /&gt;
*** PS_Middle&lt;br /&gt;
*** PS_Right&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseMove + injectMousePosition&lt;br /&gt;
* PointerMove&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivate (PointerSource)&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
&amp;lt;strike&amp;gt;'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&amp;lt;/strike&amp;gt;: YES&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&amp;lt;/strike&amp;gt;: We go for 'PointerSource' enum in the Semantic Event payload.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivate&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* GoToPreviousCharacter (left arrow)&lt;br /&gt;
* GoToPreviousWord (CTRL + left arrow)&lt;br /&gt;
* GoToNextCharacter (right arrow)&lt;br /&gt;
* GoToNextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
injectMouseWheelChange&lt;br /&gt;
* VerticalScroll&lt;br /&gt;
* HorizontalScroll&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4951</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4951"/>
				<updated>2013-07-18T21:04:48Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Semantics Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
* Payload: float (for now)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&lt;br /&gt;
&lt;br /&gt;
'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivate&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* GoToPreviousCharacter (left arrow)&lt;br /&gt;
* GoToPreviousWord (CTRL + left arrow)&lt;br /&gt;
* GoToNextCharacter (right arrow)&lt;br /&gt;
* GoToNextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
injectMouseWheelChange&lt;br /&gt;
* VerticalScroll&lt;br /&gt;
* HorizontalScroll&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4950</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4950"/>
				<updated>2013-07-18T20:43:18Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Proposed design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
* Payload: float (for now)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&lt;br /&gt;
&lt;br /&gt;
'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivate&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* GoToPreviousCharacter (left arrow)&lt;br /&gt;
* GoToPreviousWord (CTRL + left arrow)&lt;br /&gt;
* GoToNextCharacter (right arrow)&lt;br /&gt;
* GoToNextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
&lt;br /&gt;
injectMouseWheelChange&lt;br /&gt;
* VerticalScroll&lt;br /&gt;
* HorizontalScroll&lt;br /&gt;
&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4949</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4949"/>
				<updated>2013-07-16T21:04:51Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Semantics Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivate&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&lt;br /&gt;
&lt;br /&gt;
'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivate&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* GoToPreviousCharacter (left arrow)&lt;br /&gt;
* GoToPreviousWord (CTRL + left arrow)&lt;br /&gt;
* GoToNextCharacter (right arrow)&lt;br /&gt;
* GoToNextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4948</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4948"/>
				<updated>2013-07-16T16:43:56Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Semantics Table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&lt;br /&gt;
&lt;br /&gt;
'''Question2:''' What we do with the right/middle/extra mouse buttons (TabControl uses middle and nobutton buttons)?:&lt;br /&gt;
* Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
* Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivation&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* PreviousCharacter (left arrow)&lt;br /&gt;
* PreviousWord (CTRL + left arrow)&lt;br /&gt;
* NextCharacter (right arrow)&lt;br /&gt;
* NextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4947</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4947"/>
				<updated>2013-07-16T16:42:13Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Add semantic input events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key *** || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm) **** (check the semantics table)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum/int (see below table)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values (members of an ENUM) and the raw event(s) from which they are generated.&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonDown + injectMouseButtonUp&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectMultipleItems (SHIFT + click)&lt;br /&gt;
* SelectCumulative (CTRL+CLICK)&lt;br /&gt;
injectMouseButtonClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
injectMouseButtonDoubleClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectWord (double click)&lt;br /&gt;
injectMouseButtonTripleClick&lt;br /&gt;
* PointerActivation&lt;br /&gt;
* SelectAll (triple click)&lt;br /&gt;
'''Question:''' Maybe we should create a standalone event type for pointer activation which also 'records' the number of activations? (for example in the case of double/triple click). The editbox uses double/triple click to select all text. Maybe let semantic action 'select all?'&lt;br /&gt;
&lt;br /&gt;
'''Question2:''' What we do with the right/middle/extra mouse buttons? -- TabControl uses middle and nobutton buttons.&lt;br /&gt;
&lt;br /&gt;
** Introduce the idea of 'PointerSource' which can be left/right/middle&lt;br /&gt;
** Add separate values: LeftPointerActivation, RightPointerActivation, etc? (I'd go for this)&lt;br /&gt;
&lt;br /&gt;
injectMouseButtonUp&lt;br /&gt;
* PointerDeactivation&lt;br /&gt;
&lt;br /&gt;
injectKeyDown + injectKeyUp&lt;br /&gt;
* DeleteLastCharacter (backspace)&lt;br /&gt;
* DeletePreviousCharacter (del)&lt;br /&gt;
* Confirm/Submit (Enter/tab/numpad enter -&amp;gt; This should go into the GUI navigation module)&lt;br /&gt;
* SelectLeftCharacter (SHIFT + left arrow)&lt;br /&gt;
* SelectRightCharacter (SHIFT + right arrow)&lt;br /&gt;
* PreviousCharacter (left arrow)&lt;br /&gt;
* PreviousWord (CTRL + left arrow)&lt;br /&gt;
* NextCharacter (right arrow)&lt;br /&gt;
* NextWord (CTRL + right arrow)&lt;br /&gt;
* GoToStartOfLine (home)&lt;br /&gt;
* GoToEndOfLine (end)&lt;br /&gt;
* SelectAll (CTRL+A)&lt;br /&gt;
* Back (escape)&lt;br /&gt;
&lt;br /&gt;
* Undo (CTRL+Z)&lt;br /&gt;
* Redo (CTRL+Y)&lt;br /&gt;
* Cut (CTRL+X)&lt;br /&gt;
* Copy (CTRL+C)&lt;br /&gt;
* Paste (CTRL+V)&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4946</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4946"/>
				<updated>2013-07-15T21:59:13Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Some reorganisation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || PointerMovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PointerActivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || PointerDeactivationInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || SemanticInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Confirm)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press backspace (delete last char) || Key Button press || injectKeyDown(key) || SemanticInputEvent(DeleteLastCharacter)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| PointerMovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| SemanticInputEvent ||&lt;br /&gt;
* Value: Enum + int (see below table)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
=== Semantics Table ===&lt;br /&gt;
The following table represents the semantic values and the raw event(s) from which they are generated&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have three ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
* Using just SemanticInputEvent WITHOUT raw events.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4945</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4945"/>
				<updated>2013-07-15T10:44:00Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Proposed design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || MovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PressedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || ReleasedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || PressedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press a non-character key || Key Button press || injectKeyDown(key) || PressedButtonInputEvent(Keyb_key)&lt;br /&gt;
|-&lt;br /&gt;
| Release a non-character key || Key Button release || injectKeyUp(key) || ReleasedButtonInputEvent(Keyb_key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| MovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| PressedButtonInputEvent@@@ ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
|- &lt;br /&gt;
| ReleasedButtonInputEvent@@@ ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
|-&lt;br /&gt;
| ActivatedInputEvent or SemanticInputEvent@@@  ||&lt;br /&gt;
* Count (1+) : int&lt;br /&gt;
* Semantic value : int (can come from an enum)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
@@@ subject to the next section, Decisions.&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have two ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4944</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4944"/>
				<updated>2013-07-15T10:43:16Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Add decision section for button press&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || MovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PressedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || ReleasedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || PressedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press a non-character key || Key Button press || injectKeyDown(key) || PressedButtonInputEvent(Keyb_key)&lt;br /&gt;
|-&lt;br /&gt;
| Release a non-character key || Key Button release || injectKeyUp(key) || ReleasedButtonInputEvent(Keyb_key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| MovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| PressedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
|- &lt;br /&gt;
| ReleasedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
|-&lt;br /&gt;
| ActivatedInputEvent@@@  ||&lt;br /&gt;
* Count (1+) : int&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
@@@ subject to the next section, Decisions.&lt;br /&gt;
&lt;br /&gt;
== Decisions ==&lt;br /&gt;
=== Combining keyboard, gamepad and mouse button pressed actions ===&lt;br /&gt;
We have two ways of handling this.&lt;br /&gt;
* Using two types of events (Pressed/ReleasedButtonInputEvent) AND SemanticInputEvent&lt;br /&gt;
** We have a &amp;quot;big&amp;quot; enum which contains all possible values for a keyboard, mouse and the gamepad&lt;br /&gt;
** The 'raw' events (Pressed/ReleasedButtonInputEvent are triggered every time&lt;br /&gt;
** The semantic events are generated only based on a mapping configuration: (button_id) -&amp;gt; (semantic_value). If a specific (button_id) present in the mapping is pressed then a semantic event will be generated with the specified (semantic_value).&lt;br /&gt;
*** (button_id) is a member of the &amp;quot;big&amp;quot; enum&lt;br /&gt;
*** (semantic_value) is a user-defined value. Inside CEGUI's system we'll have an enum which is used instead of magic numbers. Users could define their own enum which has indices starting from the last CEGUI's enum member number.&lt;br /&gt;
* Using just the raw types of event (Pressed/ReleasedInputEvent) WITHOUT SemanticInputEvent&lt;br /&gt;
** This would involve '''ignoring the explicit click calls''', and rather generate them inside the system.&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4943</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4943"/>
				<updated>2013-07-09T21:49:11Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* GUI navigation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || MovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PressedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || ReleasedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || PressedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press a non-character key || Key Button press || injectKeyDown(key) || PressedButtonInputEvent(Keyb_key)&lt;br /&gt;
|-&lt;br /&gt;
| Release a non-character key || Key Button release || injectKeyUp(key) || ReleasedButtonInputEvent(Keyb_key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| MovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| PressedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
|- &lt;br /&gt;
| ReleasedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
|-&lt;br /&gt;
| ActivatedInputEvent ||&lt;br /&gt;
* Count (1+) : int&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first control in the current window is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4942</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4942"/>
				<updated>2013-07-09T21:48:33Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || MovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PressedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || ReleasedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || PressedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press a non-character key || Key Button press || injectKeyDown(key) || PressedButtonInputEvent(Keyb_key)&lt;br /&gt;
|-&lt;br /&gt;
| Release a non-character key || Key Button release || injectKeyUp(key) || ReleasedButtonInputEvent(Keyb_key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| MovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| PressedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
|- &lt;br /&gt;
| ReleasedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
|-&lt;br /&gt;
| ActivatedInputEvent ||&lt;br /&gt;
* Count (1+) : int&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
Just calling focus()&lt;br /&gt;
&lt;br /&gt;
=== Navigate a form ===&lt;br /&gt;
Prerequisite: first textbox is focused; navigation is configured.&lt;br /&gt;
* Pressed(&amp;quot;Tab&amp;quot;) = focus next (&amp;quot;next&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;CTRL + Tab&amp;quot;) = focus previous (&amp;quot;previous&amp;quot;)&lt;br /&gt;
Steps:&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next control is focused.&lt;br /&gt;
&lt;br /&gt;
=== Navigate a 2D Menu ===&lt;br /&gt;
Prerequisite: first textbox is focused; navigation is configured:&lt;br /&gt;
* Pressed(&amp;quot;left&amp;quot;) = go left (&amp;quot;left&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;right&amp;quot;) = go left (&amp;quot;right&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;top&amp;quot;) = go left (&amp;quot;top&amp;quot;)&lt;br /&gt;
* Pressed(&amp;quot;up&amp;quot;) = go left (&amp;quot;up&amp;quot;)&lt;br /&gt;
* ^The same items but with the gamepad's D-Pad configuration instead of the keys&lt;br /&gt;
Steps&lt;br /&gt;
* Press a configured key/gamepad button.&lt;br /&gt;
* The control in the specified direction is focused.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4941</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4941"/>
				<updated>2013-07-09T06:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Zandalar Project is a codename for the new Input archtecture and GUI navigation features.&lt;br /&gt;
&lt;br /&gt;
= Input Aggregator &amp;amp; events =&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
The use cases are described by steps. For each step there might be some actions done at different levels:&lt;br /&gt;
* Raw input = the data that comes directly from the input system the application is using (OIS, glfw, etc.).&lt;br /&gt;
* Input Injection = the `InjectedInputReceiver`-ish function called with the right parameters&lt;br /&gt;
** For backwards compatibility-ish, we can persist the same interface(InjectedInputReceiver), but provide in it a default implementation that generates the input events for the current interface's functions.&lt;br /&gt;
* InputEvent = the `InputEvent` type generated from the injected input. This is the final step, and this is fed to the CEGUI library.&lt;br /&gt;
&lt;br /&gt;
=== Clicking a button using a mouse ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Move the mouse over the button || Mouse movement || injectMouseMove/injectMousePosition || MovementInputEvent&lt;br /&gt;
|-&lt;br /&gt;
| Press the LMB || Mouse button press || injectMouseButtonDown(LMB) || PressedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| Release the LMB|| Mouse button release || injectMouseButtonUp(LMB) || ReleasedButtonInputEvent(Mouse_LMB)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using the keyboard (new feature) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the button || colspan = 3 | Uses the use case &amp;quot;''Focus a button using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press the ENTER key (1) || Key Button press || injectKeyDown(Enter) || PressedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| Release the ENTER key || Key Button release || injectKeyUp(Enter) || ReleasedButtonInputEvent(Keyb_Enter)&lt;br /&gt;
|-&lt;br /&gt;
| The button is clicked (Click event is triggered)|| N/A || N/A || N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
(1) the key will be defined as per the NavigationStrategy (GUINavigation project part). If there is no such key defined, the event will be ignored.&lt;br /&gt;
&lt;br /&gt;
=== Clicking/activating a button using a gamepad ===&lt;br /&gt;
The same as previous ''Clicking/activating a button using the keyboard'', but with the difference that it uses a Gamepad button instead of a Keyboard one.&lt;br /&gt;
&lt;br /&gt;
=== Type text into a textbox ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Focus the textbox || colspan = 3 | Uses the use case &amp;quot;''Focus a textbox using the keyboard/gamepad''&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Press a character key || Char press || injectChar(chr) || TextInputEvent(chr)&lt;br /&gt;
|-&lt;br /&gt;
| Press a non-character key || Key Button press || injectKeyDown(key) || PressedButtonInputEvent(Keyb_key)&lt;br /&gt;
|-&lt;br /&gt;
| Release a non-character key || Key Button release || injectKeyUp(key) || ReleasedButtonInputEvent(Keyb_key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Scroll horizontally with the mouse wheel ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Step description !! Raw input !! Input Injection !! InputEvent fed to CEGUI&lt;br /&gt;
|-&lt;br /&gt;
| Rotate the wheel || Wheel rotation delta || injectMouseWheelChange(delta) || ScrollInputEvent(direction, delta)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Focus a button using the keyboard/gamepad ===&lt;br /&gt;
TODO - This should go into the GUI Navigation part.&lt;br /&gt;
&lt;br /&gt;
== Proposed design ==&lt;br /&gt;
=== Events ===&lt;br /&gt;
For start, the following events will cover all existing functions in the 'InjectedInputReceiver' interface:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Input Event name !! Data !! Functions covered&lt;br /&gt;
|-&lt;br /&gt;
| MovementInputEvent || &lt;br /&gt;
* Position : Vector2 &lt;br /&gt;
* Delta : Vector2 &lt;br /&gt;
|| &lt;br /&gt;
* injectMouseMove &lt;br /&gt;
* injectMousePosition&lt;br /&gt;
|-&lt;br /&gt;
| PressedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonDown&lt;br /&gt;
* injectKeyDown&lt;br /&gt;
|- &lt;br /&gt;
| ReleasedButtonInputEvent ||&lt;br /&gt;
* Button : Buttons Enum/integer or long for maximum flexibility&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonUp&lt;br /&gt;
* injectKeyUp&lt;br /&gt;
|-&lt;br /&gt;
| ActivatedInputEvent ||&lt;br /&gt;
* Count (1+) : int&lt;br /&gt;
||&lt;br /&gt;
* injectMouseButtonClick&lt;br /&gt;
* injectMouseButtonDoubleClick&lt;br /&gt;
* injectMouseButtonTripleClick&lt;br /&gt;
|-&lt;br /&gt;
| TextInputEvent ||&lt;br /&gt;
* Text : string/char&lt;br /&gt;
||&lt;br /&gt;
* injectChar&lt;br /&gt;
|-&lt;br /&gt;
| ScrollInputEvent ||&lt;br /&gt;
* Delta : int&lt;br /&gt;
* Direction : ScrollDirection(0 - horizontal, 1 - vertical)&lt;br /&gt;
||&lt;br /&gt;
* injectMouseWheelChange&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Unmapped (yet) functions:&lt;br /&gt;
* injectMouseLeaves&lt;br /&gt;
&lt;br /&gt;
= GUI navigation =&lt;br /&gt;
== Use cases ==&lt;br /&gt;
=== Navigate between a set textboxes ===&lt;br /&gt;
Prerequisite: first textbox is focused&lt;br /&gt;
* Press `Tab`&lt;br /&gt;
* The next textbox is focused&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4939</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4939"/>
				<updated>2013-06-28T00:12:38Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Input Aggregator &amp;amp; events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4938</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4938"/>
				<updated>2013-06-28T00:06:58Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Input Aggregator &amp;amp; events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4937</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4937"/>
				<updated>2013-06-27T23:59:51Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4934</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4934"/>
				<updated>2013-06-26T22:55:53Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Use Cases */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4933</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4933"/>
				<updated>2013-06-25T22:24:45Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Input Aggregator &amp;amp; events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4931</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4931"/>
				<updated>2013-06-24T13:07:01Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: /* Input Aggregator &amp;amp; events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4930</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4930"/>
				<updated>2013-06-24T13:04:00Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: More work on the events&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4929</id>
		<title>The Zandalar project</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=The_Zandalar_project&amp;diff=4929"/>
				<updated>2013-06-23T14:46:32Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Initial version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	<entry>
		<id>http://cegui.org/wiki/index.php?title=User:Timotei&amp;diff=4928</id>
		<title>User:Timotei</title>
		<link rel="alternate" type="text/html" href="http://cegui.org/wiki/index.php?title=User:Timotei&amp;diff=4928"/>
				<updated>2013-06-23T13:15:22Z</updated>
		
		<summary type="html">&lt;p&gt;Timotei: Created page with &amp;quot;Yup. That's me.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Yup. That's me.&lt;/div&gt;</summary>
		<author><name>Timotei</name></author>	</entry>

	</feed>