<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.codeblocks.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artojon</id>
	<title>Code::Blocks - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.codeblocks.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Artojon"/>
	<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php/Special:Contributions/Artojon"/>
	<updated>2026-04-05T03:07:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4333</id>
		<title>Code Snippets plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4333"/>
		<updated>2007-01-04T22:53:02Z</updated>

		<summary type="html">&lt;p&gt;Artojon: bump version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Code snippets |&lt;br /&gt;
  logo = [[Image:Generic-plugin.png]] |&lt;br /&gt;
  developer = [[User:Artojon|Arto Jonsson]] |&lt;br /&gt;
  maintainer = Arto Jonsson |&lt;br /&gt;
  version = 0.3.2&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Code snippets''' plugin is a simple snippets management plugin for Code::Blocks. It integrates with the interface by creating a floating docking window which shows all the snippets. Snippets can be assigned to categories or they can be in the global category called ''All snippets''.&lt;br /&gt;
&lt;br /&gt;
== Snippet management ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a new snippet ===&lt;br /&gt;
&lt;br /&gt;
To create a snippet you must first write the code. The plugin does not use any dialogs (currently no message boxes either) so you have to write the code in the editor. Select your code and and drag it to a category, either in the ''All snippets'' or in other category you may have created.&lt;br /&gt;
&lt;br /&gt;
You might noticed that the code you wrote is gone, this is how the drag and drop works; you move by default. If you want to copy the code and then create a new snippet, hold '''Ctrl''' and then drag it.&lt;br /&gt;
&lt;br /&gt;
To assign a piece of code to a existing snippet you simply drag and drop the code to that snippet.&lt;br /&gt;
&lt;br /&gt;
=== Applying a snippet ===&lt;br /&gt;
&lt;br /&gt;
To apply a snippet, double click it and it will be applied to the currently active editor. You can alternatively right click on the snippet and select ''Apply''.&lt;br /&gt;
&lt;br /&gt;
=== Creating a new category ===&lt;br /&gt;
&lt;br /&gt;
Snippets can be added to categories. Each snippet can be at one category at a time. The number of categories and sub-categories is not limited however.&lt;br /&gt;
&lt;br /&gt;
Each user created category has a parent category, the categories created in root have the ''All snippets'' category as parent. So if you want to create a category to the root, right click ''All snippets'' and select ''Add subcategory''.&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
&lt;br /&gt;
Snippets can be searched by typing words to the text edit control at the top of the docking window. Searching is performed by find-as-you-type method so you don't have to press any search buttons or Enter key. Searching by default includes both snippets and categories.&lt;br /&gt;
&lt;br /&gt;
Searching is case-sensitive by default so &amp;quot;C++&amp;quot; and &amp;quot;c++&amp;quot; are seen as different search terms.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
Code snippets plugin uses XML (UTF-8 encoded) file to save all code snippets.&lt;br /&gt;
&lt;br /&gt;
The XML file starts with root item, snippets, which holds all the categories and code snippets. Code snippets and categories use the same element called item. The item's attributes tell what type of item it is, category or code snippet.&lt;br /&gt;
&lt;br /&gt;
=== Elements ===&lt;br /&gt;
&lt;br /&gt;
'''snippets'''&lt;br /&gt;
* Attributes: None&lt;br /&gt;
* Sub-elements: All snippets and categories&lt;br /&gt;
&lt;br /&gt;
'''item'''&lt;br /&gt;
* Attributes:&lt;br /&gt;
** name -- Name of the element&lt;br /&gt;
** type -- Type of the element, either ''snippet'' or ''category''&lt;br /&gt;
* Sub-elements:&lt;br /&gt;
** snippet -- The actual code snippet (only if the item's type is ''snippet'')&lt;br /&gt;
** Sub-items and categories (only if the item's type is ''category'')&lt;br /&gt;
&lt;br /&gt;
=== Example file ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test category&amp;quot; type=&amp;quot;category&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;item name=&amp;quot;Test item 1&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;snippet&amp;gt;// Test 1&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 		&amp;lt;/item&amp;gt;	&lt;br /&gt;
 	&amp;lt;/item&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test item 2&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;snippet&amp;gt;// Test 2&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;/snippets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file would create the following structure:&lt;br /&gt;
&lt;br /&gt;
 All snippets&lt;br /&gt;
 |&lt;br /&gt;
 |- Test category&lt;br /&gt;
 |  |&lt;br /&gt;
 |  |- Test item 1&lt;br /&gt;
 |&lt;br /&gt;
 |- Test item 2&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
=== wxMSW ===&lt;br /&gt;
&lt;br /&gt;
'''Using the Tab key in snippet editor causes the focus to move to the next control'''&lt;br /&gt;
&lt;br /&gt;
: Most likely a bug in wxWidgets, I haven't investigated it much yet. Broken also in wxWidgets 2.8, works correctly in wxGTK.&lt;br /&gt;
&lt;br /&gt;
'''Snippet tool tips show garbage text (squares) instead of line breaks (wxWidgets 2.6)'''&lt;br /&gt;
&lt;br /&gt;
: A bug in wxWidgets, fixed in wxWidgets 2.8.&lt;br /&gt;
&lt;br /&gt;
=== wxGTK ===&lt;br /&gt;
&lt;br /&gt;
'''Snippet tool tips don't work'''&lt;br /&gt;
&lt;br /&gt;
: A limitation in wxWidgets, not implemented as of wxWidgets 2.8.0.&lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;Name:&amp;quot; and &amp;quot;Snippet:&amp;quot; text labels in Edit snippet dialog don't have underscores; makes keyboard navigation hard'''&lt;br /&gt;
&lt;br /&gt;
: A bug in wxWidgets, fixed in wxWidgets 2.8. The fix might be backported to 2.6.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4332</id>
		<title>Code Snippets plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4332"/>
		<updated>2007-01-03T16:37:14Z</updated>

		<summary type="html">&lt;p&gt;Artojon: added known issues section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Code snippets |&lt;br /&gt;
  logo = [[Image:Generic-plugin.png]] |&lt;br /&gt;
  developer = [[User:Artojon|Arto Jonsson]] |&lt;br /&gt;
  maintainer = Arto Jonsson |&lt;br /&gt;
  version = 0.3.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Code snippets''' plugin is a simple snippets management plugin for Code::Blocks. It integrates with the interface by creating a floating docking window which shows all the snippets. Snippets can be assigned to categories or they can be in the global category called ''All snippets''.&lt;br /&gt;
&lt;br /&gt;
== Snippet management ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a new snippet ===&lt;br /&gt;
&lt;br /&gt;
To create a snippet you must first write the code. The plugin does not use any dialogs (currently no message boxes either) so you have to write the code in the editor. Select your code and and drag it to a category, either in the ''All snippets'' or in other category you may have created.&lt;br /&gt;
&lt;br /&gt;
You might noticed that the code you wrote is gone, this is how the drag and drop works; you move by default. If you want to copy the code and then create a new snippet, hold '''Ctrl''' and then drag it.&lt;br /&gt;
&lt;br /&gt;
To assign a piece of code to a existing snippet you simply drag and drop the code to that snippet.&lt;br /&gt;
&lt;br /&gt;
=== Applying a snippet ===&lt;br /&gt;
&lt;br /&gt;
To apply a snippet, double click it and it will be applied to the currently active editor. You can alternatively right click on the snippet and select ''Apply''.&lt;br /&gt;
&lt;br /&gt;
=== Creating a new category ===&lt;br /&gt;
&lt;br /&gt;
Snippets can be added to categories. Each snippet can be at one category at a time. The number of categories and sub-categories is not limited however.&lt;br /&gt;
&lt;br /&gt;
Each user created category has a parent category, the categories created in root have the ''All snippets'' category as parent. So if you want to create a category to the root, right click ''All snippets'' and select ''Add subcategory''.&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
&lt;br /&gt;
Snippets can be searched by typing words to the text edit control at the top of the docking window. Searching is performed by find-as-you-type method so you don't have to press any search buttons or Enter key. Searching by default includes both snippets and categories.&lt;br /&gt;
&lt;br /&gt;
Searching is case-sensitive by default so &amp;quot;C++&amp;quot; and &amp;quot;c++&amp;quot; are seen as different search terms.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
Code snippets plugin uses XML (UTF-8 encoded) file to save all code snippets.&lt;br /&gt;
&lt;br /&gt;
The XML file starts with root item, snippets, which holds all the categories and code snippets. Code snippets and categories use the same element called item. The item's attributes tell what type of item it is, category or code snippet.&lt;br /&gt;
&lt;br /&gt;
=== Elements ===&lt;br /&gt;
&lt;br /&gt;
'''snippets'''&lt;br /&gt;
* Attributes: None&lt;br /&gt;
* Sub-elements: All snippets and categories&lt;br /&gt;
&lt;br /&gt;
'''item'''&lt;br /&gt;
* Attributes:&lt;br /&gt;
** name -- Name of the element&lt;br /&gt;
** type -- Type of the element, either ''snippet'' or ''category''&lt;br /&gt;
* Sub-elements:&lt;br /&gt;
** snippet -- The actual code snippet (only if the item's type is ''snippet'')&lt;br /&gt;
** Sub-items and categories (only if the item's type is ''category'')&lt;br /&gt;
&lt;br /&gt;
=== Example file ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test category&amp;quot; type=&amp;quot;category&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;item name=&amp;quot;Test item 1&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;snippet&amp;gt;// Test 1&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 		&amp;lt;/item&amp;gt;	&lt;br /&gt;
 	&amp;lt;/item&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test item 2&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;snippet&amp;gt;// Test 2&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;/snippets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file would create the following structure:&lt;br /&gt;
&lt;br /&gt;
 All snippets&lt;br /&gt;
 |&lt;br /&gt;
 |- Test category&lt;br /&gt;
 |  |&lt;br /&gt;
 |  |- Test item 1&lt;br /&gt;
 |&lt;br /&gt;
 |- Test item 2&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
=== wxMSW ===&lt;br /&gt;
&lt;br /&gt;
'''Using the Tab key in snippet editor causes the focus to move to the next control'''&lt;br /&gt;
&lt;br /&gt;
: Most likely a bug in wxWidgets, I haven't investigated it much yet. Broken also in wxWidgets 2.8, works correctly in wxGTK.&lt;br /&gt;
&lt;br /&gt;
'''Snippet tool tips show garbage text (squares) instead of line breaks (wxWidgets 2.6)'''&lt;br /&gt;
&lt;br /&gt;
: A bug in wxWidgets, fixed in wxWidgets 2.8.&lt;br /&gt;
&lt;br /&gt;
=== wxGTK ===&lt;br /&gt;
&lt;br /&gt;
'''Snippet tool tips don't work'''&lt;br /&gt;
&lt;br /&gt;
: A limitation in wxWidgets, not implemented as of wxWidgets 2.8.0.&lt;br /&gt;
&lt;br /&gt;
'''&amp;quot;Name:&amp;quot; and &amp;quot;Snippet:&amp;quot; text labels in Edit snippet dialog don't have underscores; makes keyboard navigation hard'''&lt;br /&gt;
&lt;br /&gt;
: A bug in wxWidgets, fixed in wxWidgets 2.8. The fix might be backported to 2.6.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_custom_lexer_for_Code::Blocks_editor&amp;diff=4159</id>
		<title>Creating a custom lexer for Code::Blocks editor</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_custom_lexer_for_Code::Blocks_editor&amp;diff=4159"/>
		<updated>2006-11-12T18:01:11Z</updated>

		<summary type="html">&lt;p&gt;Artojon: use level 2 headlines across the article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
