{\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;}
{\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;}
{\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;}
{\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;}
{\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);}
{\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);}
{\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;}
{\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;}
{\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;}
{\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;}
{\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;}
{\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 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 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 {
\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
\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}
{\*\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
\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
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.
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.
\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.
\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}{
\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 }\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 }{\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 }{\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
\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
, it's ID property to \'93Build\'94. The other attributes are put into a \'93Properties\'94 container (works like a Hashtable).
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 }\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
\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 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">
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\f2\fs20\insrsid9334114 <Path name = "/SharpDevelop/Workbench/MainMenu/View">
\par }\pard \qj \li0\ri0\nowidctlpar\aspalpha\faauto\rin0\lin0\itap0 {\insrsid9334114 The path }{\f2\fs20\insrsid9334114 "/SharpDevelop/Workbench/MainMenu/View"}{\insrsid9334114
\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
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
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.
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
\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.
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
\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
\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
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
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).
. 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}{
\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.
\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
\par Crea
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
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
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
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
. 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.
\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
\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
\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}
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
\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
as ConditionList.html and DoozerList.html in this directory}{\insrsid9334114 .
ed from the source code and saved as ConditionList.html and DoozerList.html in this directory}{\insrsid9334114 .