{\rtf1\ansi\ansicpg1252\uc1\deff37\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe1031{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
{\f37\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Thorndale{\*\falt Times New Roman};}{\f38\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Albany{\*\falt Arial};}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
{\f40\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Cumberland{\*\falt Courier New};}{\f41\fnil\fcharset2\fprq0{\*\panose 00000000000000000000}StarSymbol{\*\falt Arial Unicode MS};}{\f139\froman\fcharset238\fprq2 Times New Roman CE;}
{\f140\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f142\froman\fcharset161\fprq2 Times New Roman Greek;}{\f143\froman\fcharset162\fprq2 Times New Roman Tur;}{\f144\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f145\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f146\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f147\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f149\fswiss\fcharset238\fprq2 Arial CE;}
{\f156\fswiss\fcharset186\fprq2 Arial Baltic;}{\f157\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f159\fmodern\fcharset238\fprq1 Courier New CE;}{\f160\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f162\fmodern\fcharset161\fprq1 Courier New Greek;}
{\f163\fmodern\fcharset162\fprq1 Courier New Tur;}{\f164\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f165\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f166\fmodern\fcharset186\fprq1 Courier New Baltic;}
{\f40\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Cumberland{\*\falt Courier New};}{\f41\fnil\fcharset2\fprq0{\*\panose 00000000000000000000}StarSymbol{\*\falt Arial Unicode MS};}{\f138\froman\fcharset238\fprq2 Times New Roman CE;}
{\f139\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f141\froman\fcharset161\fprq2 Times New Roman Greek;}{\f142\froman\fcharset162\fprq2 Times New Roman Tur;}{\f143\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f144\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f145\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f146\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f148\fswiss\fcharset238\fprq2 Arial CE;}
{\f155\fswiss\fcharset186\fprq2 Arial Baltic;}{\f156\fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f158\fmodern\fcharset238\fprq1 Courier New CE;}{\f159\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f161\fmodern\fcharset161\fprq1 Courier New Greek;}
{\f162\fmodern\fcharset162\fprq1 Courier New Tur;}{\f163\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f164\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f165\fmodern\fcharset186\fprq1 Courier New Baltic;}
\rsid9855141\rsid14162400\rsid15608638\rsid16393729}{\*\generator Microsoft Word 11.0.6502;}{\info{\author Christoph Wille}{\operator mich}{\creatim\yr2002\mo2\dy22\hr20\min46}{\revtim\yr2005\mo11\dy26\hr14\min35}{\printim\yr2113\mo1\dy1}{\version6}
\rsid7873711\rsid9005571\rsid9334114\rsid9855141\rsid14162400\rsid15608638\rsid15736429\rsid16393729}{\*\generator Microsoft Word 11.0.6502;}{\info{\author Christoph Wille}{\operator mich}{\creatim\yr2002\mo2\dy22\hr20\min46}
\cs56\ul\cf2\lang1024\langfe1024\noproof\insrsid9855141\charrsid14162400 1 About the AddIn System Documentation}{\lang1024\langfe1024\noproof\webhidden\insrsid9855141 \tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\webhidden\insrsid9855141
\cs56\ul\cf2\lang1024\langfe1024\noproof\insrsid9855141\charrsid14162400 2.4 Building Items in the AddIn Tree}{\lang1024\langfe1024\noproof\webhidden\insrsid9855141 \tab }{\field{\*\fldinst {\lang1024\langfe1024\noproof\webhidden\insrsid9855141
\cs56\ul\cf2\lang1024\langfe1024\noproof\insrsid9855141\charrsid14162400 4. List of available Doozers and ConditionEvaluators}{\lang1024\langfe1024\noproof\webhidden\insrsid9855141 \tab }{\field{\*\fldinst {
\par }\pard\plain \s1\ql \li0\ri0\sb240\sa120\keepn\nowidctlpar\aspalpha\faauto\outlinelevel0\rin0\lin0\itap0 \b\f38\fs32\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 {\*\bkmkstart _Toc120778769}1 About the AddIn System Documentation
{\*\bkmkend _Toc120778769}
\par }\pard\plain \s15\qj \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 This document desc
ribes the AddIn system used by SharpDevelop. If you plan to write AddIns for SharpDevelop, you should read the \'93AddInBuildingGuide\'94 to learn how you should structure your project.
\par }\pard\plain \s15\qj \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 This document describes the AddIn system used by SharpDevelop. If you
plan to write AddIns for SharpDevelop, you should read the \'93AddInBuildingGuide\'94 to learn how you should structure your project.
\par }\pard \s15\ql \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 This document describes both the AddIn system in general (ICSharpCode.Core) and common extensions points for SharpDevelop.
@ -127,20 +127,20 @@ Compiled AddIns consist of two (or more) files: the AddIn xml definition, the ad
@@ -127,20 +127,20 @@ Compiled AddIns consist of two (or more) files: the AddIn xml definition, the ad
\par }\pard\plain \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 Every }{\b\insrsid9334114 node}{\insrsid9334114 in the AddIn-tree has a }{\b\insrsid9334114 Codon}{
\insrsid9334114 . The in ICSharpCode.Core implementation, the AddInTreeNode class has a Codon property which is null for paths and points to a Codon instance for nodes.
\insrsid9334114 . }{\insrsid7873711 In the }{\insrsid9334114 ICSharpCode.Core implementation, the AddInTreeNode class has a Codon property which is null for paths and points to a Codon instance for nodes.
\par }\pard \ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 Let's look at the XML way of defining a node with codon:
\par }{\f2\fs20\insrsid9334114 <MenuItem id = "Build"
\par }{\fs20\loch\af2\insrsid9334114 \hich\af37\dbch\af0\loch\f2 class = "ICSharpCode.SharpDevelop.Project.Commands.Build"/>}{\insrsid9334114
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 When the AddIn tree is loaded, an instance of the }{\b\insrsid9334114 Codon }{\insrsid9334114 class is created. It's name property is set to \'93MenuItem\'94
, it's ID property to \'93Build\'94. The other attributes are put into a \'93Properties\'94 container (works like a Hashtable).
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 When the AddIn tree is loaded, an instance of the }{\b\insrsid9334114 Codon }{\insrsid9334114 class is created. Its name property is set to \'93MenuItem\'94, its
ID property to \'93Build\'94. The other attributes are put into a \'93Properties\'94 container (works like a Hashtable).
\par }\pard \ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The codon contains the information about the menu item: label, shortcut, icon and the fully qualified name of the class being run when the item is clicked.
\par
\par The important thing about the AddIn tree is that it is constructed by combining the AddIn definitions from all AddIns. For example, the StartPage.addin file from the start page AddIn contains this:
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\f2\fs20\insrsid9334114 <Path name = "/SharpDevelop/Workbench/MainMenu/View">
@ -148,8 +148,8 @@ Compiled AddIns consist of two (or more) files: the AddIn xml definition, the ad
@@ -148,8 +148,8 @@ Compiled AddIns consist of two (or more) files: the AddIn xml definition, the ad
\par }{\f2\fs20\insrsid9334114 \tab class = "ICSharpCode.StartPage.ShowStartPageCommand"/>
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The path }{\f2\fs20\insrsid9334114 "/SharpDevelop/Workbench/MainMenu/View"}{\insrsid9334114
is defined in both the main AddIn file in SharpDevelop and in the StartPage's AddIn file. When loading the files, ICSharpCode.Core mer
ges the contents of the paths into the AddIn tree. The attributes insertafter and insertbefore are special, they control at what positions the items are inserted by specifying the IDs of the previous and next item.
is defined in both the main AddIn file in SharpDevelop and in the StartPage's AddIn file. When loading the files, ICSharpCode.Core merges the contents o
f the paths into the AddIn tree. The attributes insertafter and insertbefore are special, they control at what positions the items are inserted by specifying the IDs of the previous and next item.
\par }\pard\plain \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 Each AddIn definition file has one instance of the }{\b\insrsid9334114 AddIn}{\insrsid9334114
class. That class contains the information found in the header and runtime section of the AddIn definition file. Each }{\b\insrsid9334114 Codon}{\insrsid9334114 class created for nodes in that file also hold a reference to that AddIn class.
@ -160,14 +160,16 @@ ges the contents of the paths into the AddIn tree. The attributes insertafter an
@@ -160,14 +160,16 @@ ges the contents of the paths into the AddIn tree. The attributes insertafter an
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The import elements are stored in the RunTimes property of the AddIn class. The AddIn class has also a method \'93CreateObject\'94. CreateObje
ct is used when the class of a menu item should be created. Normally, CreateObject is called for menu items }{\b\insrsid9334114 when the item is clicked the first time}{\insrsid9334114
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The import elements are stored in the RunTimes property of the AddIn class. The AddIn class has also a method \'93CreateObject\'94. CreateObject is use
d when the class of a menu item should be created. Normally, CreateObject is called for menu items }{\b\insrsid9334114 when the item is clicked the first time}{\insrsid9334114
. CreateObject will go through all imported assemblies and look for the specified class name (in the order the imports are placed in the runtime section).
\par }\pard \ql \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The imported assemblies are loaded when CreateObject needs them the first time. This leads to the result that }{\b\insrsid9334114 AddIns are loaded when they are first used}{
\insrsid9334114 . This is a great improvement for SharpDevelop's startup time.
\par CreateObject looks for the classes only in the assemblies specified. When you want to use a class from SharpDevelop's main assembly (e.g. a common command like Undo etc.), you have to import that assembly, too. It won't be loaded two times when it is
referenced by multiple addins. Since addins can live in any subdirectory, it isn't possible to specify a fixed path back to ICSharpCode.SharpDevelop.dll. There is a special way to reference assemblies in the main directory, though: When the assembly attri
bute starts with a colon (}{\f2\fs20\insrsid9334114 <Import assembly = ":ICSharpCode.SharpDevelop"/>}{\insrsid9334114 ), SharpDevelop will load the assembly using \'93Assembly.Load\'94 instead of the normal \'93Assembly.LoadFrom\'94
\par Crea
teObject looks for the classes only in the assemblies specified. When you want to use a class from SharpDevelop's main assembly (e.g. a common command like Undo etc.), you have to import that assembly, too. It won't be loaded two times when it is referenc
e
d by multiple addins. Since addins can live in any subdirectory, it isn't possible to specify a fixed path back to ICSharpCode.SharpDevelop.dll. There is a special way to reference assemblies in the main directory, though: When the assembly attribute star
ts with a colon (}{\f2\fs20\insrsid9334114 <Import assembly = ":ICSharpCode.SharpDevelop"/>}{\insrsid9334114 ), SharpDevelop will load the assembly using \'93Assembly.Load\'94 instead of the normal \'93Assembly.LoadFrom\'94
. You won't have to specify the path back, but there is another important difference: }{\b\insrsid9334114 You do not use the .dll file extension.}{\insrsid9334114
\par }{\insrsid9334114 The runtime section can also contain doozer and condition evaluator definitions, read the doozer and conditions sections for more information on that.
@ -289,6 +291,6 @@ You will get all classes defined in the path, in the order specified by their in
@@ -289,6 +291,6 @@ You will get all classes defined in the path, in the order specified by their in
\par }\pard\plain \s15\ql \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 TODO: Write this section
4. List of available Doozers and ConditionEvaluators{\*\bkmkend _Toc120778776}
\par }\pard\plain \s15\ql \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 The list}{\insrsid16393729 s are automatically generated from the source code and saved
as ConditionList.html and DoozerList.html in this directory}{\insrsid9334114 .
\par }\pard\plain \s15\ql \li0\ri0\sa120\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 \f37\fs24\cf1\lang1033\langfe255\cgrid\langnp1033\langfenp255 {\insrsid9334114 The list}{\insrsid16393729 s are automatically generat
ed from the source code and saved as ConditionList.html and DoozerList.html in this directory}{\insrsid9334114 .