The files that add syntax highlighting support for specific files are found under &amp;lt;tt&amp;gt;sdk/resources/lexers&amp;lt;/tt&amp;gt;. They're simple XML files named as &amp;lt;tt&amp;gt;lexer_*.xml&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Let's take &amp;lt;tt&amp;gt;lexer_cpp.xml&amp;lt;/tt&amp;gt; as an example and disect it.&lt;br /&gt;
&lt;br /&gt;
==XML==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Basically this says &amp;quot;I am an XML file&amp;quot;. '''Very Important'''&lt;br /&gt;
&lt;br /&gt;
==DOCTYPE==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!DOCTYPE CodeBlocks_lexer_properties&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This needs to be in every lexer file. Code::Blocks '''will not''' load the lexer if this is not present.&lt;br /&gt;
&lt;br /&gt;
==Lexers==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;Lexer name=&amp;quot;C/C++&amp;quot;&lt;br /&gt;
        index=&amp;quot;3&amp;quot;&lt;br /&gt;
        filemasks=&amp;quot;*.c,*.cpp,*.cc,*.cxx,*.h,*.hpp,*.hh,*.hxx,*.inl&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pretty much self explanatory, except for the &amp;quot;magic&amp;quot; ''index'' number (we'll come to it in a sec).&lt;br /&gt;
&lt;br /&gt;
* '''name''' is the lexer's configuration name. This will appear in the editor's configuration dialog, in the languages drop down box (in colors editing page).&lt;br /&gt;
&lt;br /&gt;
* '''filemasks''' is a comma separated list of the extensions that this lexer should be used for. This is case-insensitive.&lt;br /&gt;
&lt;br /&gt;
* '''index''' corresponds with the &amp;lt;tt&amp;gt;wxSCI_LEX_*&amp;lt;/tt&amp;gt; constants, found in &amp;lt;tt&amp;gt;sdk/wxscintilla/include/wx/wxscintilla.h&amp;lt;/tt&amp;gt;. In this example, if you look in &amp;lt;tt&amp;gt;sdk/wxscintilla/include/wx/wxscintilla.h&amp;lt;/tt&amp;gt;, you'll see that ''index 3'' matches &amp;lt;tt&amp;gt;wxSCI_LEX_CPP&amp;lt;/tt&amp;gt;. That is the ''lexer id'' for C/C++ syntax highlighting.&lt;br /&gt;
&lt;br /&gt;
If we were building a lexer configuration for let's say, XML (random choice) we would look up the constant &amp;lt;tt&amp;gt;wxSCI_LEX_XML&amp;lt;/tt&amp;gt; which is defined to be number ''5''. So ''index=5''. Simple.&lt;br /&gt;
&lt;br /&gt;
==Styles==&lt;br /&gt;
&lt;br /&gt;
Next follows many &amp;lt;tt&amp;gt;&amp;lt;Style&amp;gt;&amp;lt;/tt&amp;gt; tags defining the different styles:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Style name=&amp;quot;Default&amp;quot;&lt;br /&gt;
               index=&amp;quot;0&amp;quot;&lt;br /&gt;
               fg=&amp;quot;0,0,0&amp;quot;&lt;br /&gt;
               bg=&amp;quot;255,255,255&amp;quot;&lt;br /&gt;
               bold=&amp;quot;0&amp;quot;&lt;br /&gt;
               italics=&amp;quot;0&amp;quot;&lt;br /&gt;
               underlined=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''name''' is the style's name. It appears in the editor's configuration dialog, in the colors editing page.&lt;br /&gt;
&lt;br /&gt;
* '''fg''' is the foreground color. Comma separated list of three numbers from 0 to 255. In order: red, green and blue (RGB).&lt;br /&gt;
&lt;br /&gt;
* '''bg''' is the background color.&lt;br /&gt;
&lt;br /&gt;
* '''bold''' is &amp;lt;tt&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/tt&amp;gt; for disabled, &amp;lt;tt&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/tt&amp;gt; for enabled.&lt;br /&gt;
&lt;br /&gt;
* '''italics''' is &amp;lt;tt&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/tt&amp;gt; for disabled, &amp;lt;tt&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/tt&amp;gt; for enabled.&lt;br /&gt;
&lt;br /&gt;
* '''underlined''' is &amp;lt;tt&amp;gt;&amp;quot;0&amp;quot;&amp;lt;/tt&amp;gt; for disabled, &amp;lt;tt&amp;gt;&amp;quot;1&amp;quot;&amp;lt;/tt&amp;gt; for enabled.&lt;br /&gt;
&lt;br /&gt;
You don't have to define all of these attributes. It's good to define them all for the &amp;lt;tt&amp;gt;&amp;quot;default&amp;quot;&amp;lt;/tt&amp;gt; style (all lexers have a default style), but only the attributes needed should be defined for the rest of the styles.&lt;br /&gt;
&lt;br /&gt;
* The '''index''' number in the &amp;lt;tt&amp;gt;&amp;lt;Style&amp;gt;&amp;lt;/tt&amp;gt; tags, comes from a different set of constants defined in &amp;lt;tt&amp;gt;sdk/wxscintilla/include/wx/wxscintilla.h&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
For each language supported by scintilla, there is a set of styles ''(lexical states)'' defined (these are what we're trying to configure with these files). &lt;br /&gt;
&lt;br /&gt;
For example, for C/C++ files (&amp;lt;tt&amp;gt;wxSCI_LEX_CPP&amp;lt;/tt&amp;gt;, remember?) the styles are defined as &amp;lt;tt&amp;gt;wxSCI_C_*&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;tt&amp;gt;&amp;quot;default&amp;quot;&amp;lt;/tt&amp;gt; style shown above, this would be &amp;lt;tt&amp;gt;wxSCI_C_DEFAULT&amp;lt;/tt&amp;gt; which is defined to be ''0''. Hence ''index=0'' for &amp;lt;tt&amp;gt;&amp;quot;default&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Style name=&amp;quot;Comment (normal)&amp;quot;&lt;br /&gt;
               index=&amp;quot;1,2&amp;quot;&lt;br /&gt;
               fg=&amp;quot;160,160,160&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is the style definition for normal comments. As you can see you can define a single style for more than one style index, in this case two: ''1'' and ''2'' (always comma separated).&lt;br /&gt;
&lt;br /&gt;
''1'' is for &amp;lt;tt&amp;gt;wxSCI_C_COMMENT&amp;lt;/tt&amp;gt; (the C comment &amp;lt;tt&amp;gt;/* */&amp;lt;/tt&amp;gt;) and ''2'' is for &amp;lt;tt&amp;gt;wxSCI_C_COMMENTLINE&amp;lt;/tt&amp;gt; (the C++ comment to end of line &amp;lt;tt&amp;gt;// &amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are some special styles defined by Code::Blocks and are available to all lexers:&lt;br /&gt;
&lt;br /&gt;
* '''index -99''' is the selected text style.&lt;br /&gt;
* '''index -98''' is the active line style (the line the caret is on).&lt;br /&gt;
* '''index -2''' is the breakpoint line style.&lt;br /&gt;
* '''index -3''' is the debugger active line style (while stepping the debugger).&lt;br /&gt;
* '''index -4''' is the compiler warning/error line style. ('''Note: this index was removed completely?''')&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
&lt;br /&gt;
Now on to the keywords.&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Keywords&amp;gt;&lt;br /&gt;
               &amp;lt;Set index=&amp;quot;0&amp;quot;&lt;br /&gt;
                         value=&amp;quot;if int long try while and-so-on&amp;quot; /&amp;gt;&lt;br /&gt;
               &amp;lt;Set index=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
               &amp;lt;Set index=&amp;quot;2&amp;quot;&lt;br /&gt;
                              value=&amp;quot;param remarks return $ @ \ &amp;amp; &amp;lt; &amp;gt; # { } and-so-on&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Keywords&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the language you're defining a lexer configuration for, has keywords they should be added in the &amp;lt;tt&amp;gt;&amp;lt;Keywords&amp;gt;&amp;lt;/tt&amp;gt; tag.&lt;br /&gt;
In the scintilla version used by Code::Blocks, you can setup up to 9 keyword sets (the &amp;quot;index&amp;quot; attribute). What each set does and which sets are used by a lexer, is defined by the lexer itself.&lt;br /&gt;
&lt;br /&gt;
If you open LexCPP.cxx (from the scintilla sources), you will find the following:&lt;br /&gt;
&lt;br /&gt;
 static const char * const cppWordLists[] = {&lt;br /&gt;
            &amp;quot;Primary keywords and identifiers&amp;quot;,&lt;br /&gt;
            &amp;quot;Secondary keywords and identifiers&amp;quot;,&lt;br /&gt;
            &amp;quot;Documentation comment keywords&amp;quot;,&lt;br /&gt;
            &amp;quot;Unused&amp;quot;,&lt;br /&gt;
            &amp;quot;Global classes and typedefs&amp;quot;,&lt;br /&gt;
            0,&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
This tells us which indices are valid and what each one represents:&lt;br /&gt;
&lt;br /&gt;
Index 0, &amp;quot;Primary keywords and identifiers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Index 1, &amp;quot;Secondary keywords and identifiers&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Index 2, &amp;quot;Documentation comment keywords&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(notice that index &amp;quot;3&amp;quot; is not used)&lt;br /&gt;
&lt;br /&gt;
Index 4, &amp;quot;Global classes and typedefs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Sample Code==&lt;br /&gt;
&lt;br /&gt;
The tag left is &amp;lt;tt&amp;gt;SampleCode&amp;lt;/tt&amp;gt;. This is much pretty self explanatory:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;SampleCode value=&amp;quot;lexer_cpp.sample&amp;quot;&lt;br /&gt;
                    breakpoint_line=&amp;quot;20&amp;quot;&lt;br /&gt;
                    debug_line=&amp;quot;22&amp;quot;&lt;br /&gt;
                    error_line=&amp;quot;23&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''value''' is the filename of the code that will be shown in the Preview window. &lt;br /&gt;
When creating a &amp;lt;tt&amp;gt;lexer_*.sample&amp;lt;/tt&amp;gt; try to do it with simple and concise sample code (like the ones found in a typical &amp;quot;Hello world!&amp;quot;), yet include all the keywords of the lexer.&lt;br /&gt;
&lt;br /&gt;
There are other optional options ('''Note: this index was removed completely?''')&lt;br /&gt;
* '''breakpoint_line''' is the number of the line in which a breakpoint line will be previewed.&lt;br /&gt;
* '''debug_line''' is the number of the line in which a debug line will be previewed.&lt;br /&gt;
* '''error_line''' is the number of the line in which an error line will be previewed.&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
When writting a lexer, this can be useful:&lt;br /&gt;
* .properties files of SciTE (the official Scintilla-based text editor) [http://scintilla.sourceforge.net/SciTE.html]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Adding support for code-folding==&lt;br /&gt;
&lt;br /&gt;
'''Note: support for code-folding can't be done from the lexer files. It must be done right in the Scintilla code'''.&lt;br /&gt;
&lt;br /&gt;
See here: http://sphere.sourceforge.net/flik/docs/scintilla-folding.html&lt;br /&gt;
&lt;br /&gt;
==Adding support for a lexer not supported in Scintilla==&lt;br /&gt;
&lt;br /&gt;
'''Note: support for a lexer not supported in Scintilla is out of scope of Code::Blocks. It must be done right in the Scintilla code.'''&lt;br /&gt;
&lt;br /&gt;
Here are some instructions: http://scintilla.sourceforge.net/Lexer.txt&lt;br /&gt;
&lt;br /&gt;
* After you've written the Scintilla lexer, submit the files to the [http://sourceforge.net/tracker/?group_id=2439 Scintilla tracker], following their own [http://scintilla.sourceforge.net/SciCoding.html coding style].&lt;br /&gt;
&lt;br /&gt;
* After that, make any necesary change to wxScintilla and sumbit the files to the [http://sourceforge.net/tracker/?group_id=51305&amp;amp;atid=462818 wxScintilla tracker] or send a mail to the autor wyo@users.sourceforge.net (Otto Wyss).&lt;br /&gt;
&lt;br /&gt;
* And finishing, be sure to send all to the [http://developer.berlios.de/patch/?func=addpatch&amp;amp;group_id=5358 Code::Blocks tracker] (Category: Lexer), and announce it at the [/index.php?board=7.0 Forum] and the [[Announcement for plugins/patches|Wiki announcement for plugins/patches]].&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_Plug-in_which_modifies_CB%27s_Menus&amp;diff=4158</id>
		<title>Creating a Plug-in which modifies CB's Menus</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_Plug-in_which_modifies_CB%27s_Menus&amp;diff=4158"/>
		<updated>2006-11-12T17:53:38Z</updated>

		<summary type="html">&lt;p&gt;Artojon: flagged as outdated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
[[Category:Outdated]]&lt;br /&gt;
{{outdated}}&lt;br /&gt;
== Environment ==&lt;br /&gt;
&lt;br /&gt;
NOTE : Also an update for wx 2.6.1 and creating a menu in the menu toolbar are in the pipeline.&lt;br /&gt;
&lt;br /&gt;
The following has been carried out with/on :&lt;br /&gt;
&lt;br /&gt;
    * Windows XP SP2&lt;br /&gt;
    * Code::Blocks RC1-1&lt;br /&gt;
    * wxWindows 2.4.2&lt;br /&gt;
&lt;br /&gt;
The entire project is available in [http://users.pandora.be/lieven.de.cock/CodeBlocks/Ldc2.zip this zip file]&lt;br /&gt;
&lt;br /&gt;
== Create the plug-in project ==&lt;br /&gt;
&lt;br /&gt;
First thing we need to do is create a plug-in project. For more info on how to setup everything see [https://wiki.codeblocks.org/index.php/Creating_a_simple_%22Hello_World%22_plugin this page] on the wiki. In our tutorial we create a plug-in of type General.&lt;br /&gt;
I gave it the name LDC2, and selected the settings :&lt;br /&gt;
&lt;br /&gt;
    * Needs to create menu items&lt;br /&gt;
    * Needs to create menu items in pop-up menus&lt;br /&gt;
[[Image:Menu0.PNG]]&lt;br /&gt;
&lt;br /&gt;
Afterwards the code get's generated (LDC2.h/cpp). Try to build the project. I encountered 1 problem : I had to change the line in the header file :&lt;br /&gt;
        void BuildToolBar(wxToolBar* toolBar){ return; }&lt;br /&gt;
to :&lt;br /&gt;
        bool BuildToolBar(wxToolBar* toolBar){ return false; }&lt;br /&gt;
After doing this it compiled fine for me.&lt;br /&gt;
&lt;br /&gt;
== Logging during the plug-in ==&lt;br /&gt;
&lt;br /&gt;
During the implementation I am going to write some feedback stuff on the screen. I chose to use the log facilities that allow you to write to the Code::Blocks tab in the output pane (which also contains a &amp;quot;Search Results&amp;quot;, &amp;quot;Compiler&amp;quot;, ... tabs).&lt;br /&gt;
To do this we need to do the following things :&lt;br /&gt;
&lt;br /&gt;
    * Get hold of the Manager interface which we can use to retrieve other interfaces&lt;br /&gt;
    * Get hold of the MessageManager interface, which we will be using for the logging&lt;br /&gt;
&lt;br /&gt;
Both can be done in 1 statement : Manager::Get()-&amp;gt;GetMessageManager() .&lt;br /&gt;
To be able to call those functions we need to add the declarations of those functions, therefor we add the following include statements in the implemenation file :&lt;br /&gt;
#include &amp;lt;manager.h&amp;gt;&lt;br /&gt;
#include &amp;lt;messagemanager.h&amp;gt;&lt;br /&gt;
The method I use for logging is Log(), which has a similar syntax as nasty old printf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu adjusting ==&lt;br /&gt;
&lt;br /&gt;
If your plug-in wants to adjust the menu, the correct place to do it is in the BuildMenu method.&lt;br /&gt;
When Code::Blocks is starting up it will call your plug-in by this method, allowing you to change the menu. Therefor it provides as an argument it's menuBar.&lt;br /&gt;
The normal menuBar consists out of  11 menus, starting with &amp;quot;File&amp;quot;, &amp;quot;Edit&amp;quot;, &amp;quot;View&amp;quot; and so on. These menus are ordered, or otherwise stated they have a position. Where the first position is position &amp;quot;0&amp;quot;. So &amp;quot;File&amp;quot; is at position 0, &amp;quot;Edit &amp;quot; at position 1, ...&lt;br /&gt;
So let's get our feet wet and start by adjusting the &amp;quot;Edit&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adjusting the &amp;quot;Edit&amp;quot; menu ==&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do is get hold of the &amp;quot;Edit&amp;quot; menu. The class wxMenuBar, the type of our menuBar parameter, provides the method &amp;quot;FindMenu&amp;quot; to search for certain menus. The menu to search for is the argument of the method, and is specified by it's textual id, and returns the position of the menu. So in our case we get :&lt;br /&gt;
        int pos = menuBar-&amp;gt;FindItem(_(&amp;quot;Edit&amp;quot;));&lt;br /&gt;
If this menu would not be found the return value is wxNOT_FOUND.&lt;br /&gt;
In the example code,  we write out the position of the menu to the Log. Check that this should be 1.&lt;br /&gt;
Now that we have the position of the menu, we can get hold of it's interface (or pointer to the menu object), this is done by calling the GetMenu() method of he wxMenuBar class. The argument is the position of the menu, from which we want the interface.&lt;br /&gt;
        wxMenu* EditMenu = menuBar-&amp;gt;GetMenu(pos);&lt;br /&gt;
Now that we have hold of the actual menu we want to adjust, we can start by adding new entries to the menu.&lt;br /&gt;
We have several locations where we can add our own entries :&lt;br /&gt;
&lt;br /&gt;
    * at the start/beginning/top =&amp;gt; Prepend&lt;br /&gt;
    * at the end/bottom =&amp;gt; Append&lt;br /&gt;
    * in the middle =&amp;gt; Insert&lt;br /&gt;
&lt;br /&gt;
It is good practice when you add new entries, that you seperate them visually from the already existing entries, or to group them logically. This can be done by use of a separator, this is a vertical line that goes from left to right in the menu. The menu class wxMenu provides for the 3 cases above, 3 different methods :&lt;br /&gt;
&lt;br /&gt;
    * AppendSeparator()&lt;br /&gt;
    * PrependSeparator()&lt;br /&gt;
    * InsertSeperator(int pos), where pos is the position of the entry at which it should be inserted.&lt;br /&gt;
&lt;br /&gt;
For our entries we have the following methods at our disposal according to the 3 situations described above :&lt;br /&gt;
&lt;br /&gt;
    * Append()&lt;br /&gt;
    * Prepend()&lt;br /&gt;
    * Insert()&lt;br /&gt;
&lt;br /&gt;
There is however one more thing we need to take care of, before we can proceed for adding our own entries. Every menu entry needs to have a unique id in the program. Since we are a plug-in, and those can be added dynamically, we have no idea of which id's are already taken and which are available. Luckily the underlying wxWindows mechanism takes care of that for us. We can ask the wxWindows mechanism to generate a new id for us, and then we use that one. This is done by calling the function &amp;quot;wxNewId&amp;quot;. So for our first  entry we do like this :&lt;br /&gt;
        int idMenuEntry1 = wxNewId();&lt;br /&gt;
This id can be used to identiy our own menu entries.&lt;br /&gt;
&lt;br /&gt;
Now let's add our first extra entry in the menu :&lt;br /&gt;
        EditMenu-&amp;gt;Append(idMenuEntry1, _(&amp;quot;Menu Entry 1\tCtrl-Shift-1&amp;quot;));&lt;br /&gt;
So the id is specified as the first parameter to the Append method, and as a second argument we specify the Caption of the menu entry &amp;quot;Menu Entry 1&amp;quot;, and in the mean time we specify the keyboard accelerator/shortcut. Both are specified in a string seperated by a tab character (\t).&lt;br /&gt;
The picture below show the result of adding our first extra menu entry together with a separator.&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Next in our code example we add a menu entry at the top of the menu, and we use a third argument (works with all 3 methods to add entries) where we specify a help text to be displayed in the status bar of Code::Blocks.&lt;br /&gt;
        EditMenu-&amp;gt;Prepend(idMenuEntry2, _(&amp;quot;Menu Entry 2\tCtrl-Shift-2&amp;quot;), _(&amp;quot;Help text&amp;quot;));&lt;br /&gt;
The result looks like this :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Next we add a third entry somewhere in between, we add it after the Redo entry and the following separator. That Redo is the 4th entry, so counting from zero : pos 3. Menu entry 2 is at O, Seperator at 1, Undo at 2, Redo at 3. So our new entry is at position 4..&lt;br /&gt;
        EditMenu-&amp;gt;Insert(4, idMenuEntry3, _(&amp;quot;Menu Entry 3\tCtrl-Shift-3&amp;quot;));&lt;br /&gt;
Wich gives the following result : &lt;br /&gt;
&lt;br /&gt;
[[Image:Menu3.JPG]]&lt;br /&gt;
&lt;br /&gt;
So by locating our menu, getting it's interface, and using some methods we were able to add new menu entries.&lt;br /&gt;
&lt;br /&gt;
== Adding a submenu ==&lt;br /&gt;
&lt;br /&gt;
Let's take our manipulation of the menu 1 step further. Let's create a submenu, which has its own entries.&lt;br /&gt;
Since a submenu is nothing more then a menu, we first need to create a new menu object; this new object has to live as long as the plug-in itself, so it can not be a local variable, it needs to be stored in the class itself. Therefor we added the member m_SubMenu1, initialized to NULL, and released during the destructor.&lt;br /&gt;
We will allocate it now :&lt;br /&gt;
        m_SubMenu1 = new wxMenu();&lt;br /&gt;
And we append this new menu to our EditMenu :&lt;br /&gt;
        EditMenu-&amp;gt;Append(idSubMenu1, _(&amp;quot;SubMenu1&amp;quot;), m_SubMenu1);&lt;br /&gt;
The result looks like : &lt;br /&gt;
&lt;br /&gt;
[[Image:Menu4.JPG]]&lt;br /&gt;
&lt;br /&gt;
The next task is adding an entry into this new menu.&lt;br /&gt;
We already have hold of the menu interface (we just created it), nevertheless let's see what we need to do in the case we would not have it's interface yet (for example if we want to add entries to an existing submenu).&lt;br /&gt;
As submenu together with the other entries in the menu are called menuItem's. So within the &amp;quot;Edit&amp;quot; menu we need to search for the item &amp;quot;SubMenu1&amp;quot; and we will get in return, in the case it is found, it's position.&lt;br /&gt;
        int idSub = EditMenu-&amp;gt;FindItem(_(&amp;quot;SubMenu1&amp;quot;));&lt;br /&gt;
Once we have the position we can retrieve the interface of the item.&lt;br /&gt;
        wxMenuItem* SubMenu1Item = EditMenu-&amp;gt;FindItem(idSub, NULL);&lt;br /&gt;
Just fill in NULL as the second argument (I still need to find out what's its purpose).&lt;br /&gt;
From the item we can retrieve the actual submenu as follows :&lt;br /&gt;
        wxMenu* SubMenu1 = SubMenu1Item-&amp;gt;GetSubMenu();&lt;br /&gt;
And now we add like before a new entry.&lt;br /&gt;
The result looks like :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu5.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Modifying the context menu of the editor ==&lt;br /&gt;
&lt;br /&gt;
Another menu we can adjust is the pop-up menu you get by right-clicking in the editor pane of an open source file, sometimes also called the context menu.&lt;br /&gt;
As with the regular menu, the application will call a method of our plug-in to allow us to adjust the context menu. The method is &amp;quot;BuildModuleMenu&amp;quot;, as arguments we get the type of the Module generating the context menu, and the interface of that menu. So things are very easy here, we get the menu interface directly.&lt;br /&gt;
We only need to make sure that  :&lt;br /&gt;
&lt;br /&gt;
    * we are attached&lt;br /&gt;
    * the menu does exist&lt;br /&gt;
    * the module type is that of the editor manager&lt;br /&gt;
&lt;br /&gt;
In code the test on the type looks like :&lt;br /&gt;
        if(type == mtEditorManager)&lt;br /&gt;
And next we can add an entry like :&lt;br /&gt;
        menu-&amp;gt;Append(idContextMenuEntry1, _(&amp;quot;Context Menu Entry 1&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
The result looks like :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu6.JPG]]&lt;br /&gt;
&lt;br /&gt;
So this was a piece of cake.&lt;br /&gt;
&lt;br /&gt;
== Making all those menus do something ==&lt;br /&gt;
&lt;br /&gt;
Now that we have added all those new menu entries, it would be nice that they actually do something. If you select them at this moment nothing happens. Nevertheless they already did something behind the scenes. When you click on a menu entry they generate a wxCommand event. It is our duty to listen to those events and provide a handler for them. A handler can be seen as a method that does the stuff we want to happen when the menu entry is selected.&lt;br /&gt;
Those handlers should have the following signature :&lt;br /&gt;
void ClassName::MethodName(wxCommandEvent&amp;amp; event);&lt;br /&gt;
So for our 4 menu entries we have now, we add the following declarations in the header, in the private section :&lt;br /&gt;
        void OnMenuEntry1(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry2(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry3(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry4(wxCommandEvent&amp;amp; event);&lt;br /&gt;
And we provide some dummy implementation, they just write to the Log, telling us they were selected, now how about that for usefull functionality.&lt;br /&gt;
&lt;br /&gt;
All that's left to do is provide the missing link : connect the event to it's handler.&lt;br /&gt;
What we already know is that each menu entry has an unique id. The way wxWindows work is that we have to link that id with the event handler.&lt;br /&gt;
Those links are specified in the implementation file in the block :&lt;br /&gt;
        BEGIN_EVENT_TABLE(Ldc2, cbPlugin)&lt;br /&gt;
            // add events here...&lt;br /&gt;
        END_EVENT_TABLE()&lt;br /&gt;
This was placed in the generated code by the Plug-In wizard. Also in the class declaration we find such a directive :         DECLARE_EVENT_TABLE()&lt;br /&gt;
The BEGIN_EVENT_TABLE directive tells that our class Ldc2 listens to the same events as the cbPlugIn (our class was derived from cbPlugIn). Personal note : I hope this statement is correct.&lt;br /&gt;
Next we create mappings as follows :&lt;br /&gt;
        EVT_MENU(idMenuEntry1, Ldc2::OnMenuEntry1)&lt;br /&gt;
By means of the directive EVT_MENU we map our id idMenuEntry1 to the handler Ldc2::OnMenuEntry1&lt;br /&gt;
Where in our example the end result is :&lt;br /&gt;
        BEGIN_EVENT_TABLE(Ldc2, cbPlugin)&lt;br /&gt;
            // add events here...&lt;br /&gt;
            EVT_MENU(idMenuEntry1, Ldc2::OnMenuEntry1)&lt;br /&gt;
            EVT_MENU(idMenuEntry2, Ldc2::OnMenuEntry2)&lt;br /&gt;
            EVT_MENU(idMenuEntry3, Ldc2::OnMenuEntry3)&lt;br /&gt;
            EVT_MENU(idMenuEntry4, Ldc2::OnMenuEntry4)&lt;br /&gt;
        END_EVENT_TABLE()&lt;br /&gt;
Note : no semicolons at the end.&lt;br /&gt;
If you have compiled our example code, put the dll in the subdir .\share\CodeBlocks\plugins of Code::Blocks installation directory, you can try out the menus and see how it actually does work. ;-)&lt;br /&gt;
In the project zip file, the dll is also included.&lt;br /&gt;
The following screenshot shows the Log when we choose some of our menu entries.&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu7.JPG]]&lt;br /&gt;
&lt;br /&gt;
That's all for now, more tutorials will follow. Enjoy.&lt;br /&gt;
I would like to thank Mandrav and the rest of the Code::Blocks team for this great IDE, and also Thomas who gave me my first pointers on where to find some information.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_simple_%22Hello_World%22_plugin&amp;diff=4157</id>
		<title>Creating a simple &quot;Hello World&quot; plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_simple_%22Hello_World%22_plugin&amp;diff=4157"/>
		<updated>2006-11-12T17:49:16Z</updated>

		<summary type="html">&lt;p&gt;Artojon: flagged as outdated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
[[Category:Outdated]]&lt;br /&gt;
{{outdated}}&lt;br /&gt;
'''NOTE''': This tutorial was written using the Code::Blocks final beta under windows.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes you have a working version of Code::Blocks installed and some knowledge of how to deal with projects, in particular how to compile them. In order to use the Code::Blocks SDK you must also have a working version of wxWidgets installed. For more information see &lt;br /&gt;
[[Compiling wxWidgets 2.6.2 to develop Code::Blocks (MSW)|Compiling wxWidgets 2.6.2 to develop Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
To develop Code::Blocks plugins you will also need a copy of the Code::Blocks SDK, which can be found on the Code::Blocks [https://www.codeblocks.org/downloads.shtml download page]. Install this to somewhere sensible that you will remember later on. Personally I keep the SDK in a folder called CodeBlocks\sdk (which contains the include/ and lib/ from in the zip). This means that the header files refered to in the tutorial would be found under ''Codeblocks\sdk\include'', so ''cbPlugin.h'' is ''Codeblocks\sdk\include\cbPlugin.h'' for example.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This tutorial will guide you through the creation of a simple &amp;quot;Hello World&amp;quot; plugin, which when activated displays &amp;quot;Hello World!&amp;quot; in the Code::Blocks log tab below the editor. This could be done completely by hand, but Code::Blocks contains a very useful plugin project generator (which, incidentally, is a plugin itself), so we'll use that.&lt;br /&gt;
&lt;br /&gt;
==Creating the Plugin Project==&lt;br /&gt;
&lt;br /&gt;
Select the '''Plugins-&amp;gt;Code::Blocks Plugin Wizard''' option from the main menu bar and choose a suitable project name and location. Save the project, and another dialog will be shown which allows you to select various options for your plugin.&lt;br /&gt;
&lt;br /&gt;
===Plugin Type===&lt;br /&gt;
&lt;br /&gt;
The Code::Blocks SDK contains interfaces for various different types of plugins in the ''cbPlugin.h'' file. The drop down ''Plugin type'' list in the wizard allows you to select which type of plugin you wish to build - essentially which class the main plugin interface class will inherit from. We want to build a Tool plugin, so select that from the list. Tool type plugins are added to the Plugins main menu submenu automatically, and their ''Execute'' method is called when they are selected by the user. We will use this later in order to display our message.&lt;br /&gt;
&lt;br /&gt;
===Plugin Info===&lt;br /&gt;
&lt;br /&gt;
The ''Plugin name'' field is the name of the plugin interface class which the wizard will create. Enter &amp;quot;HelloWorldPlugin&amp;quot; here. More information can be provided by clicking on the ''Enter Plugin Info'' button. The fields here are fairly self explanitory, but one which you should pay particular attention to is the ''Title'' field, since this is what Code::Blocks will use to refer to the plugin in the menus. In the generated code, the plugin info is kept in the plugin class' ''m_PluginInfo'' member, which is of the type ''PluginInfo'' and is set in the plugin interface class' constructor. ''PluginInfo'' is detailed in ''cbPlugin.h'', if you want to go take a look.&lt;br /&gt;
&lt;br /&gt;
===Provides Configuration Dialog===&lt;br /&gt;
&lt;br /&gt;
This indicates whether or not the plugin is to provide a configuration dialog which can be accessed through the '''Settings-&amp;gt;Configure Plugins''' submenu. We don't need one, so leave this box unchecked.&lt;br /&gt;
&lt;br /&gt;
===Filenames===&lt;br /&gt;
&lt;br /&gt;
The filenames should have been filled in automatically by the dialog when you entered the Plugin name, if you used the name &amp;quot;HelloWorldPlugin&amp;quot;, for example, these should be helloworldplugin.h and helloworldplugin.cpp respectively. If you want to change the names of the files generated, this is where to do it (this tutorial will assume you have left them as the default values).&lt;br /&gt;
&lt;br /&gt;
The guard-block box is simply if you wish to place inclusion guards in the header file, and if you do what symbol to use. If you don't know what these are then just leave it as it is.&lt;br /&gt;
&lt;br /&gt;
Click '''Create''' and take note of the next dialog box's message about the SDK include and library directories, that's what we'll be dealing with next.&lt;br /&gt;
&lt;br /&gt;
==Letting the project know where to find the SDK==&lt;br /&gt;
&lt;br /&gt;
Code::Blocks should have created a new project called &amp;quot;Custom Plugin&amp;quot;. Before we can compile anything we need to make sure that the compiler knows where the sdk files are in order to include headers and link the libraries. If your compiler has not been setup to know where wxWidgets is yet then this must also be done (see the links in Prerequisites for more details).&lt;br /&gt;
&lt;br /&gt;
Right click on the project and select '''Build Options''' then the '''Directories''' tab. Here, make sure the '''Compiler''' tab is selected then click on the '''Add''' button. Browse to where you unzipped the SDK and select the ''include'' directory (for example ''C:\CodeBlocks\sdk\include'' if you installed the SDK there), then click okay and select whether or not the path should remain relative. Go to the &amp;quot;Linker&amp;quot; tab and add the &amp;quot;lib&amp;quot; directory under where the SDK was installed in similar fashion (following my install, this would be in ''C:\CodeBlocks\sdk\lib'').&lt;br /&gt;
&lt;br /&gt;
===Linker Options===&lt;br /&gt;
&lt;br /&gt;
If you click on the '''Linker Options''' tab at the top level in the Build Options dialog, you will see that the plugin is being linked to the Code::Blocks core library (codeblocks) and the wxWidgets library (wxmsw242 under windows ''NOTE: The plugin generator uses 2.4.2, if you're using a different version of wxWidgets then change this'').&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&lt;br /&gt;
The '''Compiler Options''' tab shows that several symbols have been defined when the plugin is compiled: ''__GNUWIN32__'', ''WXUSINGDLL'' and ''BUILDING_PLUGIN'' in this case (using windows). The first two are indicators to wxWidgets of the compiler and DLL options to use, and the last is an indicator to the Code::Blocks SDK headers that they are being used to build a plugin (which affects whether or not symbols are exported or imported for the DLL - see ''cbPlugin.h'' for example).&lt;br /&gt;
&lt;br /&gt;
==Adding Functionality==&lt;br /&gt;
&lt;br /&gt;
The plugin wizard should have generated us helloworldplugin.h and helloworldplugin.cpp. The header file contains the class definition and a C function declaration which is used to load the plugin when asked by the main Code::Blocks program (''GetPlugin''). What we're interested in, however, is the definition of the class methods in helloworldplugin.cpp. The plugin wizard has generated us a constructor in which the ''m_PluginInfo'' information is set, and three methods. ''OnAttatch'' and ''OnRelease'' are methods called to inform the plugin when it is attached (the user has selected it and Code::Blocks has loaded it) or released (Code::Blocks no longer has a use for it or is shutting down). Since our plugin does not need to perform any actions on loading or shutting down, we can leave these as they are.&lt;br /&gt;
&lt;br /&gt;
The ''Execute'' method, as mentioned earlier, is what we are really interested in. We are going to use the MessageManager class to add a log message in the window beneath the editor. To do this we will need access to both the Manager class and the MessageManager class. Manager is and internal Code::Blocks class which is used to keep track of internal information and the various task specific managers (like the MessageManager and EditorManager - which is used to keep track of all the open files and their editors). MessageManager is responsible for both normal output and debugging output (see ''messagemanager.h'' for more details). Replace the generated Execute method with this new one:&lt;br /&gt;
&lt;br /&gt;
 int HelloWorldPlugin::Execute()&lt;br /&gt;
 {&lt;br /&gt;
     if( !IsAttached() )&lt;br /&gt;
         return -1;&lt;br /&gt;
     Manager::Get()-&amp;gt;GetMessageManager()-&amp;gt;Log( _(&amp;quot;Hello World!&amp;quot;) );&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This new method uses the Manager's static Get method to return the singleton Manager object, then uses that to access the MessageManager through the GetMessageManager method. MessageManager has a method called ''Log'' which appends a string to the bottom of the output log, so we use this to add the &amp;quot;Hello World!&amp;quot; message. The _() construct is part of wxWidgets' internationalisation utilities, and more information on it can be found in the wxWidgets [http://wiki.wxwidgets.org/wiki.pl?WxWidgets_Source_Oddities documentation].&lt;br /&gt;
&lt;br /&gt;
The first two lines check to see if the plugin has been attatched (in other words selected by the user in the '''Plugins-&amp;gt;Plugin Manager''' menu), and thus whether it should perform any action at all. As far as I can tell, the return value of Execute is not used anywhere, but all the default plugins use -1 for failure and 0 for success (much like the main function in a C program) so that is what is used here.&lt;br /&gt;
&lt;br /&gt;
Add headfiles to helloworldplugin.cpp &lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;manager.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;messagemanager.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we have our code in place we are ready to...&lt;br /&gt;
&lt;br /&gt;
==Compile! (And test)==&lt;br /&gt;
&lt;br /&gt;
This should produce a file called HelloWorldPlugin.dll, which can be tested by copying to the ''CodeBlocks\share\CodeBlocks\plugins\'' directory and restarting Code::Blocks. There should now be an option in the '''Plugins''' menu for &amp;quot;Hello World&amp;quot; (or whatever the title field was set to when the plugin was generated - or in ''m_PluginInfo''). Click on this and &amp;quot;Hello World!&amp;quot; should appear in the Code::Blocks logging window. Congratulations, you've just created your first plugin!&lt;br /&gt;
&lt;br /&gt;
==Further Information==&lt;br /&gt;
&lt;br /&gt;
It is essential to learn how wxWidgets works if you seriously plan on working on plugins, since most of Code::Blocks depends on it, and you will find it easier to add and manipulate components if you have a firm grasp of its principles. More information on this can be found in the wxWidgets [http://www.wxwidgets.org/docs.htm documentation]. Another good place to learn from is the source code from the existing Code::Blocks plugins, which can be downloaded along with the rest of the Code::Blocks source code from the [https://www.codeblocks.org/downloads.shtml download page]. &lt;br /&gt;
&lt;br /&gt;
Hopefully this tutorial has helped you work through a few fundamentals in terms of creating plugins, happy coding!&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Comparison_of_wxSmith_features&amp;diff=4156</id>
		<title>Comparison of wxSmith features</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Comparison_of_wxSmith_features&amp;diff=4156"/>
		<updated>2006-11-11T19:38:05Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:wxSmith Documentation]]&lt;br /&gt;
Here is a list of [[wxSmith]] features when compared to other [[wikipedia:WxWidgets|wxWidgets]] [[wikipedia:Rapid application development|RAD]] solutions. &lt;br /&gt;
&lt;br /&gt;
Note that support for new features are added on a daily basis for some of these [[wikipedia:Rapid application development|RADs]].&lt;br /&gt;
&lt;br /&gt;
Please update this list when something gets added.&lt;br /&gt;
&lt;br /&gt;
==General information==&lt;br /&gt;
Basic general information about the [[wikipedia:Rapid application development|RADs]]: developer, license/price etc.&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width:12em&amp;quot; | [[wikipedia:Rapid application development|RAD]]&lt;br /&gt;
! Developer&lt;br /&gt;
! Cost ([[wikipedia:United States dollar|USD]])&lt;br /&gt;
! [[wikipedia:Open source|Open source]]&lt;br /&gt;
! [[wikipedia:Software licence|Software licence]]&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [[wxSmith]]&lt;br /&gt;
| Bartlomiej Swiecki&lt;br /&gt;
| Free&lt;br /&gt;
| Yes&lt;br /&gt;
| [[wikipedia:GNU General Public License|GPL]]&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [http://www.anthemion.co.uk/dialogblocks/ DialogBlocks]&lt;br /&gt;
| Julian Smart&lt;br /&gt;
| Free (trial), €66 (normal), €35 (student)&lt;br /&gt;
| No&lt;br /&gt;
| [[wikipedia:Proprietary software|Proprietary]]&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [http://www.roebling.de/ wxDesigner]&lt;br /&gt;
| Robert Roebling&lt;br /&gt;
| Free (trial), €129 (normal), €29 (student)&lt;br /&gt;
| No&lt;br /&gt;
| [[wikipedia:Proprietary software|Proprietary]]&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [http://wxformbuilder.org/ wxFormBuilder]&lt;br /&gt;
| José Antonio Hurtado, Juan Antonio Ortega&lt;br /&gt;
| Free&lt;br /&gt;
| Yes&lt;br /&gt;
| [[wikipedia:GNU General Public License|GPL]]&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [http://visualwx.altervista.org/ VisualWx]&lt;br /&gt;
| {{dunno}}&lt;br /&gt;
| Free&lt;br /&gt;
| No&lt;br /&gt;
| {{dunno}}&lt;br /&gt;
|- style=&amp;quot;border: solid 1px gray;&amp;quot;&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | [http://wxdsgn.sf.net/ wxDevC++]&lt;br /&gt;
| Guru Kathiresan , Tony Reina, Malcolm Nealon, Joel Low&lt;br /&gt;
| Free&lt;br /&gt;
| Yes&lt;br /&gt;
| [[wikipedia:GNU General Public License|GPL]]&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: solid 1px gray;&amp;quot;&lt;br /&gt;
! [[wikipedia:Rapid application development|RAD]]&lt;br /&gt;
! Developer&lt;br /&gt;
! Cost ([[wikipedia:United States dollar|USD]])&lt;br /&gt;
! [[wikipedia:Open source|Open source]]&lt;br /&gt;
! [[wikipedia:Software licence|Software licence]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Widgets supported==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 12em&amp;quot; | Widget&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxBitmapButton&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxBoxSizer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxButton&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxCalendarCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxCheckBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxCheckListBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxChoice&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxChoicebook&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxColourDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxComboBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxContextHelpButton&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxDatePickerCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxDialUpManager&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxDirDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxDynamicSashWindow&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxFlexGridSizer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxFileDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxFindReplaceDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxFontDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxGauge&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxGenericDirCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxGrid&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxGridBagSizer &lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxGridSizer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxHtmlEasyPrinting&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxHtmlListBox&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxHtmlWindow&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxHyperLinkCtrl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxListbook&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxListBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxListCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxListView&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxMediaCtrl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxMenu&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxMessageDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxMultiChoiceDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxNotebook&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxOwnerDrawnComboBox&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPanel&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPasswordEntryDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPrintDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxProgressDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPropertySheetDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxRadioBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxRadioButton&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxRichTextCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSashLayoutWindow&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSashWindow&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxScrollBar&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxScrolledWindow&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSingleChoiceDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSlider&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSpacer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSpinButton&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSpinCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxSplitterWindow&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStaticBitmap&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStaticBox&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStaticBoxSizer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStaticLine&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStaticText&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStatusBar&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStdDialogButtonSizer&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxTextCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxTextEntryDialog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxToggleButton&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxToolbar&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxTreebook&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxTreeCtrl&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxVListBox&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxVScrolledWindow&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxWindow (Foreign)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxWizardPage&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! Widget&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wx-DevC++&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Contrib widgets supported==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 12em&amp;quot; | Widget&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | awxLed&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxEditableListBox&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxFlatNotebook&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxLEDNumberCtrl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPlotWindow&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPropertyGrid&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxPropertyGridManager&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxScintilla&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxStyledTextCtrl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | wxTreeListCtrl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! Widget&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Languages supported==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 12em&amp;quot; | Feature&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | C++ code output&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Python code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Lua code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Ruby code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Perl code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | C# code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Basic code output&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features supported==&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 100%; table-layout: fixed;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 12em&amp;quot; | Feature&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | XRC input&lt;br /&gt;
| {{yes}}{{refun|XRCnotworks}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | XRC output&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | XRC code loading&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{dunno}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Validators{{refun|Validators}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Conditional UI{{refun|ConditionalUI}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Event table and handler generation{{refun|EventTable}}&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Bitmaps support{{refun|Bitmaps}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | English descriptions{{refun|EnglishDesc}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Easy access to window pointers{{refun|WindowPointers}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{dunno}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Visually creating custom controls&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Template controls{{refun|TemplateControls}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Sizer design&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Non-sizer design&lt;br /&gt;
| {{partial}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! Feature&lt;br /&gt;
! wxSmith&lt;br /&gt;
! DialogBlocks&lt;br /&gt;
! wxDesigner&lt;br /&gt;
! wxFormBuilder&lt;br /&gt;
! VisualWx&lt;br /&gt;
! wxDevC++&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{{note|XRCnotworks}} Currently, only one dialog resource per XRC file is imported.&lt;br /&gt;
&lt;br /&gt;
=== Features explained ===&lt;br /&gt;
&lt;br /&gt;
==== {{note|Validators}}Validators ====&lt;br /&gt;
&lt;br /&gt;
The aim of the validator concept is to make dialogs very much easier to write. A validator is an object that can be plugged into a control (such as a wxTextCtrl), and mediates between C++ data and the control, transferring the data in either direction and validating it. It also is able to intercept events generated by the control, providing filtering behaviour without the need to derive a new control class.&lt;br /&gt;
&lt;br /&gt;
How to use validators in a RAD that supports this concept: Just add a variable, select the variable and a validator, and the data transfer between variable and control is done for you.&lt;br /&gt;
&lt;br /&gt;
==== {{note|ConditionalUI}}Conditional UI ====&lt;br /&gt;
&lt;br /&gt;
It's the ability to adapt the user interface to the UI guidelines of different platform.&lt;br /&gt;
&lt;br /&gt;
Just mark elements as for one platform (or several), and preview the look for any given platform.&lt;br /&gt;
&lt;br /&gt;
[[Image:Conditional ui.PNG|Example of how it looks on DialogBlocks]]&lt;br /&gt;
&lt;br /&gt;
==== {{note|EventTable}}Event table and handler generation ====&lt;br /&gt;
&lt;br /&gt;
The RAD generates the event tables and empty handlers (including UI update handlers) so you can immediately concentrate on writing code to make the dialog come to life.&lt;br /&gt;
&lt;br /&gt;
It includes a choice of event types for each window, with function name editing.&lt;br /&gt;
&lt;br /&gt;
'''DialogBlocks Event Handler'''&lt;br /&gt;
&lt;br /&gt;
Here DialogBlocks haves the list of event handlers.&lt;br /&gt;
&lt;br /&gt;
The most noticeable feature here is that if you do a double-click on a event, you're transported to the function associated in the code. It's very handy.&lt;br /&gt;
&lt;br /&gt;
[[Image:Event handler dialogblocks.PNG|Event Tables in DialogBlocks]]&lt;br /&gt;
&lt;br /&gt;
'''VisualWx Event Handler'''&lt;br /&gt;
&lt;br /&gt;
Here VisualWx filters the events:&lt;br /&gt;
* Base wxWidgets Events&lt;br /&gt;
* Component Events&lt;br /&gt;
* Windows Events&lt;br /&gt;
* VisualWx Events&lt;br /&gt;
* Custom Events&lt;br /&gt;
&lt;br /&gt;
[[Image:Event handler visualwx.PNG|Event Tables in VisualWx]]&lt;br /&gt;
&lt;br /&gt;
==== {{note|Bitmaps}}Bitmap support ====&lt;br /&gt;
&lt;br /&gt;
Bitmaps support means that you can import images into your project from a variety of formats and associate them with your static bitmap and bitmap button controls. &lt;br /&gt;
&lt;br /&gt;
You can specify whether the bitmaps will converted into XPM format (the standard format for small bitmaps in wxWidgets) and whether the XPM image will be inserted as inline C++ code, or loaded from a file.&lt;br /&gt;
&lt;br /&gt;
==== {{note|EnglishDesc}}English descriptions ====&lt;br /&gt;
&lt;br /&gt;
English descriptions show a brief description of each element, to help you get used to sizers and also to make it easier to see at a glance the important aspects of your dialog element.&lt;br /&gt;
&lt;br /&gt;
[[Image:Rad english descriptions.PNG|An example of DialogBlocks English descriptions]]&lt;br /&gt;
&lt;br /&gt;
==== {{note|WindowPointers}}Easy access to window pointers ====&lt;br /&gt;
&lt;br /&gt;
The ''easy access to window pointers'' concept means: &lt;br /&gt;
&lt;br /&gt;
Give each window a variable name, and the RAD will add the name to the class declaration, and initialise it to the appropriate window in the implementation. &lt;br /&gt;
&lt;br /&gt;
In XRC mode, the RAD can generate the code to find the window and assign it to the pointer variable.&lt;br /&gt;
&lt;br /&gt;
==== {{note|TemplateControls}}Template controls ====&lt;br /&gt;
&lt;br /&gt;
Template controls are sets of most common widgets together, like an Ok/Cancel pair buttons inside a sizer, being user-definable.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Category:Installing_Code::Blocks&amp;diff=4155</id>
		<title>Category:Installing Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Category:Installing_Code::Blocks&amp;diff=4155"/>
		<updated>2006-11-11T19:36:59Z</updated>

		<summary type="html">&lt;p&gt;Artojon: moved to &amp;quot;User Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;br /&gt;
:''Main article: [[Installing Code::Blocks]]''&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=WxSmith_Tutorial_%26_Pointers&amp;diff=4154</id>
		<title>WxSmith Tutorial &amp; Pointers</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=WxSmith_Tutorial_%26_Pointers&amp;diff=4154"/>
		<updated>2006-11-11T19:32:42Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:wxSmith Documentation]]&lt;br /&gt;
= &amp;quot;Hello world&amp;quot; Tutorial =&lt;br /&gt;
&lt;br /&gt;
Since wxSmith is able to do something already it's high time to write a small tutorial on how to use it.&lt;br /&gt;
At the very beginning, I must point out that to use wxSmith you MUST have wxWidgets compiled (version 2.6 or later). Build instructions can be found [[Compiling wxWidgets 2.6.2 to develop Code::Blocks (MSW)|here]]&lt;br /&gt;
&lt;br /&gt;
WARNING: wxSmith is still unstable. So use it at Your own risk. And there's no undo yet. I warned You ;)&lt;br /&gt;
&lt;br /&gt;
Ok, let's start :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== wxWidgets starts to breathe ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wxSmith can be used inside any wxWidgets project. However, we currently have only one option to ''easily'' create a wxWidgets app.&lt;br /&gt;
Simply select '''File -&amp;gt; New Project -&amp;gt; wxWidgets Application''' from the menu. &lt;br /&gt;
If You have compiled wxWidgets using the wiki tutorial, select '''Using wxWidgets DLL''' in '''Project Options'''. Hit Create and save the project.&lt;br /&gt;
If you're running on Windows, you probably will have to change the WX_DIR Custom variable. It should point to the root wxWidgets directory and it can be changed in '''Project -&amp;gt; Build Options''' menu in the '''Custom variables''' tab.&lt;br /&gt;
&lt;br /&gt;
After this step you should be able to produce an app like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH1.JPG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Let's add some fireworks ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now it's time to fill the empty frame with our &amp;quot;Hello World&amp;quot; message. We will do this by placing a panel over the frame.&lt;br /&gt;
Select '''wxSmith -&amp;gt; Add Panel''' from menu. If you're doing this for the first time in a project, it should display this message box:&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH2.JPG]]&lt;br /&gt;
&lt;br /&gt;
Just click Yes, it will bring up a configuration dialog. You can set-up following options here:&lt;br /&gt;
* Class Name - name of class which will contain our panel&lt;br /&gt;
* Header File / Source File - files which will contain the panel's class&lt;br /&gt;
* Xrc File - selecting this option allow you to use a xrc file containing the panel's data&lt;br /&gt;
&lt;br /&gt;
In our tutorial we will use a class named &amp;quot;HelloWorldPnl&amp;quot; (notice that usually when typing a class name, header and source file names are generated automatically). The config dialog should look like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH3.JPG]]&lt;br /&gt;
&lt;br /&gt;
Click Create and we have our panel right in the editor&lt;br /&gt;
&lt;br /&gt;
== Building window ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wxWidgets comes with something called ''Sizers''. But what is this for?&lt;br /&gt;
If You have been working with java you will remember something called Layout managers. Implementation in wxWidgets differs a little bit but it does almost the same.&lt;br /&gt;
Ok, but let's put some explanation here:&lt;br /&gt;
Usually when adding items into windows You must specify the item's position and size. wxWidgets tries to automate this process and it uses sizers for that. They are automatic positioning and sizing window items. Sizers have one big advantage. When You write cross-platform applications, you cannot assume that fonts, buttons, etc. are sized the same from one platform to another. This can even occur on the same platform. When You use sizers, You don't have to worry about that. All sizing is done automatically. And one more thing - sizers can even reposition and resize window items when the window itself changes size.&lt;br /&gt;
So, let's add some sizers here. But first...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== How can I add something ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In a newly opened editor you will see eight black boxes around something which looks like a button without a label&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH4.JPG]]&lt;br /&gt;
&lt;br /&gt;
These black boxes are surrounding a currently selected item. In our case it's a whole panel.&lt;br /&gt;
Adding new item is simply done by clicking on one of the buttons in the palette at the bottom of the C::B window. &lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH5.JPG]]&lt;br /&gt;
&lt;br /&gt;
These buttons have small pictures showing what they add. If you're unsure, hold the mouse over the button and, after a moment, you will see the name of the wxWidgets class that the button represents - that's our item.&lt;br /&gt;
&lt;br /&gt;
New items are added relatively to the current selection. You can add new item in one of three ways:&lt;br /&gt;
* Before the currently selected widget&lt;br /&gt;
* After the currently selected widget&lt;br /&gt;
* Into the currently selected widget&lt;br /&gt;
You change the insert method via a palette (it should be easy to find ;)). (big buttons, far right)&lt;br /&gt;
Note that all three insertions settings are not always accessible. For example You cannot add anything into a button. There are also some special situations when You cannot add new item:&lt;br /&gt;
* When an item has sizer inside, it cannot contain anything else. Items can be added into the sizer only&lt;br /&gt;
* When an item has anything but a sizer inside, you cannot add a sizer into it.&lt;br /&gt;
* Spacers (empty fields added into sizers instead of real items) can be added into a sizers only&lt;br /&gt;
&lt;br /&gt;
Always make sure that a valid item is selected and that a valid insertion method is chosen.&lt;br /&gt;
&lt;br /&gt;
=== Adding items ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There are five types of sizers in wxWidgets, four are currently supported inside wxSmith (wxGridBagSizer is not supported yet). If You wish to learn about sizers I propose [http://www.wxwidgets.org/manuals/2.6.1/wx_sizeroverview.html#sizeroverview wxWidgets doccumentation]&lt;br /&gt;
In our sample we will add wxFlexGridSizer. Perform the following:&lt;br /&gt;
&lt;br /&gt;
* Select panel by clicking on it.&lt;br /&gt;
* Click on the wxFlexGridSizer button (third in Layout row).&lt;br /&gt;
&lt;br /&gt;
You probably noticed that our panel decreased it's sizer. This is because the sizer automatically adjusts to the  minimal size of it's parent. And there's an additional red border - it shows where the sizer is located.&lt;br /&gt;
&lt;br /&gt;
Because this is a &amp;quot;Hello World&amp;quot; application, we'll put the text into a newly created sizer. To do this:&lt;br /&gt;
&lt;br /&gt;
* Select sizer (click somewhere insided red border)&lt;br /&gt;
* Make sure that the Insetion Type is ''Into''&lt;br /&gt;
* Click on the wxStaticText button&lt;br /&gt;
* Click on the newly created text item (should be &amp;quot;Label&amp;quot;) and go to properties  (The Properties panel is inside the  Resources tab at the left of C::B  Use the little arrows at the top of the Management panel to find the Resources Panel if its hidden )&lt;br /&gt;
* Change the Label property to &amp;quot;Hello World !!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
And because this text looks so lonely, we'll add another button here:&lt;br /&gt;
&lt;br /&gt;
* Select the newly created text (now &amp;quot;Hello World !!&amp;quot;)&lt;br /&gt;
* Chose the &amp;quot;''After''&amp;quot; Insertion type&lt;br /&gt;
* Click on the wxButton icon&lt;br /&gt;
&lt;br /&gt;
Ok, now we have this:&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH6.JPG]]&lt;br /&gt;
&lt;br /&gt;
But I would prefer to put this button below the text. How to do this ?&lt;br /&gt;
As I mentioned before, sizers are automatic positioning items and, in our case, the sizer decided to put the widgets in a horizontal row, one next to another. If we want them to be in a vertical colume, we need to change some properties for the sizer:&lt;br /&gt;
* Select wxFlexGridSizer in the resources tree representing the structure of our window (to the left, in the Resources panel)&lt;br /&gt;
* Expand &amp;quot;Cols x Rows&amp;quot; property and change the X value to 1.&lt;br /&gt;
What have we done ?&lt;br /&gt;
We instructed the sizer to create only one column of widgets. Alternatively, we could have set the number of rows (Y) to 2. The effect would have been the same. Setting the values to 0 means that the sizer has to find its values automatically. Ok, let's see what  we've done.&lt;br /&gt;
&lt;br /&gt;
=== Using the created panel ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this tutorial we will put our panel over the main frame. To do this:&lt;br /&gt;
* Open the main.cpp file&lt;br /&gt;
* Add '''#include &amp;quot;helloworldpnl.h&amp;quot;''' to the beginning of the file&lt;br /&gt;
* At the end of '''MyFrame::MyFrame''' add the statement '''new HelloWorldPnl(this);'''&lt;br /&gt;
* Compile and Run&lt;br /&gt;
&lt;br /&gt;
You should see something like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH7.JPG]]&lt;br /&gt;
&lt;br /&gt;
=== But I want it to look better ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see. I would like my panel to be more interesting, I want it to change when we resize our window. And I want a bigger font, and let's say, a blue font colour. The first can be done using the previously created wxFlexGridSizer. It needs just a few modifications:&lt;br /&gt;
&lt;br /&gt;
* Select wxFlexGridSizer from the resource browser&lt;br /&gt;
* Change growable cols property to 0 (zero)&lt;br /&gt;
* Change growable rows property to 0 (zero)&lt;br /&gt;
The changed properties keep information about columns and rows which should expand when the window changes size. Values are integers (zero-based indexes) separated by commas. &lt;br /&gt;
&lt;br /&gt;
The second is also easy:&lt;br /&gt;
* Select wxStaticText from the resource browser (or click on it in the editor)&lt;br /&gt;
* Find font property and expand it&lt;br /&gt;
* Change Use Font to True&lt;br /&gt;
* Click on font property below - a button with &amp;quot;...&amp;quot; will appear, click on it&lt;br /&gt;
* Select new font, I used &amp;quot;Times New Roman&amp;quot;, Bold, size: 20&lt;br /&gt;
* Find foreground property and expand it&lt;br /&gt;
* Change Use Colour to true&lt;br /&gt;
* In Colour below select Custom, colour dialog will appear&lt;br /&gt;
* Select colour You like :)&lt;br /&gt;
&lt;br /&gt;
Ok, let's compile &amp;amp; run.&lt;br /&gt;
Now when we resize the window, our panel changes dynamically, the font is bigger and the colour has changed :)&lt;br /&gt;
&lt;br /&gt;
[[Image:WXSMITH8.JPG]]&lt;br /&gt;
&lt;br /&gt;
=== How to make buttons respond ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we'll add an action to our button. Let's say it will close the program. First, let's change the button label to &amp;quot;Close&amp;quot;. This should be pretty easy and I hope You won't have any problems with it.&lt;br /&gt;
Ok, now let's add some action.&lt;br /&gt;
&lt;br /&gt;
wxWidgets works like many other GUI systems - through events. An event is a small peace of information saying that something has happened - for example, the user clicked on a button. But we want to ''do'' something when such and event happens. To connect events with actions we have to create an event handler. wxSmith can do this automatically:&lt;br /&gt;
&lt;br /&gt;
* Select the button&lt;br /&gt;
* Switch to the Events tab (if you see properties, it's right there)&lt;br /&gt;
* In the line named EVT_BUTTON choose &amp;quot;-- Add new handler --&amp;quot;&lt;br /&gt;
* Change the event handler name to something you like (I will leave it as it is ;)) and click OK&lt;br /&gt;
&lt;br /&gt;
As You can see, a new empty function has been created&lt;br /&gt;
&lt;br /&gt;
  void HelloWorldPnl::OnButton1Click(wxCommandEvent&amp;amp; event)&lt;br /&gt;
  {&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Here we can write some code that will be executed when you press the button.&lt;br /&gt;
So, let's add a Close() command&lt;br /&gt;
&lt;br /&gt;
  void HelloWorldPnl::OnButton1Click(wxCommandEvent&amp;amp; event)&lt;br /&gt;
  {&lt;br /&gt;
    Close();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
and see what happens. I click on Close button and... nothing happens. Why ?&lt;br /&gt;
Because we closed the panel, not the whole window. How do I know that ?&lt;br /&gt;
Our event handler is a member of the HelloWorldPnl class. Everything inside the event handler pertains to the panel, not the outer window. When we called Close() we called this function in the wxPanel class.&lt;br /&gt;
But how can we close the main frame? Change the code to:&lt;br /&gt;
&lt;br /&gt;
  void HelloWorldPnl::OnButton1Click(wxCommandEvent&amp;amp; event)&lt;br /&gt;
  {&lt;br /&gt;
    GetParent()-&amp;gt;Close();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
The GetParent() function will return a pointer to the parent window - frame. Now Close() is being called on the panels parent, the window. But be careful. Our example was easy and we just assumed that main frame will be the panel's parent. Usually we can not be so sure.&lt;br /&gt;
&lt;br /&gt;
Our Hello World application is ready to go :) I hope It wasn't boring. Not bored ? Then read next chapter ;)&lt;br /&gt;
&lt;br /&gt;
= Pointers =&lt;br /&gt;
&lt;br /&gt;
== Some technical info ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ok, I'll try to explain how wxSmith affects our code, how to work with it, why you shouldn't be worried about losing your code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Where wxSmith generates its code ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
wxSmith is not as intelligent as it may seem ;) When we say it generates code, it simply replaces whole code pieces without wondering if code is placed in the right position.&lt;br /&gt;
But the code works. How is it done ?!&lt;br /&gt;
&lt;br /&gt;
When You look into files generated inside wxSmith, you may find some special comments like :&lt;br /&gt;
&lt;br /&gt;
  //(*Headers(HelloWorldPnl)&lt;br /&gt;
  //*)&lt;br /&gt;
&lt;br /&gt;
These comments are used by wxSmith to find the place where new code should be applied.&lt;br /&gt;
Each ''//(*'' comment starts automatically generated block of code and ''//*)'' closes it. Everything between these comments is regenerated, even if you add something there&lt;br /&gt;
&lt;br /&gt;
The only exception is a block started with the ''//(*Handlers'' comment. wxSmith can only '''add''' to this block of code. If you want to write your event handler manually, you can put its declaration here.&lt;br /&gt;
&lt;br /&gt;
Code outside the ''//(*'' - ''//*)'' comments won't be touched.&lt;br /&gt;
&lt;br /&gt;
== Loading XRC resources ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When using an XRC file, do not forget to initialize the wxXMLResouce Handlers &amp;amp; XRC File.  For example in your App::OnInit:&lt;br /&gt;
&lt;br /&gt;
    // Loading XRC resource file (not in a zip file).&lt;br /&gt;
    wxXmlResource::Get()-&amp;gt;InitAllHandlers();&lt;br /&gt;
    wxXmlResource::Get()-&amp;gt;Load(&amp;quot;&amp;lt;your XRC File name&amp;gt;.xrc&amp;quot;);&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Adding_new_widget_to_wxSmith&amp;diff=4153</id>
		<title>Adding new widget to wxSmith</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Adding_new_widget_to_wxSmith&amp;diff=4153"/>
		<updated>2006-11-11T19:32:04Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:wxSmith Documentation]]&lt;br /&gt;
'''Warning: Not finished yet'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hi. Because wxSmith is still under development it misses some standard widgets in it's palette. I hope this will change soon. But If you really need some kind of widget maybe you could help us a little bit with wxSmith development :).&lt;br /&gt;
&lt;br /&gt;
At the very beginning I must point that technique described here will work with default widget set and I cannot grant that this will work with external ones. There may be a problem even with standard ones but hopefully we could work on that together ;)&lt;br /&gt;
&lt;br /&gt;
== Quick guide ==&lt;br /&gt;
&lt;br /&gt;
Here I will show how to add new widget realy fast. It will work only with widgets that have no children. Let's see an example (source files should be placed inside defwidgets directory since wxSmith uses such convention). Here's extra-commented source code for wxSpinButton widget:&lt;br /&gt;
&lt;br /&gt;
wxsspinbutton.h:&lt;br /&gt;
&lt;br /&gt;
  #ifndef __WXSSPINBUTTON_H&lt;br /&gt;
  #define __WXSSPINBUTTON_H&lt;br /&gt;
  &lt;br /&gt;
  #include &amp;quot;../wxsdefwidget.h&amp;quot;             // this file declares most of usefull macros &lt;br /&gt;
  #include &amp;quot;wxsstdmanager.h&amp;quot;               // declaration of default widget manager&lt;br /&gt;
  &lt;br /&gt;
  WXS_ST_DECLARE(wxsSpinButtonStyles)      // declaring styles for wxsSpinButton class&lt;br /&gt;
  WXS_EV_DECLARE(wxsSpinButtonEvents)      // declaring events for wxsSpinButtin class&lt;br /&gt;
  &lt;br /&gt;
  wxsDWDeclareBegin(wxsSpinButton,wxsSpinButtonId)   // Beginning of class declaration&lt;br /&gt;
  &lt;br /&gt;
      // Here are additional properties (standard ones like position/size etc.&lt;br /&gt;
      // are processeed automatically)&lt;br /&gt;
      int value;&lt;br /&gt;
      int min;&lt;br /&gt;
      int max;&lt;br /&gt;
  wxsDWDeclareEnd()                                  // End of class declaration&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  #endif&lt;br /&gt;
&lt;br /&gt;
wxsxspinbutton.cpp:&lt;br /&gt;
&lt;br /&gt;
  #include &amp;quot;../wxsheaders.h&amp;quot;                         // Standard include for precompiled headers&lt;br /&gt;
  #include &amp;quot;wxsspinbutton.h&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  #include &amp;lt;wx/spinbutt.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Here's definition of spin button styles&lt;br /&gt;
  WXS_ST_BEGIN(wxsSpinButtonStyles)&lt;br /&gt;
      &lt;br /&gt;
      // Category definition - currently not used but maybe in future ;)&lt;br /&gt;
      WXS_ST_CATEGORY(&amp;quot;wxSpinButton&amp;quot;)                        &lt;br /&gt;
      &lt;br /&gt;
      // Example of masked style (available in one platform/not available in xrc etc.)&lt;br /&gt;
      WXS_ST_MASK(wxSP_HORIZONTAL,wxsSFAll,wxsSFGTK,true)    &lt;br /&gt;
      &lt;br /&gt;
      // Example of standard style (available everywhere)&lt;br /&gt;
      WXS_ST(wxSP_VERTICAL)&lt;br /&gt;
      &lt;br /&gt;
      WXS_ST(wxSP_ARROW_KEYS)&lt;br /&gt;
      WXS_ST(wxSP_WRAP)&lt;br /&gt;
  WXS_ST_END(wxsSpinButtonStyles)&lt;br /&gt;
  &lt;br /&gt;
  // Here's dedfinition of spin button events&lt;br /&gt;
  WXS_EV_BEGIN(wxsSpinButtonEvents)&lt;br /&gt;
      WXS_EVI(EVT_SPIN,wxSpinEvent,Change)&lt;br /&gt;
      WXS_EVI(EVT_SPIN_UP,wxSpinEvent,ChangeUp)&lt;br /&gt;
      WXS_EVI(EVT_SPIN_DOWN,wxSpinEvent,ChangeDown)&lt;br /&gt;
      WXS_EV_DEFAULTS()&lt;br /&gt;
  WXS_EV_END(wxsSpinButtonEvents)&lt;br /&gt;
  &lt;br /&gt;
  // Declaration of spin button widget  &lt;br /&gt;
  wxsDWDefineBegin(wxsSpinButton,wxSpinButton,&lt;br /&gt;
          WXS_THIS = new wxSpinButton(WXS_PARENT,WXS_ID,WXS_POS,WXS_SIZE,WXS_STYLE);&lt;br /&gt;
          WXS_THIS-&amp;gt;SetRange(min,max);&lt;br /&gt;
          WXS_THIS-&amp;gt;SetValue(value); // This is code producing this widget&lt;br /&gt;
      )&lt;br /&gt;
  &lt;br /&gt;
      // Bindings for additional properties&lt;br /&gt;
      wxsDWDefInt(value,&amp;quot;Default:&amp;quot;,0);&lt;br /&gt;
      wxsDWDefInt(min,&amp;quot;Min:&amp;quot;,0)&lt;br /&gt;
      wxsDWDefInt(max,&amp;quot;Max:&amp;quot;,100)&lt;br /&gt;
  &lt;br /&gt;
  wxsDWDefineEnd()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Maybe it seems to be a little bit complicated but If You think so, just take a look at wxsWidget class ;) Without most of usefull macros presented here, adding new widget would be a nightmare :)&lt;br /&gt;
&lt;br /&gt;
Ok, let's explain this code:&lt;br /&gt;
&lt;br /&gt;
Each widget has set of styles it uses and events it throws. All is done in:&lt;br /&gt;
&lt;br /&gt;
  WXS_ST_DECLARE(wxsSpinButtonStyles)      // declaring styles for wxsSpinButton class&lt;br /&gt;
  WXS_EV_DECLARE(wxsSpinButtonEvents)      // declaring events for wxsSpinButtin class&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
  WXS_ST_BEGIN(wxsSpinButtonStyles)&lt;br /&gt;
    ...&lt;br /&gt;
  WXS_ST_END(wxsSpinButtonStyles)&lt;br /&gt;
  &lt;br /&gt;
  WXS_EV_BEGIN(wxsSpinButtonEvents)&lt;br /&gt;
    ...&lt;br /&gt;
  WXS_EV_END(wxsSpinButtonEvents)&lt;br /&gt;
&lt;br /&gt;
code.&lt;br /&gt;
&lt;br /&gt;
First one declares events and styles (note that argument for WXS_ST_DECLARE and WXS_EV_DECLARE is name of class inside wxSmith - with wxs prefix). Second one will be described in more details.&lt;br /&gt;
&lt;br /&gt;
Each entry between WXS_ST_BEGIN and WXS_ST_END can be:&lt;br /&gt;
* category definition - WXS_ST_CATEGORY(name) - this is currently not used but will probably be in future to dividee styles&lt;br /&gt;
* global style - WXS_ST(style_name)&lt;br /&gt;
* global extra style - WXS_EXST(style_name)&lt;br /&gt;
* masked style - WXS_ST_MASK(style_name,include_mask,exclude_mask,can_use_in_xrc)&lt;br /&gt;
* masked extra style - WXS_EXST_MASK(style_name,include_mask,exclude_mask,can_use_in_xrc)&lt;br /&gt;
&lt;br /&gt;
Masked styles were added to notify that some styles work on some platforms, some other don't work on other platforms. Some styles are not used insided XRC. Platforms are defined in wxsstyle.h:&lt;br /&gt;
&lt;br /&gt;
 const unsigned int wxsSFWin    = 0x00000002;    ///&amp;lt; This style can be used in Windows (any)&lt;br /&gt;
 const unsigned int wxsSFWin95  = 0x00000004;    ///&amp;lt; This style can be used in Win95&lt;br /&gt;
 const unsigned int wxsSFWinCE  = 0x00000008;    ///&amp;lt; This style can be used in WinCE&lt;br /&gt;
 const unsigned int wxsSFGTK    = 0x00000010;    ///&amp;lt; This style can be used in GTK+ (any GTK)&lt;br /&gt;
 const unsigned int wxsSFGTK12  = 0x00000020;    ///&amp;lt; This style can be used in GTK (1.2 only)&lt;br /&gt;
 const unsigned int wxsSFGTK20  = 0x00000040;    ///&amp;lt; This style can be used in GTK (1.2 only)&lt;br /&gt;
 const unsigned int wxsSFOSX    = 0x00000080;    ///&amp;lt; This style can be used in MAC (any OSX port Cocoa or Carbon)&lt;br /&gt;
 const unsigned int wxsSFCOCOA  = 0x00000100;    ///&amp;lt; This style can be used in MAC (OSX port Cocoa API)&lt;br /&gt;
 const unsigned int wxsSFCARBON = 0x00000200;    ///&amp;lt; This style can be used in MAC (MacOS for Carbon CFM)&lt;br /&gt;
 const unsigned int wxsSFMotif  = 0x00000400;    ///&amp;lt; This style can be used in Motif&lt;br /&gt;
 const unsigned int wxsSFMGL    = 0x00000800;    ///&amp;lt; This style can be used in MGL&lt;br /&gt;
 const unsigned int wxsSFOS2    = 0x00001000;    ///&amp;lt; This style can be used in OS2&lt;br /&gt;
 const unsigned int wxsSFX11    = 0x00002000;    ///&amp;lt; This style can be used in X11&lt;br /&gt;
 const unsigned int wxsSFPALMOS = 0x00004000;    ///&amp;lt; This style can be used in PALMOS&lt;br /&gt;
 const unsigned int wxsSFUNIV   = 0x00008000;    ///&amp;lt; This style can be used in wxUNIV&lt;br /&gt;
&lt;br /&gt;
Meaning of macro arguments is as follows:&lt;br /&gt;
* include_mask - mask of platforms where style can be used. If this argument is specified, exclude_mask should be 0&lt;br /&gt;
* exclude_mask - mask of platforms where style does not work. If this argument is specified, include_mask should be wxsSFAll (all platforms)&lt;br /&gt;
* can_use_in_xrc - set to true when xrc uses this style or false if not (but it's listed in documentation)&lt;br /&gt;
&lt;br /&gt;
Next thing are events. They are defined between WXS_EV_BEGIN and WXS_EV_END macros:&lt;br /&gt;
* Event using identifier: WXS_EVI(entry_name,argument_type,default_name) - where entry_name is name of this entry in event array, argumetn_name is name of wxEvent-derived class passed as argument in this handler, default_name - default suffix for new event handlers (without &amp;quot;&amp;quot;)&lt;br /&gt;
* Event not using identifiers: WXS_EV(entry_name,argument_type,default_name) - these may be only used in top-level objects like wxDialog. Meaning of arguments is the same.&lt;br /&gt;
* At the end of events list is WXS_EV_DEFAULTS() - this macro currently does nothing but may be used in future to add common events like mouse processing etc.&lt;br /&gt;
* You can also use WXS_EV_CATEGORY() macro simillar to WXS_ST_CATEGORY() but it currently do nothing&lt;br /&gt;
&lt;br /&gt;
Next thing is declaration. It can be easily done using wxsDWDeclareBegin() and wxsDWDeclareEnd() macros.&lt;br /&gt;
wxsDWDeckareBegin has two arguments - name of wxSmith class handling this widget (i usually use same names with wxWidgets classes but with wxs prefix instead of wx). The second argument is class ideentifier. Identifiers will be discussed later.&lt;br /&gt;
Between macros just presented there is list of additional properties. This list is standard c++ declaration. In fact You can put here anything You want to be inside class declaration.&lt;br /&gt;
&lt;br /&gt;
Next thing is class definition. It's little bit harder. Class definition begins with following macro:&lt;br /&gt;
 wxsDWDefineBegin(wxs_class_name,wx_class_name,producing_code)&lt;br /&gt;
where:&lt;br /&gt;
* wxs_class_name - name of class in wxSmith (with wxs prefix)&lt;br /&gt;
* wx_class_name - name of modeelled wxWidgets class (with wx prefix)&lt;br /&gt;
* producing_code - code used for building widget - both it's source code and visual representation in editor. I'll describe this in more details.&lt;br /&gt;
&lt;br /&gt;
wxSmith must be able to build source code and show widget in editor. These two operations looks simillar. Standard widgets can do both operations automatically using producing code. It's standard c++ code creating and setting up widget but with some restrictions:&lt;br /&gt;
* widget which is currently built can be accessed through WXS_THIS variable&lt;br /&gt;
* WXS_PARENT variable is pointer to parent widget&lt;br /&gt;
* WXS_ID, WXS_POS, WXS_SIZE, WXS_STYLE contains values of standard properties&lt;br /&gt;
* operations on complex data structures (wxArrayString is currently only one supported) may be accessed through special functions only&lt;br /&gt;
* properties binded in class definition may be used in this code&lt;br /&gt;
&lt;br /&gt;
Binding properties is done between wxsDWDefineBegin() and wxsDWDefineEnd() macros. It's done through wxsDWDef... macros:&lt;br /&gt;
&lt;br /&gt;
* wxsDWDefBool(Name,PropName,Default)&lt;br /&gt;
* wxsDWDefBoolX(Name,XrcName,PropName,Default)&lt;br /&gt;
* wxsDWDefInt(Name,PropName,Default)&lt;br /&gt;
* wxsDWDefIntX(Name,XrcName,PropName,Default)&lt;br /&gt;
* wxsDWDef2Int(V1,V2,Name,PropName,Def1,Def2) - this can be used for two integers threated as one property (f.ex. some size, dimensions)&lt;br /&gt;
* wxsDWDef2IntX(V1,V2,Name,XrcName,PropName,Def1,Def2)&lt;br /&gt;
* wxsDWDefStr(Name,PropName,Default)&lt;br /&gt;
* wxsDWDefStrX(Name,XrcName,PropName,Default)&lt;br /&gt;
* wxsDWDefLongStr(Name,PropName,Default)&lt;br /&gt;
* wxsDWDefLongStrX(Name,XrcName,PropName,Default)&lt;br /&gt;
* wxsDWDefStrArray(Name,PropName,Default,SortFlag)&lt;br /&gt;
* wxsDWDefStrArrayX(Name,XrcParentName,XrcChildName,PropName,Default,SortFlag)&lt;br /&gt;
&lt;br /&gt;
Arguments are as follows:&lt;br /&gt;
* Name - name of variable used for property&lt;br /&gt;
* PropName - name used in property editor for this property (with &amp;quot; characters but without unicode converting macros)&lt;br /&gt;
* Default - usually default value for this property (exception is StrArray where this should be name of variable which will kepp number of item selected by default)&lt;br /&gt;
* V1, V2 - used instead of one name of variable (something is messed up here, I'll have to clear this code,  currently try not to use wxsDWDef2Int and wxsDWDef2IntX macros)&lt;br /&gt;
* SortFlag - flag in widget style used for sorting it's elements (used when meaning of selection property changes after adding this flag)&lt;br /&gt;
* XrcParentName, XrcChildName - names of parent/child xrc node names&lt;br /&gt;
&lt;br /&gt;
Each property binding has two versions of binding macro - the one without X is used when name of property (variable declared in class declaration) is same as name of node inside xrc file. The one with X at the end could be useed when name of xrc node with this value is other than name of variable (f.ex. name of node is sometimes 'default' which can not be a name of variable in c++).&lt;br /&gt;
&lt;br /&gt;
One additional note: when using StrArray (for binging wxArrayString properties) You can only use following functions for them in producing code:&lt;br /&gt;
* void wxsDWAddStrings(const wxArrayString&amp;amp; Array,wxControlWithItems* Ctrl) for adding strings for widget&lt;br /&gt;
* void wxsDWSelectString(const wxArrayString&amp;amp; Array,size_t Index,wxControlWithItems* Ctrl) for setting  default selection&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Research_on_doing_a_Plug-in_for_embedded_help_in_CB&amp;diff=4152</id>
		<title>Research on doing a Plug-in for embedded help in CB</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Research_on_doing_a_Plug-in_for_embedded_help_in_CB&amp;diff=4152"/>
		<updated>2006-11-11T19:30:55Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
&amp;gt; Question: ''What's so wrong about only HTB being opened inside C::B?''&lt;br /&gt;
&lt;br /&gt;
It's almost ok, but there are two problems: there are little few books on this format. All of them can be getted from http://htmlhelp.berlios.de/books/htb.php&lt;br /&gt;
(I note the ones we could use: wxwidgets, libstdc++, gdb, gcc, make).&lt;br /&gt;
&lt;br /&gt;
The other problem is that all the rendering through wxHtml is html in very basic form. That means for example, that the C::B SDK documentation is out ''(doxygen/doxys can't generate html so basic to work on wxHtml)''.&lt;br /&gt;
&lt;br /&gt;
In any case, I have an implementation of wxHelpController that can be embedded in a window, so the help can be rendered in a C::B EditorBase instead of an outside window. However I think that an external window option should exist, some users couldn't like having the help embedded in C::B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you may know, wxHelpController can only open in it's own renderer HTB files, not CHM, nor any other.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
My goals (wishes) for the plugin was/are:&lt;br /&gt;
&lt;br /&gt;
==HTB support==&lt;br /&gt;
This should be the most easy to implement, and also the most likely to have first (if any).&lt;br /&gt;
It will requiere to use the reimplemented wxHelpController I have and adapting it so the embedded/external option can exist.&lt;br /&gt;
&lt;br /&gt;
==CHM support==&lt;br /&gt;
This is one of the most important for me, because there's plenty of free CHM books everywhere. It's very comfortable to use it.&lt;br /&gt;
&lt;br /&gt;
Now, the problem relies on that CHM is a MS format. But fortunately it's already reverse enginered, and it exists a program called [http://xchm.sourceforge.net xCHM] which uses that library. It was programmed for Linux only, but some months ago a Mac port appeared. There isn't in Windows (on MinGW).&lt;br /&gt;
&lt;br /&gt;
But I took the source and after some (heavy?) modifications, I could compile it, and finally run it on MinGW, with very few glitches. :D&lt;br /&gt;
&lt;br /&gt;
But then I discovered: [http://xchm.sourceforge.net xCHM] uses as render wxHtml, and kinda reimplements all the wxHelpController window interface.&lt;br /&gt;
Which is not good (using wxHtml as render), because most (almost all) CHM books out there uses CSS and HTML code that wxHtml can't cope with. &lt;br /&gt;
&lt;br /&gt;
However, [http://xchm.sourceforge.net xCHM] have pieces of code that will help a lot.&lt;br /&gt;
&lt;br /&gt;
==HTML support==&lt;br /&gt;
This is were I left frustrated. HTML is the most important format for obvious reasons. wxHtml can't render almost any page online well. And almost all API documentations have an HTML (downloadable or online) version.&lt;br /&gt;
&lt;br /&gt;
And here the choices are very little: &lt;br /&gt;
*[http://wxmozilla.sourceforge.net wxMozilla] (Windows, Linux)&lt;br /&gt;
*wxIE (Windows)&lt;br /&gt;
*wxWebKitCtrl (Mac)&lt;br /&gt;
&lt;br /&gt;
The choice I would made would be wxMozilla, but it seems that it doesn't work well on Mac yet.&lt;br /&gt;
Using different APIs, like using wxMozilla in linux, wxIE on windows and wxWebKitCtrl on mac could be done, but writting for 3 different APIs to do the same thing, I don't know if it's worth the effort.&lt;br /&gt;
&lt;br /&gt;
But the single most important problem I have with wxMozilla (which uses an embedded Gecko) is the huge (relative) dependacy it will add. It will take a lot of resources regarding compile time and executable size, which I couldn't decide if it was the effort or not.&lt;br /&gt;
&lt;br /&gt;
==DevHelp support== &lt;br /&gt;
http://developer.imendio.com/wiki/Devhelp&lt;br /&gt;
&lt;br /&gt;
It's a CHM-like format but OpenSource, used mostly for Linux APIs. Not a priority, but something to have in mind.&lt;br /&gt;
&lt;br /&gt;
==PDF support==&lt;br /&gt;
Probably a tough one, not easy to do, unless there is a wx PDF friendly library. &lt;br /&gt;
I think the best approach here would be the same as is now: calling Acrobat Reader or whatever, because there are almost always PDF readers installed on any platforms, so it ''shouldn't'' be a concern like the other formats (except HTML), that are available most of times in only one platform.&lt;br /&gt;
So not important for now.&lt;br /&gt;
&lt;br /&gt;
==Man pages and Info pages support==&lt;br /&gt;
This is low on the priority list also. But given the simple these formats are, we could write a parser for them that displays them in the HTML window. Note that I've spent a lot of time searching for '''any''' Man or Info pages reader for windows, but there is nothing (yes I was surprised to know that, but no, there isn't a man nor info win32 port yet, neither any other program can open them).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Conclusions=&lt;br /&gt;
My conclusions are that the single most important problem right now is wxHtml incompetence. And I've reading some wx-devel lists saying that everyone is aware of the poor render of wxHTML, and that they were looking for using already existant implementations at some future (even with more than one backend in the same platform).&lt;br /&gt;
&lt;br /&gt;
If you ask me, the best thing wxWidgets developers can do with wxHtml, is reimplementing all the [[wikipedia:KHTML|KHTML API]], which is a '''lot''' lightweight than Mozilla. And it's the first and only (yet) OpenSource HTML layout engine to pass the CSS Acid2 test.&lt;br /&gt;
&lt;br /&gt;
-- Takeshi Miya&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_Plug-in_which_modifies_CB%27s_Menus&amp;diff=4151</id>
		<title>Creating a Plug-in which modifies CB's Menus</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_Plug-in_which_modifies_CB%27s_Menus&amp;diff=4151"/>
		<updated>2006-11-11T19:30:20Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
== Environment ==&lt;br /&gt;
&lt;br /&gt;
NOTE : Also an update for wx 2.6.1 and creating a menu in the menu toolbar are in the pipeline.&lt;br /&gt;
&lt;br /&gt;
The following has been carried out with/on :&lt;br /&gt;
&lt;br /&gt;
    * Windows XP SP2&lt;br /&gt;
    * Code::Blocks RC1-1&lt;br /&gt;
    * wxWindows 2.4.2&lt;br /&gt;
&lt;br /&gt;
The entire project is available in [http://users.pandora.be/lieven.de.cock/CodeBlocks/Ldc2.zip this zip file]&lt;br /&gt;
&lt;br /&gt;
== Create the plug-in project ==&lt;br /&gt;
&lt;br /&gt;
First thing we need to do is create a plug-in project. For more info on how to setup everything see [https://wiki.codeblocks.org/index.php/Creating_a_simple_%22Hello_World%22_plugin this page] on the wiki. In our tutorial we create a plug-in of type General.&lt;br /&gt;
I gave it the name LDC2, and selected the settings :&lt;br /&gt;
&lt;br /&gt;
    * Needs to create menu items&lt;br /&gt;
    * Needs to create menu items in pop-up menus&lt;br /&gt;
[[Image:Menu0.PNG]]&lt;br /&gt;
&lt;br /&gt;
Afterwards the code get's generated (LDC2.h/cpp). Try to build the project. I encountered 1 problem : I had to change the line in the header file :&lt;br /&gt;
        void BuildToolBar(wxToolBar* toolBar){ return; }&lt;br /&gt;
to :&lt;br /&gt;
        bool BuildToolBar(wxToolBar* toolBar){ return false; }&lt;br /&gt;
After doing this it compiled fine for me.&lt;br /&gt;
&lt;br /&gt;
== Logging during the plug-in ==&lt;br /&gt;
&lt;br /&gt;
During the implementation I am going to write some feedback stuff on the screen. I chose to use the log facilities that allow you to write to the Code::Blocks tab in the output pane (which also contains a &amp;quot;Search Results&amp;quot;, &amp;quot;Compiler&amp;quot;, ... tabs).&lt;br /&gt;
To do this we need to do the following things :&lt;br /&gt;
&lt;br /&gt;
    * Get hold of the Manager interface which we can use to retrieve other interfaces&lt;br /&gt;
    * Get hold of the MessageManager interface, which we will be using for the logging&lt;br /&gt;
&lt;br /&gt;
Both can be done in 1 statement : Manager::Get()-&amp;gt;GetMessageManager() .&lt;br /&gt;
To be able to call those functions we need to add the declarations of those functions, therefor we add the following include statements in the implemenation file :&lt;br /&gt;
#include &amp;lt;manager.h&amp;gt;&lt;br /&gt;
#include &amp;lt;messagemanager.h&amp;gt;&lt;br /&gt;
The method I use for logging is Log(), which has a similar syntax as nasty old printf.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Menu adjusting ==&lt;br /&gt;
&lt;br /&gt;
If your plug-in wants to adjust the menu, the correct place to do it is in the BuildMenu method.&lt;br /&gt;
When Code::Blocks is starting up it will call your plug-in by this method, allowing you to change the menu. Therefor it provides as an argument it's menuBar.&lt;br /&gt;
The normal menuBar consists out of  11 menus, starting with &amp;quot;File&amp;quot;, &amp;quot;Edit&amp;quot;, &amp;quot;View&amp;quot; and so on. These menus are ordered, or otherwise stated they have a position. Where the first position is position &amp;quot;0&amp;quot;. So &amp;quot;File&amp;quot; is at position 0, &amp;quot;Edit &amp;quot; at position 1, ...&lt;br /&gt;
So let's get our feet wet and start by adjusting the &amp;quot;Edit&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adjusting the &amp;quot;Edit&amp;quot; menu ==&lt;br /&gt;
&lt;br /&gt;
The first thing we need to do is get hold of the &amp;quot;Edit&amp;quot; menu. The class wxMenuBar, the type of our menuBar parameter, provides the method &amp;quot;FindMenu&amp;quot; to search for certain menus. The menu to search for is the argument of the method, and is specified by it's textual id, and returns the position of the menu. So in our case we get :&lt;br /&gt;
        int pos = menuBar-&amp;gt;FindItem(_(&amp;quot;Edit&amp;quot;));&lt;br /&gt;
If this menu would not be found the return value is wxNOT_FOUND.&lt;br /&gt;
In the example code,  we write out the position of the menu to the Log. Check that this should be 1.&lt;br /&gt;
Now that we have the position of the menu, we can get hold of it's interface (or pointer to the menu object), this is done by calling the GetMenu() method of he wxMenuBar class. The argument is the position of the menu, from which we want the interface.&lt;br /&gt;
        wxMenu* EditMenu = menuBar-&amp;gt;GetMenu(pos);&lt;br /&gt;
Now that we have hold of the actual menu we want to adjust, we can start by adding new entries to the menu.&lt;br /&gt;
We have several locations where we can add our own entries :&lt;br /&gt;
&lt;br /&gt;
    * at the start/beginning/top =&amp;gt; Prepend&lt;br /&gt;
    * at the end/bottom =&amp;gt; Append&lt;br /&gt;
    * in the middle =&amp;gt; Insert&lt;br /&gt;
&lt;br /&gt;
It is good practice when you add new entries, that you seperate them visually from the already existing entries, or to group them logically. This can be done by use of a separator, this is a vertical line that goes from left to right in the menu. The menu class wxMenu provides for the 3 cases above, 3 different methods :&lt;br /&gt;
&lt;br /&gt;
    * AppendSeparator()&lt;br /&gt;
    * PrependSeparator()&lt;br /&gt;
    * InsertSeperator(int pos), where pos is the position of the entry at which it should be inserted.&lt;br /&gt;
&lt;br /&gt;
For our entries we have the following methods at our disposal according to the 3 situations described above :&lt;br /&gt;
&lt;br /&gt;
    * Append()&lt;br /&gt;
    * Prepend()&lt;br /&gt;
    * Insert()&lt;br /&gt;
&lt;br /&gt;
There is however one more thing we need to take care of, before we can proceed for adding our own entries. Every menu entry needs to have a unique id in the program. Since we are a plug-in, and those can be added dynamically, we have no idea of which id's are already taken and which are available. Luckily the underlying wxWindows mechanism takes care of that for us. We can ask the wxWindows mechanism to generate a new id for us, and then we use that one. This is done by calling the function &amp;quot;wxNewId&amp;quot;. So for our first  entry we do like this :&lt;br /&gt;
        int idMenuEntry1 = wxNewId();&lt;br /&gt;
This id can be used to identiy our own menu entries.&lt;br /&gt;
&lt;br /&gt;
Now let's add our first extra entry in the menu :&lt;br /&gt;
        EditMenu-&amp;gt;Append(idMenuEntry1, _(&amp;quot;Menu Entry 1\tCtrl-Shift-1&amp;quot;));&lt;br /&gt;
So the id is specified as the first parameter to the Append method, and as a second argument we specify the Caption of the menu entry &amp;quot;Menu Entry 1&amp;quot;, and in the mean time we specify the keyboard accelerator/shortcut. Both are specified in a string seperated by a tab character (\t).&lt;br /&gt;
The picture below show the result of adding our first extra menu entry together with a separator.&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Next in our code example we add a menu entry at the top of the menu, and we use a third argument (works with all 3 methods to add entries) where we specify a help text to be displayed in the status bar of Code::Blocks.&lt;br /&gt;
        EditMenu-&amp;gt;Prepend(idMenuEntry2, _(&amp;quot;Menu Entry 2\tCtrl-Shift-2&amp;quot;), _(&amp;quot;Help text&amp;quot;));&lt;br /&gt;
The result looks like this :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Next we add a third entry somewhere in between, we add it after the Redo entry and the following separator. That Redo is the 4th entry, so counting from zero : pos 3. Menu entry 2 is at O, Seperator at 1, Undo at 2, Redo at 3. So our new entry is at position 4..&lt;br /&gt;
        EditMenu-&amp;gt;Insert(4, idMenuEntry3, _(&amp;quot;Menu Entry 3\tCtrl-Shift-3&amp;quot;));&lt;br /&gt;
Wich gives the following result : &lt;br /&gt;
&lt;br /&gt;
[[Image:Menu3.JPG]]&lt;br /&gt;
&lt;br /&gt;
So by locating our menu, getting it's interface, and using some methods we were able to add new menu entries.&lt;br /&gt;
&lt;br /&gt;
== Adding a submenu ==&lt;br /&gt;
&lt;br /&gt;
Let's take our manipulation of the menu 1 step further. Let's create a submenu, which has its own entries.&lt;br /&gt;
Since a submenu is nothing more then a menu, we first need to create a new menu object; this new object has to live as long as the plug-in itself, so it can not be a local variable, it needs to be stored in the class itself. Therefor we added the member m_SubMenu1, initialized to NULL, and released during the destructor.&lt;br /&gt;
We will allocate it now :&lt;br /&gt;
        m_SubMenu1 = new wxMenu();&lt;br /&gt;
And we append this new menu to our EditMenu :&lt;br /&gt;
        EditMenu-&amp;gt;Append(idSubMenu1, _(&amp;quot;SubMenu1&amp;quot;), m_SubMenu1);&lt;br /&gt;
The result looks like : &lt;br /&gt;
&lt;br /&gt;
[[Image:Menu4.JPG]]&lt;br /&gt;
&lt;br /&gt;
The next task is adding an entry into this new menu.&lt;br /&gt;
We already have hold of the menu interface (we just created it), nevertheless let's see what we need to do in the case we would not have it's interface yet (for example if we want to add entries to an existing submenu).&lt;br /&gt;
As submenu together with the other entries in the menu are called menuItem's. So within the &amp;quot;Edit&amp;quot; menu we need to search for the item &amp;quot;SubMenu1&amp;quot; and we will get in return, in the case it is found, it's position.&lt;br /&gt;
        int idSub = EditMenu-&amp;gt;FindItem(_(&amp;quot;SubMenu1&amp;quot;));&lt;br /&gt;
Once we have the position we can retrieve the interface of the item.&lt;br /&gt;
        wxMenuItem* SubMenu1Item = EditMenu-&amp;gt;FindItem(idSub, NULL);&lt;br /&gt;
Just fill in NULL as the second argument (I still need to find out what's its purpose).&lt;br /&gt;
From the item we can retrieve the actual submenu as follows :&lt;br /&gt;
        wxMenu* SubMenu1 = SubMenu1Item-&amp;gt;GetSubMenu();&lt;br /&gt;
And now we add like before a new entry.&lt;br /&gt;
The result looks like :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu5.JPG]]&lt;br /&gt;
&lt;br /&gt;
== Modifying the context menu of the editor ==&lt;br /&gt;
&lt;br /&gt;
Another menu we can adjust is the pop-up menu you get by right-clicking in the editor pane of an open source file, sometimes also called the context menu.&lt;br /&gt;
As with the regular menu, the application will call a method of our plug-in to allow us to adjust the context menu. The method is &amp;quot;BuildModuleMenu&amp;quot;, as arguments we get the type of the Module generating the context menu, and the interface of that menu. So things are very easy here, we get the menu interface directly.&lt;br /&gt;
We only need to make sure that  :&lt;br /&gt;
&lt;br /&gt;
    * we are attached&lt;br /&gt;
    * the menu does exist&lt;br /&gt;
    * the module type is that of the editor manager&lt;br /&gt;
&lt;br /&gt;
In code the test on the type looks like :&lt;br /&gt;
        if(type == mtEditorManager)&lt;br /&gt;
And next we can add an entry like :&lt;br /&gt;
        menu-&amp;gt;Append(idContextMenuEntry1, _(&amp;quot;Context Menu Entry 1&amp;quot;));&lt;br /&gt;
&lt;br /&gt;
The result looks like :&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu6.JPG]]&lt;br /&gt;
&lt;br /&gt;
So this was a piece of cake.&lt;br /&gt;
&lt;br /&gt;
== Making all those menus do something ==&lt;br /&gt;
&lt;br /&gt;
Now that we have added all those new menu entries, it would be nice that they actually do something. If you select them at this moment nothing happens. Nevertheless they already did something behind the scenes. When you click on a menu entry they generate a wxCommand event. It is our duty to listen to those events and provide a handler for them. A handler can be seen as a method that does the stuff we want to happen when the menu entry is selected.&lt;br /&gt;
Those handlers should have the following signature :&lt;br /&gt;
void ClassName::MethodName(wxCommandEvent&amp;amp; event);&lt;br /&gt;
So for our 4 menu entries we have now, we add the following declarations in the header, in the private section :&lt;br /&gt;
        void OnMenuEntry1(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry2(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry3(wxCommandEvent&amp;amp; event);&lt;br /&gt;
        void OnMenuEntry4(wxCommandEvent&amp;amp; event);&lt;br /&gt;
And we provide some dummy implementation, they just write to the Log, telling us they were selected, now how about that for usefull functionality.&lt;br /&gt;
&lt;br /&gt;
All that's left to do is provide the missing link : connect the event to it's handler.&lt;br /&gt;
What we already know is that each menu entry has an unique id. The way wxWindows work is that we have to link that id with the event handler.&lt;br /&gt;
Those links are specified in the implementation file in the block :&lt;br /&gt;
        BEGIN_EVENT_TABLE(Ldc2, cbPlugin)&lt;br /&gt;
            // add events here...&lt;br /&gt;
        END_EVENT_TABLE()&lt;br /&gt;
This was placed in the generated code by the Plug-In wizard. Also in the class declaration we find such a directive :         DECLARE_EVENT_TABLE()&lt;br /&gt;
The BEGIN_EVENT_TABLE directive tells that our class Ldc2 listens to the same events as the cbPlugIn (our class was derived from cbPlugIn). Personal note : I hope this statement is correct.&lt;br /&gt;
Next we create mappings as follows :&lt;br /&gt;
        EVT_MENU(idMenuEntry1, Ldc2::OnMenuEntry1)&lt;br /&gt;
By means of the directive EVT_MENU we map our id idMenuEntry1 to the handler Ldc2::OnMenuEntry1&lt;br /&gt;
Where in our example the end result is :&lt;br /&gt;
        BEGIN_EVENT_TABLE(Ldc2, cbPlugin)&lt;br /&gt;
            // add events here...&lt;br /&gt;
            EVT_MENU(idMenuEntry1, Ldc2::OnMenuEntry1)&lt;br /&gt;
            EVT_MENU(idMenuEntry2, Ldc2::OnMenuEntry2)&lt;br /&gt;
            EVT_MENU(idMenuEntry3, Ldc2::OnMenuEntry3)&lt;br /&gt;
            EVT_MENU(idMenuEntry4, Ldc2::OnMenuEntry4)&lt;br /&gt;
        END_EVENT_TABLE()&lt;br /&gt;
Note : no semicolons at the end.&lt;br /&gt;
If you have compiled our example code, put the dll in the subdir .\share\CodeBlocks\plugins of Code::Blocks installation directory, you can try out the menus and see how it actually does work. ;-)&lt;br /&gt;
In the project zip file, the dll is also included.&lt;br /&gt;
The following screenshot shows the Log when we choose some of our menu entries.&lt;br /&gt;
&lt;br /&gt;
[[Image:Menu7.JPG]]&lt;br /&gt;
&lt;br /&gt;
That's all for now, more tutorials will follow. Enjoy.&lt;br /&gt;
I would like to thank Mandrav and the rest of the Code::Blocks team for this great IDE, and also Thomas who gave me my first pointers on where to find some information.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_simple_%22Hello_World%22_plugin&amp;diff=4150</id>
		<title>Creating a simple &quot;Hello World&quot; plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_simple_%22Hello_World%22_plugin&amp;diff=4150"/>
		<updated>2006-11-11T19:29:42Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
'''NOTE''': This tutorial was written using the Code::Blocks final beta under windows.&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
This tutorial assumes you have a working version of Code::Blocks installed and some knowledge of how to deal with projects, in particular how to compile them. In order to use the Code::Blocks SDK you must also have a working version of wxWidgets installed. For more information see &lt;br /&gt;
[[Compiling wxWidgets 2.6.2 to develop Code::Blocks (MSW)|Compiling wxWidgets 2.6.2 to develop Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
To develop Code::Blocks plugins you will also need a copy of the Code::Blocks SDK, which can be found on the Code::Blocks [https://www.codeblocks.org/downloads.shtml download page]. Install this to somewhere sensible that you will remember later on. Personally I keep the SDK in a folder called CodeBlocks\sdk (which contains the include/ and lib/ from in the zip). This means that the header files refered to in the tutorial would be found under ''Codeblocks\sdk\include'', so ''cbPlugin.h'' is ''Codeblocks\sdk\include\cbPlugin.h'' for example.&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
This tutorial will guide you through the creation of a simple &amp;quot;Hello World&amp;quot; plugin, which when activated displays &amp;quot;Hello World!&amp;quot; in the Code::Blocks log tab below the editor. This could be done completely by hand, but Code::Blocks contains a very useful plugin project generator (which, incidentally, is a plugin itself), so we'll use that.&lt;br /&gt;
&lt;br /&gt;
==Creating the Plugin Project==&lt;br /&gt;
&lt;br /&gt;
Select the '''Plugins-&amp;gt;Code::Blocks Plugin Wizard''' option from the main menu bar and choose a suitable project name and location. Save the project, and another dialog will be shown which allows you to select various options for your plugin.&lt;br /&gt;
&lt;br /&gt;
===Plugin Type===&lt;br /&gt;
&lt;br /&gt;
The Code::Blocks SDK contains interfaces for various different types of plugins in the ''cbPlugin.h'' file. The drop down ''Plugin type'' list in the wizard allows you to select which type of plugin you wish to build - essentially which class the main plugin interface class will inherit from. We want to build a Tool plugin, so select that from the list. Tool type plugins are added to the Plugins main menu submenu automatically, and their ''Execute'' method is called when they are selected by the user. We will use this later in order to display our message.&lt;br /&gt;
&lt;br /&gt;
===Plugin Info===&lt;br /&gt;
&lt;br /&gt;
The ''Plugin name'' field is the name of the plugin interface class which the wizard will create. Enter &amp;quot;HelloWorldPlugin&amp;quot; here. More information can be provided by clicking on the ''Enter Plugin Info'' button. The fields here are fairly self explanitory, but one which you should pay particular attention to is the ''Title'' field, since this is what Code::Blocks will use to refer to the plugin in the menus. In the generated code, the plugin info is kept in the plugin class' ''m_PluginInfo'' member, which is of the type ''PluginInfo'' and is set in the plugin interface class' constructor. ''PluginInfo'' is detailed in ''cbPlugin.h'', if you want to go take a look.&lt;br /&gt;
&lt;br /&gt;
===Provides Configuration Dialog===&lt;br /&gt;
&lt;br /&gt;
This indicates whether or not the plugin is to provide a configuration dialog which can be accessed through the '''Settings-&amp;gt;Configure Plugins''' submenu. We don't need one, so leave this box unchecked.&lt;br /&gt;
&lt;br /&gt;
===Filenames===&lt;br /&gt;
&lt;br /&gt;
The filenames should have been filled in automatically by the dialog when you entered the Plugin name, if you used the name &amp;quot;HelloWorldPlugin&amp;quot;, for example, these should be helloworldplugin.h and helloworldplugin.cpp respectively. If you want to change the names of the files generated, this is where to do it (this tutorial will assume you have left them as the default values).&lt;br /&gt;
&lt;br /&gt;
The guard-block box is simply if you wish to place inclusion guards in the header file, and if you do what symbol to use. If you don't know what these are then just leave it as it is.&lt;br /&gt;
&lt;br /&gt;
Click '''Create''' and take note of the next dialog box's message about the SDK include and library directories, that's what we'll be dealing with next.&lt;br /&gt;
&lt;br /&gt;
==Letting the project know where to find the SDK==&lt;br /&gt;
&lt;br /&gt;
Code::Blocks should have created a new project called &amp;quot;Custom Plugin&amp;quot;. Before we can compile anything we need to make sure that the compiler knows where the sdk files are in order to include headers and link the libraries. If your compiler has not been setup to know where wxWidgets is yet then this must also be done (see the links in Prerequisites for more details).&lt;br /&gt;
&lt;br /&gt;
Right click on the project and select '''Build Options''' then the '''Directories''' tab. Here, make sure the '''Compiler''' tab is selected then click on the '''Add''' button. Browse to where you unzipped the SDK and select the ''include'' directory (for example ''C:\CodeBlocks\sdk\include'' if you installed the SDK there), then click okay and select whether or not the path should remain relative. Go to the &amp;quot;Linker&amp;quot; tab and add the &amp;quot;lib&amp;quot; directory under where the SDK was installed in similar fashion (following my install, this would be in ''C:\CodeBlocks\sdk\lib'').&lt;br /&gt;
&lt;br /&gt;
===Linker Options===&lt;br /&gt;
&lt;br /&gt;
If you click on the '''Linker Options''' tab at the top level in the Build Options dialog, you will see that the plugin is being linked to the Code::Blocks core library (codeblocks) and the wxWidgets library (wxmsw242 under windows ''NOTE: The plugin generator uses 2.4.2, if you're using a different version of wxWidgets then change this'').&lt;br /&gt;
&lt;br /&gt;
===Compiler Options===&lt;br /&gt;
&lt;br /&gt;
The '''Compiler Options''' tab shows that several symbols have been defined when the plugin is compiled: ''__GNUWIN32__'', ''WXUSINGDLL'' and ''BUILDING_PLUGIN'' in this case (using windows). The first two are indicators to wxWidgets of the compiler and DLL options to use, and the last is an indicator to the Code::Blocks SDK headers that they are being used to build a plugin (which affects whether or not symbols are exported or imported for the DLL - see ''cbPlugin.h'' for example).&lt;br /&gt;
&lt;br /&gt;
==Adding Functionality==&lt;br /&gt;
&lt;br /&gt;
The plugin wizard should have generated us helloworldplugin.h and helloworldplugin.cpp. The header file contains the class definition and a C function declaration which is used to load the plugin when asked by the main Code::Blocks program (''GetPlugin''). What we're interested in, however, is the definition of the class methods in helloworldplugin.cpp. The plugin wizard has generated us a constructor in which the ''m_PluginInfo'' information is set, and three methods. ''OnAttatch'' and ''OnRelease'' are methods called to inform the plugin when it is attached (the user has selected it and Code::Blocks has loaded it) or released (Code::Blocks no longer has a use for it or is shutting down). Since our plugin does not need to perform any actions on loading or shutting down, we can leave these as they are.&lt;br /&gt;
&lt;br /&gt;
The ''Execute'' method, as mentioned earlier, is what we are really interested in. We are going to use the MessageManager class to add a log message in the window beneath the editor. To do this we will need access to both the Manager class and the MessageManager class. Manager is and internal Code::Blocks class which is used to keep track of internal information and the various task specific managers (like the MessageManager and EditorManager - which is used to keep track of all the open files and their editors). MessageManager is responsible for both normal output and debugging output (see ''messagemanager.h'' for more details). Replace the generated Execute method with this new one:&lt;br /&gt;
&lt;br /&gt;
 int HelloWorldPlugin::Execute()&lt;br /&gt;
 {&lt;br /&gt;
     if( !IsAttached() )&lt;br /&gt;
         return -1;&lt;br /&gt;
     Manager::Get()-&amp;gt;GetMessageManager()-&amp;gt;Log( _(&amp;quot;Hello World!&amp;quot;) );&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This new method uses the Manager's static Get method to return the singleton Manager object, then uses that to access the MessageManager through the GetMessageManager method. MessageManager has a method called ''Log'' which appends a string to the bottom of the output log, so we use this to add the &amp;quot;Hello World!&amp;quot; message. The _() construct is part of wxWidgets' internationalisation utilities, and more information on it can be found in the wxWidgets [http://wiki.wxwidgets.org/wiki.pl?WxWidgets_Source_Oddities documentation].&lt;br /&gt;
&lt;br /&gt;
The first two lines check to see if the plugin has been attatched (in other words selected by the user in the '''Plugins-&amp;gt;Plugin Manager''' menu), and thus whether it should perform any action at all. As far as I can tell, the return value of Execute is not used anywhere, but all the default plugins use -1 for failure and 0 for success (much like the main function in a C program) so that is what is used here.&lt;br /&gt;
&lt;br /&gt;
Add headfiles to helloworldplugin.cpp &lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;manager.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;messagemanager.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now we have our code in place we are ready to...&lt;br /&gt;
&lt;br /&gt;
==Compile! (And test)==&lt;br /&gt;
&lt;br /&gt;
This should produce a file called HelloWorldPlugin.dll, which can be tested by copying to the ''CodeBlocks\share\CodeBlocks\plugins\'' directory and restarting Code::Blocks. There should now be an option in the '''Plugins''' menu for &amp;quot;Hello World&amp;quot; (or whatever the title field was set to when the plugin was generated - or in ''m_PluginInfo''). Click on this and &amp;quot;Hello World!&amp;quot; should appear in the Code::Blocks logging window. Congratulations, you've just created your first plugin!&lt;br /&gt;
&lt;br /&gt;
==Further Information==&lt;br /&gt;
&lt;br /&gt;
It is essential to learn how wxWidgets works if you seriously plan on working on plugins, since most of Code::Blocks depends on it, and you will find it easier to add and manipulate components if you have a firm grasp of its principles. More information on this can be found in the wxWidgets [http://www.wxwidgets.org/docs.htm documentation]. Another good place to learn from is the source code from the existing Code::Blocks plugins, which can be downloaded along with the rest of the Code::Blocks source code from the [https://www.codeblocks.org/downloads.shtml download page]. &lt;br /&gt;
&lt;br /&gt;
Hopefully this tutorial has helped you work through a few fundamentals in terms of creating plugins, happy coding!&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Creating_a_plugin_that_actually_does_something&amp;diff=4149</id>
		<title>Creating a plugin that actually does something</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Creating_a_plugin_that_actually_does_something&amp;diff=4149"/>
		<updated>2006-11-11T19:29:02Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Plugin development]]&lt;br /&gt;
''NOTE: this article is a work in progress.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this article we are going to create a &amp;quot;real&amp;quot; plugin. That is a plugin that actually does something more elaborate than just greeting the world ;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Interpreted languages support plugin ==&lt;br /&gt;
&lt;br /&gt;
We are going to create a plugin that will add support for interpreted languages in Code::Blocks. &amp;quot;Interpreted&amp;quot; are considered the languages that do not generate native machine code but rather generate an intermediate code that an interpreter understands and converts to native machine code at runtime.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Planning stage ===&lt;br /&gt;
&lt;br /&gt;
While we 're in the early development stage (a.k.a. planning), let's decide what this plugin will be able to do and what it won't.&lt;br /&gt;
This plugin should allow the user to:&lt;br /&gt;
&lt;br /&gt;
* define as many interpreters as needed&lt;br /&gt;
* associate specific file extensions with each interpreter&lt;br /&gt;
* run any interpreter's shell&lt;br /&gt;
* run any interpreter with the appropriate arguments to operate on or accept as input a source file (more on that below)&lt;br /&gt;
&lt;br /&gt;
As you see, while we 're not over-complicating things, we should hopefully end up with a really useful plugin :).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Data structures ====&lt;br /&gt;
&lt;br /&gt;
Let's decide now what structures we will need (code-wise) to store the above requirements and their relationships.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Requirement: define as many interpreters as needed.'''&lt;br /&gt;
&lt;br /&gt;
Since we don't want to impose any limits, we need a dynamic container of some sort. I guess std::vector will suite us just fine :).&lt;br /&gt;
&lt;br /&gt;
'''Requirement: associate specific file extensions with each interpreter.'''&lt;br /&gt;
&lt;br /&gt;
A simple semicolon-separated string will suffice. E.g. &amp;lt;tt&amp;gt;&amp;quot;*.py;*.pyc&amp;quot;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Requirement: run any interpreter's shell.'''&lt;br /&gt;
&lt;br /&gt;
A string is enough. E.g. &amp;quot;C:\Python\Python24\pythonw.exe&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Requirement: run any interpreter with the appropriate arguments to operate on or accept as input a source file.'''&lt;br /&gt;
&lt;br /&gt;
So we need a dynamic array holding somekind of struct defining the available actions. Because nothing beats a good example, here is the most common (and important action): &amp;quot;Run&amp;quot;. This action would cause the interpreter to be launched with the source file as argument and run it.&lt;br /&gt;
&lt;br /&gt;
 struct InterpreterAction&lt;br /&gt;
 {&lt;br /&gt;
    wxString name; // the action's name, e.g. &amp;quot;Run&amp;quot;&lt;br /&gt;
    wxString command; // the command, e.g. &amp;quot;$interpreter --run $file&amp;quot;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
The final struct that glues all of the above together is this:&lt;br /&gt;
 struct Interpreter&lt;br /&gt;
 {&lt;br /&gt;
    wxString name; // a friendly name for the interpreter&lt;br /&gt;
    wxString executable; // the full path to the interpreter's executable&lt;br /&gt;
    wxString extensions; // a semicolon-separated list of extension wildcards (e.g. &amp;quot;*.py;*.pyc&amp;quot;)&lt;br /&gt;
    std::vector&amp;lt;InterpreterAction&amp;gt; actions; // an array of possible actions with this interpreter&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Implementation stage ===&lt;br /&gt;
&lt;br /&gt;
Let's roll our sleeves up and start working on this plugin :).&lt;br /&gt;
&lt;br /&gt;
First thing we need is to create a new project for this plugin. Thankfully, the Code::Blocks Team has already provided us with a nice and easy wizard that will generate all the boilerplate code for us. Let's get going.&lt;br /&gt;
&lt;br /&gt;
Click on &amp;quot;File-&amp;gt;New-&amp;gt;Project&amp;quot; and a dialog with the available project wizards will appear. Select the &amp;quot;Code::Blocks plugin&amp;quot; and click &amp;quot;Go&amp;quot;.&lt;br /&gt;
[[Image:Intlng_1.png]]&lt;br /&gt;
&lt;br /&gt;
This will start the Code::Blocks plugin wizard. The first page of this wizard displays some important info which you should read. When you 're done reading, click &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Now enter the plugin's title, e.g. &amp;quot;Interpreted languages support&amp;quot;. If you don't need to edit anything else in this page (like the destination directory), click &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Image:Intlng_2.png]]&lt;br /&gt;
&lt;br /&gt;
In this page, we must decide what type of plugin we want to make as well as its name. For the name enter &amp;quot;InterpretedLangs&amp;quot;.&lt;br /&gt;
Also, set the plugin's type to &amp;quot;Generic&amp;quot;. For more info on the various plugin types and their differences, see the Code::Blocks SDK documentation.&lt;br /&gt;
Finally, make sure you check the options as seen in the picture above. This will allow our plugin to add a configuration page in the Code::Blocks settings dialogs and generally integrate nicer.&lt;br /&gt;
Click &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In the next page, fill in any info you deem appropriate for this plugin. Click &amp;quot;Next&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
In the compiler page, select (if not already selected) the &amp;quot;GCC&amp;quot; compiler because that's what Code::Blocks is built with.&lt;br /&gt;
&lt;br /&gt;
Finally click &amp;quot;Finish&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You should find yourself in Code::Blocks again with the new plugin project open and ready for editing :).&lt;br /&gt;
But first let's see if this compiles. If it doesn't, don't bother reading more. This article assumes a valid development setup from your side...&lt;br /&gt;
&lt;br /&gt;
Note that the Code::Blocks plugin wizard was kind enough to add some post-build commands that will copy the plugin and its resources where Code::Blocks expects to find them. It even set Code::Blocks as a &amp;quot;host&amp;quot; application for our plugin (which is a dynamic library and can't run on its own). This means that after you build the plugin, you can &amp;quot;run&amp;quot; it too :).&lt;br /&gt;
&lt;br /&gt;
Go on, build and run it. Does it work? OK, let's move on :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To be continued...&lt;br /&gt;
&lt;br /&gt;
[[User:Mandrav|Mandrav]] 06:51, 22 September 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=4148</id>
		<title>Internationalization</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Internationalization&amp;diff=4148"/>
		<updated>2006-11-11T19:27:31Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
&lt;br /&gt;
This article is about how to realize and use localized C:B. All the works have been done under Windows XP SP2.&lt;br /&gt;
&lt;br /&gt;
== Get the English POT file ==&lt;br /&gt;
&lt;br /&gt;
The english POT file url is:&lt;br /&gt;
&lt;br /&gt;
https://developer.berlios.de/patch/?func=detailpatch&amp;amp;patch_id=822&amp;amp;group_id=5358&lt;br /&gt;
 &lt;br /&gt;
I will update this file periodically. Of course, you can use the tool which I have created (see belown) to generate the POT file.&lt;br /&gt;
&lt;br /&gt;
The content of the tool which is named as '''intl.bat''' is below:&lt;br /&gt;
&lt;br /&gt;
 rem ======= Begin of intl.bat =======&lt;br /&gt;
 &lt;br /&gt;
 @echo off&lt;br /&gt;
 wxrc src\resources\*.xrc -g -o  src\src-xrc.cpp&lt;br /&gt;
 wxrc sdk\resources\*.xrc -g -o  sdk\sdk-xrc.cpp&lt;br /&gt;
 wxrc plugins\astyle\resources\*.xrc -g -o  plugins\astyle\astyle-xrc.cpp&lt;br /&gt;
 wxrc plugins\classwizard\resources\*.xrc -g -o  plugins\classwizard\classwizard-xrc.cpp&lt;br /&gt;
 wxrc plugins\codecompletion\resources\*.xrc -g -o  plugins\codecompletion\codecompletion-xrc.cpp&lt;br /&gt;
 wxrc plugins\compilergcc\resources\*.xrc -g -o  plugins\compilergcc\compilergcc-xrc.cpp&lt;br /&gt;
 wxrc plugins\debuggergdb\resources\*.xrc -g -o  plugins\debuggergdb\debuggergdb-xrc.cpp&lt;br /&gt;
 wxrc plugins\defaultmimehandler\resources\*.xrc -g -o  plugins\defaultmimehandler\defaultmimehandler-xrc.cpp&lt;br /&gt;
 wxrc plugins\todo\resources\*.xrc -g -o  plugins\todo\todo-xrc.cpp&lt;br /&gt;
 wxrc plugins\autosave\*.xrc -g -o  plugins\autosave\autosave-xrc.cpp&lt;br /&gt;
 wxrc plugins\scriptedwizard\resources\plugins\*.xrc -g -o  plugins\scriptedwizard\resources\plugins\scriptedwizard-xrc.cpp&lt;br /&gt;
 wxrc plugins\scriptedwizard\resources\wxwidgets\*.xrc -g -o  plugins\scriptedwizard\resources\wxwidgets\wxwidgets-xrc.cpp&lt;br /&gt;
 &lt;br /&gt;
 if not exist po md po&lt;br /&gt;
 &lt;br /&gt;
 xgettext -C -n -k_ -o po\codeblocks.pot src\*.cpp src\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot src\wxAUI\*.cpp src\wxAUI\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\*.cpp sdk\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\propgrid\src\propgrid\*.cpp sdk\propgrid\include\wx\propgrid\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\wxFlatNotebook\*.cpp&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot sdk\scripting\bindings\*.cpp sdk\scripting\bindings\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\*.cpp plugins\codecompletion\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\parser\*.cpp plugins\codecompletion\parser\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\astyle\*.cpp plugins\astyle\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\astyle\astyle\*.cpp plugins\astyle\astyle\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\classwizard\*.cpp plugins\classwizard\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\codecompletion\*.cpp plugins\codecompletion\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\compilergcc\*.cpp plugins\compilergcc\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\debuggergdb\*.cpp plugins\debuggergdb\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\defaultmimehandler\*.cpp plugins\defaultmimehandler\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\todo\*.cpp plugins\todo\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\xpmanifest\*.cpp plugins\xpmanifest\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\autosave\*.cpp plugins\autosave\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\scriptedwizard\*.cpp plugins\scriptedwizard\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\scriptedwizard\resources\plugins\templates\*.cpp plugins\scriptedwizard\resources\plugins\templates\*.h&lt;br /&gt;
 xgettext -C -n -k_ -j -o po\codeblocks.pot plugins\scriptedwizard\resources\wxwidgets\common\*.cpp plugins\scriptedwizard\resources\wxwidgets\common\*.h&lt;br /&gt;
 pause&lt;br /&gt;
 &lt;br /&gt;
 rem ======= End of intl.bat =======&lt;br /&gt;
&lt;br /&gt;
== The translation tool ==&lt;br /&gt;
&lt;br /&gt;
Usually, we use the poEdit tool which can be downloaded [http://www.poedit.org/download.php here].&lt;br /&gt;
&lt;br /&gt;
== Translating in poEdit ==&lt;br /&gt;
&lt;br /&gt;
Rename codeblocks.pot into codeblocks.po. Use poEdit to open the file codeblocks.po. Change a few settings like:&lt;br /&gt;
&lt;br /&gt;
[File]-&amp;gt;[Preferences]-&amp;gt;[Personalize]&lt;br /&gt;
&lt;br /&gt;
[Catalog]-&amp;gt;[Settings]-&amp;gt;[Project info]-&amp;gt;[Team/email/Language/Charset]&lt;br /&gt;
&lt;br /&gt;
If Code::Blocks is compiled with Unicode, the charset should be set to utf-8; If Code::Blocks is compiled with ANSI, the charset should be set to your own language charset like gb2312, koi8-r etc.&lt;br /&gt;
&lt;br /&gt;
After these settings are done, you can start translating. Don't be fooled, it's a hard work! During the process, of course, you can use your translation at any time. &lt;br /&gt;
&lt;br /&gt;
== Create and use the .mo file ==&lt;br /&gt;
&lt;br /&gt;
Pressing Ctrl+S in poEdit, you can get a *.mo file like codeblocks.mo which is what we need. To use codeblocks.mo, we just place it into C:\Program Files\CodeBlocks or C:\Program Files\CodeBlocks\share\CodeBlocks\locale\&amp;lt;lang&amp;gt;\LC_MESSAGES or C:\Program Files\CodeBlocks\share\CodeBlocks\locale\&amp;lt;lang&amp;gt;. My language is Chinese and I have installed C::B into E:\, so I place codeblocks.mo into E:\Program Files\CodeBlocks\share\CodeBlocks\locale\zh_CN.&lt;br /&gt;
&lt;br /&gt;
If you want to use codeblocks.mo under Linux or Unix, you just place it into /usr/X11R6/share/locale/&amp;lt;lang&amp;gt;/LC_MESSAGES/. For example, I put it into /usr/X11R6/share/locale/zh_CN/LC_MESSAGES/ under FreeBSD.&lt;br /&gt;
&lt;br /&gt;
Details about internationalization using wxWidgets can be found in the wxWidgets docs.&lt;br /&gt;
&lt;br /&gt;
== Let Code::Blocks support your language ==&lt;br /&gt;
&lt;br /&gt;
If you want Code::Blocks to support your language, you must modify the file '''\codeblocks\src\src\appglobals.cpp'''. In it, you can search for the word 'Chinese' to see the example. There are two vars about it:&lt;br /&gt;
&lt;br /&gt;
 const wxString langs[LANGUAGES_SIZE]&lt;br /&gt;
 const int locales[LANGUAGES_SIZE]&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
If you have any questions, you can send me a mail: zxpmyth at yahoo.com.cn.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Tips%27n%27Tricks&amp;diff=4147</id>
		<title>Tips'n'Tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Tips%27n%27Tricks&amp;diff=4147"/>
		<updated>2006-11-11T18:52:53Z</updated>

		<summary type="html">&lt;p&gt;Artojon: moved to deletion requests; all information found in this article has been merged to other articles (User Documentation)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Deletion Requests]]&lt;br /&gt;
====[[Personalities]]====	&lt;br /&gt;
====[[Running under colinux]]====&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Developer_documentation&amp;diff=4146</id>
		<title>Developer documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Developer_documentation&amp;diff=4146"/>
		<updated>2006-11-11T18:51:11Z</updated>

		<summary type="html">&lt;p&gt;Artojon: move Scripting here&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Documentation]]&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
Articles for Code::Blocks developers.&lt;br /&gt;
&lt;br /&gt;
* '''[http://launchpad.net/products/codeblocks/ Translation]'''&lt;br /&gt;
:Code::Blocks uses Launchpad to coordinate translation efforts.&lt;br /&gt;
&lt;br /&gt;
* '''[[Coding style]]'''&lt;br /&gt;
:The source code formatting style used in the Code::Blocks' source.&lt;br /&gt;
&lt;br /&gt;
* '''[[Creating a custom lexer for Code::Blocks editor]]'''&lt;br /&gt;
:How to add support for new syntax lighting schemes.&lt;br /&gt;
&lt;br /&gt;
* '''[[Creating a patch to submit to BerliOS (Patch Tracker)]]'''&lt;br /&gt;
:Creating a diff file and then submitting it to the patch tracker.&lt;br /&gt;
&lt;br /&gt;
* '''[[Unicode Standards]]'''&lt;br /&gt;
:Information about unicode standards and how unicode is handled in Code::Blocks' source code.&lt;br /&gt;
&lt;br /&gt;
* '''[[Various development tips]]'''&lt;br /&gt;
:List of various development tips for Code::Blocks.&lt;br /&gt;
&lt;br /&gt;
* '''[[Scripting Code::Blocks]]'''&lt;br /&gt;
:Information about scripting Code::Blocks with [http://www.squirrel-lang.org/ Squirrel].&lt;br /&gt;
&lt;br /&gt;
== Plugin development ==&lt;br /&gt;
&lt;br /&gt;
* [[Creating a simple &amp;quot;Hello World&amp;quot; plugin]]&lt;br /&gt;
* [[Creating a Plug-in which modifies CB's Menus]]&lt;br /&gt;
* [[Creating a plugin that actually does something]]&lt;br /&gt;
&lt;br /&gt;
* [[Research on doing a Plug-in for embedded help in CB]]&lt;br /&gt;
&lt;br /&gt;
== Scripting ==&lt;br /&gt;
&lt;br /&gt;
Using scripting to extend Code::Blocks' functionality&lt;br /&gt;
&lt;br /&gt;
* [[Wizard scripts|Creating a new project wizard]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=User_documentation&amp;diff=4145</id>
		<title>User documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=User_documentation&amp;diff=4145"/>
		<updated>2006-11-11T18:50:08Z</updated>

		<summary type="html">&lt;p&gt;Artojon: move Scripting to Developer Documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Documentation]]&lt;br /&gt;
[[Category:User Documentation]]&lt;br /&gt;
__TOC__&lt;br /&gt;
Articles for Code::Blocks users.&lt;br /&gt;
&lt;br /&gt;
'''[[Installing Code::Blocks]]'''&lt;br /&gt;
&lt;br /&gt;
:How to install Code::Blocks (from binary or source)&lt;br /&gt;
&lt;br /&gt;
'''[[Keyboard Shortcuts]]'''&lt;br /&gt;
&lt;br /&gt;
:List of keyboard shortcuts that can be used in Code::Blocks&lt;br /&gt;
&lt;br /&gt;
'''[[Command line arguments]]'''&lt;br /&gt;
&lt;br /&gt;
:List of command-line arguments that can be used with Code::Blocks.&lt;br /&gt;
&lt;br /&gt;
'''[[Personalities]]'''&lt;br /&gt;
&lt;br /&gt;
:Customize the Code::Blocks user interface for different workflows.&lt;br /&gt;
&lt;br /&gt;
'''[[Code::Blocks Plugins]]'''&lt;br /&gt;
&lt;br /&gt;
:List of plugins that come with Code::Blocks.&lt;br /&gt;
&lt;br /&gt;
'''[[The build process of Code::Blocks]]'''&lt;br /&gt;
&lt;br /&gt;
:Information about how Code::Blocks actually builds your source code.&lt;br /&gt;
&lt;br /&gt;
== Application development ==&lt;br /&gt;
&lt;br /&gt;
* [[Builtin variables]]&lt;br /&gt;
* [[Recommended global variables]]&lt;br /&gt;
* [[Debugging with Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
== Compilers ==&lt;br /&gt;
&lt;br /&gt;
* [[Global compiler variables]]&lt;br /&gt;
* [[Precompiled headers]]&lt;br /&gt;
* [[Installing a supported compiler]]&lt;br /&gt;
* [[Installing Cygwin Compiler]]&lt;br /&gt;
* [[Installing Fortran Compiler]]&lt;br /&gt;
* [[Code::Blocks_and_Cross_Compilers|Using cross compilers]]&lt;br /&gt;
* [[Integrating Microsoft Visual Toolkit 2003 with Code::Blocks IDE]]&lt;br /&gt;
* [[Integrating Microsoft Visual C 6 with Code::Blocks IDE]]&lt;br /&gt;
&lt;br /&gt;
== Third-party libraries ==&lt;br /&gt;
&lt;br /&gt;
* [[Using SDL with Code::Blocks]]&lt;br /&gt;
* [[Using GLFW with Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
== User interface development ==&lt;br /&gt;
&lt;br /&gt;
* [[WxSmith Tutorial &amp;amp; Pointers|Creating a dialog for wxWidgets with wxSmith]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=The_build_process_of_Code::Blocks&amp;diff=4144</id>
		<title>The build process of Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=The_build_process_of_Code::Blocks&amp;diff=4144"/>
		<updated>2006-11-11T18:49:26Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;br /&gt;
&lt;br /&gt;
In this page, the build process is explained in detail. What goes on behind the scenes and &amp;quot;when&amp;quot; is covered. I hope it makes an interesting read :).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Build order =&lt;br /&gt;
As you have probably guessed, Code::Blocks does not launch build commands at random but rather as a well thought out and prepared sequence. But first let's see what components are the subject of the build:&lt;br /&gt;
&lt;br /&gt;
* '''Workspace''': contains one or more projects&lt;br /&gt;
* '''Project''': contains one or more build targets. It also contains the project's files.&lt;br /&gt;
* '''Build target''': project files are assigned to it, which are built as a group and generate one binary output. This output can either be an executable, a dynamic library or a static library. ''NOTE: there is one kind of build target that does not produce a binary output directly but rather just runs its pre/post build steps (which may generate a binary output externally).''&lt;br /&gt;
&lt;br /&gt;
Let's break these subjects in sections and explain them in more detail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Workspace ==&lt;br /&gt;
The workspace is the top-level container item for organizing your projects. Since there can be only one workspace open at a time, there really is no build order issue for them. It's only one, so it's just built ;).&lt;br /&gt;
&lt;br /&gt;
Use the menu &amp;quot;Build-&amp;gt;Build workspace&amp;quot; to build a workspace (i.e. all the projects contained in it).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
Here, things start getting interesting :).&lt;br /&gt;
&lt;br /&gt;
Projects build order is different depending if the user has set project dependencies or not. Please read on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Without project dependencies ===&lt;br /&gt;
In this case, projects are built in the order of appearence, from top to bottom.&lt;br /&gt;
Most projects though (at least not the &amp;quot;hello world&amp;quot; ones), would want to setup project dependencies.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using project dependencies ===&lt;br /&gt;
Project dependencies are a simple way to tell Code::Blocks that a given project &amp;quot;depends&amp;quot; on another (in the same workspace, always).&lt;br /&gt;
&lt;br /&gt;
Thus imagine in your workspace you have a library project and an executable project which depends on the library. Then you could (and should) tell Code::Blocks about this dependency. To do this, you select &amp;quot;Project-&amp;gt;Properties&amp;quot; and click the &amp;quot;Project's dependencies..&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
''Please notice that the dependency information is saved within the workspace file, not the project file as it is a dependency between two projects within a workspace.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_deps.png|frame|Setting up project dependencies]]&lt;br /&gt;
&lt;br /&gt;
It is very easy to use this dialog. Select the project you want to add a dependency and then put a checkmark on all projects that this project depends on. This will ensure that all the projects you checked will be built before the project that depends on them, ensuring a synchronized build.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tip:''' You don't have to close this dialog and launch the other project's properties again to set their dependencies. You can set all projects dependencies from this same dialog. Just select a different project in the drop-down box :).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some things to note:&lt;br /&gt;
* Dependencies are set directly or indirectly. If project A depends directly on project B and project B depends on project C, then project A indirectly depends on project C too.&lt;br /&gt;
* Code::Blocks is smart enough to watch out for circular dependencies and prohibit them. A circular dependency is caused when project A depends directly or indirectly on project B and project B depends directly or indirectly on project A.&lt;br /&gt;
* Dependencies take effect either if building the whole workspace or a single project. In this case, only the dependencies needed for the project you 're building will be built too.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build targets ==&lt;br /&gt;
Build targets build order depend on a couple of things.&lt;br /&gt;
# If the user has selected a specific build target in the compiler toolbar's drop-down box, then only this build target is built. If project dependencies are setup for the project containing this target, all projects it depends on will also build their target with the same name. If no such target exists, that project is skipped.&lt;br /&gt;
# If the virtual &amp;quot;All&amp;quot; target is selected, then all targets in the project (and all the projects it depends on) are built in order, top to bottom. There are a couple of exceptions to this:&lt;br /&gt;
#* A target is not built with &amp;quot;All&amp;quot; if the target option (in project properties &amp;quot;Targets&amp;quot; page) &amp;quot;Build this target with All&amp;quot; is not selected.&lt;br /&gt;
#* If no targets in the project have the above option selected, then no virtual &amp;quot;All&amp;quot; target appears in the list.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Preprocessing phase =&lt;br /&gt;
Before the actual build process starts (i.e. the compiler/linker commands start executing), a preprocessing step runs which generates all required command-lines for the entire build process.&lt;br /&gt;
This step caches much of the information it generates, making subsequent builds faster in effect.&lt;br /&gt;
&lt;br /&gt;
This step also runs any attached [[build scripts]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Actual commands execution =&lt;br /&gt;
This is the stage that the build process actually starts, from the user's point of view. The files start getting compiled and finally linked to generate the various binary outputs the build targets define.&lt;br /&gt;
&lt;br /&gt;
In this step, the pre-build and post-build steps are also executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pre-build and post-build steps ==&lt;br /&gt;
These are commands that can be setup on project and/or target level. They are shell commands that e.g. copy files around or any other operation you can do with a usual OS system shell.&lt;br /&gt;
&lt;br /&gt;
Here's a breakdown of the pre/post build steps execution order for an imaginary project with two targets (Debug/Release):&lt;br /&gt;
&lt;br /&gt;
# Project pre-build steps&lt;br /&gt;
## Target &amp;quot;Debug&amp;quot; pre-build steps&lt;br /&gt;
## Target &amp;quot;Debug&amp;quot; compile files&lt;br /&gt;
## Target &amp;quot;Debug&amp;quot; link files and generate binary output&lt;br /&gt;
## Target &amp;quot;Debug&amp;quot; post-build steps (see notes below)&lt;br /&gt;
## Target &amp;quot;Release&amp;quot; pre-build steps&lt;br /&gt;
## Target &amp;quot;Release&amp;quot; compile files&lt;br /&gt;
## Target &amp;quot;Release&amp;quot; link files and generate binary output&lt;br /&gt;
## Target &amp;quot;Release&amp;quot; post-build steps (see notes below)&lt;br /&gt;
# Project post-build steps&lt;br /&gt;
&lt;br /&gt;
I hope this is self-explaining :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTE: Pre-build steps are always ran. Post-build steps will run only if the project/target they 're attached to is not up-to-date (i.e. is going to be built). You can change this by selecting &amp;quot;Always execute, even if target is up to date&amp;quot; in the build options.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Original article by MortenMacFly&lt;br /&gt;
&lt;br /&gt;
[[User:Mandrav|Mandrav]] 04:42, 14 July 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Languages_supported_by_Code::Blocks_lexers&amp;diff=4143</id>
		<title>Languages supported by Code::Blocks lexers</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Languages_supported_by_Code::Blocks_lexers&amp;diff=4143"/>
		<updated>2006-11-11T18:43:49Z</updated>

		<summary type="html">&lt;p&gt;Artojon: moved to &amp;quot;Developer Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;font-size: 85%; border: gray solid 1px; border-collapse: collapse; text-align: center; width: 50%; table-layout: fixed;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec;&amp;quot;&lt;br /&gt;
! style=&amp;quot;width: 12em&amp;quot; | Language&lt;br /&gt;
! [https://www.codeblocks.org/ Code::Blocks]&lt;br /&gt;
! [http://www.scintilla.org/SciTE.html SciTE]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Ada&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | AngelScript (using the C++ lexer)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | ANS.1 MIB definition files&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | APDL&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Assembler (NASM, MASM)&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Assembler (Hitachi, using the C++ lexer)&lt;br /&gt;
| {{yes}} (Why it uses the C++ lexer????)&lt;br /&gt;
| {{no}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | AutoIt&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Avenue&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Batch (MS-DOS)&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Baan&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Bash&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | BlitzBasic&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Bullant&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-  &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | C/C++&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | C# (using the C++ lexer)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Clarion&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | conf (Apache)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | CSound&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | CSS&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | diff files&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | E-Script&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Eiffel&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Erlang&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Flagship (Clipper / XBase)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Flash (ActionScript)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Fortran&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Forth&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Haskell&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | HTML&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | HTML with embedded JavaScript, VBScript, PHP and ASP&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | GameMonkey Script (using the C++ lexer)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Gui4Cli&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | IDL (both MSIDL and XPIDL)&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Java&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | JavaScript&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | LISP&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | LOT&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Lout&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Lua&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Make&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Matlab&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Metapost&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | MMIXAL&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | MSSQL&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | nnCron&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | NSIS&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | nVidia cg (using the C++ lexer)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Objective Caml&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Ogre Material script (using the C++ lexer)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | OpenGL Shading Language (using the C++ lexer)&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Octave&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Pascal/Delphi&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Perl&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | PostScript&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | POV-Ray&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | PowerBasic&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Properties &lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | PureBasic&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Python&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Rebol&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Ruby&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Scheme&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | scriptol&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Specman E&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Spice&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Smalltalk&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | SQL and PLSQL&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | TADS3&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | TeX and LaTeX&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Tcl/Tk &lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | VB and VBScript&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Verilog&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | VHDL&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | Windows resource (using the C++ lexer)&lt;br /&gt;
| {{yes}}&lt;br /&gt;
| {{no}}&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | XML&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|- &lt;br /&gt;
! style=&amp;quot;text-align: left; background: #ececec;&amp;quot; | YAML&lt;br /&gt;
| {{no}}&lt;br /&gt;
| {{yes}}{{refun|CodeFolding}}&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*{{note|CodeFolding}} Supports code-folding.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Personalities&amp;diff=4142</id>
		<title>Personalities</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Personalities&amp;diff=4142"/>
		<updated>2006-11-11T18:41:57Z</updated>

		<summary type="html">&lt;p&gt;Artojon: move to &amp;quot;User Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;br /&gt;
In Code::Blocks context, '''personalities''' are different sets of settings each tailored for a different workflow.&lt;br /&gt;
&lt;br /&gt;
== Creating a new personality ==&lt;br /&gt;
&lt;br /&gt;
Let's assume that you want a more lightweight Code::Blocks to quickly work on testing single-source files. Most plugins are not needed for this kind of job so it would be wise to remove them from the loading process. You would also like the manager panes to be hidden by default.&lt;br /&gt;
&lt;br /&gt;
To accomplish the above task, a new Code::Blocks personality should be created. Here is how:&lt;br /&gt;
&lt;br /&gt;
# Find the shortcut to Code::Blocks on your desktop. If there isn't any, create one.&lt;br /&gt;
# Make a copy of this shortcut and rename it to &amp;quot;Code::Blocks Lite&amp;quot; (for example). You should now have two shortcuts to Code::Blocks on your desktop.&lt;br /&gt;
# Right-click on the &amp;quot;Code::Blocks Lite&amp;quot; shortcut and choose &amp;quot;Properties&amp;quot;. In the &amp;quot;Target&amp;quot; box, append the following magic words: &amp;lt;code&amp;gt;--personality=&amp;quot;Lite&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''''Tip''''': ''if you want to see a list of all defined personalities and select which one to use, replace the above with the following'': &amp;lt;code&amp;gt;--personality=ask&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This will cause Code::Blocks to use the &amp;quot;Lite&amp;quot; personality when it starts-up. But because we haven't defined the &amp;quot;Lite&amp;quot; personality, Code::Blocks will create a new personality for us.&lt;br /&gt;
&lt;br /&gt;
After you've done the above changes to the &amp;quot;Lite&amp;quot; shortcut and saved it, launch Code::Blocks.&lt;br /&gt;
Although you may see no changes, Code::Blocks will be operating under the personality &amp;quot;Lite&amp;quot;. This means, that any personalities-aware configuration changes you make will be done on the &amp;quot;Lite&amp;quot; personality.&lt;br /&gt;
&lt;br /&gt;
Next we make a light version of Code::Blocks by disabling plugins and hiding the manager panes:&lt;br /&gt;
&lt;br /&gt;
# Go to &amp;quot;Plugins-&amp;gt;Manage plugins&amp;quot; and disable (uncheck) all plugins except the Compiler.&lt;br /&gt;
# Now hide the &amp;quot;Manager&amp;quot; (Shift-F2) and &amp;quot;Messages&amp;quot; (F2) panes (in the &amp;quot;View&amp;quot; menu).&lt;br /&gt;
# Exit Code::Blocks.&lt;br /&gt;
# Launch Code::Blocks again, by clicking on the &amp;quot;Lite&amp;quot; shortcut. Everything should be as configured: no manager panes showing and just one plugin loaded.&lt;br /&gt;
&lt;br /&gt;
To use Code::Blocks at full capacity again, use the shortcut that doesn't have the &amp;lt;code&amp;gt;--personality=&amp;quot;Lite&amp;quot;&amp;lt;/code&amp;gt; switch:&lt;br /&gt;
&lt;br /&gt;
# Close Code::Blocks.&lt;br /&gt;
# Launch Code::Blocks by clicking on the standard shortcut (no &amp;quot;--personality&amp;quot; command-line option).&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Roadmap&amp;diff=4141</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Roadmap&amp;diff=4141"/>
		<updated>2006-11-11T17:44:59Z</updated>

		<summary type="html">&lt;p&gt;Artojon: make it Developer Documentation instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Roadmaps]]&lt;br /&gt;
====[[Roadmap for version 1.0]]====&lt;br /&gt;
&lt;br /&gt;
====[[Roadmap for version 1.5]]====&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Scripting_commands&amp;diff=4140</id>
		<title>Scripting commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Scripting_commands&amp;diff=4140"/>
		<updated>2006-11-11T17:44:23Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
Scripting is no good if all you can do is use the scripting language's builtin commands only. The host application (Code::Blocks) needs to expose parts of its internals to scripts, so scripts can use and control the host.&lt;br /&gt;
&lt;br /&gt;
Code::Blocks has exposed a very large chunk of its SDK to scripts. This makes scripting in Code::Blocks nearly as powerful as native code (C++).&lt;br /&gt;
&lt;br /&gt;
In this page all the exported constants, functions and classes are documented as a quick reference. For detailed documentation on each function/class, refer to the Code::Blocks SDK documentation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTE: please remember that [http://www.squirrel-lang.org Squirrel] is typeless. Data types mentioned below are only used for documentation purposes.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global functions ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Log || wxString || logs to debug log&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || Message || wxString,wxString,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ShowMessage || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ShowWarning || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ShowError || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ShowInfo || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || ReplaceMacros || wxString,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectManager* || GetProjectManager ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EditorManager* || GetEditorManager ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ConfigManager* || GetConfigManager ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| UserVariableManager* || GetUserVariableManager || ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| CompilerFactory* || GetCompilerFactory ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || IsNull || void* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || _T || const char* || basically this is the wxString constructor&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ConfigManager ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || Read || int,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Read || bool,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| float || Read || float,float ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Read || wxString,wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Write || int,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Write || bool,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Write || float,float ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Write || wxString,wxString[,bool] ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ProjectManager ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetDefaultPath ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetDefaultPath || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || GetActiveProject ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetProject || cbProject* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || LoadWorkspace || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveWorkspace ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveWorkspaceAs || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseWorkspace ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || IsOpen || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || LoadProject || wxString,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveProject || cbProject* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveProjectAs || cbProject* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveActiveProject ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveActiveProjectAs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveAllProjects ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseProject || cbProject*,bool,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseActiveProject || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseAllProjects || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || NewProject || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || AddFileToProject || wxString,cbProject*,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || AskForBuildTargetIndex || cbProject* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RebuildTree ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EditorManager ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Configure ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbEditor* || New || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbEditor* || Open || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbEditor* || IsBuiltinOpen || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbEditor* || GetBuiltinEditor || wxString|int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbEditor* || GetBuiltinActiveEditor ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EditorBase* || GetActiveEditor ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ActivateNext ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ActivatePrevious ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SwapActiveHeaderSource ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseActive || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Close || wxString|int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseAll || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Save || wxString|int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveActive ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveAs || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveActiveAs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveAll ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || ShowFindDialog || bool,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== UserVariableManager ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Exists || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IO namespace ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || DirectoryExists || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || SelectDirectory || wxString,wxString,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || FileExists || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || SelectFile || wxString,wxString,wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CompilerFactory ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || IsValidCompilerID || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetCompilerIndex || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetDefaultCompilerID ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CompilerInheritsFrom ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== wxString ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || operator+ ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || operator&amp;lt; ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || operator&amp;lt;= ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || operator&amp;gt;= ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || operator&amp;gt; ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || Find || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Matches || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddChar || char ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| char || GetChar || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || IsEmpty ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || Length ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || length ||  || same as Length()&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || len ||  || same as Length()&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || size ||  || same as Length()&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Lower ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || LowerCase ||  || same as Lower()&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || MakeLower ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Upper ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || UpperCase ||  || same as Upper()&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || MakeUpper ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Mid || int,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Remove || int,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveLast ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || Replace || wxString,wxString[,bool] ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Right || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || AfterFirst || char ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || AfterLast || char ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || BeforeFirst || char ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || BeforeLast || char ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== wxArrayString ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Add || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Clear ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetCount ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || Item || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ProjectFile ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddBuildTarget || wxString || &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RenameBuildTarget || wxString,wxString || &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveBuildTarget || wxString || &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetBaseName ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetObjName ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetObjName || wxString || &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || GetParentProject ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || relativeFilename || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || relativeToCommonTopLevelPath || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || compile || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || link || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || weight || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || compilerVar || || (variable)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CompileOptionsBase ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetLinkerOptions || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetLinkLibs || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCompilerOptions || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetIncludeDirs || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetResourceIncludeDirs || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetLibDirs || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCommandsBeforeBuild || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCommandsAfterBuild || wxArrayString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetLinkerOptions ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetLinkLibs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetCompilerOptions ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetIncludeDirs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetResourceIncludeDirs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetLibDirs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetCommandsBeforeBuild ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxArrayString || GetCommandsAfterBuild ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetModified ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetModified || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddLinkerOption || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddLinkLib || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddCompilerOption || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddIncludeDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddResourceIncludeDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddLibDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddCommandsBeforeBuild || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AddCommandsAfterBuild || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveLinkerOption || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveLinkLib || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveCompilerOption || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveIncludeDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveResourceIncludeDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveLibDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveCommandsBeforeBuild || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || RemoveCommandsAfterBuild || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetAlwaysRunPostBuildSteps ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetAlwaysRunPostBuildSteps || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SetVar || wxString,wxString,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetVar || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || UnsetVar || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || UnsetAllVars ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CompileTargetBase ==&lt;br /&gt;
Extends CompileOptionsBase.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetTitle ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetTitle || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetOutputFilename || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetWorkingDir || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetObjectOutput || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetDepsOutput || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| OptionsRelation || GetOptionRelation || OptionsRelationType ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetOptionRelation || OptionsRelationType,OptionsRelation ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetWorkingDir ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetObjectOutput ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetDepsOutput ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetOutputFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || SuggestOutputFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetExecutableFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetDynamicLibFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetDynamicLibDefFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetStaticLibFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetBasePath ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetTargetType || TargetType ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| TargetType || GetTargetType ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetExecutionParameters ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetExecutionParameters || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetHostApplication ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetHostApplication || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCompilerID || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetCompilerID ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ProjectBuildTarget ==&lt;br /&gt;
Extends CompileTargetBase.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| cbProject* || GetParentProject ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetFullTitle ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetExternalDeps ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetExternalDeps || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetAdditionalOutputFiles || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetAdditionalOutputFiles ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetIncludeInTargetAll ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetIncludeInTargetAll || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetCreateDefFile ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCreateDefFile || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetCreateStaticLib ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCreateStaticLib || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetUseConsoleRunner ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetUseConsoleRunner || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cbProject ==&lt;br /&gt;
Extends CompileTargetBase.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetModified ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetModified || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetMakefile ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetMakefile || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || IsMakefileCustom ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetMakefileCustom || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CloseAllFiles || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveAllFiles ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Save ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveLayout ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || LoadLayout ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || ShowOptions ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetCommonTopLevelPath ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetFilesCount ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectFile* || GetFile || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectFile* || GetFileByFilename || wxString,bool,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || RemoveFile || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectFile* || AddFile || wxString|int,wxString,bool,bool,int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetBuildTargetsCount ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectBuildTarget* || GetBuildTarget || wxString|int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectBuildTarget* || AddBuildTarget || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || RenameBuildTarget || wxString|int,wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectBuildTarget* || DuplicateBuildTarget || wxString|int,wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || RemoveBuildTarget || wxString|int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || ExportTargetAsProject || wxString|int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetActiveBuildTarget || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetActiveBuildTarget ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || SelectTarget || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectBuildTarget* || GetCurrentlyCompilingTarget ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetCurrentlyCompilingTarget || ProjectBuildTarget* ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PCHMode || GetModeForPCH ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetModeForPCH || PCHMode ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== EditorBase ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetFilename ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetFilename || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetShortName ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || GetModified ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetModified || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetTitle ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetTitle || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Activate ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Close ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Save ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || IsBuiltinEditor ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || ThereAreOthers ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || GotoLine || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ToggleBreakpoint || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || HasBreakpoint || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || GotoNextBreakpoint ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || GotoPreviousBreakpoint ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ToggleBookmark || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || HasBookmark || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || GotoNextBookmark ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || GotoPreviousBookmark ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Undo ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Redo ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Cut ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Copy ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Paste ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CanUndo ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CanRedo ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || CanPaste ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || HasSelection ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== cbEditor ==&lt;br /&gt;
Extends EditorBase.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return value&lt;br /&gt;
!Name&lt;br /&gt;
!Arguments&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetEditorTitle || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ProjectFile* || GetProjectFile ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || SaveAs ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || FoldAll ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || UnfoldAll ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ToggleAllFolds ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || FoldBlockFromLine || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || UnfoldBlockFromLine || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || ToggleFoldBlockFromLine || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| int || GetLineIndentInSpaces || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetLineIndentString || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Touch ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || Reload || bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || Print || bool,PrintColourMode,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || AutoComplete ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || AddBreakpoint || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| bool || RemoveBreakpoint || int,bool ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| void || SetText || wxString || this is not present in cbEditor; included to help scripts edit text&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxString || GetText ||  || this is not present in cbEditor; included to help scripts edit text&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Constants ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Constant&lt;br /&gt;
!Type&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM || int || this defines the platform Code::Blocks is currently running on. It is equal to only one of the following PLATFORM_* constants&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_MSW || int || All Windows platforms&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_GTK || int || All GTK platforms (Linux, BSD, Solaris, Darwin, etc.)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_MAC || int || All Mac platforms&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_OS2 || int || OS/2 platform&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_X11 || int || All X11 platforms&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| PLATFORM_UNKNOWN || int || Unknown platform. Please inform us if PLATFORM == PLATFORM_UNKNOWN so we can make this platform known too ;)&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''Message dialog flags'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxOK || int || Flag for Message() 's third argument (flags).&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxYES_NO || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxCANCEL || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxICON_QUESTION || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxICON_INFORMATION || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxICON_WARNING || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxICON_ERROR || int || -&amp;quot;-&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''Message dialog return values'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxID_OK || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxID_YES || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxID_NO || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxID_CANCEL || int ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum OptionsRelationType'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ortCompilerOptions || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ortLinkerOptions || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ortIncludeDirs || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ortLibDirs || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ortResDirs || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum OptionsRelation'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| orUseParentOptionsOnly || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| orUseTargetOptionsOnly || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| orPrependToParentOptions || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| orAppendToParentOptions || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum TargetType'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ttExecutable || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ttConsoleOnly || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ttStaticLib || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ttDynamicLib || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| ttCommandsOnly || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum MakeCommand'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mcClean || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mcDistClean || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mcBuild || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| mcCompileFile || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum PCHMode'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pchSourceDir || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pchObjectDir || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pchSourceFile || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum PrintScope'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| psSelection || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| psActiveEditor || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| psAllOpenEditors || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum PrintColourMode'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pcmBlackAndWhite || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pcmColourOnWhite || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pcmInvertColours || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| pcmAsIs || enum ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''enum TemplateOutputType'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wizProject || enum || TemplateOutputType::totProject&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wizTarget || enum || TemplateOutputType::totTarget&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wizFiles || enum || TemplateOutputType::totFiles&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wizCustom || enum || TemplateOutputType::totCustom&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''Other constants'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| wxFILE_SEP_PATH || wxString || Path separator. &amp;quot;\&amp;quot; for windows, &amp;quot;/&amp;quot; for all other platforms&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''File extensions (e.g. &amp;quot;cbp&amp;quot;)'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_CODEBLOCKS || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_DEVCPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_MSVC6 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_MSVC6_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_MSVC7 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_MSVC7_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_D || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_F || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_F77 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_F95 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_CPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_C || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_CC || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_CXX || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_HPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_H || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_HH || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_HXX || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_OBJECT || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_XRCRESOURCE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_STATICLIB || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_DYNAMICLIB || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_EXECUTABLE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_RESOURCE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| EXT_RESOURCEBIN || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;background: #f8f8f8;&amp;quot; | '''File extensions with leading dot (e.g. &amp;quot;.cbp&amp;quot;)'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_CODEBLOCKS || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_DEVCPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_MSVC6 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_MSVC6_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_MSVC7 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_MSVC7_WORKSPACE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_D || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_F || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_F77 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_F95 || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_CPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_C || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_CC || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_CXX || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_HPP || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_H || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_HH || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_HXX || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_OBJECT || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_XRCRESOURCE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_STATICLIB || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_DYNAMICLIB || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_EXECUTABLE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_RESOURCE || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| DOT_EXT_RESOURCEBIN || wxString ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting Code::Blocks|Scripting index]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Wizard_scripts&amp;diff=4139</id>
		<title>Wizard scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Wizard_scripts&amp;diff=4139"/>
		<updated>2006-11-11T17:42:57Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
When you click &amp;quot;File-&amp;gt;New&amp;quot;, you 're presented with wizards to create various new things. These are:&lt;br /&gt;
&lt;br /&gt;
* New project&lt;br /&gt;
* New build target inside the active project&lt;br /&gt;
* New file(s)&lt;br /&gt;
* New anything (custom)&lt;br /&gt;
* User template&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:New_wiz.png|&amp;quot;New...&amp;quot; dialog]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
All the above functionality (except user templates) is provided by wizard scripts. In this section, I 'm gonna try to explain everything about wizard scripts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Before starting out creating your own wizard scripts or editing existing ones, these are &amp;quot;must read&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [[Wizard Scripting Commands]]&lt;br /&gt;
* [[Wizard Page Events]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Where are they located? ==&lt;br /&gt;
Wizard scripts are located under the Code::Blocks' data folder.&lt;br /&gt;
The base wizards folder is &amp;lt;tt&amp;gt;[Code::Blocks install dir]/share/codeblocks/templates/wizards&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Scripts are arranged in subfolders (one for each wizard) inside the above folder.&lt;br /&gt;
To make this clear, the structure of this folder is displayed below with the &amp;quot;console&amp;quot; wizard expanded to see all its files:&lt;br /&gt;
&lt;br /&gt;
 Base folder&lt;br /&gt;
   console&lt;br /&gt;
     c&lt;br /&gt;
       main.c&lt;br /&gt;
     cpp&lt;br /&gt;
       main.cpp&lt;br /&gt;
     logo.png&lt;br /&gt;
     wizard.png&lt;br /&gt;
     wizard.script&lt;br /&gt;
   fltk&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   empty&lt;br /&gt;
   ...&lt;br /&gt;
   ...&lt;br /&gt;
   common_functions.script&lt;br /&gt;
   config.script&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== What files do I need to create a valid wizard? ==&lt;br /&gt;
There are three files that are absolutely needed for your wizard to be registered correctly:&lt;br /&gt;
* '''logo.png''' - The wizard's icon. This will be displayed in the &amp;quot;New...&amp;quot; dialog.&lt;br /&gt;
* '''wizard.png''' - The wizard's bitmap. This bitmap is displayed on the left side in the wizard dialog.&lt;br /&gt;
* '''wizard.script''' - The wizard's script. You didn't think you could have a scripted wizard without a script, did you? ;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I edit an existing wizard? ==&lt;br /&gt;
That's easy: edit its script :). This can be done easily from within Code::Blocks. Just right-click on the wizard's icon in the &amp;quot;New...&amp;quot; dialog. The same context menu contains an option to edit the global configuration script (''config.script'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Edit_wiz_script.png|Wizard scripts context menu]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that no restart is needed if you edit a script. Just save it and launch the wizard again :).&lt;br /&gt;
&lt;br /&gt;
Code::Blocks needs to be restarted only when editing the global configuration script. An informational message is displayed in this case so you don't wonder why your changes are not taking any effect ;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I create a new wizard? ==&lt;br /&gt;
First thing you should do is read about [[Wizard Scripting Commands]] and use it as a reference on what commands are accepted and what their syntax is.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How do I register my new wizard? ==&lt;br /&gt;
Wizard scripts are registered with Code::Blocks by adding a registration line in the global wizards configuration script (config.script).&lt;br /&gt;
&lt;br /&gt;
Let's look at the registration of an existing wizard:&lt;br /&gt;
&lt;br /&gt;
 // config.script&lt;br /&gt;
 function RegisterWizards()&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
     RegisterWizard(wizProject,     _T(&amp;quot;empty&amp;quot;),        _T(&amp;quot;Empty project&amp;quot;),         _T(&amp;quot;Console&amp;quot;));&lt;br /&gt;
 &lt;br /&gt;
     // more wizards following&lt;br /&gt;
     ...&lt;br /&gt;
     ...&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The arguments to the RegisterWizard() function are as follows:&lt;br /&gt;
&lt;br /&gt;
# The type of output for this wizard. Can be one of the following, self-explaining types:&lt;br /&gt;
#* wizProject&lt;br /&gt;
#* wizTarget&lt;br /&gt;
#* wizFiles&lt;br /&gt;
#* wizCustom&lt;br /&gt;
# The subfolder where this wizard's files are located&lt;br /&gt;
# The wizard's title, as will appear in the &amp;quot;New...&amp;quot; dialog&lt;br /&gt;
# The wizard's category. Free-form text. If your wizard fits one of the existing categories, please use it.&lt;br /&gt;
&lt;br /&gt;
After you add the new wizard in ''config.script'', you must restart Code::Blocks to re-initialize all the registered wizards.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Mandrav|Mandrav]] 07:51, 9 July 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Wizard_Scripting_Commands&amp;diff=4138</id>
		<title>Wizard Scripting Commands</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Wizard_Scripting_Commands&amp;diff=4138"/>
		<updated>2006-11-11T17:42:26Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
In this page, all the wizards-related script commands are listed and explained.&lt;br /&gt;
&lt;br /&gt;
Before we start, remember that in every wizard script there is a global variable defined named ''Wizard''. This is the object that all the following commands are known under.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Adding wizard pages =&lt;br /&gt;
The script writer creates a wizard by adding various pre-defined and/or custom pages to the wizard object. The order the pages are added define the order in which they will appear (almost).&lt;br /&gt;
&lt;br /&gt;
The script has the chance to interfere with the wizards operation any time the user presses &amp;quot;Next&amp;quot; or &amp;quot;Back&amp;quot; on the wizard dialog. For more on this, please read [[Wizard Page Events]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTE: The following commands only make sense inside the BeginWizard() script function.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
== AddInfoPage(pageId,intro_msg) ==&lt;br /&gt;
&lt;br /&gt;
Add an informational page. It contains an informational text. It also contains a checkbox labelled &amp;quot;Skip&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Usually used for the first page to be displayed by the wizard and it explains in a few words what this wizard will do.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Intro_panel.png]]&lt;br /&gt;
|3=pageId&lt;br /&gt;
|4=wxString&lt;br /&gt;
|5=The page's ID.&lt;br /&gt;
|6=info_msg&lt;br /&gt;
|7=wxString&lt;br /&gt;
|8=The info text&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
== AddFilePathPage(showHeaderGuard) ==&lt;br /&gt;
&lt;br /&gt;
Add a page that allows for the selection of a file. This file might not exist. Usually used by wizards of type ''wizFiles'' for the selection of the output files.&lt;br /&gt;
&lt;br /&gt;
It also contains a ''header guard'' text box which can be visible or not. Usually used when the file in question is a C/C++ header, in which case you might want to allow the user to customize the ''header guard'' word. Note that if this is visible it is also auto-updated to match the selected filename. The auto-update takes the filename part (no path), capitalizes it and replaces any non-character or non-digit to an underscore.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:File_path_panel.png]]&lt;br /&gt;
|3=showHeaderGuard&lt;br /&gt;
|4=bool&lt;br /&gt;
|5=If true, a ''header guard'' text box will be visible&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
== AddProjectPathPage() ==&lt;br /&gt;
&lt;br /&gt;
Add a page that allows the user to customize the new project. Usually used by wizards of type ''wizProject''.&lt;br /&gt;
&lt;br /&gt;
This page contains text boxes to set the project title, filename and base directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Project_path_panel.png]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_4args|1=&lt;br /&gt;
== AddCompilerPage(compilerID, validCompilerIDs, allowCompilerChange, allowConfigChange) ==&lt;br /&gt;
&lt;br /&gt;
Perhaps the most used pre-defined wizard page. It contains a compiler selection list and a couple of well-known pre-defined build targets: Debug and Release.&lt;br /&gt;
&lt;br /&gt;
The compilers' list can contain all supported compilers or a script-defined list. It can also be selected whether compiler selection will be enabled or not.&lt;br /&gt;
&lt;br /&gt;
Finally, the build targets related settings can be either visible or not. If they 're visible, they allow the user to customize per-target the target's name, working directory and objects output (intermediate) directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Compiler_panel.png]]&lt;br /&gt;
| 3=compilerID | 4=wxString | 5=The preselected compiler ID for the list. If this string is empty, the globally default compiler will be selected.&lt;br /&gt;
| 6=validCompilerIDs | 7=wxString | 8=A semicolon separated list of valid compiler IDs to include in the list. If you want all available compilers to be listed, use &amp;lt;code&amp;gt;_T(&amp;quot;*&amp;quot;)&amp;lt;/code&amp;gt;. If you want only GCC-based or MSVC-based compilers to appear in the list, use &amp;lt;code&amp;gt;_T(&amp;quot;gcc*;msv*&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
| 9=allowCompilerChange | 10=bool | 11=If true, the user will be able to change the compiler selection. If false, the selection will be read-only.&lt;br /&gt;
| 12=allowConfigChange | 13=bool | 14=If true, the settings for the two pre-defined build targets (Debug/Release) will be shown and available for the user to customize. If false, they will not be visible.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_6args|1=&lt;br /&gt;
== AddBuildTargetPage(targetName, isDebug, showCompiler, compilerID, validCompilerIDs, allowCompilerChange) ==&lt;br /&gt;
&lt;br /&gt;
Adds a page for creating a new build target. This page allows the user to enter a name for the new build target, set its working directory, set its objects output (intermediate) directory and, optionally, a compiler selection list.&lt;br /&gt;
&lt;br /&gt;
It also contains a checkbox to denote whether this target should have debugging symbols enabled or not.&lt;br /&gt;
&lt;br /&gt;
The compilers' list can contain all supported compilers or a script-defined list. It can also be selected whether compiler selection will be enabled or not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Build_target_panel.png]]&lt;br /&gt;
| 3=targetName | 4=wxString | 5=The new target's name.&lt;br /&gt;
| 6=isDebug | 7=bool | 8=If true, the &amp;quot;Enable debugging symbols&amp;quot; check box will be checked.&lt;br /&gt;
| 9=showCompiler | 10=bool | 11=If true, the compiler selection list will be visible.&lt;br /&gt;
| 12=compilerID | 13=wxString | 14=The preselected compiler ID for the list. If this string is empty, the globally default compiler will be selected.&lt;br /&gt;
| 15=validCompilerIDs | 16=wxString | 17=A semicolon separated list of valid compiler IDs to include in the list. If you want all available compilers to be listed, use &amp;lt;code&amp;gt;_T(&amp;quot;*&amp;quot;)&amp;lt;/code&amp;gt;. If you want only GCC-based or MSVC-based compilers to appear in the list, use &amp;lt;code&amp;gt;_T(&amp;quot;gcc*;msv*&amp;quot;)&amp;lt;/code&amp;gt;.&lt;br /&gt;
| 18=allowCompilerChange | 19=bool | 20=If true, the user will be able to change the compiler selection. If false, the selection will be read-only.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_4args|1=&lt;br /&gt;
== AddGenericSingleChoiceListPage(pageId, descr, choices, defChoice) ==&lt;br /&gt;
Adds a page that contains a script-defined list and the user can select one single value from it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Generic_single_choice_list.png]]&lt;br /&gt;
| 3=pageId | 4=wxString | 5=The page's ID.&lt;br /&gt;
| 6=descr | 7=wxString | 8=The description displayed at the top of the page.&lt;br /&gt;
| 9=choices | 10=wxString | 11=Semicolon separated list of the available selections.&lt;br /&gt;
| 12=defChoice | 13=int | 14=The pre-selected choice. This is used only the first time this page is displayed. The user's selection is stored in the Code::Blocks configuration file and remembered for subsequent uses of this page.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_4args|1=&lt;br /&gt;
== AddGenericSelectPathPage(pageId, descr, label, defValue) ==&lt;br /&gt;
Adds a page that allows the user to select a folder from the filesystem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Generic_select_path.png]]&lt;br /&gt;
| 3=pageId | 4=wxString | 5=The page's ID.&lt;br /&gt;
| 6=descr | 7=wxString | 8=The description displayed at the top of the page.&lt;br /&gt;
| 9=label | 10=wxString | 11=The label above the text box (e.g. &amp;quot;Location of Foo:&amp;quot;).&lt;br /&gt;
| 12=defValue | 13=wxString | 14=The pre-selected path. This is used only the first time this page is displayed. The user's selection is stored in the Code::Blocks configuration file and remembered for subsequent uses of this page.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
== AddPage(pageId) ==&lt;br /&gt;
&lt;br /&gt;
Adds a custom page from XRC resource.&lt;br /&gt;
&lt;br /&gt;
The wizard allows the script to add custom pages from XRC. Each such page must actually be a wxPanel inside the XRC. This wxPanel's name is then used as the ''pageID'' parameter.&lt;br /&gt;
|3=pageId&lt;br /&gt;
|4=wxString&lt;br /&gt;
|5=The page's ID. This must match the wxPanel's name in the XRC resource.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Operating on GUI controls =&lt;br /&gt;
The wizard allows scripts to operate on the controls currently visible (i.e. on the current page the user is viewing).&lt;br /&gt;
By &amp;quot;operate on&amp;quot; I mean get and set their values.&lt;br /&gt;
This is especially useful for custom XRC pages (else what would they be good for?) and a couple of the pre-defined pages.&lt;br /&gt;
&lt;br /&gt;
In this section, the script commands that allows the script to operate on page controls are explained by control type.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Text controls (wxTextCtrl) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== SetTextControlValue(control_name, value) ===&lt;br /&gt;
Sets the value of the text control identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=wxString &lt;br /&gt;
|8=The new value&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetTextControlValue(control_name) ===&lt;br /&gt;
Gets the value of the text control identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's current value (wxString).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checkbox controls (wxCheckBox) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== CheckCheckbox(control_name, value) ===&lt;br /&gt;
Checks or unchecks the checkbox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=bool &lt;br /&gt;
|8=Check if true, uncheck if false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== IsCheckboxChecked(control_name) ===&lt;br /&gt;
Gets the check-state of the checkbox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's current check-state (bool).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Combobox controls (wxComboBox) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== SetComboboxSelection(control_name, value) ===&lt;br /&gt;
Sets the selected item in the combobox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=int&lt;br /&gt;
|8=The item's index. Use -1 for no selection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetComboboxSelection(control_name) ===&lt;br /&gt;
Gets the selected item in the combobox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's currently selected index (int).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetComboboxStringSelection(control_name) ===&lt;br /&gt;
Gets the selected item's string in the combobox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's currently selected item's string (wxString).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetCompilerFromCombobox(control_name) ===&lt;br /&gt;
Assuming you have used FillComboboxWithCompilers() (below) to fill the combobox, this returns the selected compiler's ID.&lt;br /&gt;
|2=The control's currently selected item's string (wxString).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== FillComboboxWithCompilers(control_name) ===&lt;br /&gt;
Fills the combobox with a list of compilers.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Radiobox controls (wxRadioBox) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== SetRadioboxSelection(control_name, value) ===&lt;br /&gt;
Sets the selected item in the radiobox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=int&lt;br /&gt;
|8=The item's index. Use -1 for no selection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetRadioboxSelection(control_name) ===&lt;br /&gt;
Gets the selected item in the radiobox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's currently selected index (int).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Listbox controls (wxListBox) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== SetListboxSelection(control_name, value) ===&lt;br /&gt;
Sets the selected item in the listbox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=int&lt;br /&gt;
|8=The item's index. Use -1 for no selection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_1args|1=&lt;br /&gt;
=== GetListboxSelection(control_name) ===&lt;br /&gt;
Gets the selected item in the listbox identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|2=The control's currently selected index (int).&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The control's name&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== All controls (common functions) ==&lt;br /&gt;
&lt;br /&gt;
{{Function_Description_2args|1=&lt;br /&gt;
=== EnableWindow(control_name, value) ===&lt;br /&gt;
Enables/disables the window (control) identified by &amp;lt;code&amp;gt;control_name&amp;lt;/code&amp;gt;.&lt;br /&gt;
|3=control_name &lt;br /&gt;
|4=wxString &lt;br /&gt;
|5=The window's (control) name&lt;br /&gt;
|6=value&lt;br /&gt;
|7=bool&lt;br /&gt;
|8=Enable if true, disable if false&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(to be continued)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Mandrav|Mandrav]] 11:28, 9 July 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Wizard_Page_Events&amp;diff=4137</id>
		<title>Wizard Page Events</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Wizard_Page_Events&amp;diff=4137"/>
		<updated>2006-11-11T17:41:52Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
A script can handle various wizard events while the wizard is running. This page explains these events (and their uses) in detail.&lt;br /&gt;
&lt;br /&gt;
== Page IDs ==&lt;br /&gt;
Every wizard page (pre-defined or custom) has a unique page ID. This ID is a wxString that identifies the page in scripts.&lt;br /&gt;
&lt;br /&gt;
These are the valid pre-defined page IDs:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Page || ID&lt;br /&gt;
|-&lt;br /&gt;
|Intro || &amp;quot;IntroPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|File selection|| &amp;quot;FilePathPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Project settings|| &amp;quot;ProjectPathPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Compiler || &amp;quot;CompilerPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Build target || &amp;quot;BuildTargetPage&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|Generic path || &lt;br /&gt;
|-&lt;br /&gt;
|Generic single choice list || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You 'll notice that the two last pre-defined pages don't have an ID. This is because you can have more than one of them inside the same wizard and so the IDs wouldn't be unique anymore.&lt;br /&gt;
&lt;br /&gt;
For these two pages, the ID is the first argument passed to their creation calls.&lt;br /&gt;
See [[Wizard Scripting Commands#AddGenericSelectPathPage(pageId, descr, label, defValue)|AddGenericSelectPathPage]] and [[Wizard Scripting Commands#AddGenericSingleChoiceListPage(pageId, descr, choices, defChoice)|AddGenericSingleChoiceListPage]] syntax.&lt;br /&gt;
&lt;br /&gt;
You can give these two pages any ID you want but make sure it's unique. Besides the obvious reasons why it should be unique, the page ID is also used by various wizard pages to store per-page user selections inside the Code::Blocks configuration. So a duplicate ID will save under the same configuration key...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
Now that we 've seen what page IDs are, we can talk about wizard script events.&lt;br /&gt;
&lt;br /&gt;
To make a script handle a wizard event, you must create a script function with a special name to handle this event. All event functions must follow the same naming conventions:&lt;br /&gt;
&lt;br /&gt;
* First is the event name&lt;br /&gt;
* An underscore follows&lt;br /&gt;
* And finally the page ID&lt;br /&gt;
&lt;br /&gt;
Look in the events documentation below. Each event contains sample code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OnEnter(forward) ===&lt;br /&gt;
Fired just before a page is displayed by the wizard. The script can initialize the page contents in this event.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return type || Value&lt;br /&gt;
|-&lt;br /&gt;
|void || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Parameter || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
|forward || bool || If true, the page entered after the user clicked &amp;quot;Next&amp;quot;. If false, the user had clicked &amp;quot;Back&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Sample:'''&lt;br /&gt;
 function OnEnter_CompilerPage(forward)&lt;br /&gt;
 {&lt;br /&gt;
     // we only care to initialize if going forward&lt;br /&gt;
     if (forward)&lt;br /&gt;
     {&lt;br /&gt;
         // do something?&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OnLeave(forward) ===&lt;br /&gt;
Fired just before a page is changed to another. This is a very useful event because the script can assign the page contents to variables.&lt;br /&gt;
&lt;br /&gt;
Inside this event, the script has the ability to abort the page change. So, for example, the script can check the values the user entered and abort the page from changing if it detects incorrect values.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return type || Value&lt;br /&gt;
|-&lt;br /&gt;
|bool || If this function returns true, the page is allowed to change. If it returns false, the change is aborted (the wizard stays in the same page).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Parameter || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
|forward || bool || If true, the page entered after the user clicked &amp;quot;Next&amp;quot;. If false, the user had clicked &amp;quot;Back&amp;quot;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Sample:'''&lt;br /&gt;
 function OnLeave_MyXRCPanel(forward)&lt;br /&gt;
 {&lt;br /&gt;
     // we only care to check validity if going forward&lt;br /&gt;
     if (forward)&lt;br /&gt;
     {&lt;br /&gt;
         local userName = Wizard.GetTextControlValue(&amp;quot;txtUserName&amp;quot;);&lt;br /&gt;
         if (userName.IsEmpty())&lt;br /&gt;
         {&lt;br /&gt;
             ShowWarning(_T(&amp;quot;You must enter a username!&amp;quot;));&lt;br /&gt;
             return false; // abort the page change&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return true; // all is well&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OnGetPrevPage() ===&lt;br /&gt;
In various times through the wizard's lifetime, it fires this event so that the wizard knows which page is &amp;quot;chained&amp;quot; before the current page.&lt;br /&gt;
&lt;br /&gt;
Using this event, a script can dynamically alter the pages order (possibly based on user selections).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return type || Value&lt;br /&gt;
|-&lt;br /&gt;
|wxString || The previous page's ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Parameter || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTE: if the script returns an empty (or non-existent) page ID, the wizard assumes this is the first page (i.e. no previous page).''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Sample:'''&lt;br /&gt;
 // assume we have the following pages in the wizard:&lt;br /&gt;
 // Intro&lt;br /&gt;
 // Project settings&lt;br /&gt;
 // Single choice list (1)&lt;br /&gt;
 // Select path for libfoo (2)&lt;br /&gt;
 // Compiler selection (3)&lt;br /&gt;
 //&lt;br /&gt;
 // and we want to skip the libfoo path selection (2) based on user&lt;br /&gt;
 // selection in the single choice list (1)&lt;br /&gt;
 //&lt;br /&gt;
 // for this to work, we need to create two event functions:&lt;br /&gt;
 // OnGetNextPage for the choice list (1) and&lt;br /&gt;
 // OnGetPrevPage for the compiler selection (3) and&lt;br /&gt;
 // so that we can &amp;quot;jump over&amp;quot; the libfoo path selection page (2)&lt;br /&gt;
 &lt;br /&gt;
 // we need a global var to keep the user's selection&lt;br /&gt;
 ChoiceSelection &amp;lt;- 0;&lt;br /&gt;
 &lt;br /&gt;
 function OnGetNextPage_MyChoiceList()&lt;br /&gt;
 {&lt;br /&gt;
     ChoiceSelection = Wizard.GetListboxSelection(_T(&amp;quot;lstSelection&amp;quot;));&lt;br /&gt;
     if (ChoiceSelection == 2)&lt;br /&gt;
     {&lt;br /&gt;
         // based on user's selection, we must skip the libfoo path selection page&lt;br /&gt;
         return _T(&amp;quot;CompilerPage&amp;quot;));&lt;br /&gt;
     }&lt;br /&gt;
     // normally, libfoo path selection follows&lt;br /&gt;
     return _T(&amp;quot;LibFooPath&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function OnGetPrevPage_CompilerPage()&lt;br /&gt;
 {&lt;br /&gt;
     if (ChoiceSelection == 2)&lt;br /&gt;
     {&lt;br /&gt;
         // based on user's selection, we must skip the libfoo path selection page&lt;br /&gt;
         return _T(&amp;quot;MyChoiceList&amp;quot;));&lt;br /&gt;
     }&lt;br /&gt;
     // normally, libfoo path selection is before this page&lt;br /&gt;
     return _T(&amp;quot;LibFooPath&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OnGetNextPage() ===&lt;br /&gt;
In various times through the wizard's lifetime, it fires this event so that the wizard knows which page is &amp;quot;chained&amp;quot; after the current page.&lt;br /&gt;
&lt;br /&gt;
Using this event, a script can dynamically alter the pages order (possibly based on user selections).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Return type || Value&lt;br /&gt;
|-&lt;br /&gt;
|wxString || The next page's ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 0px solid gray&amp;quot;&lt;br /&gt;
!Parameter || Type || Description&lt;br /&gt;
|-&lt;br /&gt;
| - || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''NOTE: if the script returns an empty (or non-existent) page ID, the wizard assumes this is the last page (i.e. no next page).''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See the sample in [[Wizard Page Events#OnGetPrevPage()|OnGetPrevPage]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Mandrav|Mandrav]] 06:17, 10 July 2006 (EDT)&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Startup_script&amp;diff=4136</id>
		<title>Startup script</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Startup_script&amp;diff=4136"/>
		<updated>2006-11-11T17:40:57Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
When Code::Blocks finishes loading, it tries to load a script named ''startup.script''. If it is found it then tries to execute the ''&amp;quot;function main()&amp;quot;'' inside it (if there). The user can edit this script to run arbitrary customization commands on application startup.&lt;br /&gt;
The shipped ''startup.script'' just logs its presence in the application's debug log.&lt;br /&gt;
&lt;br /&gt;
 function main()&lt;br /&gt;
 {&lt;br /&gt;
     Log(_T(&amp;quot;Running startup script&amp;quot;));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting commands]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Build_scripts&amp;diff=4135</id>
		<title>Build scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Build_scripts&amp;diff=4135"/>
		<updated>2006-11-11T17:40:29Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
Build scripts can help configuring build options and reusing these configurations.&lt;br /&gt;
&lt;br /&gt;
What you need to do is create as many build scripts are needed and attach them to projects or build targets.&lt;br /&gt;
&lt;br /&gt;
Let's see an example build script for the GNU GCC compiler:&lt;br /&gt;
&lt;br /&gt;
 // file: build_debug_symbols.script&lt;br /&gt;
 &lt;br /&gt;
 function SetBuildOptions(base)&lt;br /&gt;
 {&lt;br /&gt;
     // enable debugging symbols&lt;br /&gt;
     base.AddCompilerOption(_T(&amp;quot;-g&amp;quot;));&lt;br /&gt;
     // disable all optimizations&lt;br /&gt;
     base.AddCompilerOption(_T(&amp;quot;-O0&amp;quot;));&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 function UnsetBuildOptions(base)&lt;br /&gt;
 {&lt;br /&gt;
     // remove the settings we added in SetBuildOptions()&lt;br /&gt;
     base.RemoveCompilerOption(_T(&amp;quot;-g&amp;quot;));&lt;br /&gt;
     base.RemoveCompilerOption(_T(&amp;quot;-O0&amp;quot;));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;base&amp;quot; parameter in both functions is a CompileOptionsBase instance. SetBuildOptions() is called before the project/target is built and UnsetBuildOptions() is called after it has built. Each build script ''must define both of these functions'', even if they 're not needed (in which case you can leave them with an empty body).&lt;br /&gt;
&lt;br /&gt;
This specific script enables the generation of debugging symbols for the build target it is attached to. You could similarly have other build scripts for different configuration sets like optimizations, architecture, C++ options, C++ standards, etc.&lt;br /&gt;
&lt;br /&gt;
Great. Now you have created your own set of build scripts. How do you attach them to project/targets? Simple: &amp;quot;Project-&amp;gt;Properties-&amp;gt;Scripts&amp;quot;. Select the project or target to attach a script to and click &amp;quot;Add&amp;quot;. If you want to detach a script, click &amp;quot;Remove&amp;quot;.&lt;br /&gt;
You can also change the order scripts are ran with the two little arrows on the right side.&lt;br /&gt;
Finally, you can press &amp;quot;Validate all scripts&amp;quot; to make sure that the attached build scripts are valid.&lt;br /&gt;
&lt;br /&gt;
If you choose to go the build scripts way for your project, please don't use the project build options dialog (unless maybe for global project settings). If you do, things may not work as expected and you will unrightfully blame Code::Blocks for this ;).&lt;br /&gt;
&lt;br /&gt;
Well, that's all there is to it!&lt;br /&gt;
&lt;br /&gt;
''NOTE: I 've been told that this is like MS Visual Studio's &amp;quot;properties&amp;quot;. I wouldn't know since I don't use it myself. But maybe this similarity (if it really exists) helps you grasp the concept better.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting commands]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Debugger_scripts&amp;diff=4134</id>
		<title>Debugger scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Debugger_scripts&amp;diff=4134"/>
		<updated>2006-11-11T17:40:01Z</updated>

		<summary type="html">&lt;p&gt;Artojon: removed extra category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Scripting Code::Blocks]]&lt;br /&gt;
&lt;br /&gt;
Debugger scripts are similar to [http://www.codeproject.com/csharp/ImageVisualizer.asp Visual Studio Debugger Visualizer]. It allows you to write a small piece of code that gets executed by the debugger whenever you try to view a specific type of variables and can be used to show custom text with the important information you need in it.&lt;br /&gt;
&lt;br /&gt;
Quote from Game_Ender - March 23, 2006&lt;br /&gt;
&lt;br /&gt;
''I don't think its possible to open up another window to visualize something.''&lt;br /&gt;
&lt;br /&gt;
Let's see how this works. Everything is inside a single file in the scripts/ folder, named gdb_types.script :). Support for more (user-defined) scripts is planned for the future.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This script is called by Code::Blocks at two places:&lt;br /&gt;
&lt;br /&gt;
# when GDB is launched. It calls the script function RegisterTypes() to register all user-defined types with Code::Blocks' debugger.&lt;br /&gt;
# whenever GDB encounters your variable type, it calls the script functions specific to this datatype (registered in RegisterTypes() - more on that below).&lt;br /&gt;
&lt;br /&gt;
That's the overview. Let's dissect the shipped gdb_types.script and see how it adds std::string support to GDB.&lt;br /&gt;
&lt;br /&gt;
 // Registers new types with driver&lt;br /&gt;
 function RegisterTypes(driver)&lt;br /&gt;
 {&lt;br /&gt;
 //    signature:&lt;br /&gt;
 //    driver.RegisterType(type_name, regex, eval_func, parse_func); &lt;br /&gt;
 &lt;br /&gt;
     // STL String&lt;br /&gt;
     driver.RegisterType(&lt;br /&gt;
         _T(&amp;quot;STL String&amp;quot;),&lt;br /&gt;
         _T(&amp;quot;[^[:alnum:]_]+string[^[:alnum:]_]*&amp;quot;),&lt;br /&gt;
         _T(&amp;quot;Evaluate_StlString&amp;quot;),&lt;br /&gt;
         _T(&amp;quot;Parse_StlString&amp;quot;)&lt;br /&gt;
     );&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;driver&amp;quot; parameter is the debugger driver but you don't need to care about it :) (currently this only works with GDB). This class contains a single method: RegisterType. Here's its C++ declaration:&lt;br /&gt;
&lt;br /&gt;
 void GDB_driver::RegisterType(const wxString&amp;amp; name, const wxString&amp;amp; regex, const wxString&amp;amp; eval_func, const wxString&amp;amp; parse_func)&lt;br /&gt;
&lt;br /&gt;
So, in the above script code, the &amp;quot;STL String&amp;quot; (just a name - doesn't matter what) type is registered, providing a regular expression string for the debugger plugin to match against and, finally, it provides the names of the two mandatory functions needed for each registered type:&lt;br /&gt;
&lt;br /&gt;
# evaluation function: this must return a command understood by the actual debugger (GDB in this case) and it issues it.&lt;br /&gt;
# parser function: once the debugger runs the command returned by the evaluation function, it passes its result to this function for further processing. What this function returns, is what is actually returned to the user (usually in the watches window or in a tooltip).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the evaluation function for std::string:&lt;br /&gt;
&lt;br /&gt;
 function Evaluate_StlString(type, a_str, start, count)&lt;br /&gt;
 {&lt;br /&gt;
     local oper = _T(&amp;quot;.&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     if (type.Find(_T(&amp;quot;*&amp;quot;)) &amp;gt; 0)&lt;br /&gt;
         oper = _T(&amp;quot;-&amp;gt;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     local result = _T(&amp;quot;output &amp;quot;) + a_str + oper + _T(&amp;quot;c_str()[&amp;quot;) + start + _T(&amp;quot;]@&amp;quot;);&lt;br /&gt;
     if (count != 0)&lt;br /&gt;
         result = result + count;&lt;br /&gt;
     else&lt;br /&gt;
         result = result + a_str + oper + _T(&amp;quot;size()&amp;quot;);&lt;br /&gt;
     return result;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
I 'm not going to explain what this function returns. I 'll just tell you that it returns a GDB command that will make GDB print the actual std::string's contents. ''Yes, you need to know your debugger and its commands before you try to extend it.''&lt;br /&gt;
&lt;br /&gt;
What I will tell you though, is what those function arguments are.&lt;br /&gt;
&lt;br /&gt;
* type: the datatype, e.g. &amp;quot;char*&amp;quot;, &amp;quot;const string&amp;quot;, etc.&lt;br /&gt;
* a_str: the name of the variable GDB is trying to evaluate.&lt;br /&gt;
* start: the start offset (used for arrays).&lt;br /&gt;
* count: the count starting from the start offset (used for arrays).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let's see the relevant parser function now:&lt;br /&gt;
&lt;br /&gt;
 function Parse_StlString(a_str, start)&lt;br /&gt;
 {&lt;br /&gt;
     // nothing needs to be done&lt;br /&gt;
     return a_str;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* a_str: the returned string when GDB ran the command returned by the evaluation function. In the case of std::string, it's the contents of the string.&lt;br /&gt;
* start: the start offset (used for arrays).&lt;br /&gt;
&lt;br /&gt;
Well, in this example, nothing needs to be done. &amp;quot;a_str&amp;quot; already contains the std:string's contents so we just return it :)&lt;br /&gt;
&lt;br /&gt;
I suggest you study how wxString is registered in that same file, as a more complex example.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Scripting commands]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Scripting_Code::Blocks&amp;diff=4133</id>
		<title>Scripting Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Scripting_Code::Blocks&amp;diff=4133"/>
		<updated>2006-11-11T17:39:25Z</updated>

		<summary type="html">&lt;p&gt;Artojon: moved under &amp;quot;Developer Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Scripting Code::Blocks]]&lt;br /&gt;
Code::Blocks supports '''scripting''' to extend various parts of its functionality during runtime. The scripting language used is [http://www.squirrel-lang.org Squirrel].&lt;br /&gt;
&lt;br /&gt;
Currently, Code::Blocks uses scripts for:&lt;br /&gt;
&lt;br /&gt;
'''[[Startup script|Startup]]'''&lt;br /&gt;
: Run arbitrary commands on application startup.&lt;br /&gt;
&lt;br /&gt;
'''[[Wizard scripts|Wizards]]'''&lt;br /&gt;
: Register new wizards for generating projects, build targets, files or anything else. All wizards shipped with Code::Blocks are scripted.&lt;br /&gt;
&lt;br /&gt;
'''[[Debugger scripts|Debugger]]'''&lt;br /&gt;
: Extend the GNU Debugger (and others) to support arbitrary data types. Code::Blocks ships with scripts that add wxString, std::string and std::vector &amp;quot;knowledge&amp;quot; to the GNU Debugger.&lt;br /&gt;
&lt;br /&gt;
'''[[Build scripts|Build]]'''&lt;br /&gt;
: Extend the build system. Scripts can be attached to projects and/or build targets and are executed before and/or after each of these is built.&lt;br /&gt;
&lt;br /&gt;
More Code::Blocks parts may be exposed to scripting in the future.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Scripting commands]]&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://www.squirrel-lang.org/#doc Squirrel documentation]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Category:Scripting_Code::Blocks&amp;diff=4132</id>
		<title>Category:Scripting Code::Blocks</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Category:Scripting_Code::Blocks&amp;diff=4132"/>
		<updated>2006-11-11T17:38:34Z</updated>

		<summary type="html">&lt;p&gt;Artojon: moved under &amp;quot;Develper Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Developer Documentation]]&lt;br /&gt;
: ''Main article: [[Scripting Code::Blocks]]''&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Category:Developer_Documentation&amp;diff=4131</id>
		<title>Category:Developer Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Category:Developer_Documentation&amp;diff=4131"/>
		<updated>2006-11-11T17:21:37Z</updated>

		<summary type="html">&lt;p&gt;Artojon: add category &amp;quot;Code::Blocks Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Documentation]]&lt;br /&gt;
: ''Main article:  [[Developer documentation]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Category:User_Documentation&amp;diff=4130</id>
		<title>Category:User Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Category:User_Documentation&amp;diff=4130"/>
		<updated>2006-11-11T17:20:29Z</updated>

		<summary type="html">&lt;p&gt;Artojon: add category &amp;quot;Code::Blocks Documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Documentation]]&lt;br /&gt;
: ''Main article: [[User documentation]]&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Keyboard_Shortcuts&amp;diff=4129</id>
		<title>Keyboard Shortcuts</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Keyboard_Shortcuts&amp;diff=4129"/>
		<updated>2006-11-11T17:16:19Z</updated>

		<summary type="html">&lt;p&gt;Artojon: change category to &amp;quot;User documentation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Documentation]]&lt;br /&gt;
&lt;br /&gt;
::''Note: You can define your own keyboard shortcuts with the [[Keyboard Shortcuts plugin]]''&lt;br /&gt;
&lt;br /&gt;
== Editor ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Undo last action || Ctrl + Z&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Redo last action || Ctrl + Shift + Z&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Cut selected text || Ctrl + X&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Copy selected text || Ctrl + C&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Paste text from clipboard || Ctrl + V&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Select all text || Ctrl + A&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Swap header / source || F11&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Comment highlighted code || Ctrl + Shift + C&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Uncomment highlighted code || Ctrl + Shift + X&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Duplicate line caret is on || Ctrl + D&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Auto-complete / Abbreviations || Ctrl + Space / Ctrl + J&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Show call tip || Ctrl + Shift + Space&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Swap line caret is on with line above it || Ctrl + T&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Toggle bookmark || Ctrl + B&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Goto previous bookmark || Alt + PgUp&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Goto next bookmark || Alt + PgDown&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Toggle current block folding || F12&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Toggle all folds || Shift + F12&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a list of shortcuts provided by the Code::Blocks' editor component. These shortcuts cannot be rebound.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Magnify text size. || Ctrl + Keypad &amp;quot;+&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Reduce text size. || Ctrl + Keypad &amp;quot;-&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Restore text size to normal. || Ctrl + Keypad &amp;quot;/&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Cycle through recent files. || Ctrl + Tab&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Indent block. || Tab&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Dedent block. || Shift + Tab&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Delete to start of word. || Ctrl + BackSpace&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Delete to end of word. || Ctrl + Delete&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Delete to start of line. || Ctrl + Shift + BackSpace&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Delete to end of line. || Ctrl + Shift + Delete&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Go to start of document. || Ctrl + Home&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Extend selection to start of document. || Ctrl + Shift + Home&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Go to start of display line. || Alt + Home&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Extend selection to start of display line. || Alt + Shift + Home&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Go to end of document. || Ctrl + End&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Extend selection to end of document. || Ctrl + Shift + End&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Go to end of display line. || Alt + End&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Extend selection to end of display line. || Alt + Shift + End&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Expand or contract a fold point. || Ctrl + Keypad &amp;quot;*&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Create or delete a bookmark. || Ctrl + F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Go to next bookmark. || F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Select to next bookmark. || Alt + F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find selection. || Ctrl + F3&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find selection backwards. || Ctrl + Shift + F3&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Scroll up. || Ctrl + Up&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Scroll down. || Ctrl + Down&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Line cut. || Ctrl + L&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Line copy. || Ctrl + Shift + T&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Line delete. || Ctrl + Shift + L&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Line transpose with previous. || Ctrl + T&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Line duplicate. || Ctrl + D&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find matching preprocessor conditional, skipping nested ones. || Ctrl + K&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Select to matching preprocessor conditional. || Ctrl + Shift + K&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find matching preprocessor conditional backwards, skipping nested ones. || Ctrl + J&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Select to matching preprocessor conditional backwards. || Ctrl + Shift + J&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Previous paragraph. Shift extends selection. || Ctrl + [&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Next paragraph. Shift extends selection. || Ctrl + ]&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Previous word. Shift extends selection. || Ctrl + Left&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Next word. Shift extends selection. || Ctrl + Right&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Previous word part. Shift extends selection. || Ctrl + /&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Next word part. Shift extends selection. || Ctrl + \&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| New file or project || Ctrl + N&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Open existing file or project || Ctrl + O&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Save current file || Ctrl + S&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Save all files || Ctrl + Shift + S&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Close current file || Ctrl + F4 / Ctrl + W&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Close all files || Ctrl + Shift + F4 / Ctrl + Shift + W&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a list of shortcuts provided by the Code::Blocks' tab component. These shortcuts cannot be rebound.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Activate next open file || Ctrl + Tab&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Activate previous open file || Ctrl + Shift + Tab&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== View ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Show / hide Messages pane || F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Show / hide Management pane || Shift + F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Move project up (in Project tree) || Ctrl + Shift + Up&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Move project down (in Project tree) || Ctrl + Shift + Down&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Activate prior (in Project tree) || Alt + F5&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Activate next (in Project tree) || Alt + F6&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Zoom in / out || Ctrl + Roll Mouse Wheel&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Focus editor || CTRL + Alt + E&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find || Ctrl + F&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find next || F3&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find previous || Shift + F3&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Find in files || Crtl + Shift + F&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Replace || Ctrl + R&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Replace in files || Ctrl + Shift + R&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Goto line || Ctrl + G&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Goto file || Alt + G&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Goto function || Ctrl + Alt + G&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Build || Ctrl + F9&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Compile current file || Ctrl + Shift + F9&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Run || Ctrl + F10&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Build and Run || F9&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Rebuild || Ctrl + F11&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;border: 1px solid gray; border-collapse: collapse;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;background: #ececec; border: 1px solid gray&amp;quot;&lt;br /&gt;
!Function &lt;br /&gt;
!Shortcut Key&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Debug || F8&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Continue debugging || Ctrl + F7&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Step over a code block || F7&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Step into a code block || Shift + F7&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Step out of a code block || Ctrl + Shift + F7&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Toggle breakpoint || F5&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Run to cursor || F4&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Previous error || Alt + F1&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Next error || Alt + F2&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Category:Roadmaps&amp;diff=4128</id>
		<title>Category:Roadmaps</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Category:Roadmaps&amp;diff=4128"/>
		<updated>2006-11-11T17:15:10Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;: ''Main article: [[Roadmap]]''&lt;br /&gt;
&lt;br /&gt;
The articles in this category deal with roadmaps to future versions of Code::Blocks.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Roadmap_for_version_1.5&amp;diff=4127</id>
		<title>Roadmap for version 1.5</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Roadmap_for_version_1.5&amp;diff=4127"/>
		<updated>2006-11-11T17:12:45Z</updated>

		<summary type="html">&lt;p&gt;Artojon: change category to &amp;quot;Roadmaps&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roadmaps]]&lt;br /&gt;
''January 2007''&lt;br /&gt;
*Action-based user interface&lt;br /&gt;
*Fully automatic detection of document encoding&lt;br /&gt;
*Clean rewrite of code parser&lt;br /&gt;
*Code Refactoring functionality&lt;br /&gt;
*Mac OS X support&lt;br /&gt;
*Eclipse / KDevelop / Anjuta import&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Roadmap_for_version_1.0&amp;diff=4126</id>
		<title>Roadmap for version 1.0</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Roadmap_for_version_1.0&amp;diff=4126"/>
		<updated>2006-11-11T17:12:15Z</updated>

		<summary type="html">&lt;p&gt;Artojon: change category to &amp;quot;Roadmaps&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Roadmaps]]&lt;br /&gt;
==Version 1.0 (Pheidippides)==&lt;br /&gt;
''August 2006''&lt;br /&gt;
&lt;br /&gt;
==Version 1.0 RC final (Athenades)==&lt;br /&gt;
''Mid-July 2006''&lt;br /&gt;
*No feature additions.&lt;br /&gt;
*Regression and bug handling only.&lt;br /&gt;
&lt;br /&gt;
==Version 1.0 RC 3 (Ephialtes)==&lt;br /&gt;
''Around end of June 2006''&lt;br /&gt;
*[[Image:Chk.png]]Unicode support&lt;br /&gt;
**[[Image:Chk.png]]User interface&lt;br /&gt;
**[[Image:Chk.png]]Configuration system&lt;br /&gt;
**[[Image:Chk.png]]Editor component&lt;br /&gt;
**[[Image:Nop.png]]Fully automatic detection of document encoding&lt;br /&gt;
*[[Image:Blk.png]]&amp;lt;s&amp;gt;Scripting support (Angelscript)&amp;lt;/s&amp;gt;  &amp;lt;i&amp;gt;(abandoned due to lack of 64bit support)&amp;lt;/i&amp;gt;&lt;br /&gt;
*[[Image:Chk.png]]Scripting support (Squirrel/Sq plus)&lt;br /&gt;
**[[Image:Chk.png]]Watch scripts (see [[Debugger scripts]])&lt;br /&gt;
**[[Image:Chk.png]]Build target scripts&lt;br /&gt;
*[[Image:Chk.png]]Virtual folder support&lt;br /&gt;
*[[Image:Chk.png]]Global user variables&lt;br /&gt;
**[[Image:Chk.png]]Profile-dependent GUVs&lt;br /&gt;
**[[Image:Chk.png]]Multiple variable sets&lt;br /&gt;
**[[Image:Chk.png]]Custom variable definition&lt;br /&gt;
*[[Image:Chk.png]]wxFlatNoteBook editors&lt;br /&gt;
*[[Image:Chk.png]]wxAUI docking library&lt;br /&gt;
*[[Image:Chk.png]]Context-sensitive layout switching&lt;br /&gt;
*[[Image:Chk.png]]XML-based configuration system&lt;br /&gt;
*[[Image:Blk.png]]XML-based compiler framework&lt;br /&gt;
*[[Image:Blk.png]]Property-based build system&lt;br /&gt;
*[[Image:Chk.png]]Improved configuration user interface&lt;br /&gt;
*[[Image:Blk.png]]Automatic updates&lt;br /&gt;
*[[Image:Blk.png]]Usability and stability fixes for code completion plugin &lt;br /&gt;
*[[Image:Blk.png]]Regression and bug handling.&lt;br /&gt;
&lt;br /&gt;
==Version 1.0 RC 2 (Leonidas)==&lt;br /&gt;
''25 October 2005''&lt;br /&gt;
*Precompiled headers (PCH) support! (currently works only with GCC) &lt;br /&gt;
*The source is now fully UNICODE-compatible! &lt;br /&gt;
*The source is also fully 64-bit compatible! &lt;br /&gt;
*Autoconf/automake build system is now used for non-windows platforms&lt;br /&gt;
* New editor functionality&lt;br /&gt;
**Find declaration&lt;br /&gt;
**Open #include&lt;br /&gt;
*Project wizard plugins&lt;br /&gt;
*Support for SDCC&lt;br /&gt;
*Better handling of modified files outside the IDE&lt;br /&gt;
*Single file compilation&lt;br /&gt;
*Find-in-Files for arbitrary paths/filemasks&lt;br /&gt;
*All internal file formats are well-formed, valid XML&lt;br /&gt;
*New plugins:&lt;br /&gt;
**Code statistics: counts nr. of source lines, nr. of comment lines, etc. &lt;br /&gt;
**CBProfiler: parses and displays the output of GProf, the GNU Profiler&lt;br /&gt;
**SourceExporter: exports the active file to HTML/RTF/ODT&lt;br /&gt;
*New lexers: &lt;br /&gt;
**Fortran77 &lt;br /&gt;
**NVidia CG&lt;br /&gt;
**X-Base languages (Clipper, Foxpro) &lt;br /&gt;
*New and improved project templates: &lt;br /&gt;
**SDCC program &lt;br /&gt;
**Irrlicht 3D Graphics Engine &lt;br /&gt;
**Ogre 3D Graphics Engine &lt;br /&gt;
**GLFW project (OpenGL FrameWork) &lt;br /&gt;
**wxWidgets: static/dynamic unicode/ansi versions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Version 1.0 RC 1-1 (Oedipus)==&lt;br /&gt;
''2 August 2005''&lt;br /&gt;
*Several critical bug fixes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Version 1.0 RC 1 (Laius)==&lt;br /&gt;
''25 July 2005''&lt;br /&gt;
*Compiler support for OpenWatcom &lt;br /&gt;
*Per-target environment variables&lt;br /&gt;
*Convenient &amp;quot;Start here&amp;quot; page&lt;br /&gt;
*Improved gcc error parsing&lt;br /&gt;
*Find in files functionality&lt;br /&gt;
*Ability to add files to project recursively. &lt;br /&gt;
*External dependency handling&lt;br /&gt;
*Better import of foreign project files&lt;br /&gt;
*Many GDB debugger updates&lt;br /&gt;
*Numerous user interface improvements&lt;br /&gt;
*New project templates&lt;br /&gt;
**QT4. &lt;br /&gt;
**Ogre3D. &lt;br /&gt;
* Modular Syntax highlighting&lt;br /&gt;
* Syntax highlighting support for:&lt;br /&gt;
**C/C++ &lt;br /&gt;
**Windows resources &lt;br /&gt;
**HTML/XML/XSL&lt;br /&gt;
**Lua scripts &lt;br /&gt;
**GameMonkey scripts &lt;br /&gt;
**Hitach H8 ASM&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Roadmap&amp;diff=4125</id>
		<title>Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Roadmap&amp;diff=4125"/>
		<updated>2006-11-11T17:11:53Z</updated>

		<summary type="html">&lt;p&gt;Artojon: added category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Documentation]]&lt;br /&gt;
[[Category:Roadmaps]]&lt;br /&gt;
====[[Roadmap for version 1.0]]====&lt;br /&gt;
&lt;br /&gt;
====[[Roadmap for version 1.5]]====&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4124</id>
		<title>Off-site documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4124"/>
		<updated>2006-11-11T17:07:45Z</updated>

		<summary type="html">&lt;p&gt;Artojon: added category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Documentation]]&lt;br /&gt;
This page is for links to '''off-site documentation''' i.e. information that has not yet been (or cannot be) added to the Wiki but exists in the Web.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* French programming site, [http://loulou.developpez.com Developpez.com], has a  [http://loulou.developpez.com/tutoriels/cpp/codeblocks/ tutorial about using Code::Blocks] (French only, [http://translate.google.com/translate?u=http%3A%2F%2Floulou.developpez.com%2Ftutoriels%2Fcpp%2Fcodeblocks%2F&amp;amp;langpair=fr%7Cen&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;prev=%2Flanguage_tools English translation] by Google Translate).&lt;br /&gt;
&lt;br /&gt;
* [http://www.sci.brooklyn.cuny.edu/~goetz/codeblocks/ Instruction manual for Code::Blocks] by the Dept. of Computer and Information Science of Brooklyn College of CUNY.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4123</id>
		<title>Off-site documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4123"/>
		<updated>2006-11-11T17:06:56Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for links to '''off-site documentation''' i.e. information that has not yet been (or cannot be) added to the Wiki but exists in the Web.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* French programming site, [http://loulou.developpez.com Developpez.com], has a  [http://loulou.developpez.com/tutoriels/cpp/codeblocks/ tutorial about using Code::Blocks] (French only, [http://translate.google.com/translate?u=http%3A%2F%2Floulou.developpez.com%2Ftutoriels%2Fcpp%2Fcodeblocks%2F&amp;amp;langpair=fr%7Cen&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;prev=%2Flanguage_tools English translation] by Google Translate).&lt;br /&gt;
&lt;br /&gt;
* [http://www.sci.brooklyn.cuny.edu/~goetz/codeblocks/ Instruction manual for Code::Blocks] by the Dept. of Computer and Information Science of Brooklyn College of CUNY.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4122</id>
		<title>Off-site documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Off-site_documentation&amp;diff=4122"/>
		<updated>2006-11-11T17:06:24Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for links to '''off-site documentation''' i.e. information that has not yet been added to the Wiki but exists in the Web.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
* French programming site, [http://loulou.developpez.com Developpez.com], has a  [http://loulou.developpez.com/tutoriels/cpp/codeblocks/ tutorial about using Code::Blocks] (French only, [http://translate.google.com/translate?u=http%3A%2F%2Floulou.developpez.com%2Ftutoriels%2Fcpp%2Fcodeblocks%2F&amp;amp;langpair=fr%7Cen&amp;amp;hl=en&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&amp;amp;prev=%2Flanguage_tools English translation] by Google Translate).&lt;br /&gt;
&lt;br /&gt;
* [http://www.sci.brooklyn.cuny.edu/~goetz/codeblocks/ Instruction manual for Code::Blocks] by the Dept. of Computer and Information Science of Brooklyn College of CUNY.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Code::Blocks_Documentation&amp;diff=4121</id>
		<title>Code::Blocks Documentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Code::Blocks_Documentation&amp;diff=4121"/>
		<updated>2006-11-11T16:56:22Z</updated>

		<summary type="html">&lt;p&gt;Artojon: off-site documentation is now a link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
[[Category:Code::Blocks Documentation]]&lt;br /&gt;
==== [[User documentation]] ====&lt;br /&gt;
:Articles for Code::Blocks' users.&lt;br /&gt;
&lt;br /&gt;
==== [[Developer documentation]] ====&lt;br /&gt;
:Articles for Code::Blocks' developers.&lt;br /&gt;
&lt;br /&gt;
==== [[FAQ]]====&lt;br /&gt;
:Frequently Asked Questions&lt;br /&gt;
&lt;br /&gt;
==== [[Off-site documentation]] ====&lt;br /&gt;
:Links to external documentation&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Template:Infobox_Plugin&amp;diff=4120</id>
		<title>Template:Infobox Plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Template:Infobox_Plugin&amp;diff=4120"/>
		<updated>2006-11-11T15:10:10Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; margin: 0px 10px 10px 10px;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;font-size: medium; padding: 0; margin: 0;&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;''' {{{name}}} '''&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: #f7f7f7; border: 1px solid #eaeaea; padding: 5px 10px 5px 10px;  font-size: 90%&amp;quot;&amp;gt;&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;{{{logo}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;background-color: #f7f7f7;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Developer(s):''' || {{{developer}}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Maintainer(s):''' || {{{maintainer}}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| '''Version:''' || {{{version}}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=WxSmith_plugin&amp;diff=4119</id>
		<title>WxSmith plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=WxSmith_plugin&amp;diff=4119"/>
		<updated>2006-11-11T15:05:44Z</updated>

		<summary type="html">&lt;p&gt;Artojon: use the new infobox, screenshot removed for now (too large)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = wxSmith |&lt;br /&gt;
  logo = [[Image:Wxsmith.png]] |&lt;br /&gt;
  developer = byo, cyberkoa |&lt;br /&gt;
  maintainer = byo, cyberkoa |&lt;br /&gt;
  version = 1.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''wxSmith''' is a Code::Blocks plugin for RAD editing of wxWidgets applications.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=File:Wxsmith.png&amp;diff=4118</id>
		<title>File:Wxsmith.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=File:Wxsmith.png&amp;diff=4118"/>
		<updated>2006-11-11T15:01:51Z</updated>

		<summary type="html">&lt;p&gt;Artojon: Add wxSmith logo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add wxSmith logo&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4117</id>
		<title>Code Snippets plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4117"/>
		<updated>2006-11-11T14:52:04Z</updated>

		<summary type="html">&lt;p&gt;Artojon: use generic plugin image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Code snippets |&lt;br /&gt;
  logo = [[Image:Generic-plugin.png]] |&lt;br /&gt;
  developer = [[User:Artojon|Arto Jonsson]] |&lt;br /&gt;
  maintainer = Arto Jonsson |&lt;br /&gt;
  version = 0.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Code snippets''' plugin is a simple snippets management plugin for Code::Blocks. It integrates with the interface by creating a floating docking window which shows all the snippets. Snippets can be assigned to categories or they can be in the global category called ''All snippets''.&lt;br /&gt;
&lt;br /&gt;
== Snippet management ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a new snippet ===&lt;br /&gt;
&lt;br /&gt;
To create a snippet you must first write the code. The plugin does not use any dialogs (currently no message boxes either) so you have to write the code in the editor. Select your code and and drag it to a category, either in the ''All snippets'' or in other category you may have created.&lt;br /&gt;
&lt;br /&gt;
You might noticed that the code you wrote is gone, this is how the drag and drop works; you move by default. If you want to copy the code and then create a new snippet, hold '''Ctrl''' and then drag it.&lt;br /&gt;
&lt;br /&gt;
To assign a piece of code to a existing snippet you simply drag and drop the code to that snippet.&lt;br /&gt;
&lt;br /&gt;
=== Applying a snippet ===&lt;br /&gt;
&lt;br /&gt;
To apply a snippet, double click it and it will be applied to the currently active editor. You can alternatively right click on the snippet and select ''Apply''.&lt;br /&gt;
&lt;br /&gt;
=== Creating a new category ===&lt;br /&gt;
&lt;br /&gt;
Snippets can be added to categories. Each snippet can be at one category at a time. The number of categories and sub-categories is not limited however.&lt;br /&gt;
&lt;br /&gt;
Each user created category has a parent category, the categories created in root have the ''All snippets'' category as parent. So if you want to create a category to the root, right click ''All snippets'' and select ''Add subcategory''.&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
&lt;br /&gt;
Snippets can be searched by typing words to the text edit control at the top of the docking window. Searching is performed by find-as-you-type method so you don't have to press any search buttons or Enter key. Searching by default includes categories.&lt;br /&gt;
&lt;br /&gt;
Searching at the current state can be considered unoptimized. I haven't tested it yet with hundreds of items but I'm pretty sure it's slow. The search could by optimized by saving the search state when the firs item is found and then later use it as the starting point if the user wants to specify more specific search terms.&lt;br /&gt;
&lt;br /&gt;
Searching is case-sensitive so &amp;quot;C++&amp;quot; and &amp;quot;c++&amp;quot; are seen as different search terms.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
Code snippets plugin uses XML (UTF-8 encoded) file to save all code snippets.&lt;br /&gt;
&lt;br /&gt;
The XML file starts with root item, snippets, which holds all the categories and code snippets. Code snippets and categories use the same element called item. The item's attributes tell what type of item it is, category or code snippet.&lt;br /&gt;
&lt;br /&gt;
=== Elements ===&lt;br /&gt;
&lt;br /&gt;
'''snippets'''&lt;br /&gt;
* Attributes: None&lt;br /&gt;
* Sub-elements: All snippets and categories&lt;br /&gt;
&lt;br /&gt;
'''item'''&lt;br /&gt;
* Attributes:&lt;br /&gt;
** name -- Name of the element&lt;br /&gt;
** type -- Type of the element, either ''snippet'' or ''category''&lt;br /&gt;
* Sub-elements:&lt;br /&gt;
** snippet -- The actual code snippet (only if the item's type is ''snippet'')&lt;br /&gt;
** Sub-items and categories (only if the item's type is ''category'')&lt;br /&gt;
&lt;br /&gt;
=== Example file ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test category&amp;quot; type=&amp;quot;category&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;item name=&amp;quot;Test item 1&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;snippet&amp;gt;// Test 1&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 		&amp;lt;/item&amp;gt;	&lt;br /&gt;
 	&amp;lt;/item&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test item 2&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;snippet&amp;gt;// Test 2&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;/snippets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file would create the following structure:&lt;br /&gt;
&lt;br /&gt;
 All snippets&lt;br /&gt;
 |&lt;br /&gt;
 |- Test category&lt;br /&gt;
 |  |&lt;br /&gt;
 |  |- Test item 1&lt;br /&gt;
 |&lt;br /&gt;
 |- Test item 2&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Environment_Variables_plugin&amp;diff=4116</id>
		<title>Environment Variables plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Environment_Variables_plugin&amp;diff=4116"/>
		<updated>2006-11-11T14:51:21Z</updated>

		<summary type="html">&lt;p&gt;Artojon: use the new infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Environment Variables Editor |&lt;br /&gt;
  logo = [[Image:Generic-plugin.png]] |&lt;br /&gt;
  developer = [[User:MortenMacFly|MortenMacFly]] |&lt;br /&gt;
  maintainer = MortenMacFly |&lt;br /&gt;
  version = 0.92&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Environment variables editor''' plugin allows setting environment variables in the focus of Code::Blocks.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=File:Generic-plugin.png&amp;diff=4115</id>
		<title>File:Generic-plugin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=File:Generic-plugin.png&amp;diff=4115"/>
		<updated>2006-11-11T14:50:27Z</updated>

		<summary type="html">&lt;p&gt;Artojon: Add generic plugin logo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add generic plugin logo&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=DragScroll_plugin&amp;diff=4114</id>
		<title>DragScroll plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=DragScroll_plugin&amp;diff=4114"/>
		<updated>2006-11-11T14:34:19Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Mouse Drag Scrolling |&lt;br /&gt;
  logo = [[Image:Dragscroll.png]] |&lt;br /&gt;
  developer = [[User:Pecan|Pecan]] |&lt;br /&gt;
  maintainer = Pecan |&lt;br /&gt;
  version = 0.28&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''DragScroll''' (or '''Mouse Drag Scrolling''') plugin enables scrolling of text areas such as the editor and the application / debug log with mouse.&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=File:Dragscroll.png&amp;diff=4113</id>
		<title>File:Dragscroll.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=File:Dragscroll.png&amp;diff=4113"/>
		<updated>2006-11-11T14:33:04Z</updated>

		<summary type="html">&lt;p&gt;Artojon: Add DragScroll logo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add DragScroll logo&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
	<entry>
		<id>https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4112</id>
		<title>Code Snippets plugin</title>
		<link rel="alternate" type="text/html" href="https://wiki.codeblocks.org/index.php?title=Code_Snippets_plugin&amp;diff=4112"/>
		<updated>2006-11-11T14:22:30Z</updated>

		<summary type="html">&lt;p&gt;Artojon: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Code::Blocks Contrib Plugins]]&lt;br /&gt;
{{Infobox_Plugin|&lt;br /&gt;
  name = Code snippets |&lt;br /&gt;
  logo = |&lt;br /&gt;
  developer = [[User:Artojon|Arto Jonsson]] |&lt;br /&gt;
  maintainer = Arto Jonsson |&lt;br /&gt;
  version = 0.1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Code snippets''' plugin is a simple snippets management plugin for Code::Blocks. It integrates with the interface by creating a floating docking window which shows all the snippets. Snippets can be assigned to categories or they can be in the global category called ''All snippets''.&lt;br /&gt;
&lt;br /&gt;
== Snippet management ==&lt;br /&gt;
&lt;br /&gt;
=== Creating a new snippet ===&lt;br /&gt;
&lt;br /&gt;
To create a snippet you must first write the code. The plugin does not use any dialogs (currently no message boxes either) so you have to write the code in the editor. Select your code and and drag it to a category, either in the ''All snippets'' or in other category you may have created.&lt;br /&gt;
&lt;br /&gt;
You might noticed that the code you wrote is gone, this is how the drag and drop works; you move by default. If you want to copy the code and then create a new snippet, hold '''Ctrl''' and then drag it.&lt;br /&gt;
&lt;br /&gt;
To assign a piece of code to a existing snippet you simply drag and drop the code to that snippet.&lt;br /&gt;
&lt;br /&gt;
=== Applying a snippet ===&lt;br /&gt;
&lt;br /&gt;
To apply a snippet, double click it and it will be applied to the currently active editor. You can alternatively right click on the snippet and select ''Apply''.&lt;br /&gt;
&lt;br /&gt;
=== Creating a new category ===&lt;br /&gt;
&lt;br /&gt;
Snippets can be added to categories. Each snippet can be at one category at a time. The number of categories and sub-categories is not limited however.&lt;br /&gt;
&lt;br /&gt;
Each user created category has a parent category, the categories created in root have the ''All snippets'' category as parent. So if you want to create a category to the root, right click ''All snippets'' and select ''Add subcategory''.&lt;br /&gt;
&lt;br /&gt;
== Searching ==&lt;br /&gt;
&lt;br /&gt;
Snippets can be searched by typing words to the text edit control at the top of the docking window. Searching is performed by find-as-you-type method so you don't have to press any search buttons or Enter key. Searching by default includes categories.&lt;br /&gt;
&lt;br /&gt;
Searching at the current state can be considered unoptimized. I haven't tested it yet with hundreds of items but I'm pretty sure it's slow. The search could by optimized by saving the search state when the firs item is found and then later use it as the starting point if the user wants to specify more specific search terms.&lt;br /&gt;
&lt;br /&gt;
Searching is case-sensitive so &amp;quot;C++&amp;quot; and &amp;quot;c++&amp;quot; are seen as different search terms.&lt;br /&gt;
&lt;br /&gt;
== File format ==&lt;br /&gt;
&lt;br /&gt;
Code snippets plugin uses XML (UTF-8 encoded) file to save all code snippets.&lt;br /&gt;
&lt;br /&gt;
The XML file starts with root item, snippets, which holds all the categories and code snippets. Code snippets and categories use the same element called item. The item's attributes tell what type of item it is, category or code snippet.&lt;br /&gt;
&lt;br /&gt;
=== Elements ===&lt;br /&gt;
&lt;br /&gt;
'''snippets'''&lt;br /&gt;
* Attributes: None&lt;br /&gt;
* Sub-elements: All snippets and categories&lt;br /&gt;
&lt;br /&gt;
'''item'''&lt;br /&gt;
* Attributes:&lt;br /&gt;
** name -- Name of the element&lt;br /&gt;
** type -- Type of the element, either ''snippet'' or ''category''&lt;br /&gt;
* Sub-elements:&lt;br /&gt;
** snippet -- The actual code snippet (only if the item's type is ''snippet'')&lt;br /&gt;
** Sub-items and categories (only if the item's type is ''category'')&lt;br /&gt;
&lt;br /&gt;
=== Example file ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot; ?&amp;gt;&lt;br /&gt;
 &amp;lt;snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test category&amp;quot; type=&amp;quot;category&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;item name=&amp;quot;Test item 1&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 			&amp;lt;snippet&amp;gt;// Test 1&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 		&amp;lt;/item&amp;gt;	&lt;br /&gt;
 	&amp;lt;/item&amp;gt;&lt;br /&gt;
 	&amp;lt;item name=&amp;quot;Test item 2&amp;quot; type=&amp;quot;snippet&amp;quot; /&amp;gt;&lt;br /&gt;
 		&amp;lt;snippet&amp;gt;// Test 2&amp;lt;/snippets&amp;gt;&lt;br /&gt;
 	&amp;lt;item&amp;gt;&lt;br /&gt;
 &amp;lt;/snippets&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The file would create the following structure:&lt;br /&gt;
&lt;br /&gt;
 All snippets&lt;br /&gt;
 |&lt;br /&gt;
 |- Test category&lt;br /&gt;
 |  |&lt;br /&gt;
 |  |- Test item 1&lt;br /&gt;
 |&lt;br /&gt;
 |- Test item 2&lt;/div&gt;</summary>
		<author><name>Artojon</name></author>
	</entry>
</feed>