From ccbf37dbbb2ea8405257a8bdfa9304f5ab2eb4da Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Tue, 19 Jun 2007 03:45:45 +0200 Subject: [PATCH 1/4] Start a TiddlyWiki-Page for Explanations and Notes concerning my Design Draft --- wiki/ichthyo-draft.html | 11560 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 11560 insertions(+) create mode 100644 wiki/ichthyo-draft.html diff --git a/wiki/ichthyo-draft.html b/wiki/ichthyo-draft.html new file mode 100644 index 000000000..8e9aa97fc --- /dev/null +++ b/wiki/ichthyo-draft.html @@ -0,0 +1,11560 @@ + + + + + + + + + + + +
My TiddlyWiki is loading ...

Requires Javascript.
+ + Draft - some aspects of Cinelerra-3 design + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
Background: #fff
+Foreground: #000
+PrimaryPale: #8cf
+PrimaryLight: #18f
+PrimaryMid: #04b
+PrimaryDark: #014
+SecondaryPale: #ffc
+SecondaryLight: #fe8
+SecondaryMid: #db4
+SecondaryDark: #841
+TertiaryPale: #eee
+TertiaryLight: #ccc
+TertiaryMid: #999
+TertiaryDark: #666
+Error: #f88
+
+
+
/*{{{*/
+body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
+
+a {color:[[ColorPalette::PrimaryMid]];}
+a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
+a img {border:0;}
+
+h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
+h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
+h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}
+
+.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
+.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
+.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}
+
+.header {background:[[ColorPalette::PrimaryMid]];}
+.headerShadow {color:[[ColorPalette::Foreground]];}
+.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
+.headerForeground {color:[[ColorPalette::Background]];}
+.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}
+
+.tabSelected{color:[[ColorPalette::PrimaryDark]];
+	background:[[ColorPalette::TertiaryPale]];
+	border-left:1px solid [[ColorPalette::TertiaryLight]];
+	border-top:1px solid [[ColorPalette::TertiaryLight]];
+	border-right:1px solid [[ColorPalette::TertiaryLight]];
+}
+.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
+.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
+.tabContents .button {border:0;}
+
+#sidebar {}
+#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
+#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
+#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
+#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
+#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}
+
+.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
+.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
+.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
+.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
+	border:1px solid [[ColorPalette::PrimaryMid]];}
+.wizardStep.wizardStepDone {background::[[ColorPalette::TertiaryLight]];}
+.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
+.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
+.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
+	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
+.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
+.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
+	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}
+
+#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
+#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}
+
+.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}
+
+.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
+.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
+.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
+.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
+.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
+.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
+.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
+.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}
+
+.tiddler .defaultCommand {font-weight:bold;}
+
+.shadow .title {color:[[ColorPalette::TertiaryDark]];}
+
+.title {color:[[ColorPalette::SecondaryDark]];}
+.subtitle {color:[[ColorPalette::TertiaryDark]];}
+
+.toolbar {color:[[ColorPalette::PrimaryMid]];}
+.toolbar a {color:[[ColorPalette::TertiaryLight]];}
+.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
+.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}
+
+.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
+.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
+.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
+.tagging .button, .tagged .button {border:none;}
+
+.footer {color:[[ColorPalette::TertiaryLight]];}
+.selected .footer {color:[[ColorPalette::TertiaryMid]];}
+
+.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
+.sparktick {background:[[ColorPalette::PrimaryDark]];}
+
+.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
+.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
+.lowlight {background:[[ColorPalette::TertiaryLight]];}
+
+.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}
+
+.imageLink, #displayArea .imageLink {background:transparent;}
+
+.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}
+
+.viewer .listTitle {list-style-type:none; margin-left:-2em;}
+.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
+.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}
+
+.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
+.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
+.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}
+
+.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
+.viewer code {color:[[ColorPalette::SecondaryDark]];}
+.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}
+
+.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}
+
+.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
+.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
+.editorFooter {color:[[ColorPalette::TertiaryMid]];}
+
+#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
+#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
+#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
+#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
+#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
+#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
+#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
+.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
+.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
+#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
+/*}}}*/
+
+
+
/*{{{*/
+* html .tiddler {height:1%;}
+
+body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}
+
+h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
+h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
+h4,h5,h6 {margin-top:1em;}
+h1 {font-size:1.35em;}
+h2 {font-size:1.25em;}
+h3 {font-size:1.1em;}
+h4 {font-size:1em;}
+h5 {font-size:.9em;}
+
+hr {height:1px;}
+
+a {text-decoration:none;}
+
+dt {font-weight:bold;}
+
+ol {list-style-type:decimal;}
+ol ol {list-style-type:lower-alpha;}
+ol ol ol {list-style-type:lower-roman;}
+ol ol ol ol {list-style-type:decimal;}
+ol ol ol ol ol {list-style-type:lower-alpha;}
+ol ol ol ol ol ol {list-style-type:lower-roman;}
+ol ol ol ol ol ol ol {list-style-type:decimal;}
+
+.txtOptionInput {width:11em;}
+
+#contentWrapper .chkOptionInput {border:0;}
+
+.externalLink {text-decoration:underline;}
+
+.indent {margin-left:3em;}
+.outdent {margin-left:3em; text-indent:-3em;}
+code.escaped {white-space:nowrap;}
+
+.tiddlyLinkExisting {font-weight:bold;}
+.tiddlyLinkNonExisting {font-style:italic;}
+
+/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
+a.tiddlyLinkNonExisting.shadow {font-weight:bold;}
+
+#mainMenu .tiddlyLinkExisting,
+	#mainMenu .tiddlyLinkNonExisting,
+	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
+#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}
+
+.header {position:relative;}
+.header a:hover {background:transparent;}
+.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
+.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}
+
+.siteTitle {font-size:3em;}
+.siteSubtitle {font-size:1.2em;}
+
+#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}
+
+#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
+#sidebarOptions {padding-top:0.3em;}
+#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
+#sidebarOptions input {margin:0.4em 0.5em;}
+#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
+#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
+#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
+#sidebarTabs .tabContents {width:15em; overflow:hidden;}
+
+.wizard {padding:0.1em 1em 0em 2em;}
+.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
+.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
+.wizardStep {padding:1em 1em 1em 1em;}
+.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
+.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
+.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
+.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}
+
+#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
+.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
+#messageArea a {text-decoration:underline;}
+
+.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
+.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}
+
+.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
+.popup .popupMessage {padding:0.4em;}
+.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
+.popup li.disabled {padding:0.4em;}
+.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
+.listBreak {font-size:1px; line-height:1px;}
+.listBreak div {margin:2px 0;}
+
+.tabset {padding:1em 0em 0em 0.5em;}
+.tab {margin:0em 0em 0em 0.25em; padding:2px;}
+.tabContents {padding:0.5em;}
+.tabContents ul, .tabContents ol {margin:0; padding:0;}
+.txtMainTab .tabContents li {list-style:none;}
+.tabContents li.listLink { margin-left:.75em;}
+
+#contentWrapper {display:block;}
+#splashScreen {display:none;}
+
+#displayArea {margin:1em 17em 0em 14em;}
+
+.toolbar {text-align:right; font-size:.9em;}
+
+.tiddler {padding:1em 1em 0em 1em;}
+
+.missing .viewer,.missing .title {font-style:italic;}
+
+.title {font-size:1.6em; font-weight:bold;}
+
+.missing .subtitle {display:none;}
+.subtitle {font-size:1.1em;}
+
+.tiddler .button {padding:0.2em 0.4em;}
+
+.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
+.isTag .tagging {display:block;}
+.tagged {margin:0.5em; float:right;}
+.tagging, .tagged {font-size:0.9em; padding:0.25em;}
+.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
+.tagClear {clear:both;}
+
+.footer {font-size:.9em;}
+.footer li {display:inline;}
+
+.annotation {padding:0.5em; margin:0.5em;}
+
+* html .viewer pre {width:99%; padding:0 0 1em 0;}
+.viewer {line-height:1.4em; padding-top:0.5em;}
+.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
+.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
+.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}
+
+.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
+.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
+table.listView {font-size:0.85em; margin:0.8em 1.0em;}
+table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}
+
+.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
+.viewer code {font-size:1.2em; line-height:1.4em;}
+
+.editor {font-size:1.1em;}
+.editor input, .editor textarea {display:block; width:100%; font:inherit;}
+.editorFooter {padding:0.25em 0em; font-size:.9em;}
+.editorFooter .button {padding-top:0px; padding-bottom:0px;}
+
+.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}
+
+.sparkline {line-height:1em;}
+.sparktick {outline:0;}
+
+.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
+.zoomer div {padding:1em;}
+
+* html #backstage {width:99%;}
+* html #backstageArea {width:99%;}
+#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
+#backstageToolbar {position:relative;}
+#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
+#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
+#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
+#backstage {position:relative; width:100%; z-index:50;}
+#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
+.backstagePanelFooter {padding-top:0.2em; float:right;}
+.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
+#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}
+
+.whenBackstage {display:none;}
+.backstageVisible .whenBackstage {display:block;}
+/*}}}*/
+
+
+
/***
+StyleSheet for use when a translation requires any css style changes.
+This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and need larger font sizes.
+***/
+
+/*{{{*/
+body {font-size:0.8em;}
+
+#sidebarOptions {font-size:1.05em;}
+#sidebarOptions a {font-style:normal;}
+#sidebarOptions .sliderPanel {font-size:0.95em;}
+
+.subtitle {font-size:0.8em;}
+
+.viewer table.listView {font-size:0.95em;}
+
+.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
+/*}}}*/
+
+
+
/*{{{*/
+@media print {
+#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton {display: none ! important;}
+#displayArea {margin: 1em 1em 0em 1em;}
+/* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
+noscript {display:none;}
+}
+/*}}}*/
+
+
+
<!--{{{-->
+<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
+<div class='headerShadow'>
+<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
+<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
+</div>
+<div class='headerForeground'>
+<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
+<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
+</div>
+</div>
+<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
+<div id='sidebar'>
+<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
+<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
+</div>
+<div id='displayArea'>
+<div id='messageArea'></div>
+<div id='tiddlerDisplay'></div>
+</div>
+<!--}}}-->
+
+
+
<!--{{{-->
+<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
+<div class='title' macro='view title'></div>
+<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
+<div class='tagging' macro='tagging'></div>
+<div class='tagged' macro='tags'></div>
+<div class='viewer' macro='view text wikified'></div>
+<div class='tagClear'></div>
+<!--}}}-->
+
+
+
<!--{{{-->
+<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
+<div class='title' macro='view title'></div>
+<div class='editor' macro='edit title'></div>
+<div macro='annotations'></div>
+<div class='editor' macro='edit text'></div>
+<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
+<!--}}}-->
+
+
+
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
+* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
+* MainMenu: The menu (usually on the left)
+* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
+You'll also need to enter your username for signing your edits: <<option txtUserName>>
+
+
+
These InterfaceOptions for customising TiddlyWiki are saved in your browser
+
+Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)
+
+<<option txtUserName>>
+<<option chkSaveBackups>> SaveBackups
+<<option chkAutoSave>> AutoSave
+<<option chkRegExpSearch>> RegExpSearch
+<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
+<<option chkAnimate>> EnableAnimations
+
+----
+Also see AdvancedOptions
+
+
+ +
+
+
A task has a description, an estimate of how long it will take, and a record of how much time you have spent on it so far.  Here's an example, which shows a task estimated at 3 hours, with 1 hour spent on it, and ''2'' hours remaining:
+<<<
+<<task 3 3 1>> Add a double-click handler to the description cell that opens the editor and selects the text
+<<<
+If you hover the mouse over any part of the task -- the bullet, the description, or any of the numeric cells -- a tip will appear explaining it.
+
+Try modifying the time spent.  Suppose you've just spent one more hour and want to record it.  Just click on the second yellow cell, and enter "+1" (sans the quote marks, of course) in the popup window.  Watch the time remaining go down to 1 hour.
+
+In reality, I originally estimated this task at a half-hour, but it ended up taking 3.5 hours.  The macro also tracks your original estimate, if it is different from the current estimate, in a fourth cell like this:
+<<<
+<<task 0.5 2 1>> Add a double-click handler to the description cell that opens the editor and selects the text
+<<<
+You can adjust the current estimate in the same way as you adjusted the time spent.  Click on the current estimate cell (the first yellow cell), and change it to 2.5 hours by typing "2.5" or "+.5".
+
+You can also adjust the time remaining, which will modify either the estimate (if the time remaining increases) or the time spent (if it decreases).  Click on the time remaining and add an hour by typing "+1".
+
+When the time remaining goes to zero, the task is considered complete:
+<<<
+<<task 0.5 3.5 3.5>> Add a double-click handler to the description cell that opens the editor and selects the text
+<<<
+If you haven't already done so, try double-clicking the description.  Yes, it really does open up the editor and select just the text of the description.
+
+----
+To continue, click the down-arrow and choose another section: <<tag TaskMacroTutorial>>
+
+
+
A task's description is a single wikified line, so it can contain any formatting that can be specified on one line:
+<<<
+<<task 1>> Beef up the time click handlers to allow entry of ''two'' values each: cur&spent, spent&rem. Add click handler to done tasks' spent cells too, to reopen them (like with +0, 1).
+<<task 0.5>> Put tasksum on the ViewTemplate.
+<<<
+You can specify just the description of a task, and leave it unestimated.  Click the question mark to enter the estimate:
+<<<
+<<task>> Beef up the time click handlers to allow entry of ''two'' values each: cur&spent, spent&rem. Add click handler to done tasks' spent cells too, to reopen them (like with +0, 1).
+<<<
+As this task implies, you can enter two values in the popup when you click on any of the time cells.  Separate them with spaces and/or a comma.  Experiment:
+<<<
+<<task 1>> Beef up the time click handlers to allow entry of ''two'' values each: cur&spent, spent&rem. Add click handler to done tasks' spent cells too, to reopen them (like with +0, 1).
+<<<
+Finally, if you haven't already figured this out, you can double-click on a task's bullet to mark it complete, with the current estimate entered as the time spent.
+
+----
+To continue, click the down-arrow and choose another section: <<tag TaskMacroTutorial>>
+
+
+
If you've been paying attention, you've noticed that I haven't discussed the actual adding of calls to the task macro within your tiddlers -- it's all been about modifying tasks that were already there.  That's because adding tasks via the taskadder macro is much easier and more intuitive than adding them by hand.
+
+And setting up a taskadder is simplicity itself.  Just add {{{<<taskadder>>}}} to your tiddler.  You will see this:
+<<<
+<<taskadder>>
+<<<
+Just type a task description into the first field, and your initial estimate for how long it will take into the second field.  Click the "add task" button, or just hit Enter in either of the fields, to add the new task into the tiddler.  Notice that you can just start typing a new task as soon as you're done entering the first one.
+
+You can have as many taskadders as you like in any tiddler.  The last one you used will capture the keyboard focus when it is redisplayed, meaning you can type a series of tasks without using the mouse.  Try adding some tasks here and in the above adder:
+<<<
+<<taskadder>>
+<<<
+Notice that the one you just used takes focus when this tiddler is redisplayed.
+
+A taskadder by default adds tasks above itself.  You can make it add them below by adding a {{{below}}} argument to the macro call:
+<<<
+<<taskadder below>>
+<<<
+
+----
+To continue, click the down-arrow and choose another section: <<tag TaskMacroTutorial>>
+
+
+
In this tutorial, we've been looking mostly at individual tasks.  In real life, though, you'll typically have a series of them, or even several series of them in the same tiddler.  In these cases you want a summary that tells you -- at a minimum -- how much time you still expect to spend on these tasks.
+
+To get such a summary, just add {{{<<tasksum start>>}}} before the tasks and {{{<<tasksum end>>}}} after them.  Here's an example:
+<<<
+<<tasksum start>>
+<<task 0.25 0.25 0.25>> Add tooltips to the various cells
+<<task 1 0.75 0.75>> Figure out how to add auto-updating click handlers to the time cells
+<<task 2 2 0>> Add simple click handlers to cur, spent, rem: just allow direct setting of values
+<<task 1 3.5 2.5>> Add a double-click handler to the desc cell that opens the editor and selects the text
+<<task 1 1 0>> Beef up the time click handlers to allow entry of two values each: cur&spent, spent&rem. Add click handler to done tasks' spent cells too, to reopen them (like with +0, 1).
+<<task 1 1 0>> Beef up the time click handlers to handle leading + or -
+<<task 1 1 0>> Add a double-click handler to the status cell that functions like typing 0 into the rem cell
+<<tasksum end>>
+<<<
+If you'd rather have the summary at the top, just add {{{here}}} to the start call, ie {{{<<tasksum start here>>}}}.
+<<<
+<<tasksum start here>>
+<<task 0.25 0.25 0.25>> Add tooltips to the various cells
+<<task 1 0.75 0.75>> Figure out how to add auto-updating click handlers to the time cells
+<<task 2 2 0>> Add simple click handlers to cur, spent, rem: just allow direct setting of values
+<<tasksum end>>
+<<<
+You can nest these things if you like, just be sure to match starts and ends:
+<<<
+<<tasksum start here>>
+* Time cell manipulation:<<tasksum start>>
+<<task 1 0.75 0.75>> Figure out how to add auto-updating click handlers to the time cells
+<<task 2 2 0>> Add simple click handlers to cur, spent, rem: just allow direct setting of values
+<<task 1 1 0>> Beef up the time click handlers to allow entry of two values each: cur&spent, spent&rem. Add click handler to done tasks' spent cells too, to reopen them (like with +0, 1).
+<<task 1 1 0>> Beef up the time click handlers to handle leading + or -
+<<tasksum end "Cell manipulation:">>
+<<br>>
+* Double-click handling:<<tasksum start>>
+<<task 1 3.5 2.5>> Add a double-click handler to the desc cell that opens the editor and selects the text
+<<task 1 1 0>> Add a double-click handler to the status cell that functions like typing 0 into the rem cell
+<<tasksum end "Double-clicks:">>
+
+<<tasksum end>>
+<<<
+Finally, the simplest way to use tasksum is to add it to your view template.  See TaskSummaryViewTemplate for an example template.  Note that if no tasks are present between the start and end, nothing is displayed.
+
+----
+To continue, click the down-arrow and choose another section: <<tag TaskMacroTutorial>>
+
+
+
The TaskMacroPlugin can be installed like any other TiddlyWiki plugin, and used without further effort.  However, there are two issues that may affect you.  (To get started with a brand new wiki that does not have these issues, consider downloading the [[empty LabWiki|empty_labwiki.html]].)
+# The task macros don't play nicely with the default TiddlyWiki display of tags.  In the default view template, a tiddler's list of tags is shown in a little box that floats in the upper right corner of the tiddler.  However, this little box may interfere with the tables used by the task macros.  In Firefox, the tables are drawn right over the top of the tag box, rendering both of them illegible.  In Internet Explorer, the tag box forces the tables to be pushed down below the box, which can waste a lot of space.<<br>><<br>>Thus, I recommend changing your view template to eliminate the little box.  If you use Simon Baird's [[TagglyTagging|http://simonbaird.com/mptw/#TagglyTagging]] (as LabWiki does), then my TaskSummaryViewTemplate might be a good alternative.  Simply import it into your wiki and rename it to ViewTemplate.  This template also demonstrates how to incorporate the tasksum macro into every tiddler so any tiddler with tasks has a summary at the top.<<br>><<br>>
+# Most view templates also add a minus sign ("-") before the "close" command.  TiddlyWiki interprets this to mean that you want the close command to be executed if you hit the Escape key from within the tiddler.<<br>><<br>>However, most tiddlers never have focus, and so never give you the opportunity to try it out.  But if you have a taskadder in your tiddler, then you suddenly enable this feature -- and you probably don't want it.  It means that if you type a nice long task description and then hit Escape, that description will be lost and the tiddler will be closed.  So I recommend that you remove the minus sign from the view template's menu altogether, as I have done in LabWiki's own ViewTemplate.
+
+----
+This ends the tutorial.  To go back to any previous section, click the down-arrow and choose it: <<tag TaskMacroTutorial>>
+
+
+
PageTemplate
+|>|SiteTitle - SiteSubtitle|
+|>|MainMenu|
+|DefaultTiddlers<<br>><<br>><<br>>ViewTemplate<<br>><<br>>EditTemplate|SideBarOptions|
+|~|OptionsPanel|
+|~|SideBarTabs|
+|~|AdvancedOptions|
+|~|<<tiddler Configuration.SideBarTabs>>|
+
+''StyleSheet:'' StyleSheetColors - StyleSheetLayout - StyleSheetPrint
+
+ColorPalette
+
+SiteUrl
+
+
+
/***
+|Name|BetterTimelineMacro|
+|Created by|SaqImtiaz|
+|Location|http://tw.lewcid.org/#BetterTimelineMacro|
+|Version|0.5 beta|
+|Requires|~TW2.x|
+!!!Description:
+A replacement for the core timeline macro that offers more features:
+*list tiddlers with only specfic tag
+*exclude tiddlers with a particular tag
+*limit entries to any number of days, for example one week
+*specify a start date for the timeline, only tiddlers after that date will be listed.
+
+!!!Installation:
+Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
+Edit the ViewTemplate to add the fullscreen command to the toolbar.
+
+!!!Syntax:
+{{{<<timeline better:true>>}}}
+''the param better:true enables the advanced features, without it you will get the old timeline behaviour.''
+
+additonal params:
+(use only the ones you want)
+{{{<<timeline better:true  onlyTag:Tag1 excludeTag:Tag2 sortBy:modified/created firstDay:YYYYMMDD maxDays:7 maxEntries:30>>}}}
+
+''explanation of syntax:''
+onlyTag: only tiddlers with this tag will be listed. Default is to list all tiddlers.
+excludeTag: tiddlers with this tag will not be listed.
+sortBy: sort tiddlers by date modified or date created. Possible values are modified or created.
+firstDay: useful for starting timeline from a specific date. Example: 20060701 for 1st of July, 2006
+maxDays: limits timeline to include only tiddlers from the specified number of days. If you use a value of 7 for example, only tiddlers from the last 7 days will be listed.
+maxEntries: limit the total number of entries in the timeline.
+
+
+!!!History:
+*28-07-06: ver 0.5 beta, first release
+
+!!!Code
+***/
+//{{{
+// Return the tiddlers as a sorted array
+TiddlyWiki.prototype.getTiddlers = function(field,excludeTag,includeTag)
+{
+          var results = [];
+          this.forEachTiddler(function(title,tiddler)
+          {
+          if(excludeTag == undefined || tiddler.tags.find(excludeTag) == null)
+                        if(includeTag == undefined || tiddler.tags.find(includeTag)!=null)
+                                      results.push(tiddler);
+          });
+          if(field)
+                   results.sort(function (a,b) {if(a[field] == b[field]) return(0); else return (a[field] < b[field]) ? -1 : +1; });
+          return results;
+}
+
+
+
+//this function by Udo
+function getParam(params, name, defaultValue)
+{
+          if (!params)
+          return defaultValue;
+          var p = params[0][name];
+          return p ? p[0] : defaultValue;
+}
+
+window.old_timeline_handler= config.macros.timeline.handler;
+config.macros.timeline.handler = function(place,macroName,params,wikifier,paramString,tiddler)
+{
+          var args = paramString.parseParams("list",null,true);
+          var betterMode = getParam(args, "better", "false");
+          if (betterMode == 'true')
+          {
+          var sortBy = getParam(args,"sortBy","modified");
+          var excludeTag = getParam(args,"excludeTag",undefined);
+          var includeTag = getParam(args,"onlyTag",undefined);
+          var tiddlers = store.getTiddlers(sortBy,excludeTag,includeTag);
+          var firstDayParam = getParam(args,"firstDay",undefined);
+          var firstDay = (firstDayParam!=undefined)? firstDayParam: "00010101";
+          var lastDay = "";
+          var field= sortBy;
+          var maxDaysParam = getParam(args,"maxDays",undefined);
+          var maxDays = (maxDaysParam!=undefined)? maxDaysParam*24*60*60*1000: (new Date()).getTime() ;
+          var maxEntries = getParam(args,"maxEntries",undefined);
+          var last = (maxEntries!=undefined) ? tiddlers.length-Math.min(tiddlers.length,parseInt(maxEntries)) : 0;
+          for(var t=tiddlers.length-1; t>=last; t--)
+                  {
+                  var tiddler = tiddlers[t];
+                  var theDay = tiddler[field].convertToLocalYYYYMMDDHHMM().substr(0,8);
+                  if ((theDay>=firstDay)&& (tiddler[field].getTime()> (new Date()).getTime() - maxDays))
+                     {
+                     if(theDay != lastDay)
+                               {
+                               var theDateList = document.createElement("ul");
+                               place.appendChild(theDateList);
+                               createTiddlyElement(theDateList,"li",null,"listTitle",tiddler[field].formatString(this.dateFormat));
+                               lastDay = theDay;
+                               }
+                  var theDateListItem = createTiddlyElement(theDateList,"li",null,"listLink",null);
+                  theDateListItem.appendChild(createTiddlyLink(place,tiddler.title,true));
+                  }
+                  }
+          }
+
+          else
+              {
+              window.old_timeline_handler.apply(this,arguments);
+              }
+}
+//}}}
+
+
+
This 'index.html' becomes the entry point of some tiddlywikis managed under git. There is a 'empty.html' in the same folder serving as template for generating new wikis. Please refrain from editing it.
+
+
+
Background: #fefefd
+Foreground: #000
+PrimaryPale: #8fb
+PrimaryLight: #50d2ae
+PrimaryMid: #1b9989
+PrimaryDark: #0f3f56
+SecondaryPale: #ffc
+SecondaryLight: #fe8
+SecondaryMid: #db4
+SecondaryDark: #841
+TertiaryPale: #eef
+TertiaryLight: #ccd
+TertiaryMid: #99a
+TertiaryDark: #667
+Error: #f88
+
+
+
RenderEngine
+
+
+
+
/***
+|Name|FullScreenPlugin|
+|Created by|SaqImtiaz|
+|Location|http://tw.lewcid.org/#FullScreenPlugin|
+|Version|1.1|
+|Requires|~TW2.x|
+!Description:
+Toggle between viewing tiddlers fullscreen and normally. Very handy for when you need more viewing space.
+
+!Demo:
+Click the ↕ button in the toolbar for this tiddler. Click it again to turn off fullscreen.
+
+!Installation:
+Copy the contents of this tiddler to your TW, tag with systemConfig, save and reload your TW.
+Edit the ViewTemplate to add the fullscreen command to the toolbar.
+
+!History:
+*25-07-06: ver 1.1
+*20-07-06: ver 1.0
+
+!Code
+***/
+//{{{
+var lewcidFullScreen = false;
+
+config.commands.fullscreen =
+{
+            text:" ↕ ",
+            tooltip:"Fullscreen mode"
+};
+
+config.commands.fullscreen.handler = function (event,src,title)
+{
+            if (lewcidFullScreen == false)
+               {
+                lewcidFullScreen = true;
+                setStylesheet('#sidebar, .header, #mainMenu{display:none;} #displayArea{margin:0em 0 0 0 !important;}',"lewcidFullScreenStyle");
+               }
+            else
+               {
+                lewcidFullScreen = false;
+                setStylesheet(' ',"lewcidFullScreenStyle");
+               }
+}
+
+config.macros.fullscreen={};
+config.macros.fullscreen.handler =  function(place,macroName,params,wikifier,paramString,tiddler)
+{
+        var label = params[0]||" ↕ ";
+        var tooltip = params[1]||"Fullscreen mode";
+        createTiddlyButton(place,label,tooltip,config.commands.fullscreen.handler);
+}
+
+var lewcid_fullscreen_closeTiddler = Story.prototype.closeTiddler;
+Story.prototype.closeTiddler =function(title,animate,slowly)
+{
+           lewcid_fullscreen_closeTiddler.apply(this,arguments);
+           if (story.isEmpty() && lewcidFullScreen == true)
+              config.commands.fullscreen.handler();
+}
+
+
+Slider.prototype.lewcidStop = Slider.prototype.stop;
+Slider.prototype.stop = function()
+{
+           this.lewcidStop();
+           if (story.isEmpty() && lewcidFullScreen == true)
+              config.commands.fullscreen.handler();
+}
+//}}}
+
+
+
/***
+''InlineJavascriptPlugin for ~TiddlyWiki version 1.2.x and 2.0''
+^^author: Eric Shulman - ELS Design Studios
+source: http://www.TiddlyTools.com/#InlineJavascriptPlugin
+license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^
+
+Insert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
+!!!!!Usage
+<<<
+When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
+
+''Deferred execution from an 'onClick' link''
+By including a label="..." parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.
+
+''External script source files:''
+You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
+
+''Defining javascript functions and libraries:''
+Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
+
+To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
+
+Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
+
+''Creating dynamic tiddler content''
+An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
+* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
+* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
+* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
+
+If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
+
+//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
+
+''Accessing the ~TiddlyWiki DOM''
+The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
+
+Access to this DOM element allows you to create scripts that can:
+* vary their actions based upon the specific location in which they are embedded
+* access 'tiddler-relative' information (use findContainingTiddler(place))
+* perform direct DOM manipulations (when returning wikified text is not enough)
+<<<
+!!!!!Examples
+<<<
+an "alert" message box:
+{{{
+<script>alert('InlineJavascriptPlugin: this is a demonstration message');</script>
+}}}
+<script>alert('InlineJavascriptPlugin: this is a demonstration message');</script>
+
+dynamic output:
+{{{
+<script>return (new Date()).toString();</script>
+}}}
+<script>return (new Date()).toString();</script>
+
+wikified dynamic output:
+{{{
+<script>return "link to current user: [["+config.options.txtUserName+"]]";</script>
+}}}
+<script>return "link to current user: [["+config.options.txtUserName+"]]";</script>
+
+dynamic output using 'place' to get size information for current tiddler
+{{{
+<script>
+ if (!window.story) window.story=window;
+ var title=story.findContainingTiddler(place).id.substr(7);
+ return title+" is using "+store.getTiddlerText(title).length+" bytes";
+</script>
+}}}
+<script>
+ if (!window.story) window.story=window;
+ var title=story.findContainingTiddler(place).id.substr(7);
+ return title+" is using "+store.getTiddlerText(title).length+" bytes";
+</script>
+
+creating an 'onclick' button/link that runs a script
+{{{
+<script label="click here">
+ if (!window.story) window.story=window;
+ alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
+</script>
+}}}
+<script label="click here">
+ if (!window.story) window.story=window;
+ alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
+</script>
+
+loading a script from a source url
+{{{
+<script src="demo.js">return "loading demo.js..."</script>
+<script label="click to execute demo() function">demo()</script>
+}}}
+where http://www.TiddlyTools.com/demo.js contains:
+>function demo() { alert('this output is from demo(), defined in demo.js') }
+>alert('InlineJavascriptPlugin: demo.js has been loaded');
+<script src="demo.js">return "loading demo.js..."</script>
+<script label="click to execute demo() function">demo()</script>
+<<<
+!!!!!Installation
+<<<
+import (or copy/paste) the following tiddlers into your document:
+''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
+<<<
+!!!!!Revision History
+<<<
+''2006.01.05 [1.4.0]''
+added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
+''2005.12.13 [1.3.1]''
+when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
+''2005.11.09 [1.3.0]''
+for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content
+Based on a suggestion by BradleyMeck
+''2005.11.08 [1.2.0]''
+handle loading of javascript from an external URL via src="..." syntax
+''2005.11.08 [1.1.0]''
+pass 'place' param into scripts to provide direct DOM access 
+''2005.11.08 [1.0.0]''
+initial release
+<<<
+!!!!!Credits
+<<<
+This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
+<<<
+!!!!!Code
+***/
+//{{{
+version.extensions.inlineJavascript= {major: 1, minor: 4, revision: 0, date: new Date(2006,1,5)};
+
+config.formatters.push( {
+ name: "inlineJavascript",
+ match: "\\<script",
+ lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?\\>((?:.|\\n)*?)\\</script\\>",
+
+ handler: function(w) {
+ var lookaheadRegExp = new RegExp(this.lookahead,"mg");
+ lookaheadRegExp.lastIndex = w.matchStart;
+ var lookaheadMatch = lookaheadRegExp.exec(w.source)
+ if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
+ if (lookaheadMatch[1]) { // load a script library
+ // make script tag, set src, add to body to execute, then remove for cleanup
+ var script = document.createElement("script"); script.src = lookaheadMatch[1];
+ document.body.appendChild(script); document.body.removeChild(script);
+ }
+ if (lookaheadMatch[2] && lookaheadMatch[3]) { // create a link to an 'onclick' script
+ // add a link, define click handler, save code in link (pass 'place'), set link attributes
+ var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
+ link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
+ link.code="function _out(place){"+lookaheadMatch[3]+"};_out(this);"
+ link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";
+ }
+ else if (lookaheadMatch[3]) { // run inline script code
+ var code="function _out(place){"+lookaheadMatch[3]+"};_out(w.output);"
+ code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
+ try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
+ if (out && out.length) wikify(out,w.output);
+ }
+ w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
+ }
+ }
+} )
+//}}}
+
+
+
+
/***
+|''Name:''|InlineJavascriptPlugin|
+|''Source:''|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
+|''Author:''|Eric Shulman - ELS Design Studios|
+|''License:''|[[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]|
+|''~CoreVersion:''|2.0.10|
+
+Insert Javascript executable code directly into your tiddler content. Lets you ''call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
+!!!!!Usage
+<<<
+When installed, this plugin adds new wiki syntax for surrounding tiddler content with {{{<script>}}} and {{{</script>}}} markers, so that it can be treated as embedded javascript and executed each time the tiddler is rendered.
+
+''Deferred execution from an 'onClick' link''
+By including a label="..." parameter in the initial {{{<script>}}} marker, the plugin will create a link to an 'onclick' script that will only be executed when that specific link is clicked, rather than running the script each time the tiddler is rendered.
+
+''External script source files:''
+You can also load javascript from an external source URL, by including a src="..." parameter in the initial {{{<script>}}} marker (e.g., {{{<script src="demo.js"></script>}}}). This is particularly useful when incorporating third-party javascript libraries for use in custom extensions and plugins. The 'foreign' javascript code remains isolated in a separate file that can be easily replaced whenever an updated library file becomes available.
+
+''Display script source in tiddler output''
+By including the keyword parameter "show", in the initial {{{<script>}}} marker, the plugin will include the script source code in the output that it displays in the tiddler.
+
+''Defining javascript functions and libraries:''
+Although the external javascript file is loaded while the tiddler content is being rendered, any functions it defines will not be available for use until //after// the rendering has been completed. Thus, you cannot load a library and //immediately// use it's functions within the same tiddler. However, once that tiddler has been loaded, the library functions can be freely used in any tiddler (even the one in which it was initially loaded).
+
+To ensure that your javascript functions are always available when needed, you should load the libraries from a tiddler that will be rendered as soon as your TiddlyWiki document is opened. For example, you could put your {{{<script src="..."></script>}}} syntax into a tiddler called LoadScripts, and then add {{{<<tiddler LoadScripts>>}}} in your MainMenu tiddler.
+
+Since the MainMenu is always rendered immediately upon opening your document, the library will always be loaded before any other tiddlers that rely upon the functions it defines. Loading an external javascript library does not produce any direct output in the tiddler, so these definitions should have no impact on the appearance of your MainMenu.
+
+''Creating dynamic tiddler content''
+An important difference between this implementation of embedded scripting and conventional embedded javascript techniques for web pages is the method used to produce output that is dynamically inserted into the document:
+* In a typical web document, you use the document.write() function to output text sequences (often containing HTML tags) that are then rendered when the entire document is first loaded into the browser window.
+* However, in a ~TiddlyWiki document, tiddlers (and other DOM elements) are created, deleted, and rendered "on-the-fly", so writing directly to the global 'document' object does not produce the results you want (i.e., replacing the embedded script within the tiddler content), and completely replaces the entire ~TiddlyWiki document in your browser window.
+* To allow these scripts to work unmodified, the plugin automatically converts all occurences of document.write() so that the output is inserted into the tiddler content instead of replacing the entire ~TiddlyWiki document.
+
+If your script does not use document.write() to create dynamically embedded content within a tiddler, your javascript can, as an alternative, explicitly return a text value that the plugin can then pass through the wikify() rendering engine to insert into the tiddler display. For example, using {{{return "thistext"}}} will produce the same output as {{{document.write("thistext")}}}.
+
+//Note: your script code is automatically 'wrapped' inside a function, {{{_out()}}}, so that any return value you provide can be correctly handled by the plugin and inserted into the tiddler. To avoid unpredictable results (and possibly fatal execution errors), this function should never be redefined or called from ''within'' your script code.//
+
+''Accessing the ~TiddlyWiki DOM''
+The plugin provides one pre-defined variable, 'place', that is passed in to your javascript code so that it can have direct access to the containing DOM element into which the tiddler output is currently being rendered.
+
+Access to this DOM element allows you to create scripts that can:
+* vary their actions based upon the specific location in which they are embedded
+* access 'tiddler-relative' information (use findContainingTiddler(place))
+* perform direct DOM manipulations (when returning wikified text is not enough)
+<<<
+!!!!!Examples
+<<<
+an "alert" message box:
+><script show>
+ alert('InlineJavascriptPlugin: this is a demonstration message');
+</script>
+dynamic output:
+><script show>
+ return (new Date()).toString();
+</script>
+wikified dynamic output:
+><script show>
+ return "link to current user: [["+config.options.txtUserName+"]]";
+</script>
+dynamic output using 'place' to get size information for current tiddler:
+><script show>
+ if (!window.story) window.story=window;
+ var title=story.findContainingTiddler(place).id.substr(7);
+ return title+" is using "+store.getTiddlerText(title).length+" bytes";
+</script>
+creating an 'onclick' button/link that runs a script:
+><script label="click here" show>
+ if (!window.story) window.story=window;
+ alert("Hello World!\nlinktext='"+place.firstChild.data+"'\ntiddler='"+story.findContainingTiddler(place).id.substr(7)+"'");
+</script>
+loading a script from a source url:
+>http://www.TiddlyTools.com/demo.js contains:
+>>{{{function demo() { alert('this output is from demo(), defined in demo.js') } }}}
+>>{{{alert('InlineJavascriptPlugin: demo.js has been loaded'); }}}
+><script src="demo.js" show>
+ return "loading demo.js..."
+</script>
+><script label="click to execute demo() function" show>
+ demo()
+</script>
+<<<
+!!!!!Installation
+<<<
+import (or copy/paste) the following tiddlers into your document:
+''InlineJavascriptPlugin'' (tagged with <<tag systemConfig>>)
+<<<
+!!!!!Revision History
+<<<
+''2006.06.01 [1.5.1]'' when calling wikify() on script return value, pass hightlightRegExp and tiddler params so macros that rely on these values can render properly
+''2006.04.19 [1.5.0]'' added 'show' parameter to force display of javascript source code in tiddler output
+''2006.01.05 [1.4.0]'' added support 'onclick' scripts. When label="..." param is present, a button/link is created using the indicated label text, and the script is only executed when the button/link is clicked. 'place' value is set to match the clicked button/link element.
+''2005.12.13 [1.3.1]'' when catching eval error in IE, e.description contains the error text, instead of e.toString(). Fixed error reporting so IE shows the correct response text. Based on a suggestion by UdoBorkowski
+''2005.11.09 [1.3.0]'' for 'inline' scripts (i.e., not scripts loaded with src="..."), automatically replace calls to 'document.write()' with 'place.innerHTML+=' so script output is directed into tiddler content. Based on a suggestion by BradleyMeck
+''2005.11.08 [1.2.0]'' handle loading of javascript from an external URL via src="..." syntax
+''2005.11.08 [1.1.0]'' pass 'place' param into scripts to provide direct DOM access 
+''2005.11.08 [1.0.0]'' initial release
+<<<
+!!!!!Credits
+<<<
+This feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]
+<<<
+!!!!!Code
+***/
+//{{{
+version.extensions.inlineJavascript= {major: 1, minor: 5, revision: 1, date: new Date(2006,6,1)};
+
+config.formatters.push( {
+ name: "inlineJavascript",
+ match: "\\<script",
+ lookahead: "\\<script(?: src=\\\"((?:.|\\n)*?)\\\")?(?: label=\\\"((?:.|\\n)*?)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
+
+ handler: function(w) {
+ var lookaheadRegExp = new RegExp(this.lookahead,"mg");
+ lookaheadRegExp.lastIndex = w.matchStart;
+ var lookaheadMatch = lookaheadRegExp.exec(w.source)
+ if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
+ if (lookaheadMatch[1]) { // load a script library
+ // make script tag, set src, add to body to execute, then remove for cleanup
+ var script = document.createElement("script"); script.src = lookaheadMatch[1];
+ document.body.appendChild(script); document.body.removeChild(script);
+ }
+ if (lookaheadMatch[4]) { // there is script code
+ if (lookaheadMatch[3]) // show inline script code in tiddler output
+ wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
+ if (lookaheadMatch[2]) { // create a link to an 'onclick' script
+ // add a link, define click handler, save code in link (pass 'place'), set link attributes
+ var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",lookaheadMatch[2]);
+ link.onclick=function(){try{return(eval(this.code))}catch(e){alert(e.description?e.description:e.toString())}}
+ link.code="function _out(place){"+lookaheadMatch[4]+"};_out(this);"
+ link.setAttribute("href","javascript:;"); link.setAttribute("title",""); link.style.cursor="pointer";
+ }
+ else { // run inline script code
+ var code="function _out(place){"+lookaheadMatch[4]+"};_out(w.output);"
+ code=code.replace(/document.write\(/gi,'place.innerHTML+=(');
+ try { var out = eval(code); } catch(e) { out = e.description?e.description:e.toString(); }
+ if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
+ }
+ }
+ w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
+ }
+ }
+} )
+//}}}
+
+
+
[[RenderEngine]]
+[[MObjects]]
+[[Admin]]
+<<fullscreen>>
+
+
+
<!--{{{-->
+<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml'/>
+<!--}}}-->
+
+<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>My TiddlyWiki</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
+
+
+
<!--{{{-->
+<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
+	<div class='headerShadow'>
+		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
+		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
+	</div>
+	<div class='headerForeground'>
+		<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
+		<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
+	</div>
+</div>
+<!-- horizontal MainMenu -->
+<div id='topMenu' refresh='content' tiddler='MainMenu'></div>
+<!-- original MainMenu menu -->
+<!-- <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> -->
+<div id='sidebar'>
+	<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
+	<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
+</div>
+<div id='displayArea'>
+	<div id='messageArea'></div>
+	<div id='tiddlerDisplay'></div>
+</div>
+<!--}}}-->
+
+
+
+
/***
+|<html><a name="Top"/></html>''Name:''|PartTiddlerPlugin|
+|''Version:''|1.0.6 (2006-11-07)|
+|''Source:''|http://tiddlywiki.abego-software.de/#PartTiddlerPlugin|
+|''Author:''|UdoBorkowski (ub [at] abego-software [dot] de)|
+|''Licence:''|[[BSD open source license]]|
+|''TiddlyWiki:''|2.0|
+|''Browser:''|Firefox 1.0.4+; InternetExplorer 6.0|
+!Table of Content<html><a name="TOC"/></html>
+* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Description',null, event)">Description, Syntax</a></html>
+* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Applications',null, event)">Applications</a></html>
+** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('LongTiddler',null, event)">Refering to Paragraphs of a Longer Tiddler</a></html>
+** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Citation',null, event)">Citation Index</a></html>
+** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('TableCells',null, event)">Creating "multi-line" Table Cells</a></html>
+** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Tabs',null, event)">Creating Tabs</a></html>
+** <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Sliders',null, event)">Using Sliders</a></html>
+* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Revisions',null, event)">Revision History</a></html>
+* <html><a href="javascript:;" onclick="window.scrollAnchorVisible('Code',null, event)">Code</a></html>
+!Description<html><a name="Description"/></html>
+With the {{{<part aPartName> ... </part>}}} feature you can structure your tiddler text into separate (named) parts. 
+Each part can be referenced as a "normal" tiddler, using the "//tiddlerName//''/''//partName//" syntax (e.g. "About/Features"). E.g. you may create links to the parts, use it in {{{<<tiddler...>>}}} or {{{<<tabs...>>}}} macros etc.
+
+''Syntax:'' 
+|>|''<part'' //partName// [''hidden''] ''>'' //any tiddler content// ''</part>''|
+|//partName//|The name of the part. You may reference a part tiddler with the combined tiddler name "//nameOfContainerTidder//''/''//partName//.|
+|''hidden''|When defined the content of the part is not displayed in the container tiddler. But when the part is explicitly referenced (e.g. in a {{{<<tiddler...>>}}} macro or in a link) the part's content is displayed.|
+|<html><i>any&nbsp;tiddler&nbsp;content</i></html>|<html>The content of the part.<br>A part can have any content that a "normal" tiddler may have, e.g. you may use all the formattings and macros defined.</html>|
+|>|~~Syntax formatting: Keywords in ''bold'', optional parts in [...]. 'or' means that exactly one of the two alternatives must exist.~~|
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!Applications<html><a name="Applications"/></html>
+!!Refering to Paragraphs of a Longer Tiddler<html><a name="LongTiddler"/></html>
+Assume you have written a long description in a tiddler and now you want to refer to the content of a certain paragraph in that tiddler (e.g. some definition.) Just wrap the text with a ''part'' block, give it a nice name, create a "pretty link" (like {{{[[Discussion Groups|Introduction/DiscussionGroups]]}}}) and you are done.
+
+Notice this complements the approach to first writing a lot of small tiddlers and combine these tiddlers to one larger tiddler in a second step (e.g. using the {{{<<tiddler...>>}}} macro). Using the ''part'' feature you can first write a "classic" (longer) text that can be read "from top to bottom" and later "reuse" parts of this text for some more "non-linear" reading.
+
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!!Citation Index<html><a name="Citation"/></html>
+Create a tiddler "Citations" that contains your "citations". 
+Wrap every citation with a part and a proper name. 
+
+''Example''
+{{{
+<part BAX98>Baxter, Ira D. et al: //Clone Detection Using Abstract Syntax Trees.// 
+in //Proc. ICSM//, 1998.</part>
+
+<part BEL02>Bellon, Stefan: //Vergleich von Techniken zur Erkennung duplizierten Quellcodes.// 
+Thesis, Uni Stuttgart, 2002.</part>
+
+<part DUC99>Ducasse, Stéfane et al: //A Language Independent Approach for Detecting Duplicated Code.// 
+in //Proc. ICSM//, 1999.</part>
+}}}
+
+You may now "cite" them just by using a pretty link like {{{[[Citations/BAX98]]}}} or even more pretty, like this {{{[[BAX98|Citations/BAX98]]}}}.
+
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!!Creating "multi-line" Table Cells<html><a name="TableCells"/></html>
+You may have noticed that it is hard to create table cells with "multi-line" content. E.g. if you want to create a bullet list inside a table cell you cannot just write the bullet list
+{{{
+* Item 1
+* Item 2
+* Item 3
+}}}
+into a table cell (i.e. between the | ... | bars) because every bullet item must start in a new line but all cells of a table row must be in one line.
+
+Using the ''part'' feature this problem can be solved. Just create a hidden part that contains the cells content and use a {{{<<tiddler >>}}} macro to include its content in the table's cell.
+
+''Example''
+{{{
+|!Subject|!Items|
+|subject1|<<tiddler ./Cell1>>|
+|subject2|<<tiddler ./Cell2>>|
+
+<part Cell1 hidden>
+* Item 1
+* Item 2
+* Item 3
+</part>
+...
+}}}
+
+Notice that inside the {{{<<tiddler ...>>}}} macro you may refer to the "current tiddler" using the ".".
+
+BTW: The same approach can be used to create bullet lists with items that contain more than one line.
+
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!!Creating Tabs<html><a name="Tabs"/></html>
+The build-in {{{<<tabs ...>>}}} macro requires that you defined an additional tiddler for every tab it displays. When you want to have "nested" tabs you need to define a tiddler for the "main tab" and one for every tab it contains. I.e. the definition of a set of tabs that is visually displayed at one place is distributed across multiple tiddlers.
+
+With the ''part'' feature you can put the complete definition in one tiddler, making it easier to keep an overview and maintain the tab sets.
+
+''Example''
+The standard tabs at the sidebar are defined by the following eight tiddlers:
+* SideBarTabs
+* TabAll
+* TabMore
+* TabMoreMissing
+* TabMoreOrphans
+* TabMoreShadowed
+* TabTags
+* TabTimeline
+
+Instead of these eight tiddlers one could define the following SideBarTabs tiddler that uses the ''part'' feature:
+{{{
+<<tabs txtMainTab 
+ Timeline Timeline SideBarTabs/Timeline 
+ All 'All tiddlers' SideBarTabs/All 
+ Tags 'All tags' SideBarTabs/Tags 
+ More 'More lists' SideBarTabs/More>>
+<part Timeline hidden><<timeline>></part>
+<part All hidden><<list all>></part>
+<part Tags hidden><<allTags>></part>
+<part More hidden><<tabs txtMoreTab 
+ Missing 'Missing tiddlers' SideBarTabs/Missing 
+ Orphans 'Orphaned tiddlers' SideBarTabs/Orphans 
+ Shadowed 'Shadowed tiddlers' SideBarTabs/Shadowed>></part>
+<part Missing hidden><<list missing>></part>
+<part Orphans hidden><<list orphans>></part>
+<part Shadowed hidden><<list shadowed>></part>
+}}}
+
+Notice that you can easily "overwrite" individual parts in separate tiddlers that have the full name of the part.
+
+E.g. if you don't like the classic timeline tab but only want to see the 100 most recent tiddlers you could create a tiddler "~SideBarTabs/Timeline" with the following content:
+{{{
+<<forEachTiddler 
+ sortBy 'tiddler.modified' descending 
+ write '(index < 100) ? "* [["+tiddler.title+"]]\n":""'>>
+}}}
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!!Using Sliders<html><a name="Sliders"/></html>
+Very similar to the build-in {{{<<tabs ...>>}}} macro (see above) the {{{<<slider ...>>}}} macro requires that you defined an additional tiddler that holds the content "to be slid". You can avoid creating this extra tiddler by using the ''part'' feature
+
+''Example''
+In a tiddler "About" we may use the slider to show some details that are documented in the tiddler's "Details" part.
+{{{
+...
+<<slider chkAboutDetails About/Details details "Click here to see more details">>
+<part Details hidden>
+To give you a better overview ...
+</part>
+...
+}}}
+
+Notice that putting the content of the slider into the slider's tiddler also has an extra benefit: When you decide you need to edit the content of the slider you can just doubleclick the content, the tiddler opens for editing and you can directly start editing the content (in the part section). In the "old" approach you would doubleclick the tiddler, see that the slider is using tiddler X, have to look for the tiddler X and can finally open it for editing. So using the ''part'' approach results in a much short workflow.
+
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!Revision history<html><a name="Revisions"/></html>
+* v1.0.6 (2006-11-07)
+** Bugfix: cannot edit tiddler when UploadPlugin by Bidix is installed. Thanks to José Luis González Castro for reporting the bug.
+* v1.0.5 (2006-03-02)
+** Bugfix: Example with multi-line table cells does not work in IE6. Thanks to Paulo Soares for reporting the bug.
+* v1.0.4 (2006-02-28)
+** Bugfix: Shadow tiddlers cannot be edited (in TW 2.0.6). Thanks to Torsten Vanek for reporting the bug.
+* v1.0.3 (2006-02-26)
+** Adapt code to newly introduced Tiddler.prototype.isReadOnly() function (in TW 2.0.6). Thanks to Paulo Soares for reporting the problem.
+* v1.0.2 (2006-02-05)
+** Also allow other macros than the "tiddler" macro use the "." in the part reference (to refer to "this" tiddler)
+* v1.0.1 (2006-01-27)
+** Added Table of Content for plugin documentation. Thanks to RichCarrillo for suggesting.
+** Bugfix: newReminder plugin does not work when PartTiddler is installed. Thanks to PauloSoares for reporting.
+* v1.0.0 (2006-01-25)
+** initial version
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!Code<html><a name="Code"/></html>
+<html><sub><a href="javascript:;" onclick="window.scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+***/
+//{{{
+//============================================================================
+// PartTiddlerPlugin
+
+// Ensure that the PartTiddler Plugin is only installed once.
+//
+if (!version.extensions.PartTiddlerPlugin) {
+
+
+
+version.extensions.PartTiddlerPlugin = {
+ major: 1, minor: 0, revision: 6,
+ date: new Date(2006, 10, 7), 
+ type: 'plugin',
+ source: "http://tiddlywiki.abego-software.de/#PartTiddlerPlugin"
+};
+
+if (!window.abego) window.abego = {};
+if (version.major < 2) alertAndThrow("PartTiddlerPlugin requires TiddlyWiki 2.0 or newer.");
+
+//============================================================================
+// Common Helpers
+
+// Looks for the next newline, starting at the index-th char of text. 
+//
+// If there are only whitespaces between index and the newline 
+// the index behind the newline is returned, 
+// otherwise (or when no newline is found) index is returned.
+//
+var skipEmptyEndOfLine = function(text, index) {
+ var re = /(\n|[^\s])/g;
+ re.lastIndex = index;
+ var result = re.exec(text);
+ return (result && text.charAt(result.index) == '\n') 
+ ? result.index+1
+ : index;
+}
+
+
+//============================================================================
+// Constants
+
+var partEndOrStartTagRE = /(<\/part>)|(<part(?:\s+)((?:[^>])+)>)/mg;
+var partEndTagREString = "<\\/part>";
+var partEndTagString = "</part>";
+
+//============================================================================
+// Plugin Specific Helpers
+
+// Parse the parameters inside a <part ...> tag and return the result.
+//
+// @return [may be null] {partName: ..., isHidden: ...}
+//
+var parseStartTagParams = function(paramText) {
+ var params = paramText.readMacroParams();
+ if (params.length == 0 || params[0].length == 0) return null;
+ 
+ var name = params[0];
+ var paramsIndex = 1;
+ var hidden = false;
+ if (paramsIndex < params.length) {
+ hidden = params[paramsIndex] == "hidden";
+ paramsIndex++;
+ }
+ 
+ return {
+ partName: name, 
+ isHidden: hidden
+ };
+}
+
+// Returns the match to the next (end or start) part tag in the text, 
+// starting the search at startIndex.
+// 
+// When no such tag is found null is returned, otherwise a "Match" is returned:
+// [0]: full match
+// [1]: matched "end" tag (or null when no end tag match)
+// [2]: matched "start" tag (or null when no start tag match)
+// [3]: content of start tag (or null if no start tag match)
+//
+var findNextPartEndOrStartTagMatch = function(text, startIndex) {
+ var re = new RegExp(partEndOrStartTagRE);
+ re.lastIndex = startIndex;
+ var match = re.exec(text);
+ return match;
+}
+
+//============================================================================
+// Formatter
+
+// Process the <part ...> ... </part> starting at (w.source, w.matchStart) for formatting.
+//
+// @return true if a complete part section (including the end tag) could be processed, false otherwise.
+//
+var handlePartSection = function(w) {
+ var tagMatch = findNextPartEndOrStartTagMatch(w.source, w.matchStart);
+ if (!tagMatch) return false;
+ if (tagMatch.index != w.matchStart || !tagMatch[2]) return false;
+
+ // Parse the start tag parameters
+ var arguments = parseStartTagParams(tagMatch[3]);
+ if (!arguments) return false;
+ 
+ // Continue processing
+ var startTagEndIndex = skipEmptyEndOfLine(w.source, tagMatch.index + tagMatch[0].length);
+ var endMatch = findNextPartEndOrStartTagMatch(w.source, startTagEndIndex);
+ if (endMatch && endMatch[1]) {
+ if (!arguments.isHidden) {
+ w.nextMatch = startTagEndIndex;
+ w.subWikify(w.output,partEndTagREString);
+ }
+ w.nextMatch = skipEmptyEndOfLine(w.source, endMatch.index + endMatch[0].length);
+ 
+ return true;
+ }
+ return false;
+}
+
+config.formatters.push( {
+ name: "part",
+ match: "<part\\s+[^>]+>",
+ 
+ handler: function(w) {
+ if (!handlePartSection(w)) {
+ w.outputText(w.output,w.matchStart,w.matchStart+w.matchLength);
+ }
+ }
+} )
+
+//============================================================================
+// Extend "fetchTiddler" functionality to also recognize "part"s of tiddlers 
+// as tiddlers.
+
+var currentParent = null; // used for the "." parent (e.g. in the "tiddler" macro)
+
+// Return the match to the first <part ...> tag of the text that has the
+// requrest partName.
+//
+// @return [may be null]
+//
+var findPartStartTagByName = function(text, partName) {
+ var i = 0;
+ 
+ while (true) {
+ var tagMatch = findNextPartEndOrStartTagMatch(text, i);
+ if (!tagMatch) return null;
+
+ if (tagMatch[2]) {
+ // Is start tag
+ 
+ // Check the name
+ var arguments = parseStartTagParams(tagMatch[3]);
+ if (arguments && arguments.partName == partName) {
+ return tagMatch;
+ }
+ }
+ i += tagMatch[0].length;
+ }
+}
+
+// Return the part "partName" of the given parentTiddler as a "readOnly" Tiddler 
+// object, using fullName as the Tiddler's title. 
+//
+// All remaining properties of the new Tiddler (tags etc.) are inherited from 
+// the parentTiddler.
+// 
+// @return [may be null]
+//
+var getPart = function(parentTiddler, partName, fullName) {
+ var text = parentTiddler.text;
+ var startTag = findPartStartTagByName(text, partName);
+ if (!startTag) return null;
+ 
+ var endIndexOfStartTag = skipEmptyEndOfLine(text, startTag.index+startTag[0].length);
+ var indexOfEndTag = text.indexOf(partEndTagString, endIndexOfStartTag);
+
+ if (indexOfEndTag >= 0) {
+ var partTiddlerText = text.substring(endIndexOfStartTag,indexOfEndTag);
+ var partTiddler = new Tiddler();
+ partTiddler.set(
+ fullName,
+ partTiddlerText,
+ parentTiddler.modifier,
+ parentTiddler.modified,
+ parentTiddler.tags,
+ parentTiddler.created);
+ partTiddler.abegoIsPartTiddler = true;
+ return partTiddler;
+ }
+ 
+ return null;
+}
+
+// Hijack the store.fetchTiddler to recognize the "part" addresses.
+//
+
+var oldFetchTiddler = store.fetchTiddler ;
+store.fetchTiddler = function(title) {
+ var result = oldFetchTiddler.apply(this, arguments);
+ if (!result && title) {
+ var i = title.lastIndexOf('/');
+ if (i > 0) {
+ var parentName = title.substring(0, i);
+ var partName = title.substring(i+1);
+ var parent = (parentName == ".") 
+ ? currentParent 
+ : oldFetchTiddler.apply(this, [parentName]);
+ if (parent) {
+ return getPart(parent, partName, parent.title+"/"+partName);
+ }
+ }
+ }
+ return result; 
+};
+
+
+// The user must not edit a readOnly/partTiddler
+//
+
+config.commands.editTiddler.oldIsReadOnlyFunction = Tiddler.prototype.isReadOnly;
+
+Tiddler.prototype.isReadOnly = function() {
+ // Tiddler.isReadOnly was introduced with TW 2.0.6.
+ // For older version we explicitly check the global readOnly flag
+ if (config.commands.editTiddler.oldIsReadOnlyFunction) {
+ if (config.commands.editTiddler.oldIsReadOnlyFunction.apply(this, arguments)) return true;
+ } else {
+ if (readOnly) return true;
+ }
+
+ return this.abegoIsPartTiddler;
+}
+
+config.commands.editTiddler.handler = function(event,src,title)
+{
+ var t = store.getTiddler(title);
+ // Edit the tiddler if it either is not a tiddler (but a shadowTiddler)
+ // or the tiddler is not readOnly
+ if(!t || !t.abegoIsPartTiddler)
+ {
+ clearMessage();
+ story.displayTiddler(null,title,DEFAULT_EDIT_TEMPLATE);
+ story.focusTiddler(title,"text");
+ return false;
+ }
+}
+
+// To allow the "./partName" syntax in macros we need to hijack 
+// the invokeMacro to define the "currentParent" while it is running.
+// 
+var oldInvokeMacro = window.invokeMacro;
+function myInvokeMacro(place,macro,params,wikifier,tiddler) {
+ var oldCurrentParent = currentParent;
+ if (tiddler) currentParent = tiddler;
+ try {
+ oldInvokeMacro.apply(this, arguments);
+ } finally {
+ currentParent = oldCurrentParent;
+ }
+}
+window.invokeMacro = myInvokeMacro;
+
+// Scroll the anchor anchorName in the viewer of the given tiddler visible.
+// When no tiddler is defined use the tiddler of the target given event is used.
+window.scrollAnchorVisible = function(anchorName, tiddler, evt) {
+ var tiddlerElem = null;
+ if (tiddler) {
+ tiddlerElem = document.getElementById(story.idPrefix + tiddler);
+ }
+ if (!tiddlerElem && evt) {
+ var target = resolveTarget(evt);
+ tiddlerElem = story.findContainingTiddler(target);
+ }
+ if (!tiddlerElem) return;
+
+ var children = tiddlerElem.getElementsByTagName("a");
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ var name = child.getAttribute("name");
+ if (name == anchorName) {
+ var y = findPosY(child);
+ window.scrollTo(0,y);
+ return;
+ }
+ }
+}
+
+} // of "install only once"
+//}}}
+
+/***
+<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+
+!Licence and Copyright
+Copyright (c) abego Software ~GmbH, 2006 ([[www.abego-software.de|http://www.abego-software.de]])
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this
+list of conditions and the following disclaimer.
+
+Redistributions in binary form must reproduce the above copyright notice, this
+list of conditions and the following disclaimer in the documentation and/or other
+materials provided with the distribution.
+
+Neither the name of abego Software nor the names of its contributors may be
+used to endorse or promote products derived from this software without specific
+prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGE.
+
+<html><sub><a href="javascript:;" onclick="scrollAnchorVisible('Top',null, event)">[Top]</sub></a></html>
+***/
+
+
+
/***
+|''Name:''|RSSReaderPlugin|
+|''Description:''|This plugin provides a RSSReader for TiddlyWiki|
+|''Version:''|1.1.1|
+|''Date:''|Apr 21, 2007|
+|''Source:''|http://tiddlywiki.bidix.info/#RSSReaderPlugin|
+|''Documentation:''|http://tiddlywiki.bidix.info/#RSSReaderPluginDoc|
+|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
+|''Credit:''|BramChen for RssNewsMacro|
+|''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]|
+|''~CoreVersion:''|2.2.0|
+|''OptionalRequires:''|http://www.tiddlytools.com/#NestedSlidersPlugin|
+***/
+//{{{
+version.extensions.RSSReaderPlugin = {
+	major: 1, minor: 1, revision: 1,
+	date: new Date("Apr 21, 2007"),
+	source: "http://TiddlyWiki.bidix.info/#RSSReaderPlugin",
+	author: "BidiX",
+	coreVersion: '2.2.0'
+};
+
+config.macros.rssReader = {
+	dateFormat: "DDD, DD MMM YYYY",
+	itemStyle: "display: block;border: 1px solid black;padding: 5px;margin: 5px;", //useed  '@@'+itemStyle+itemText+'@@'
+	msg:{
+		permissionDenied: "Permission to read preferences was denied.",
+		noRSSFeed: "No RSS Feed at this address %0",
+		urlNotAccessible: " Access to %0 is not allowed"
+	},
+	cache: [], 	// url => XMLHttpRequest.responseXML
+	desc: "noDesc",
+	
+	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
+		var desc = params[0];
+		var feedURL = params[1];
+		var toFilter = (params[2] ? true : false);
+		var filterString = (toFilter?(params[2].substr(0,1) == ' '? tiddler.title:params[2]):'');
+		var place = createTiddlyElement(place, "div", "RSSReader");
+		wikify("^^<<rssFeedUpdate "+feedURL+" [[" + tiddler.title + "]]>>^^\n",place);
+		if (this.cache[feedURL]) {
+			this.displayRssFeed(this.cache[feedURL], feedURL, place, desc, toFilter, filterString);
+		}
+		else {
+			var r = loadRemoteFile(feedURL,config.macros.rssReader.processResponse, [place, desc, toFilter, filterString]);
+			if (typeof r == "string")
+				displayMessage(r);
+		}
+		
+	},
+
+	// callback for loadRemoteFile 
+	// params : [place, desc, toFilter, filterString]
+	processResponse: function(status, params, responseText, url, xhr) { // feedURL, place, desc, toFilter, filterString) {	
+		if (window.netscape){
+			try {
+				if (document.location.protocol.indexOf("http") == -1) {
+					netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
+				}
+			}
+			catch (e) { displayMessage(e.description?e.description:e.toString()); }
+		}
+		if (xhr.status == httpStatus.NotFound)
+		 {
+			displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
+			return;
+		}
+		if (!status)
+		 {
+			displayMessage(config.macros.rssReader.noRSSFeed.format([url]));
+			return;
+		}
+		if (xhr.responseXML) {
+			// response is interpreted as XML
+			config.macros.rssReader.cache[url] = xhr.responseXML;
+			config.macros.rssReader.displayRssFeed(xhr.responseXML, params[0], url, params[1], params[2], params[3]);
+		}
+		else {
+			if (responseText.substr(0,5) == "<?xml") {
+				// response exists but not return as XML -> try to parse it 
+				var dom = (new DOMParser()).parseFromString(responseText, "text/xml"); 
+				if (dom) {
+					// parsing successful so use it
+					config.macros.rssReader.cache[url] = dom;
+					config.macros.rssReader.displayRssFeed(dom, params[0], url, params[1], params[2], params[3]);
+					return;
+				}
+			}
+			// no XML display as html 
+			wikify("<html>" + responseText + "</html>", params[0]);
+			displayMessage(config.macros.rssReader.msg.noRSSFeed.format([url]));
+		}
+	},
+
+	// explore down the DOM tree
+	displayRssFeed: function(xml, place, feedURL, desc, toFilter, filterString){
+		// Channel
+		var chanelNode = xml.getElementsByTagName('channel').item(0);
+		var chanelTitleElement = (chanelNode ? chanelNode.getElementsByTagName('title').item(0) : null);
+		var chanelTitle = "";
+		if ((chanelTitleElement) && (chanelTitleElement.firstChild)) 
+			chanelTitle = chanelTitleElement.firstChild.nodeValue;
+		var chanelLinkElement = (chanelNode ? chanelNode.getElementsByTagName('link').item(0) : null);
+		var chanelLink = "";
+		if (chanelLinkElement) 
+			chanelLink = chanelLinkElement.firstChild.nodeValue;
+		var titleTxt = "!![["+chanelTitle+"|"+chanelLink+"]]\n";
+		var title = createTiddlyElement(place,"div",null,"ChanelTitle",null);
+		wikify(titleTxt,title);
+		// ItemList
+		var itemList = xml.getElementsByTagName('item');
+		var article = createTiddlyElement(place,"ul",null,null,null);
+		var lastDate;
+		var re;
+		if (toFilter) 
+			re = new RegExp(filterString.escapeRegExp());
+		for (var i=0; i<itemList.length; i++){
+			var titleElm = itemList[i].getElementsByTagName('title').item(0);
+			var titleText = (titleElm ? titleElm.firstChild.nodeValue : '');
+			if (toFilter && ! titleText.match(re)) {
+				continue;
+			}
+			var descText = '';
+			descElem = itemList[i].getElementsByTagName('description').item(0);
+			if (descElem){
+				try{
+					for (var ii=0; ii<descElem.childNodes.length; ii++) {
+						descText += descElem.childNodes[ii].nodeValue;
+					}
+				}
+				catch(e){}
+				descText = descText.replace(/<br \/>/g,'\n');
+				if (desc == "asHtml")
+					descText = "<html>"+descText+"</html>";
+			}
+			var linkElm = itemList[i].getElementsByTagName("link").item(0);
+			var linkURL = linkElm.firstChild.nodeValue;
+			var pubElm = itemList[i].getElementsByTagName('pubDate').item(0);
+			var pubDate;
+			if (!pubElm) {
+				pubElm = itemList[i].getElementsByTagName('date').item(0); // for del.icio.us
+				if (pubElm) {
+					pubDate = pubElm.firstChild.nodeValue;
+					pubDate = this.formatDateString(this.dateFormat, pubDate);
+					}
+					else {
+						pubDate = '0';
+					}
+				}
+			else {
+				pubDate = (pubElm ? pubElm.firstChild.nodeValue : 0);
+				pubDate = this.formatDate(this.dateFormat, pubDate);
+			}
+			titleText = titleText.replace(/\[|\]/g,'');
+			var rssText = '*'+'[[' + titleText + '|' + linkURL + ']]' + '' ;
+			if ((desc != "noDesc") && descText){
+				rssText = rssText.replace(/\n/g,' ');
+				descText = '@@'+this.itemStyle+descText + '@@\n';				
+				if (version.extensions.nestedSliders){
+					descText = '+++[...]' + descText + '===';
+				}
+				rssText = rssText + descText;
+			}
+			var story;
+			if ((lastDate != pubDate) && ( pubDate != '0')) {
+				story = createTiddlyElement(article,"li",null,"RSSItem",pubDate);
+				lastDate = pubDate;
+			}
+			else {
+				lastDate = pubDate;
+			}
+			story = createTiddlyElement(article,"div",null,"RSSItem",null);
+			wikify(rssText,story);
+		}
+	},
+	
+	formatDate: function(template, date){
+		var dateString = new Date(date);
+		// template = template.replace(/hh|mm|ss/g,'');
+		return dateString.formatString(template);
+	},
+	
+	formatDateString: function(template, date){
+		var dateString = new Date(date.substr(0,4), date.substr(5,2) - 1, date.substr(8,2)
+			);
+		return dateString.formatString(template);
+	}
+	
+};
+
+config.macros.rssFeedUpdate = {
+	label: "Update",
+	prompt: "Clear the cache and redisplay this RssFeed",
+	handler: function(place,macroName,params) {
+		var feedURL = params[0];
+		var tiddlerTitle = params[1];
+		createTiddlyButton(place, this.label, this.prompt, 
+			function () {
+				if (config.macros.rssReader.cache[feedURL]) {
+					config.macros.rssReader.cache[feedURL] = null; 
+			}
+			story.refreshTiddler(tiddlerTitle,null, true);
+		return false;});
+	}
+};
+
+//}}}
+
+
+
+
//last update: RSSReaderPlugin v 1.1.1//
+
+!Description
+This plugin provides a RSSReader for TiddlyWiki
+* It accesses asynchronously an RSSFeed
+*Depending on the chanel item format, each item could be written as :
+**simple text wikified
+**html
+
+!Usage
+{{{
+<<rssReader noDesc|asHtml|asText rssUrl ['filtering string']>>
+	noDesc: only title of item is printed
+
+	asHtml: if you know that description contain html (links, img ...), 
+		the text is enclosed with <html> </html> tags
+
+ 	asText: if the description should not be interpreted as html the 
+		description is wikified
+
+	rssUrl: the rssFeed url that could be accessed. 
+	
+	'filtering string': if present, the rssfeed item title must contained 
+		this string to be displayed. 
+		If 'filering string' contained space characters only, the tiddler 
+		title is used for filtering.
+
+}}}
+
+For security reasons, if the TiddlyWiki is accessed from http, a ProxyService should be used to access an rssFeed from an other site.
+
+!examples
+| !reader | !RSSFeed type | !working from |
+| BidiXTWRSS | Description asHtml | file: or tiddlywiki.bidix.info |
+| [[Le Monde]] | Description asText | file: or tiddlywiki.bidix.info using proxy |
+| YahooNewsSport | Description asHtml | file: or tiddlywiki.bidix.info using proxy |
+| TiddlyWikiRSS | Description asHtml | file: or tiddlywiki.bidix.info using proxy |
+| [[Libération]] | noDesc | file: or tiddlywiki.bidix.info using proxy |
+| [[TestComment]] | asText and filters | file: or tiddlywiki.bidix.info using proxy |
+see : <<tag RSSFeed>> for the full list.
+
+!Revision history
+* V1.1.0 (2207/04/13)
+**No more import functions
+* V1.0.0 (2006/11/11)
+**refactoring using core loadRemoteFile function
+**import using new tiddlywiki:tiddler element
+**import and presentation preserved without EricShulman's NestedSliderPlugin
+**better display of items 
+* v0.3.0 (24/08/2006)
+** Filter on RSS item title
+** Place to display redefined for asynchronous processing
+* v0.2.2 (22/08/2006)
+**Haloscan feed has no pubDate.
+* v0.2.1 (08/05/2006)
+* v0.2.0 (01/05/2006)
+**Small adapations for del.icio.us feed
+* v0.1.1 (28/04/2006)
+**Bug : Channel without title 
+* v0.1.0 (24/04/2006)
+** initial release
+
+
+
+
+
+
The key idea of Ichthyo's Design-draft is, to use the ''Builder Pattern'' for the Render Engine, thus separating completely the //building// of the Render Pipeline from //running,// i.e. doing the actual Render. The Nodes in this Pipeline should process Video/Audio and do nothing else. No more any decisions, tests and conditional operations when running the Pipeline. Move all of this out into the configuration of the pipeline, done by the Builder. Make the actual processing nodes Template classes, parametrised by the color model and number of components. Make all Nodes on equal footing of each other, able to be connected freely within the limitations of the necessary input and output. Make the OpenGL rendering into alternate implementation of some operations together with an alternate signal flow (usable only if the whole Pipeline can be built up to support this changed signal flow), thus facturing out all the complexities of managing the data flow between core and hardware accelerated rendering out of the implementation of the actual processing. Introduce separate control data connections for the automation data, separating the case of true multi-channel-effects from the case where one node just gets remote controlled by another node (or two nodes using the sama automation data). Unfold any "internal-multi" effects into separate instances, e.g. the possibility of having an arbitrary number of single masks at any point of the pipeline instead of having one special masking facility encompassing multiple sub-masks.
+
+!Why doesn't the current Design succeed with this?
+The design of Cinelerra 2 basically follows this design, but fails because of two reasons
+ * too much differentiation is put into the class hierarchy instead of configuring Instances differently. Causes overly heavy use of factories and -- in order to ameliorate this -- falling back to hard wired branching
+ * far too much back-coupling to the internals of the EDL, forcing a overly rigid structure on the latter
+
+!Try to learn from this
+ * build up an NodeAbstraction powerfull enough to express //all necessarey Operations// without the need to recure on the actual object type
+ * need to redesign the internals of the EDL in a far more open manner. See MObjects
+ * strive at a StrongSeparation between EDL and Render Engine
+
+!!see also
+ * [[Overview]]
+ * OverviewRenderEngine
+ * RenderProcess
+
+
+
some aspects of Cinelerra-3 design
+
+
+
Draft
+
+
+
/***
+
+''Inspired by [[TiddlyPom|http://www.warwick.ac.uk/~tuspam/tiddlypom.html]]''
+
+|Name|SplashScreenPlugin|
+|Created by|SaqImtiaz|
+|Location|http://tw.lewcid.org/#SplashScreenPlugin|
+|Version|0.21 |
+|Requires|~TW2.08+|
+!Description:
+Provides a simple splash screen that is visible while the TW is loading.
+
+!Installation
+Copy the source text of this tiddler to your TW in a new tiddler, tag it with systemConfig and save and reload. The SplashScreen will now be installed and will be visible the next time you reload your TW.
+
+!Customizing
+Once the SplashScreen has been installed and you have reloaded your TW, the splash screen html will be present in the MarkupPreHead tiddler. You can edit it and customize to your needs.
+
+!History
+* 20-07-06 : version 0.21, modified to hide contentWrapper while SplashScreen is displayed.
+* 26-06-06 : version 0.2, first release
+
+!Code
+***/
+//{{{
+var old_lewcid_splash_restart=restart;
+
+restart = function()
+{   if (document.getElementById("SplashScreen"))
+        document.getElementById("SplashScreen").style.display = "none";
+      if (document.getElementById("contentWrapper"))
+        document.getElementById("contentWrapper").style.display = "block";
+    
+    old_lewcid_splash_restart();
+   
+    if (splashScreenInstall)
+       {if(config.options.chkAutoSave)
+			{saveChanges();}
+        displayMessage("TW SplashScreen has been installed, please save and refresh your TW.");
+        }
+}
+
+
+var oldText = store.getTiddlerText("MarkupPreHead");
+if (oldText.indexOf("SplashScreen")==-1)
+   {var siteTitle = store.getTiddlerText("SiteTitle");
+   var splasher='\n\n<style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>'+siteTitle +'</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>';
+   if (! store.tiddlerExists("MarkupPreHead"))
+       {var myTiddler = store.createTiddler("MarkupPreHead");}
+   else
+      {var myTiddler = store.getTiddler("MarkupPreHead");}
+      myTiddler.set(myTiddler.title,oldText+splasher,config.options.txtUserName,null,null);
+      store.setDirty(true);
+      var splashScreenInstall = true;
+}
+//}}}
+
+
+
/*{{{*/
+/* a contrasting background so I can see where one tiddler ends and the other begins */
+body {
+	background: [[ColorPalette::TertiaryLight]];
+}
+
+/* sexy colours and font for the header */
+.headerForeground {
+	color: [[ColorPalette::PrimaryPale]];
+}
+.headerShadow, .headerShadow a {
+	color: [[ColorPalette::PrimaryMid]];
+}
+.headerForeground, .headerShadow {
+	padding: 1em 1em 0;
+	font-family: 'Trebuchet MS' sans-serif;
+	font-weight:bold;
+}
+.headerForeground .siteSubtitle {
+	color: [[ColorPalette::PrimaryLight]];
+}
+.headerShadow .siteSubtitle {
+	color: [[ColorPalette::PrimaryMid]];
+}
+
+/* make shadow go and down right instead of up and left */
+.headerShadow {
+	left: 2px;
+	top: 3px;
+}
+
+/* prefer monospace for editing */
+.editor textarea {
+	font-family: 'Consolas' monospace;
+}
+
+/* sexy tiddler titles */
+.title {
+	font-size: 250%;
+	color: [[ColorPalette::PrimaryLight]];
+	font-family: 'Trebuchet MS' sans-serif;
+}
+
+/* more subtle tiddler subtitle */
+.subtitle {
+	padding:0px;
+	margin:0px;
+	padding-left:0.5em;
+	font-size: 90%;
+	color: [[ColorPalette::TertiaryMid]];
+}
+.subtitle .tiddlyLink {
+	color: [[ColorPalette::TertiaryMid]];
+}
+
+/* a little bit of extra whitespace */
+.viewer {
+	padding-bottom:3px;
+}
+
+/* don't want any background color for headings */
+h1,h2,h3,h4,h5,h6 {
+	background: [[ColorPalette::Background]];
+	color: [[ColorPalette::Foreground]];
+}
+
+/* give tiddlers 3d style border and explicit background */
+.tiddler {
+	background: [[ColorPalette::Background]];
+	border-right: 2px [[ColorPalette::TertiaryMid]] solid;
+	border-bottom: 2px [[ColorPalette::TertiaryMid]] solid;
+	margin-bottom: 1em;
+	padding-bottom: 2em;
+}
+
+/* make options slider look nicer */
+#sidebarOptions .sliderPanel {
+	border:solid 1px [[ColorPalette::PrimaryLight]];
+}
+
+
+/* the borders look wrong with the body background */
+#sidebar .button {
+	border-style: none;
+}
+
+/* displays the list of a tiddler's tags horizontally. used in ViewTemplate */
+.tagglyTagged li.listTitle {
+	display:none
+}
+.tagglyTagged li {
+	display: inline; font-size:90%;
+}
+.tagglyTagged ul {
+	margin:0px; padding:0px;
+}
+
+/* this means you can put line breaks in SidebarOptions for readability */
+#sidebarOptions br {
+	display:none;
+}
+/* undo the above in OptionsPanel */
+#sidebarOptions .sliderPanel br {
+	display:inline;
+}
+
+/* horizontal main menu stuff */
+#displayArea {
+	margin: 1em 15.7em 0em 1em; /* use the freed up space */
+}
+#topMenu br {
+	display: none;
+}
+#topMenu {
+	background: [[ColorPalette::PrimaryMid]];
+	color:[[ColorPalette::PrimaryPale]];
+}
+#topMenu {
+	padding:2px;
+}
+#topMenu .button, #topMenu .tiddlyLink, #topMenu a {
+	margin-left: 0.5em;
+	margin-right: 0.5em;
+	padding-left: 3px;
+	padding-right: 3px;
+	color: [[ColorPalette::PrimaryPale]];
+	font-size: 115%;
+}
+#topMenu .button:hover, #topMenu .tiddlyLink:hover {
+	background: [[ColorPalette::PrimaryDark]];
+}
+
+/* make it print a little cleaner */
+@media print {
+	#topMenu {
+		display: none ! important;
+	}
+	/* not sure if we need all the importants */
+	.tiddler {
+		border-style: none ! important;
+		margin:0px ! important;
+		padding:0px ! important;
+		padding-bottom:2em ! important;
+	}
+	.tagglyTagging .button, .tagglyTagging .hidebutton {
+		display: none ! important;
+	}
+	.headerShadow {
+		visibility: hidden ! important;
+	}
+	.tagglyTagged .quickopentag, .tagged .quickopentag {
+		border-style: none ! important;
+	}
+	.quickopentag a.button, .miniTag {
+		display: none ! important;
+	}
+}
+/*}}}*/
+
+
+
+
/***
+|Name|TaskMacroPlugin|
+|Author|<<extension TaskMacroPlugin author>>|
+|Location|<<extension TaskMacroPlugin source>>|
+|License|<<extension TaskMacroPlugin license>>|
+|Version|<<extension TaskMacroPlugin versionAndDate>>|
+!Description
+A set of macros to help you keep track of time estimates for tasks.
+
+Macros defined:
+* {{{task}}}: Displays a task description and makes it easy to estimate and track the time spent on the task.
+* {{{taskadder}}}: Displays text entry field to simplify the adding of tasks.
+* {{{tasksum}}}: Displays a summary of tasks sandwiched between two calls to this macro.
+* {{{extension}}}: A simple little macro that displays information about a TiddlyWiki plugin, and that will hopefully someday migrate to the TW core in some form.
+Core overrides:
+* {{{wikify}}}: when wikifying a tiddler's complete text, adds refresh information so the tiddler will be refreshed when it changes
+* {{{config.refreshers}}}: have the built-in refreshers return true; also, add a new refresher ("fullContent") that redisplays a full tiddler whenever it or any nested tiddlers it shows are changed
+* {{{refreshElements}}}: now checks the return value from the refresher and only short-circuits the recursion if the refresher returns true
+!Plugin Information
+***/
+//{{{
+version.extensions.TaskMacroPlugin = {
+	major: 1, minor: 1, revision: 0,
+	date: new Date(2006,5-1,13),
+	author: "LukeBlanshard",
+	source: "http://labwiki.sourceforge.net/#TaskMacroPlugin",
+	license: "http://labwiki.sourceforge.net/#CopyrightAndLicense"
+}
+//}}}
+/***
+A little macro for pulling out extension info.  Use like {{{<<extension PluginName datum>>}}}, where {{{PluginName}}} is the name you used for {{{version.extensions}}} and {{{datum}}} is either {{{versionAndDate}}} or a property of the extension description object, such as {{{source}}}.
+***/
+//{{{
+config.macros.extension = {
+	handler: function( place, macroName, params, wikifier, paramString, tiddler ) {
+		var info  = version.extensions[params[0]]
+		var datum = params[1]
+		switch (params[1]) {
+		case 'versionAndDate':
+			createTiddlyElement( place, "span", null, null,
+				info.major+'.'+info.minor+'.'+info.revision+', '+info.date.formatString('DD MMM YYYY') )
+			break;
+		default:
+			wikify( info[datum], place )
+			break;
+		}
+	}
+}
+//}}}
+/***
+!Core Overrides
+***/
+//{{{
+window.wikify_orig_TaskMacroPlugin = window.wikify
+window.wikify = function(source,output,highlightRegExp,tiddler)
+{
+	if ( tiddler && tiddler.text === source )
+		addDisplayDependency( output, tiddler.title )
+	wikify_orig_TaskMacroPlugin.apply( this, arguments )
+}
+config.refreshers_orig_TaskMacroPlugin = config.refreshers
+config.refreshers = {
+	link: function() {
+		config.refreshers_orig_TaskMacroPlugin.link.apply( this, arguments )
+		return true
+	},
+	content: function() {
+		config.refreshers_orig_TaskMacroPlugin.content.apply( this, arguments )
+		return true
+	},
+	fullContent: function( e, changeList ) {
+		var tiddlers = e.refreshTiddlers
+		if ( changeList == null || tiddlers == null )
+			return false
+		for ( var i=0; i < tiddlers.length; ++i )
+			if ( changeList.find(tiddlers[i]) != null ) {
+				var title = tiddlers[0]
+				story.refreshTiddler( title, null, true )
+				return true
+			}
+		return false
+	}
+}
+function refreshElements(root,changeList)
+{
+	var nodes = root.childNodes;
+	for(var c=0; c<nodes.length; c++)
+		{
+		var e = nodes[c],type;
+		if(e.getAttribute)
+			type = e.getAttribute("refresh");
+		else
+			type = null;
+		var refresher = config.refreshers[type];
+		if ( ! refresher || ! refresher(e, changeList) )
+			{
+			if(e.hasChildNodes())
+				refreshElements(e,changeList);
+			}
+		}
+}
+//}}}
+/***
+!Global Functions
+***/
+//{{{
+// Add the tiddler whose title is given to the list of tiddlers whose
+// changing will cause a refresh of the tiddler containing the given element.
+function addDisplayDependency( element, title ) {
+	while ( element && element.getAttribute ) {
+		var idAttr = element.getAttribute("id"), tiddlerAttr = element.getAttribute("tiddler")
+		if ( idAttr && tiddlerAttr && idAttr == story.idPrefix+tiddlerAttr ) {
+			var list = element.refreshTiddlers
+			if ( list == null ) {
+				list = [tiddlerAttr]
+				element.refreshTiddlers = list
+				element.setAttribute( "refresh", "fullContent" )
+			}
+			list.pushUnique( title )
+			return
+		}
+		element = element.parentNode
+	}
+}
+
+// Lifted from Story.prototype.focusTiddler: just return the field instead of focusing it.
+Story.prototype.findEditField = function( title, field )
+{
+	var tiddler = document.getElementById(this.idPrefix + title);
+	if(tiddler != null)
+		{
+		var children = tiddler.getElementsByTagName("*")
+		var e = null;
+		for (var t=0; t<children.length; t++)
+			{
+			var c = children[t];
+			if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")
+				{
+				if(!e)
+					e = c;
+				if(c.getAttribute("edit") == field)
+					e = c;
+				}
+			}
+		return e
+		}
+}
+
+// Wraps the given event function in another function that handles the
+// event in a standard way.
+function wrapEventHandler( otherHandler ) {
+	return function(e) {
+		if (!e) var e = window.event
+		e.cancelBubble = true
+		if (e.stopPropagation) e.stopPropagation()
+		return otherHandler( e )
+	}
+}
+//}}}
+/***
+!Task Macro
+Usage:
+> {{{<<task orig cur spent>>description}}}
+All of orig, cur, and spent are optional numbers of hours.  The description goes through the end of the line, and is wikified.
+***/
+//{{{
+config.macros.task = {
+	NASCENT:	0, // Task not yet estimated
+	LIVE:		1, // Estimated but with time remaining
+	DONE:		2, // Completed: no time remaining
+	bullets:	["\u25cb", // nascent (open circle)
+			 "\u25ba", // live (right arrow)
+			 "\u25a0"],// done (black square)
+	styles:		["nascent", "live", "done"],
+
+	// Translatable text:
+	lingo: {
+		spentTooBig:	"Spent time %0 can't exceed current estimate %1",
+		noNegative:	"Times may not be negative numbers",
+		statusTips:	["Not yet estimated", "To do", "Done"], // Array indexed by state (NASCENT/LIVE/DONE)
+		descClickTip:	" -- Double-click to edit task description",
+		statusClickTip:	" -- Double-click to mark task complete",
+		statusDoneTip:	" -- Double-click to adjust the time spent, to revive the task",
+		origTip:	"Original estimate in hours",
+		curTip:		"Current estimate in hours",
+		curTip2:	"Estimate in hours", // For when orig == cur
+		clickTip:	" -- Click to adjust",
+		spentTip:	"Hours spent on this task",
+		remTip:		"Hours remaining",
+		curPrompt:	"Estimate this task in hours, or adjust the current estimate by starting with + or -.\n\nYou may optionally also set or adjust the time spent by putting a second number after the first.",
+		spentPrompt:	"Enter the number of hours you've spent on this task, or adjust the current number by starting with + or -.\n\nYou may optionally also set or adjust the time remaining by putting a second number after the first.",
+		remPrompt:	"Enter the number of hours it will take to finish this task, or adjust the current estimate by starting with + or -.\n\nYou may optionally also set or adjust the time spent by putting a second number after the first.",
+		numbersOnly:	"Enter numbers only, please",
+		notCurrent:	"The tiddler has been modified since it was displayed, please redisplay it before doing this."
+	},
+
+	// The macro handler
+	handler: function( place, macroName, params, wikifier, paramString, tiddler )
+	{
+		var start = wikifier.matchStart, end = wikifier.nextMatch
+
+		var origStr	= params.length > 0? params.shift() : "?"
+		var orig	= +origStr // as a number
+		var cur		= params.length > 1? +params.shift() : orig
+		var spent	= params.length > 0? +params.shift() : 0
+		if ( spent > cur )
+			throw Error( this.lingo.spentTooBig.format([spent, cur]) )
+		if ( orig < 0 || cur < 0 || spent < 0 )
+			throw Error( this.lingo.noNegative )
+		var rem		= cur - spent
+		var state	= isNaN(orig+rem)? this.NASCENT : rem > 0? this.LIVE : this.DONE
+		var table	= createTiddlyElement( place, "table", null, "task "+this.styles[state] )
+		var tbody	= createTiddlyElement( table, "tbody" )
+		var row		= createTiddlyElement( tbody, "tr" )
+		var statusCell	= createTiddlyElement( row,   "td", null, "status", this.bullets[state] )
+		var descCell	= createTiddlyElement( row,   "td", null, "description" )
+
+		var origCell	= state==this.NASCENT || orig==cur? null
+				: createTiddlyElement( row, "td", null, "numeric original" )
+		var curCell	= createTiddlyElement( row, "td", null, "numeric current" )
+		var spentCell	= createTiddlyElement( row, "td", null, "numeric spent" )
+		var remCell	= createTiddlyElement( row, "td", null, "numeric remaining" )
+
+		var sums = config.macros.tasksum.tasksums
+		if ( sums && sums.length ) {
+			var summary = [(state == this.NASCENT? NaN : orig), cur, spent]
+			summary.owner = tiddler
+			sums[0].push( summary )
+		}
+
+		// The description goes to the end of the line
+		wikifier.subWikify( descCell, "$\\n?" )
+		var descEnd = wikifier.nextMatch
+
+		statusCell.setAttribute( "title", this.lingo.statusTips[state] )
+		descCell.setAttribute(   "title", this.lingo.statusTips[state]+this.lingo.descClickTip )
+		if (origCell) {
+			createTiddlyElement( origCell, "div", null, null, orig )
+			origCell.setAttribute( "title", this.lingo.origTip )
+			curCell.setAttribute( "title", this.lingo.curTip )
+		}
+		else {
+			curCell.setAttribute( "title", this.lingo.curTip2 )
+		}
+		var curDivContents = (state==this.NASCENT)? "?" : cur
+		var curDiv = createTiddlyElement( curCell, "div", null, null, curDivContents )
+		spentCell.setAttribute( "title", this.lingo.spentTip )
+		var spentDiv = createTiddlyElement( spentCell, "div", null, null, spent )
+		remCell.setAttribute( "title", this.lingo.remTip )
+		var remDiv = createTiddlyElement( remCell, "div", null, null, rem )
+
+		// Handle double-click on the description by going
+		// into edit mode and selecting the description
+		descCell.ondblclick = this.editDescription( tiddler, end, descEnd )
+
+		function appTitle( el, suffix ) {
+			el.setAttribute( "title", el.getAttribute("title")+suffix )
+		}
+
+		// For incomplete tasks, handle double-click on the bullet by marking the task complete
+		if ( state != this.DONE ) {
+			appTitle( statusCell, this.lingo.statusClickTip )
+			statusCell.ondblclick = this.markTaskComplete( tiddler, start, end, macroName, orig, cur, state )
+		}
+		// For complete ones, handle double-click on the bullet by letting you adjust the time spent
+		else {
+			appTitle( statusCell, this.lingo.statusDoneTip )
+			statusCell.ondblclick = this.adjustTimeSpent( tiddler, start, end, macroName, orig, cur, spent )
+		}
+
+		// Add click handlers for the numeric cells.
+		if ( state != this.DONE ) {
+			appTitle( curCell, this.lingo.clickTip )
+			curDiv.className = "adjustable"
+			curDiv.onclick = this.adjustCurrentEstimate( tiddler, start, end, macroName,
+				orig, cur, spent, curDivContents )
+		}
+		appTitle( spentCell, this.lingo.clickTip )
+		spentDiv.className = "adjustable"
+		spentDiv.onclick = this.adjustTimeSpent( tiddler, start, end, macroName, orig, cur, spent )
+		if ( state == this.LIVE ) {
+			appTitle( remCell, this.lingo.clickTip )
+			remDiv.className = "adjustable"
+			remDiv.onclick = this.adjustTimeRemaining( tiddler, start, end, macroName, orig, cur, spent )
+		}
+	},
+
+	// Puts the tiddler into edit mode, and selects the range of characters
+	// defined by start and end.  Separated for leak prevention in IE.
+	editDescription: function( tiddler, start, end ) {
+		return wrapEventHandler( function(e) {
+			story.displayTiddler( null, tiddler.title, DEFAULT_EDIT_TEMPLATE )
+			var tiddlerElement = document.getElementById( story.idPrefix + tiddler.title )
+			window.scrollTo( 0, ensureVisible(tiddlerElement) )
+			var element = story.findEditField( tiddler.title, "text" )
+			if ( element && element.tagName.toLowerCase() == "textarea" ) {
+				// Back up one char if the last char's a newline
+				if ( tiddler.text[end-1] == '\n' )
+					--end
+				element.focus()
+				if ( element.setSelectionRange != undefined ) { // Mozilla
+					element.setSelectionRange( start, end )
+					// Damn mozilla doesn't scroll to visible.  Approximate.
+					var max = 0.0 + element.scrollHeight
+					var len = element.textLength
+					var top = max*start/len, bot = max*end/len
+					element.scrollTop = Math.min( top, (bot+top-element.clientHeight)/2 )
+				}
+				else if ( element.createTextRange != undefined ) { // IE
+					var range = element.createTextRange()
+					range.collapse()
+					range.moveEnd("character", end)
+					range.moveStart("character", start)
+					range.select()
+				}
+				else // Other? Too bad, just select the whole thing.
+					element.select()
+				return false
+			}
+			else
+				return true
+		} )
+	},
+
+	// Modifies a task macro call such that the task appears complete.
+	markTaskComplete: function( tiddler, start, end, macroName, orig, cur, state ) {
+		var macro = this, text = tiddler.text
+		return wrapEventHandler( function(e) {
+			if ( text !== tiddler.text ) {
+				alert( macro.lingo.notCurrent )
+				return false
+			}
+			if ( state == macro.NASCENT )
+				orig = cur = 0
+			// The second "cur" in the call below bumps up the time spent
+			// to match the current estimate.
+			macro.replaceMacroCall( tiddler, start, end, macroName, orig, cur, cur )
+			return false
+		} )
+	},
+
+	// Asks the user for an adjustment to the current estimate, modifies the macro call accordingly.
+	adjustCurrentEstimate: function( tiddler, start, end, macroName, orig, cur, spent, curDivContents ) {
+		var macro = this, text = tiddler.text
+		return wrapEventHandler( function(e) {
+			if ( text !== tiddler.text ) {
+				alert( macro.lingo.notCurrent )
+				return false
+			}
+			var txt = prompt( macro.lingo.curPrompt, curDivContents )
+			if ( txt != null ) {
+				var a = macro.breakInput( txt )
+				cur = macro.offset( cur, a[0] )
+				if ( a.length > 1 )
+					spent = macro.offset( spent, a[1] )
+				macro.replaceMacroCall( tiddler, start, end, macroName, orig, cur, spent )
+			}
+			return false
+		} )
+	},
+
+	// Asks the user for an adjustment to the time spent, modifies the macro call accordingly.
+	adjustTimeSpent: function( tiddler, start, end, macroName, orig, cur, spent ) {
+		var macro = this, text = tiddler.text
+		return wrapEventHandler( function(e) {
+			if ( text !== tiddler.text ) {
+				alert( macro.lingo.notCurrent )
+				return false
+			}
+			var txt = prompt( macro.lingo.spentPrompt, spent )
+			if ( txt != null ) {
+				var a = macro.breakInput( txt )
+				spent = macro.offset( spent, a[0] )
+				var rem = cur - spent
+				if ( a.length > 1 ) {
+					rem = macro.offset( rem, a[1] )
+					cur = spent + rem
+				}
+				macro.replaceMacroCall( tiddler, start, end, macroName, orig, cur, spent )
+			}
+			return false
+		} )
+	},
+
+	// Asks the user for an adjustment to the time remaining, modifies the macro call accordingly.
+	adjustTimeRemaining: function( tiddler, start, end, macroName, orig, cur, spent ) {
+		var macro = this
+		var text  = tiddler.text
+		var rem   = cur - spent
+		return wrapEventHandler( function(e) {
+			if ( text !== tiddler.text ) {
+				alert( macro.lingo.notCurrent )
+				return false
+			}
+			var txt = prompt( macro.lingo.remPrompt, rem )
+			if ( txt != null ) {
+				var a = macro.breakInput( txt )
+				var newRem = macro.offset( rem, a[0] )
+				if ( newRem > rem || a.length > 1 )
+					cur += (newRem - rem)
+				else
+					spent += (rem - newRem)
+				if ( a.length > 1 )
+					spent = macro.offset( spent, a[1] )
+				macro.replaceMacroCall( tiddler, start, end, macroName, orig, cur, spent )
+			}
+			return false
+		} )
+	},
+
+	// Breaks input at spaces & commas, returns array
+	breakInput: function( txt ) {
+		var a = txt.trim().split( /[\s,]+/ )
+		if ( a.length == 0 )
+			a = [NaN]
+		return a
+	},
+
+	// Adds to, subtracts from, or replaces a numeric value
+	offset: function( num, txt ) {
+		if ( txt == "" || typeof(txt) != "string" )
+			return NaN
+		if ( txt.match(/^[+-]/) )
+			return num + (+txt)
+		return +txt
+	},
+
+	// Does some error checking, then replaces the indicated macro
+	// call within the text of the given tiddler.
+	replaceMacroCall: function( tiddler, start, end, macroName, orig, cur, spent )
+	{
+		if ( isNaN(cur+spent) ) {
+			alert( this.lingo.numbersOnly )
+			return
+		}
+		if ( spent < 0 || cur < 0 ) {
+			alert( this.lingo.noNegative )
+			return
+		}
+		if ( isNaN(orig) )
+			orig = cur
+		if ( spent > cur )
+			cur = spent
+		var text = tiddler.text.substring(0,start) + "<<" + macroName + " " +
+			orig + " " + cur + " " + spent + ">>" + tiddler.text.substring(end)
+		var title = tiddler.title
+		store.saveTiddler( title, title, text, config.options.txtUserName, new Date(), undefined )
+		//story.refreshTiddler( title, null, true )
+		if ( config.options.chkAutoSave )
+			saveChanges()
+	}
+}
+//}}}
+/***
+!Tasksum Macro
+Usage:
+> {{{<<tasksum "start" ["here" [intro]]>>}}}
+or:
+> {{{<<tasksum "end" [intro]>>}}}
+Put one of the {{{<<tasksum start>>}}} lines before the tasks you want to summarize, and an {{{end}}} line after them.  By default, the summary goes at the end; if you include {{{here}}} in the start line, the summary will go at the top.  The intro argument, if supplied, replaces the default text introducing the summary.
+***/
+//{{{
+config.macros.tasksum = {
+
+	// Translatable text:
+	lingo: {
+		unrecVerb:	"<<%0>> requires 'start' or 'end' as its first argument",
+		mustMatch:	"<<%0 end>> must match a preceding <<%0 start>>",
+		defIntro:	"Task summary:",
+		nascentSum:	"''%0 not estimated''",
+		doneSum:	"%0 complete (in %1 hours)",
+		liveSum:	"%0 ongoing (%1 hours so far, ''%2 hours remaining'')",
+		overSum:	"Total overestimate: %0%.",
+		underSum:	"Total underestimate: %0%.",
+		descPattern:	"%0 %1. %2",
+                origTip:	"Total original estimates in hours",
+		curTip:		"Total current estimates in hours",
+		spentTip:	"Total hours spent on tasks",
+		remTip:		"Total hours remaining"
+	},
+
+	// The macro handler
+	handler: function( place, macroName, params, wikifier, paramString, tiddler )
+	{
+		var sums = this.tasksums
+		if ( params[0] == "start" ) {
+			sums.unshift([])
+			if ( params[1] == "here" ) {
+				sums[0].intro = params[2] || this.lingo.defIntro
+				sums[0].place = place
+				sums[0].placement = place.childNodes.length
+			}
+		}
+		else if ( params[0] == "end" ) {
+			if ( ! sums.length )
+				throw Error( this.lingo.mustMatch.format([macroName]) )
+			var list = sums.shift()
+			var intro = list.intro || params[1] || this.lingo.defIntro
+			var nNascent=0, nLive=0, nDone=0, nMine=0
+			var totLiveSpent=0, totDoneSpent=0
+			var totOrig=0, totCur=0, totSpent=0
+			for ( var i=0; i < list.length; ++i ) {
+				var a = list[i]
+				if ( a.length > 3 ) {
+					nNascent 	+= a[0]
+					nLive 		+= a[1]
+					nDone 		+= a[2]
+					totLiveSpent 	+= a[3]
+					totDoneSpent 	+= a[4]
+					totOrig 	+= a[5]
+					totCur 		+= a[6]
+					totSpent 	+= a[7]
+					if ( a.owner == tiddler )
+						nMine	+= a[8]
+				}
+				else {
+					if ( a.owner == tiddler )
+						++nMine
+					if ( isNaN(a[0]) ) {
+						++nNascent
+					}
+					else {
+						if ( a[1] > a[2] ) {
+							++nLive
+							totLiveSpent += a[2]
+						}
+						else {
+							++nDone
+							totDoneSpent += a[2]
+						}
+						totOrig  += a[0]
+						totCur   += a[1]
+						totSpent += a[2]
+					}
+				}
+			}
+
+			// If we're nested, push a summary outward
+                        if ( sums.length ) {
+				var summary = [nNascent, nLive, nDone, totLiveSpent, totDoneSpent,
+						totOrig, totCur, totSpent, nMine]
+				summary.owner = tiddler
+				sums[0].push( summary )
+			}
+
+			var descs = [], styles = []
+			if ( nNascent > 0 ) {
+				descs.push( this.lingo.nascentSum.format([nNascent]) )
+				styles.push( "nascent" )
+			}
+			if ( nDone > 0 )
+				descs.push( this.lingo.doneSum.format([nDone, totDoneSpent]) )
+			if ( nLive > 0 ) {
+				descs.push( this.lingo.liveSum.format([nLive, totLiveSpent, totCur-totSpent]) )
+				styles.push( "live" )
+			}
+			else
+				styles.push( "done" )
+			var off = ""
+			if ( totOrig > totCur )
+				off = this.lingo.overSum.format( [Math.round(100.0*(totOrig-totCur)/totCur)] )
+			else if ( totCur > totOrig )
+				off = this.lingo.underSum.format( [Math.round(100.0*(totCur-totOrig)/totOrig)] )
+
+			var top		= (list.intro != undefined)
+			var table	= createTiddlyElement( null, "table", null, "tasksum "+(top?"top":"bottom") )
+			var tbody	= createTiddlyElement( table, "tbody" )
+			var row		= createTiddlyElement( tbody, "tr", null, styles.join(" ") )
+			var descCell	= createTiddlyElement( row,   "td", null, "description" )
+
+			var description = this.lingo.descPattern.format( [intro, descs.join(", "), off] )
+			wikify( description, descCell, null, tiddler )
+
+			var origCell	= totOrig == totCur? null
+					: createTiddlyElement( row, "td", null, "numeric original", totOrig )
+			var curCell	= createTiddlyElement( row, "td", null, "numeric current", totCur )
+			var spentCell	= createTiddlyElement( row, "td", null, "numeric spent", totSpent )
+			var remCell	= createTiddlyElement( row, "td", null, "numeric remaining", totCur-totSpent )
+
+			if ( origCell )
+				origCell.setAttribute( "title", this.lingo.origTip )
+			curCell  .setAttribute( "title", this.lingo.curTip )
+			spentCell.setAttribute( "title", this.lingo.spentTip )
+			remCell  .setAttribute( "title", this.lingo.remTip )
+
+			// Discard the table if there are no tasks
+			if ( list.length > 0 ) {
+				var place = top? list.place : place
+				var placement = top? list.placement : place.childNodes.length
+				if ( placement >= place.childNodes.length )
+					place.appendChild( table )
+				else
+					place.insertBefore( table, place.childNodes[placement] )
+			}
+		}
+		else
+			throw Error( this.lingo.unrecVerb.format([macroName]) )
+
+		// If we're wikifying, and are followed by end-of-line, swallow the newline.
+		if ( wikifier && wikifier.source.charAt(wikifier.nextMatch) == "\n" )
+			++wikifier.nextMatch
+	},
+
+	// This is the stack of pending summaries
+	tasksums: []
+}
+//}}}
+/***
+!Taskadder Macro
+Usage:
+> {{{<<taskadder ["above"|"below"|"focus"|"nofocus"]...>>}}}
+Creates a line with text entry fields for a description and an estimate.  By default, puts focus in the description field and adds tasks above the entry fields.  Use {{{nofocus}}} to not put focus in the description field.  Use {{{below}}} to add tasks below the entry fields.
+***/
+//{{{
+config.macros.taskadder = {
+
+	// Translatable text:
+	lingo: {
+		unrecParam:	"<<%0>> doesn't recognize '%1' as a parameter",
+		descTip:	"Describe a new task",
+		curTip:		"Estimate how long in hours the task will take",
+		buttonText:	"add task",
+		buttonTip:	"Add a new task with the description and estimate as entered",
+		notCurrent:	"The tiddler has been modified since it was displayed, please redisplay it before adding a task this way.",
+
+		eol:		"eol"
+	},
+
+	// The macro handler
+	handler: function( place, macroName, params, wikifier, paramString, tiddler )
+	{
+		var above = true
+		var focus = false
+
+		while ( params.length > 0 ) {
+			var p = params.shift()
+			switch (p) {
+			case "above": 	above = true;  break
+			case "below": 	above = false; break
+			case "focus": 	focus = true;  break
+			case "nofocus":	focus = false; break
+			default:	throw Error( this.lingo.unrecParam.format([macroName, p]) )
+			}
+		}
+
+		// If we're followed by end-of-line, swallow the newline.
+		if ( wikifier.source.charAt(wikifier.nextMatch) == "\n" )
+			++wikifier.nextMatch
+
+		var where	= above? wikifier.matchStart : wikifier.nextMatch
+
+		var table	= createTiddlyElement( place, "table", null, "task" )
+		var tbody	= createTiddlyElement( table, "tbody" )
+		var row		= createTiddlyElement( tbody, "tr" )
+		var statusCell	= createTiddlyElement( row,   "td", null, "status" )
+		var descCell	= createTiddlyElement( row,   "td", null, "description" )
+		var curCell	= createTiddlyElement( row,   "td", null, "numeric" )
+		var addCell	= createTiddlyElement( row,   "td", null, "addtask" )
+
+		var descId	= this.generateId()
+		var curId	= this.generateId()
+		var descInput	= createTiddlyElement( descCell, "input", descId )
+		var curInput	= createTiddlyElement( curCell,  "input", curId  )
+
+		descInput.setAttribute( "type", "text" )
+		curInput .setAttribute( "type", "text" )
+		descInput.setAttribute( "size", "40")
+		curInput .setAttribute( "size", "6" )
+		descInput.setAttribute( "autocomplete", "off" );
+		curInput .setAttribute( "autocomplete", "off" );
+		descInput.setAttribute( "title", this.lingo.descTip );
+		curInput .setAttribute( "title", this.lingo.curTip  );
+
+		var addAction	= this.addTask( tiddler, where, descId, curId, above )
+		var addButton	= createTiddlyButton( addCell, this.lingo.buttonText, this.lingo.buttonTip, addAction )
+
+		descInput.onkeypress = this.handleEnter(addAction)
+		curInput .onkeypress = descInput.onkeypress
+		addButton.onkeypress = this.handleSpace(addAction)
+		if ( focus || tiddler.taskadderLocation == where ) {
+			descInput.focus()
+			descInput.select()
+		}
+	},
+
+	// Returns a function that inserts a new task macro into the tiddler.
+	addTask: function( tiddler, where, descId, curId, above ) {
+		var macro = this, oldText = tiddler.text
+		return wrapEventHandler( function(e) {
+			if ( oldText !== tiddler.text ) {
+				alert( macro.lingo.notCurrent )
+				return false
+			}
+			var desc	= document.getElementById(descId).value
+			var cur		= document.getElementById(curId) .value
+			var init	= tiddler.text.substring(0,where) + "<<task " + cur + ">> " + desc + "\n"
+			var text	= init + tiddler.text.substring(where)
+			var title	= tiddler.title
+			tiddler.taskadderLocation = (above? init.length : where)
+			try {
+				store.saveTiddler( title, title, text, config.options.txtUserName, new Date(), undefined )
+				//story.refreshTiddler( title, null, true )
+			}
+			finally {
+				delete tiddler.taskadderLocation
+			}
+			if ( config.options.chkAutoSave )
+				saveChanges()
+		} )
+	},
+
+	// Returns an event handler that delegates to two other functions: "matches" to decide
+	// whether to consume the event, and "addTask" to actually perform the work.
+	handleGeneric: function( addTask, matches ) {
+		return function(e) {
+			if (!e) var e = window.event
+			var consume = false
+			if ( matches(e) ) {
+				consume = true
+				addTask( e )
+			}
+			e.cancelBubble = consume;
+			if ( consume && e.stopPropagation ) e.stopPropagation();
+			return !consume;
+		}
+	},
+
+	// Returns an event handler that handles enter keys by calling another event handler
+	handleEnter: function( addTask ) {
+		return this.handleGeneric( addTask, function(e){return e.keyCode == 13 || e.keyCode == 10} ) // Different codes for Enter
+	},
+
+	// Returns an event handler that handles the space key by calling another event handler
+	handleSpace: function( addTask ) {
+		return this.handleGeneric( addTask, function(e){return (e.charCode||e.keyCode) == 32} )
+	},
+
+	counter: 0,
+	generateId: function() {
+		return "taskadder:" + String(this.counter++)
+	}
+}
+//}}}
+/***
+!Stylesheet
+***/
+//{{{
+var stylesheet = '\
+.viewer table.task, table.tasksum {\
+	width: 100%;\
+	padding: 0;\
+	border-collapse: collapse;\
+}\
+.viewer table.task {\
+	border: none;\
+	margin: 0;\
+}\
+table.tasksum, .viewer table.tasksum {\
+	border: solid 2px #999;\
+	margin: 3px 0;\
+}\
+table.tasksum td {\
+	text-align: center;\
+	border: 1px solid #ddd;\
+	background-color: #ffc;\
+	vertical-align: middle;\
+	margin: 0;\
+	padding: 0;\
+}\
+.viewer table.task tr {\
+	border: none;\
+}\
+.viewer table.task td {\
+	text-align: center;\
+	vertical-align: baseline;\
+	border: 1px solid #fff;\
+	background-color: inherit;\
+	margin: 0;\
+	padding: 0;\
+}\
+td.numeric {\
+	width: 3em;\
+}\
+table.task td.numeric div {\
+	border: 1px solid #ddd;\
+	background-color: #ffc;\
+	margin: 1px 0;\
+	padding: 0;\
+}\
+table.task td.original div {\
+	background-color: #fdd;\
+}\
+table.tasksum td.original {\
+	background-color: #fdd;\
+}\
+table.tasksum td.description {\
+	background-color: #e8e8e8;\
+}\
+table.task td.status {\
+	width: 1.5em;\
+	cursor: default;\
+}\
+table.task td.description, table.tasksum td.description {\
+	width: auto;\
+	text-align: left;\
+	padding: 0 3px;\
+}\
+table.task.done td.status,table.task.done td.description {\
+	color: #ccc;\
+}\
+table.task.done td.current, table.task.done td.remaining {\
+	visibility: hidden;\
+}\
+table.task.done td.spent div, table.tasksum tr.done td.current,\
+table.tasksum tr.done td.spent, table.tasksum tr.done td.remaining {\
+	background-color: #eee;\
+	color: #aaa;\
+}\
+table.task.nascent td.description {\
+	color: #844;\
+}\
+table.task.nascent td.current div, table.tasksum tr.nascent td.numeric.current {\
+	font-weight: bold;\
+	color: #c00;\
+	background-color: #def;\
+}\
+table.task.nascent td.spent, table.task.nascent td.remaining {\
+	visibility: hidden;\
+}\
+td.remaining {\
+	font-weight: bold;\
+}\
+.adjustable {\
+	cursor: pointer; \
+}\
+table.task input {\
+	display: block;\
+	width: 100%;\
+	font: inherit;\
+	margin: 2px 0;\
+	padding: 0;\
+	border: 1px inset #999;\
+}\
+table.task td.numeric input {\
+	background-color: #ffc;\
+	text-align: center;\
+}\
+table.task td.addtask {\
+	width: 6em;\
+	border-left: 2px solid white;\
+	vertical-align: middle;\
+}\
+'
+setStylesheet( stylesheet, "TaskMacroPluginStylesheet" )
+//}}}
+
+
+
+
!!Changes in 1.1.0
+* Made the macros work in nested tiddlers (ie when one tiddler includes another using {{{<<tiddler>>}}} or something similar):
+** Task summaries in the outer tiddler include the tasks from the inner one
+** Using the editing shortcuts on the tasks as displayed in the outer tiddler correctly changes the inner tiddler and also redisplays the outer one
+** Added sanity checks to the editing shortcuts so they will refuse to work if the tiddler has been modified behind their backs
+* Made some small usability fixes:
+** The "add task" button now responds to the Space key (hat tip: Daniel Baird)
+** Double-clicking on a completed task's bullet now does the same thing as clicking on the elapsed time: it lets you adjust the time spent, giving you the option of resurrecting the task (hat tip: ~JackF)
+** Reworked the focus handling of the taskadder macro so it works more intuitively, by refocusing on the same adder you just used
+
+
+
+
The task macro provided by the TaskMacroPlugin is for planning, estimating, and tracking detailed tasks such as those required for writing software.  It is inspired by [[Joel Spolsky|http://www.joelonsoftware.com/articles/fog0000000245.html]]'s method for scheduling software development, also popularized by [[Voo2do|http://voo2do.com]] and [[XPlanner|http://xplanner.org]].
+
+For changes since the previous version, see the TaskMacroReleaseNotes.
+
+This tutorial leads you through the use of the task macro itself, and supporting macros that summarize lists of tasks and simplify the adding of tasks to a list.  Follow along by clicking the links below.  Or click the little down-arrow next to this tiddler's title, above, and choose "Open all" to have all the tutorial sections displayed at once.
+
+
+
+
+
<!---
+Includes portions of [[TagglyTaggingViewTemplate|http://simonbaird.com/mptw/#TagglyTaggingViewTemplate]], v1.2 (16-Jan-2006).
+Also adds a pair of tasksum macros around the tiddler, to summarize any contained tasks at the top.  Removes the "-" in front of closeTiddler, which can easily bite you if you have a focusable element in a tiddler, such as a taskadder entry field.
+Portions written by Luke Blanshard are hereby released into the public domain.
+--->
+<!--{{{-->
+<div class="toolbar" macro="toolbar closeTiddler closeOthers +editTiddler permalink references jump newHere"></div>
+<div class="tagglyTagged" macro="tags"></div>
+<div><span class="title" macro="view title"></span><span class="miniTag" macro="miniTag"></span></div>
+<div macro="tasksum start here"></div>
+<div class="viewer" macro="view text wikified"></div>
+<div macro="tasksum end"></div>
+<div class="tagglyTagging" macro="tagglyListWithSort"></div>
+<!--}}}-->
+
+
+
+
/***
+''TextAreaPlugin for TiddlyWiki version 2.0''
+^^author: Eric Shulman - ELS Design Studios
+source: http://www.elsdesign.com/tiddlywiki/#TextAreaPlugin
+license: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^
+
+This plugin 'hijacks' the TW core function, ''Story.prototype.focusTiddler()'', so it can add special 'keyDown' handlers to adjust several behaviors associated with the textarea control used in the tiddler editor.  Specifically, it:
+* Adds text search INSIDE of edit fields.^^
+Use ~CTRL-F for "Find" (prompts for search text), and ~CTRL-G for "Find Next" (uses previous search text)^^
+* Enables TAB characters to be entered into field content^^
+(instead of moving to next field)^^
+* Option to set cursor at top of edit field instead of auto-selecting contents^^
+(see configuration section for checkbox)^^
+!!!!!Configuration
+<<<
+<<option chkDisableAutoSelect>> place cursor at start of textarea instead of pre-selecting content
+<<option chkTextAreaExtensions>> add control-f (find), control-g (find again) and allow TABs as input in textarea
+<<<
+!!!!!Installation
+<<<
+Import (or copy/paste) the following tiddlers into your document:
+''TextAreaPlugin'' (tagged with <<tag systemConfig>>)
+<<<
+!!!!!Revision History
+<<<
+''2006.01.22 [1.0.1]''
+only add extra key processing for TEXTAREA elements (not other edit fields).
+added option to enable/disable textarea keydown extensions (default is "standard keys" only)
+''2006.01.22 [1.0.0]''
+Moved from temporary "System Tweaks" tiddler into 'real' TextAreaPlugin tiddler.
+<<<
+!!!!!Code
+***/
+//{{{
+version.extensions.textAreaPlugin= {major: 1, minor: 0, revision: 1, date: new Date(2006,1,23)};
+//}}}
+
+//{{{
+if (!config.options.chkDisableAutoSelect) config.options.chkDisableAutoSelect=false; // default to standard action
+if (!config.options.chkTextAreaExtensions) config.options.chkTextAreaExtensions=false; // default to standard action
+
+// Focus a specified tiddler. Attempts to focus the specified field, otherwise the first edit field it finds
+Story.prototype.focusTiddler = function(title,field)
+{
+	var tiddler = document.getElementById(this.idPrefix + title);
+	if(tiddler != null)
+		{
+		var children = tiddler.getElementsByTagName("*")
+		var e = null;
+		for (var t=0; t<children.length; t++)
+			{
+			var c = children[t];
+			if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")
+				{
+				if(!e)
+					e = c;
+				if(c.getAttribute("edit") == field)
+					e = c;
+				}
+			}
+		if(e)
+			{
+			e.focus();
+			e.select(); // select entire contents
+
+			// TWEAK: add TAB and "find" key handlers
+			if (config.options.chkTextAreaExtensions) // add extra key handlers
+				addKeyDownHandlers(e);
+
+			// TWEAK: option to NOT autoselect contents
+			if (config.options.chkDisableAutoSelect) // set cursor to start of field content
+				if (e.setSelectionRange) e.setSelectionRange(0,0); // for FF
+				else if (e.createTextRange) { var r=e.createTextRange(); r.collapse(true); r.select(); } // for IE
+
+			}
+		}
+}
+//}}}
+
+//{{{
+function addKeyDownHandlers(e)
+{
+	// exit if not textarea or element doesn't allow selections
+	if (e.tagName.toLowerCase()!="textarea" || !e.setSelectionRange) return;
+
+	// utility function: exits keydown handler and prevents browser from processing the keystroke
+	var processed=function(ev) { ev.cancelBubble=true; if (ev.stopPropagation) ev.stopPropagation(); return false; }
+
+	// capture keypress in edit field
+	e.onkeydown = function(ev) { if (!ev) var ev=window.event;
+
+		// process TAB
+		if (!ev.shiftKey && ev.keyCode==9) { 
+			// replace current selection with a TAB character
+			var start=e.selectionStart; var end=e.selectionEnd;
+			e.value=e.value.substr(0,start)+String.fromCharCode(9)+e.value.substr(end);
+			// update insertion point, scroll it into view
+			e.setSelectionRange(start+1,start+1);
+			var linecount=e.value.split('\n').length;
+			var thisline=e.value.substr(0,e.selectionStart).split('\n').length-1;
+			e.scrollTop=Math.floor((thisline-e.rows/2)*e.scrollHeight/linecount);
+			return processed(ev);
+		}
+
+		// process CTRL-F (find matching text) or CTRL-G (find next match)
+		if (ev.ctrlKey && (ev.keyCode==70||ev.keyCode==71)) {
+			// if ctrl-f or no previous search, prompt for search text (default to previous text or current selection)... if no search text, exit
+			if (ev.keyCode==70||!e.find||!e.find.length)
+				{ var f=prompt("find:",e.find?e.find:e.value.substring(e.selectionStart,e.selectionEnd)); e.focus(); e.find=f?f:e.find; }
+			if (!e.find||!e.find.length) return processed(ev);
+			// do case-insensitive match with 'wraparound'...  if not found, alert and exit 
+			var newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase(),e.selectionStart+1);
+			if (newstart==-1) newstart=e.value.toLowerCase().indexOf(e.find.toLowerCase());
+			if (newstart==-1) { alert("'"+e.find+"' not found"); e.focus(); return processed(ev); }
+			// set new selection, scroll it into view, and report line position in status bar
+			e.setSelectionRange(newstart,newstart+e.find.length);
+			var linecount=e.value.split('\n').length;
+			var thisline=e.value.substr(0,e.selectionStart).split('\n').length;
+			e.scrollTop=Math.floor((thisline-1-e.rows/2)*e.scrollHeight/linecount);
+			window.status="line: "+thisline+"/"+linecount;
+			return processed(ev);
+		}
+	}
+}
+//}}}
+
+
+ + + + + + + + + + From 3c42a1e2474213c7b32ad66ba4a6e33702db35ac Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Tue, 19 Jun 2007 03:46:56 +0200 Subject: [PATCH 2/4] Link to the new Page from Main wiki --- wiki/index.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/wiki/index.html b/wiki/index.html index 842d2616a..1167aaea3 100644 --- a/wiki/index.html +++ b/wiki/index.html @@ -747,8 +747,13 @@ config.macros.timeline.handler = function(place,macroName,params,wikifier,paramS } //}}} -
-
This 'index.html' becomes the entry point of some tiddlywikis managed under git. There is a 'empty.html' in the same folder serving as template for generating new wikis. Please refrain from editing it.
+
+
This 'index.html' becomes the entry point of some tiddlywikis managed under git. There is a 'empty.html' in the same folder serving as template for generating new wikis. Please refrain from editing it.
+
+!Design Draft
+to get started, we create design drafts emphasizing different aspects and regions of Cinelerra-3
+
+ * Ichthyo focuses mainly on the Render Engine and its interconnection to the EDL. <html><a href="ichthyo-draft.html">see this separate wiki page</a></html>
GettingStarted

From 58304824764e7fb17e0216c90753e51a601a883b Mon Sep 17 00:00:00 2001
From: Ichthyostega 
Date: Tue, 19 Jun 2007 08:18:13 +0200
Subject: [PATCH 3/4] outlined the workings of the Builder and Controller,
 added Render Engine Classes

---
 uml/renderengine/cin3/128005         |   9 +-
 uml/renderengine/cin3/128005.diagram |  34 +-
 uml/renderengine/cin3/128133.diagram | 145 ++++++---
 uml/renderengine/cin3/128261         | 193 ++++++++++--
 uml/renderengine/cin3/128261.diagram |  81 +++++
 uml/renderengine/cin3/128389         | 449 ++++++++++++++++++++++++++-
 uml/renderengine/cin3/128389.diagram | 196 ++++++++++++
 uml/renderengine/cin3/128517.diagram | 124 ++++++++
 uml/renderengine/cin3/128645         |  57 +++-
 uml/renderengine/cin3/128645.diagram |   3 +
 uml/renderengine/cin3/128901         | 170 ++++++++++
 uml/renderengine/cin3/129029         | 111 +++++++
 uml/renderengine/cin3/5.session      |  33 +-
 uml/renderengine/cin3/cin3.prj       |   8 +-
 wiki/ichthyo-draft.html              |   3 +
 15 files changed, 1519 insertions(+), 97 deletions(-)
 create mode 100644 uml/renderengine/cin3/128261.diagram
 create mode 100644 uml/renderengine/cin3/128389.diagram
 create mode 100644 uml/renderengine/cin3/128517.diagram
 create mode 100644 uml/renderengine/cin3/128645.diagram
 create mode 100644 uml/renderengine/cin3/128901
 create mode 100644 uml/renderengine/cin3/129029

diff --git a/uml/renderengine/cin3/128005 b/uml/renderengine/cin3/128005
index 0979f4a42..e7c1f8e2e 100644
--- a/uml/renderengine/cin3/128005
+++ b/uml/renderengine/cin3/128005
@@ -1,6 +1,6 @@
 format 38
 "design" // design
-  revision 2
+  revision 3
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -56,6 +56,10 @@ Not a real code package, rather a container for design drafts, specifications, d
 
     component 128261 "Controller"
       stereotype "subsystem"
+      simplerelation 128261
+	-_->
+	  on component_ref 128005 // Builder
+      end
     end
 
     component 128645 "AssetManagement"
@@ -80,5 +84,8 @@ Not a real code package, rather a container for design drafts, specifications, d
 
     component 129157 "Cache"
     end
+
+    component 129285 "RenderPathManager"
+    end
   end
 end
diff --git a/uml/renderengine/cin3/128005.diagram b/uml/renderengine/cin3/128005.diagram
index 62a8f5b02..6dd14ad62 100644
--- a/uml/renderengine/cin3/128005.diagram
+++ b/uml/renderengine/cin3/128005.diagram
@@ -1,56 +1,56 @@
 format 38
 
 fragment 128005 "UI Layer"
-  xyzwh 320 22 2000 833 100
+  xyzwh 321 22 2000 829 100
 end
 fragment 128133 "Processing Layer"
-  xyzwh 64 155 2000 1092 657
+  xyzwh 64 156 2000 1089 655
   separator 4833
 end
 fragment 128261 "Backend Layer"
-  xyzwh 64 846 2000 1092 109
+  xyzwh 64 848 2000 1089 105
 end
 packagecanvas 128389 
   package_ref 128133 // AssetManager
-    xyzwh 560 200 2005 254 216
+    xyzwh 561 201 2005 252 214
 packagecanvas 128517 
   package_ref 128261 // MObject
-    xyzwh 93 200 2006 460 337
+    xyzwh 94 201 2006 458 335
 packagecanvas 128645 
   package_ref 128389 // RenderEngine
-    xyzwh 93 551 2005 460 237
+    xyzwh 94 551 2005 458 235
 componentcanvas 128773 component_ref 128005 // Builder
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 121 419 2015 231 107
+  xyzwh 121 419 2015 229 105
 componentcanvas 128901 component_ref 128133 // Session
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 121 242 2011 325 159
+  xyzwh 122 243 2011 323 156
 componentcanvas 129029 component_ref 128261 // Controller
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 378 419 2011 165 107
+  xyzwh 372 419 2011 175 105
 componentcanvas 129157 component_ref 128389 // EDL
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 290 302 2016 139 81
+  xyzwh 288 302 2016 143 79
 componentcanvas 129285 component_ref 128517 // Fixture
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 129 321 2016 134 68
+  xyzwh 124 319 2016 143 69
 note 129541 "Structures edited by the User"
   xyzwh 43 269 2016 181 41
 componentcanvas 129669 component_ref 128645 // AssetManagement
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 576 241 2010 210 162
+  xyzwh 577 241 2010 208 159
 componentcanvas 129797 component_ref 128773 // Dispatcher
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 412 33 2005 168 68
+  xyzwh 406 31 2005 179 69
 componentcanvas 129925 component_ref 128901 // Engine
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 118 601 2010 237 178
+  xyzwh 118 602 2010 235 176
 componentcanvas 130053 component_ref 129029 // Stream Provider
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 121 877 2005 231 68
+  xyzwh 121 876 2005 229 69
 componentcanvas 130181 component_ref 129157 // Cache
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 397 877 2005 168 68
+  xyzwh 391 876 2005 179 69
 note 131717 "Coordinates Playback and Rendering"
   xyzwh 483 494 2016 149 63
 note 131845 "border of the low-level, performance-critical part of the system"
@@ -66,7 +66,7 @@ simplerelationcanvas 131333 simplerelation_ref 128133
 line 130309 -_-_
   from ref 129797 z 2004 to ref 128901
 line 130821 -_-_ geometry HVr
-  from ref 129797 z 2004 to point 493 470
+  from ref 129797 z 2004 to point 493 469
   line 130949 z 2004 to ref 129029
 line 131077 -_-_
   from ref 129797 z 2004 to ref 129669
diff --git a/uml/renderengine/cin3/128133.diagram b/uml/renderengine/cin3/128133.diagram
index ba85c4526..440e77245 100644
--- a/uml/renderengine/cin3/128133.diagram
+++ b/uml/renderengine/cin3/128133.diagram
@@ -2,7 +2,7 @@ format 38
 
 classcanvas 128005 class_ref 128005 // Session
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 25 609 2000
+  xyz 27 609 2000
   end
 classcanvas 128133 class_ref 128133 // EDL
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -10,7 +10,7 @@ classcanvas 128133 class_ref 128133 // EDL
   end
 classcanvas 128261 class_ref 128261 // Fixture
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 231 911 2000
+  xyz 196 894 2000
   end
 classcanvas 129029 class_ref 128389 // Track
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -18,11 +18,11 @@ classcanvas 129029 class_ref 128389 // Track
   end
 classcanvas 129413 class_ref 128517 // MObject
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 396 115 2000
+  xyz 309 136 2000
   end
 classcanvas 129669 class_ref 128645 // Placement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 657 114 2000
+  xyz 570 128 2000
   end
 classcanvas 129925 class_ref 128389 // Track
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -30,48 +30,72 @@ classcanvas 129925 class_ref 128389 // Track
   end
 classcanvas 130949 class_ref 128773 // AbstractMO
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 402 238 2000
+  xyz 314 258 2000
   end
 classcanvas 131461 class_ref 128901 // Clip
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 370 348 2000
+  xyz 279 368 2000
   end
 classcanvas 131717 class_ref 129029 // Effect
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 425 348 2000
+  xyz 335 368 2000
   end
 classcanvas 131973 class_ref 129157 // Meta
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 480 348 2000
+  xyz 389 368 2000
   end
 classcanvas 132229 class_ref 129285 // DirectPlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 647 241 2000
+  xyz 659 373 2000
   end
 classcanvas 132869 class_ref 129413 // RelativePlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 581 329 2000
+  xyz 477 360 2000
   end
 classcanvas 134149 class_ref 129541 // Allocation
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 727 346 2000
+  xyz 589 373 2000
   end
 classcanvas 134405 class_ref 129669 // Label
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 530 463 2000
+  xyz 439 483 2000
   end
-classcanvas 134661 class_ref 128645 // Placement
+classcanvas 135429 class_ref 129797 // ExplicitePlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 447 783 2000
+  xyz 652 231 2004
+  end
+classcanvas 135813 class_ref 129797 // ExplicitePlacement
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 458 805 2000
+  end
+classcanvas 136581 class_ref 129925 // Auto
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 382 483 2005
+  end
+note 136837 "Placement \"locates\" a Media Object"
+  xyzwh 375 87 3005 207 36
+textcanvas 136965 "the Timeline is a list of placements reduced to absolute coordinates (time, track)"
+  xyzwh 451 912 2000 121 90
+textcanvas 137093 "Fixture is the actual assembly of various Media Objects ready to be performed"
+  xyzwh 130 959 2000 147 108
+classcanvas 137221 class_ref 130053 // Wish
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 573 485 2000
+  end
+classcanvas 137349 class_ref 130181 // Constraint
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 621 485 2000
   end
 relationcanvas 128389 relation_ref 128005 // 
-  from ref 128005 z 1999 stereotype "<>" xyz 136 628 3000 to ref 128133
-  role_a_pos 198 603 3000 no_role_b
-  multiplicity_a_pos 203 637 3000 no_multiplicity_b
+  geometry VH
+  from ref 128005 z 1999 to point 52 626
+  line 136453 z 1999 stereotype "<>" xyz 139 629 3000 to ref 128133
+  role_a_pos 201 604 3000 no_role_b
+  multiplicity_a_pos 205 637 3000 no_multiplicity_b
 relationcanvas 128517 relation_ref 128133 // 
   from ref 128005 z 1999 to ref 128261
-  role_a_pos 246 885 3000 no_role_b
-  multiplicity_a_pos 219 885 3000 no_multiplicity_b
+  role_a_pos 235 869 3000 no_role_b
+  multiplicity_a_pos 209 869 3000 no_multiplicity_b
 relationcanvas 128645 relation_ref 128261 // 
   geometry VHr
   from ref 128261 z 1999 to point 252 930
@@ -80,29 +104,29 @@ relationcanvas 128645 relation_ref 128261 // 
   no_multiplicity_a no_multiplicity_b
 relationcanvas 129157 relation_ref 128389 // 
   geometry HV
-  from ref 128133 z 1999 stereotype "<>" xyz 280 627 3000 to point 326 626
+  from ref 128133 z 1999 stereotype "<>" xyz 283 628 3000 to point 326 626
   line 129285 z 1999 to ref 129029
-  role_a_pos 338 686 3000 no_role_b
-  multiplicity_a_pos 313 686 3000 no_multiplicity_b
+  role_a_pos 338 687 3000 no_role_b
+  multiplicity_a_pos 314 687 3000 no_multiplicity_b
 relationcanvas 129797 relation_ref 128645 // 
   from ref 129413 z 1999 to ref 129669
-  role_a_pos 589 122 3000 role_b_pos 492 123 3000
-  multiplicity_a_pos 639 156 3000 multiplicity_b_pos 492 157 3000
+  role_a_pos 509 143 3000 role_b_pos 397 143 3000
+  multiplicity_a_pos 553 176 3000 multiplicity_b_pos 397 176 3000
 relationcanvas 130181 relation_ref 129029 // 
   geometry HV
-  from ref 128261 z 1999 stereotype "<>" xyz 290 932 3000 to point 339 930
+  from ref 128261 z 1999 stereotype "<>" xyz 311 933 3000 to point 339 930
   line 130565 z 1999 to ref 129925
-  role_a_pos 351 979 3000 no_role_b
-  multiplicity_a_pos 313 979 3000 no_multiplicity_b
+  role_a_pos 351 980 3000 no_role_b
+  multiplicity_a_pos 315 980 3000 no_multiplicity_b
 relationcanvas 130821 relation_ref 128517 // 
   geometry VH
-  from ref 128133 z 1999 stereotype "<>" xyz 225 554 3000 to point 252 146
+  from ref 128133 z 1999 stereotype "<>" xyz 228 565 3000 to point 252 166
   line 132357 z 1999 to ref 129413
-  role_a_pos 360 123 3000 no_role_b
-  multiplicity_a_pos 380 157 3000 no_multiplicity_b
+  role_a_pos 276 144 3000 no_role_b
+  multiplicity_a_pos 294 177 3000 no_multiplicity_b
 relationcanvas 131077 relation_ref 129285 // 
   geometry VHr
-  from ref 130949 z 1999 to point 437 257
+  from ref 130949 z 1999 to point 346 277
   line 131333 z 1999 to ref 129413
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
@@ -119,30 +143,53 @@ relationcanvas 132101 relation_ref 129669 // 
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 132485 relation_ref 129797 // 
-  geometry HV
-  from ref 132229 z 1999 to point 698 260
-  line 132741 z 1999 to ref 129669
+  from ref 132229 z 1999 to ref 129669
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 132997 relation_ref 129925 // 
-  from ref 132869 z 1999 to point 577 227
+  from ref 132869 z 1999 to point 486 247
   line 133893 z 1999 to ref 129413
-  role_a_pos 492 153 3000 no_role_b
-  multiplicity_a_pos 492 187 3000 multiplicity_b_pos 605 303 3000
-relationcanvas 134021 relation_ref 130053 // 
-  from ref 132869 z 1999 to ref 132229
-  no_role_a no_role_b
-  no_multiplicity_a no_multiplicity_b
-relationcanvas 134277 relation_ref 130181 // 
-  from ref 134149 z 1999 to ref 132229
-  no_role_a no_role_b
-  no_multiplicity_a no_multiplicity_b
+  role_a_pos 397 171 3000 no_role_b
+  multiplicity_a_pos 397 204 3000 multiplicity_b_pos 503 335 3000
 relationcanvas 134533 relation_ref 130309 // 
   from ref 134405 z 1999 to ref 131973
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
-relationcanvas 134789 relation_ref 130437 // 
-  from ref 128261 z 1999 stereotype "<>" xyz 343 875 3000 to ref 134661
-  role_a_pos 393 805 3000 no_role_b
-  multiplicity_a_pos 429 839 3000 no_multiplicity_b
+relationcanvas 135173 relation_ref 130565 // 
+  from ref 134149 z 1999 to ref 129669
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135301 relation_ref 130693 // 
+  from ref 132869 z 1999 to ref 129669
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135557 relation_ref 130821 // 
+  from ref 132229 z 1999 to ref 135429
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135685 relation_ref 130949 // 
+  from ref 135429 z 1999 to ref 129669
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135941 relation_ref 131077 // 
+  from ref 128261 z 1999 stereotype "<>" xyz 368 889 3000 to ref 135813
+  role_a_pos 411 842 3000 no_role_b
+  multiplicity_a_pos 443 875 3000 no_multiplicity_b
+relationcanvas 136069 relation_ref 131205 // 
+  from ref 135813 z 1999 to point 433 897
+  line 136197 z 1999 to ref 129925
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 136709 relation_ref 131333 // 
+  from ref 136581 z 1999 to ref 131973
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 137477 relation_ref 131461 // 
+  from ref 137221 z 1999 to ref 134149
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 138245 relation_ref 131717 // 
+  from ref 137349 z 1999 to ref 134149
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
 end
diff --git a/uml/renderengine/cin3/128261 b/uml/renderengine/cin3/128261
index aa2a3c663..fbf6d9bad 100644
--- a/uml/renderengine/cin3/128261
+++ b/uml/renderengine/cin3/128261
@@ -1,6 +1,6 @@
 format 38
 "MObject" // MObject
-  revision 2
+  revision 3
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -107,7 +107,6 @@ ${inlines}
 	    classrelation_ref 128901 // clips ()
 	  b multiplicity "" parent class_ref 128517 // MObject
       end
-
     end
 
     class 128261 "Fixture"
@@ -138,14 +137,38 @@ ${inlines}
 	  b multiplicity "" parent class_ref 128389 // Track
       end
 
-      classrelation 131077 // timeline ()
-	relation 130437 *-->
+      classrelation 131717 // timeline ()
+	relation 131077 *-->
 	  stereotype "list"
-	  a role_name "timeline" multiplicity "1" protected
+	  a role_name "timeline" multiplicity "*" protected
 	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
 "
-	    classrelation_ref 131077 // timeline ()
-	  b multiplicity "" parent class_ref 128645 // Placement
+	    classrelation_ref 131717 // timeline ()
+	  b multiplicity "" parent class_ref 129797 // ExplicitePlacement
+      end
+
+      operation 128645 "getPlaylistForRender"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+
+      operation 129157 "getAutomation"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
       end
     end
 
@@ -205,6 +228,19 @@ ${members}};
       classrelation 129157 // subject ()
 	relation_ref 128645 // 
       end
+
+      operation 128005 "resolve"
+	public return_type class_ref 129797 // ExplicitePlacement
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+	comment "create an actual (explicite) placement while trying to satisfy the network of adjacent objects and placements."
+      end
     end
 
     class 128773 "AbstractMO"
@@ -300,6 +336,14 @@ ${inlines}
 	    classrelation_ref 130437 // 
 	  b multiplicity "" parent class_ref 128645 // Placement
       end
+
+      classrelation 131461 // 
+	relation 130821 -_-|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 131461 // 
+	  b multiplicity "" parent class_ref 129797 // ExplicitePlacement
+      end
     end
 
     class 129413 "RelativePlacement"
@@ -322,14 +366,6 @@ ${inlines}
 	  association_type class_ref 128517 // MObject
       end
 
-      classrelation 130693 // 
-	relation 130053 ---|>
-	  a public
-	    cpp default "${type}"
-	    classrelation_ref 130693 // 
-	  b multiplicity "" parent class_ref 129285 // DirectPlacement
-      end
-
       attribute 128133 "relType"
 	protected explicit_type ""
 	cpp_decl "    ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
@@ -337,6 +373,14 @@ ${inlines}
 	java_decl ""
 	idl_decl ""
       end
+
+      classrelation 131333 // 
+	relation 130693 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 131333 // 
+	  b multiplicity "" parent class_ref 128645 // Placement
+      end
     end
 
     class 129541 "Allocation"
@@ -349,12 +393,13 @@ ${inlines}
       idl_decl ""
       explicit_switch_type ""
       
-      classrelation 130821 // 
-	relation 130181 ---|>
+      comment "a directive to place a MObject in a specific way"
+      classrelation 131205 // 
+	relation 130565 ---|>
 	  a public
 	    cpp default "${type}"
-	    classrelation_ref 130821 // 
-	  b multiplicity "" parent class_ref 129285 // DirectPlacement
+	    classrelation_ref 131205 // 
+	  b multiplicity "" parent class_ref 128645 // Placement
       end
     end
 
@@ -376,5 +421,115 @@ ${inlines}
 	  b multiplicity "" parent class_ref 129157 // Meta
       end
     end
+
+    class 129797 "ExplicitePlacement"
+      abstract visibility public stereotype "interface"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
+${members}}
+"
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+      classrelation 131589 // 
+	relation 130949 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 131589 // 
+	  b multiplicity "" parent class_ref 128645 // Placement
+      end
+
+      attribute 128261 "time"
+	protected explicit_type "long"
+	cpp_decl "    ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
+"
+	java_decl ""
+	idl_decl ""
+      end
+
+      attribute 128389 "track"
+	protected type class_ref 128389 // Track
+	cpp_decl "    ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
+"
+	java_decl ""
+	idl_decl ""
+      end
+
+      classrelation 131845 // 
+	relation 131205 --->
+	  a role_name "" multiplicity "" protected
+	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} * ${name}${value};
+"
+	    classrelation_ref 131845 // 
+	  b multiplicity "" parent class_ref 128389 // Track
+	  association_type class_ref 128389 // Track
+      end
+    end
+
+    class 129925 "Auto"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 131973 // 
+	relation 131333 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 131973 // 
+	  b multiplicity "" parent class_ref 129157 // Meta
+      end
+    end
+
+    class 130053 "Wish"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 132101 // 
+	relation 131461 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 132101 // 
+	  b multiplicity "" parent class_ref 129541 // Allocation
+      end
+    end
+
+    class 130181 "Constraint"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 132357 // 
+	relation 131717 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 132357 // 
+	  b multiplicity "" parent class_ref 129541 // Allocation
+      end
+    end
   end
+
+  package_ref 128901 // Builder
+
+  package_ref 129029 // Controller
 end
diff --git a/uml/renderengine/cin3/128261.diagram b/uml/renderengine/cin3/128261.diagram
new file mode 100644
index 000000000..15094165e
--- /dev/null
+++ b/uml/renderengine/cin3/128261.diagram
@@ -0,0 +1,81 @@
+format 38
+
+componentcanvas 128133 component_ref 128005 // Builder
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  xyzwh 117 113 2000 204 156
+componentcanvas 128261 component_ref 128261 // Controller
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  xyzwh 573 100 2000 166 82
+fragment 128389 "Backend Layer"
+  xyzwh 89 690 2000 632 188
+end
+componentcanvas 128517 component_ref 128901 // Engine
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  xyzwh 95 318 2000 487 323
+componentcanvas 128645 component_ref 129029 // Stream Provider
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  xyzwh 254 711 2005 180 160
+deploymentnodecanvas 128901 deploymentnode_ref 128005 // timeline
+  xyzwh 142 3 2000 323 90
+hubcanvas 129157 xyz 192 63 2005
+hubcanvas 129285 xyz 222 62 2005
+hubcanvas 129413 xyz 255 62 2005
+hubcanvas 129541 xyz 290 62 2005
+deploymentnodecanvas 130053 deploymentnode_ref 128261 // playlist
+  xyzwh 148 389 2005 401 80
+deploymentnodecanvas 130181 deploymentnode_ref 128389 // proc
+  xyzwh 178 435 2010 97 69
+deploymentnodecanvas 130309 deploymentnode_ref 128389 // proc
+  xyzwh 424 430 2010 97 69
+deploymentnodecanvas 130437 deploymentnode_ref 128517 // pnode
+  xyzwh 202 507 2005 51 35
+deploymentnodecanvas 130565 deploymentnode_ref 128517 // pnode
+  xyzwh 201 546 2005 51 35
+deploymentnodecanvas 130693 deploymentnode_ref 128517 // pnode
+  xyzwh 201 585 2005 51 35
+deploymentnodecanvas 130821 deploymentnode_ref 128517 // pnode
+  xyzwh 318 505 2005 51 35
+deploymentnodecanvas 130949 deploymentnode_ref 128389 // proc
+  xyzwh 294 433 2010 97 69
+deploymentnodecanvas 131077 deploymentnode_ref 128517 // pnode
+  xyzwh 318 544 2005 51 35
+deploymentnodecanvas 131205 deploymentnode_ref 128517 // pnode
+  xyzwh 317 584 2005 51 35
+deploymentnodecanvas 133125 deploymentnode_ref 128645 // mStream
+  xyzwh 309 800 2010 65 35
+deploymentnodecanvas 134021 deploymentnode_ref 128517 // pnode
+  xyzwh 442 503 2005 51 35
+deploymentnodecanvas 134149 deploymentnode_ref 128517 // pnode
+  xyzwh 411 548 2005 51 35
+deploymentnodecanvas 134277 deploymentnode_ref 128517 // pnode
+  xyzwh 466 548 2005 51 35
+deploymentnodecanvas 134405 deploymentnode_ref 128517 // pnode
+  xyzwh 467 586 2005 51 35
+componentcanvas 135045 component_ref 129285 // RenderPathManager
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  xyzwh 505 222 2000 155 63
+deploymentnodecanvas 136069 deploymentnode_ref 128773 // State
+  xyzwh 703 226 2000 83 52
+textcanvas 136325 "Render Engine carries out the actual processing by pulling output from the aprropriate processor "
+  xyzwh 605 382 2000 135 89
+note 136453 "Input for Builder"
+  xyzwh 125 83 2005 104 36
+note 136581 "Output of Builder"
+  xyzwh 119 350 2005 104 36
+note 136709 "optimizes"
+  xyzwh 616 286 2000 75 35
+packagecanvas 136837 
+  package_ref 129029 // Controller
+    xyzwh 486 68 1994 326 228
+textcanvas 136965 "Builder is instructed by  Controller and transforms given timeline into a Render Engine, i.e.a network of processing nodes"
+  xyzwh 323 199 2005 160 101
+simplerelationcanvas 128773 simplerelation_ref 128133
+  from ref 128517 z 1999 to ref 128645
+line 129925 ----
+  from ref 129157 z 2004 to ref 129541
+line 133765 ----
+  from ref 130949 z 2009 to ref 133125
+simplerelationcanvas 134533 simplerelation_ref 128261 geometry HVr
+  from ref 128261 z 1999 to point 653 188
+  line 134789 z 1999 to ref 128133
+end
diff --git a/uml/renderengine/cin3/128389 b/uml/renderengine/cin3/128389
index f2c2083d1..af729107e 100644
--- a/uml/renderengine/cin3/128389
+++ b/uml/renderengine/cin3/128389
@@ -1,6 +1,6 @@
 format 38
 "RenderEngine" // RenderEngine
-  revision 1
+  revision 2
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -26,4 +26,451 @@ format 38
   package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
   show_infonote default drawing_language default
   
+  deploymentview 128005 "Engine Parts"
+    //deployment diagram settings
+    package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
+    draw_component_as_icon default show_component_req_prov default show_component_rea default
+    deploymentdiagram 128261 "Overview Render Engine"
+      package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
+      draw_component_as_icon default show_component_req_prov default show_component_rea default
+      size A4
+    end
+
+    deploymentnode 128005 "timeline"
+    end
+
+    deploymentnode 128261 "playlist"
+    end
+
+    deploymentnode 128389 "proc"
+    end
+
+    deploymentnode 128517 "pnode"
+    end
+
+    deploymentnode 128645 "mStream"
+    end
+
+    deploymentnode 128773 "State"
+    end
+  end
+
+  classview 128133 "Engine Workings"
+    //class diagram settings
+    draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+    //collaboration diagram settings
+    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+    //object diagram settings
+     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+    //sequence diagram settings
+    show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+    //state diagram settings
+    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+    show_activities default region_horizontally default drawing_language default
+    //class settings
+    //activity diagram settings
+    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+    show_infonote default drawing_language default
+    
+    classdiagram 128389 "Render Entities"
+      draw_all_relations no hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+      size A4
+    end
+
+    class 131333 "RenderEngine"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 129413 "play"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+
+      classrelation 132485 // renderSegments ()
+	relation 131845 *-->
+	  a role_name "renderSegments" multiplicity "0..*" private
+	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} ${name}${value};
+"
+	    classrelation_ref 132485 // renderSegments ()
+	  b multiplicity "1" parent class_ref 131461 // Processor
+      end
+
+      classrelation 136197 // 
+	relation 134789 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 136197 // 
+	  b multiplicity "" parent class_ref 131461 // Processor
+      end
+    end
+
+    class 131461 "Processor"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 132613 // output ()
+	relation 131973 --->
+	  stereotype "has_a"
+	  a role_name "output" multiplicity "1" protected
+	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} * ${name}${value};
+"
+	    classrelation_ref 132613 // output ()
+	  b multiplicity "" parent class_ref 131589 // ExitNode
+      end
+
+      classrelation 136325 // 
+	relation 134917 -_->
+	  stereotype "uses"
+	  a package
+	    cpp default "#include in source"
+	    classrelation_ref 136325 // 
+	  b multiplicity "" parent class_ref 132741 // StateProxy
+      end
+    end
+
+    class 131589 "ExitNode"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 132869 // 
+	relation 132101 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 132869 // 
+	  b multiplicity "" parent class_ref 131717 // ProcNode
+      end
+
+    end
+
+    class 131717 "ProcNode"
+      abstract visibility public stereotype "interface"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
+${members}}
+"
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+    end
+
+    class 131845 "Trafo"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 132997 // 
+	relation 132229 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 132997 // 
+	  b multiplicity "" parent class_ref 131717 // ProcNode
+      end
+    end
+
+    class 131973 "Link"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133253 // 
+	relation 132485 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133253 // 
+	  b multiplicity "" parent class_ref 131717 // ProcNode
+      end
+    end
+
+    class 132101 "Hub"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133125 // 
+	relation 132357 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133125 // 
+	  b multiplicity "" parent class_ref 131717 // ProcNode
+      end
+    end
+
+    class 132229 "Projector"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133509 // 
+	relation 132741 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133509 // 
+	  b multiplicity "" parent class_ref 131845 // Trafo
+      end
+    end
+
+    class 132357 "Mask"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133637 // 
+	relation 132869 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133637 // 
+	  b multiplicity "" parent class_ref 131845 // Trafo
+      end
+    end
+
+    class 132485 "PluginAdapter"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133765 // 
+	relation 132997 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133765 // 
+	  b multiplicity "" parent class_ref 131845 // Trafo
+      end
+    end
+
+    class 132613 "OpenGLPipe"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 133381 // 
+	relation 132613 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 133381 // 
+	  b multiplicity "" parent class_ref 131973 // Link
+      end
+    end
+
+    class 132869 "ARender"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 134661 // 
+	relation 133509 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 134661 // 
+	  b multiplicity "" parent class_ref 132741 // StateProxy
+      end
+    end
+
+    class 132997 "VRender"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 134789 // 
+	relation 133637 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 134789 // 
+	  b multiplicity "" parent class_ref 132741 // StateProxy
+      end
+    end
+
+    class 133125 "GLRender"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 134917 // 
+	relation 133765 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 134917 // 
+	  b multiplicity "" parent class_ref 132741 // StateProxy
+      end
+    end
+
+    class 133253 "Frame"
+      visibility package stereotype "interface"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
+${members}}
+"
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+      classrelation 135685 // 
+	relation 134405 --->
+	  a role_name "" multiplicity "" protected
+	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} * ${name}${value};
+"
+	    classrelation_ref 135685 // 
+	  b multiplicity "1" parent class_ref 132741 // StateProxy
+      end
+    end
+
+    class 133381 "AFrame"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 135045 // 
+	relation 133893 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 135045 // 
+	  b multiplicity "" parent class_ref 133253 // Frame
+      end
+    end
+
+    class 133509 "VFrame"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 135173 // 
+	relation 134021 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 135173 // 
+	  b multiplicity "" parent class_ref 133253 // Frame
+      end
+    end
+
+    class 133637 "GLBuf"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 135301 // 
+	relation 134149 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 135301 // 
+	  b multiplicity "" parent class_ref 133253 // Frame
+      end
+    end
+
+    class 133765 "Source"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      classrelation 136069 // 
+	relation 134661 ---|>
+	  a public
+	    cpp default "${type}"
+	    classrelation_ref 136069 // 
+	  b multiplicity "" parent class_ref 131717 // ProcNode
+      end
+    end
+  end
 end
diff --git a/uml/renderengine/cin3/128389.diagram b/uml/renderengine/cin3/128389.diagram
new file mode 100644
index 000000000..a72f4c873
--- /dev/null
+++ b/uml/renderengine/cin3/128389.diagram
@@ -0,0 +1,196 @@
+format 38
+
+classcanvas 128005 class_ref 131333 // RenderEngine
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 172 324 2000
+  end
+classcanvas 128133 class_ref 131461 // Processor
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 272 182 2000
+  end
+classcanvas 128389 class_ref 131589 // ExitNode
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 415 444 2000
+  end
+classcanvas 128517 class_ref 131717 // ProcNode
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 468 263 2000
+  end
+classcanvas 129029 class_ref 131845 // Trafo
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 497 443 2000
+  end
+classcanvas 129157 class_ref 131973 // Link
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 648 444 2000
+  end
+classcanvas 129285 class_ref 132101 // Hub
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 593 444 2000
+  end
+classcanvas 129413 class_ref 132229 // Projector
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 415 561 2000
+  end
+classcanvas 129541 class_ref 132357 // Mask
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 481 561 2000
+  end
+classcanvas 129669 class_ref 132485 // PluginAdapter
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 537 561 2000
+  end
+classcanvas 129797 class_ref 132613 // OpenGLPipe
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 683 531 2000
+  end
+classcanvas 132229 class_ref 132741 // StateProxy
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 32 373 2000
+  end
+classcanvas 132997 class_ref 132869 // ARender
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 29 511 2000
+  end
+classcanvas 133125 class_ref 132997 // VRender
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 107 511 2000
+  end
+classcanvas 133253 class_ref 133125 // GLRender
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 173 511 2000
+  end
+classcanvas 133765 class_ref 133253 // Frame
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 274 611 2000
+  end
+classcanvas 133893 class_ref 133381 // AFrame
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 225 737 2000
+  end
+classcanvas 134021 class_ref 133509 // VFrame
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 287 738 2000
+  end
+classcanvas 134149 class_ref 133637 // GLBuf
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 359 737 2000
+  end
+classcanvas 137221 class_ref 133765 // Source
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  xyz 739 444 2000
+  end
+relationcanvas 128261 relation_ref 131845 // 
+  from ref 128005 z 1999 to point 212 200
+  line 137733 z 1999 to ref 128133
+  role_a_pos 180 178 3000 no_role_b
+  multiplicity_a_pos 245 211 3000 multiplicity_b_pos 198 299 3000
+relationcanvas 128901 relation_ref 131973 // 
+  from ref 128133 z 1999 stereotype "<>" xyz 346 333 3000 to ref 128389
+  role_a_pos 439 419 3000 no_role_b
+  multiplicity_a_pos 413 419 3000 no_multiplicity_b
+relationcanvas 129925 relation_ref 132101 // 
+  geometry VHV
+  from ref 128389 z 1999 to point 443 383
+  line 130693 z 1999 to point 505 383
+  line 130821 z 1999 to ref 128517
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 130053 relation_ref 132229 // 
+  geometry VHV
+  from ref 129029 z 1999 to point 517 383
+  line 130949 z 1999 to point 505 383
+  line 131077 z 1999 to ref 128517
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 130181 relation_ref 132357 // 
+  geometry VHV
+  from ref 129285 z 1999 to point 613 383
+  line 131205 z 1999 to point 505 383
+  line 131333 z 1999 to ref 128517
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 130309 relation_ref 132485 // 
+  geometry VHV
+  from ref 129157 z 1999 to point 668 383
+  line 131461 z 1999 to point 505 383
+  line 131589 z 1999 to ref 128517
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 131717 relation_ref 132613 // 
+  from ref 129797 z 1999 to ref 129157
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 131845 relation_ref 132741 // 
+  from ref 129413 z 1999 to ref 129029
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 131973 relation_ref 132869 // 
+  from ref 129541 z 1999 to ref 129029
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 132101 relation_ref 132997 // 
+  from ref 129669 z 1999 to ref 129029
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 133381 relation_ref 133509 // 
+  geometry VHV
+  from ref 132997 z 1999 to point 56 472
+  line 134277 z 1999 to point 69 472
+  line 134405 z 1999 to ref 132229
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 133509 relation_ref 133637 // 
+  geometry VHV
+  from ref 133125 z 1999 to point 133 472
+  line 134533 z 1999 to point 69 472
+  line 134661 z 1999 to ref 132229
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 133637 relation_ref 133765 // 
+  geometry VHV
+  from ref 133253 z 1999 to point 204 472
+  line 134789 z 1999 to point 69 472
+  line 134917 z 1999 to ref 132229
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135045 relation_ref 133893 // 
+  geometry VHV
+  from ref 133893 z 1999 to point 249 704
+  line 135557 z 1999 to point 311 704
+  line 135685 z 1999 to ref 133765
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135173 relation_ref 134021 // 
+  geometry VHV
+  from ref 134021 z 1999 to point 311 704
+  line 135813 z 1999 to point 311 704
+  line 135941 z 1999 to ref 133765
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 135429 relation_ref 134149 // 
+  from ref 134149 z 1999 to ref 133765
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 136965 relation_ref 134533 // 
+  from ref 132229 z 1999 to point 310 466
+  line 137093 z 1999 to ref 133765
+  role_a_pos 322 586 3000 no_role_b
+  no_multiplicity_a multiplicity_b_pos 120 425 3000
+relationcanvas 137349 relation_ref 134661 // 
+  geometry VHV
+  from ref 137221 z 1999 to point 761 383
+  line 137477 z 1999 to point 505 383
+  line 137605 z 1999 to ref 128517
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 137861 relation_ref 134789 // 
+  from ref 128005 z 1999 to ref 128133
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+relationcanvas 137989 relation_ref 134917 // 
+  from ref 128133 z 1999 stereotype "<>" xyz 279 314 3000 to point 301 403
+  line 138117 z 1999 to ref 132229
+  no_role_a no_role_b
+  no_multiplicity_a no_multiplicity_b
+end
diff --git a/uml/renderengine/cin3/128517.diagram b/uml/renderengine/cin3/128517.diagram
new file mode 100644
index 000000000..66a2938d5
--- /dev/null
+++ b/uml/renderengine/cin3/128517.diagram
@@ -0,0 +1,124 @@
+format 38
+
+classinstance 128005 class_ref 130309 // ControllerFacade
+  xyz 494 125 2000 name ""  xyz 494 125 2000
+classinstance 128133 class_ref 130437 // PathManager
+  xyz 472 286 2000 name ""  xyz 472 286 2000
+classinstance 129285 class_ref 130565 // BuilderFacade
+  xyz 250 285 2000 name ""  xyz 250 285 2000
+classinstance 129413 class_ref 128261 // Fixture
+  xyz 141 93 2000 name ""  xyz 141 93 2000
+classinstance 129797 class_ref 130693 // ToolFactory
+  xyz 381 449 2000 name ""  xyz 381 449 2000
+classinstance 129925 class_ref 130821 // ConManager
+  xyz 147 450 2005 name ""  xyz 147 450 2005
+classinstance 130053 class_ref 130949 // RenderState
+  xyz 550 424 2000 name ""  xyz 550 424 2000
+note 130565 "Note: Builder subsys is stateless"
+  xyzwh 25 374 2000 128 58
+classinstance 130693 class_ref 131077 // Assembler
+  xyz 225 390 2000 name ""  xyz 225 390 2000
+classinstance 131333 class_ref 131205 // StreamProvider
+  xyz 172 613 2000 name ""  xyz 172 613 2000
+classinstance 131717 class_ref 131333 // RenderEngine
+  xyz 721 542 2000 name ""  xyz 721 542 2000
+note 133381 "Fixture is the only query/access point to EDL"
+  xyzwh 14 17 2000 179 63
+note 133509 "Trigger: Play Request"
+  xyzwh 589 58 2000 141 40
+linkcanvas 129157
+  from ref 128005 z 1999 to ref 128133
+dirscanvas 132101 z 1000 linkcanvas_ref 129157
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "1 buildProcessor()" xyz 542 224 3000
+linkcanvas 129541
+  from ref 128133 z 1999 to ref 129285
+dirscanvas 130181 z 1000 linkcanvas_ref 129541
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "3 buildEngine()" xyz 364 316 3000
+linkcanvas 129669
+  from ref 129285 z 1999 to ref 129413
+dirscanvas 132357 z 1000 linkcanvas_ref 129669
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "4 getPlaylistForRender()" xyz 126 222 3000
+linkcanvas 130309
+  from ref 128133 z 1999 to ref 130053
+dirscanvas 132229 z 1000 linkcanvas_ref 130309
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "2 getStateProxy()" xyz 552 334 3000
+linkcanvas 130437
+  from ref 129285 z 1999 to ref 129797
+dirscanvas 132485 z 1000 linkcanvas_ref 130437
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "5 configure()" xyz 357 345 3000
+linkcanvas 131077
+  from ref 129285 z 1999 to ref 130693
+dirscanvas 132613 z 1000 linkcanvas_ref 131077
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "6 build()" xyz 290 355 3000
+linkcanvas 131205
+  from ref 130693 z 1999 to ref 129925
+dirscanvas 132741 z 1000 linkcanvas_ref 131205
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "7 getConnection()" xyz 194 453 3000
+linkcanvas 131461
+  from ref 129925 z 1999 to ref 131333
+dirscanvas 132997 z 1000 linkcanvas_ref 131461
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "9 prepareStream()" xyz 218 524 3000
+linkcanvas 131589
+  from ref 129925 z 1999 to ref 129413
+dirscanvas 132869 z 1000 linkcanvas_ref 131589
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "8 getAutomation()" xyz 65 280 3000
+linkcanvas 131845
+  from ref 128005 z 1999 to ref 131717
+dirscanvas 133125 z 1000 linkcanvas_ref 131845
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "10 play()" xyz 668 317 3000
+linkcanvas 131973
+  from ref 131717 z 1999 to ref 131333
+dirscanvas 133253 z 1000 linkcanvas_ref 131973
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  forward_label "11 getReady()" xyz 458 611 3000
+msgs
+  msg operation_ref 128261 // "buildProcessor()"
+    forward ranks 1 "1" dirscanvas_ref 132101
+    msgs
+      msg operation_ref 128389 // "getStateProxy()"
+	forward ranks 2 "1.1" dirscanvas_ref 132229
+	no_msg
+      msg operation_ref 128517 // "buildEngine()"
+	forward ranks 3 "1.2" dirscanvas_ref 130181
+	msgs
+	  msg operation_ref 128645 // "getPlaylistForRender()"
+	    forward ranks 4 "1.2.1" dirscanvas_ref 132357
+	    no_msg
+	  msg operation_ref 128773 // "configure()"
+	    forward ranks 5 "1.2.2" dirscanvas_ref 132485
+	    no_msg
+	  msg operation_ref 128901 // "build()"
+	    forward ranks 6 "1.2.3" dirscanvas_ref 132613
+	    msgs
+	      msg operation_ref 129029 // "getConnection()"
+		forward ranks 7 "1.2.3.1" dirscanvas_ref 132741
+		msgs
+		  msg operation_ref 129157 // "getAutomation()"
+		    forward ranks 8 "1.2.3.1.1" dirscanvas_ref 132869
+		    no_msg
+		  msg operation_ref 129285 // "prepareStream()"
+		    forward ranks 9 "1.2.3.1.2" dirscanvas_ref 132997
+		    no_msg
+		msgsend
+	    msgsend
+	msgsend
+    msgsend
+  msg operation_ref 129413 // "play()"
+    forward ranks 10 "2" dirscanvas_ref 133125
+    msgs
+      msg operation_ref 129541 // "getReady()"
+	forward ranks 11 "2.1" dirscanvas_ref 133253
+	no_msg
+    msgsend
+msgsend
+end
diff --git a/uml/renderengine/cin3/128645 b/uml/renderengine/cin3/128645
index 549ee7d3c..8a7a234a3 100644
--- a/uml/renderengine/cin3/128645
+++ b/uml/renderengine/cin3/128645
@@ -1,6 +1,6 @@
 format 38
 "Vault" // Vault
-  revision 1
+  revision 2
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -27,4 +27,59 @@ format 38
   show_infonote default drawing_language default
   
   comment "This package is used here just to hold entities thought to belong to the backend layer. The Backend is not in Focus for this Design draft."
+  classview 128517 "Backend Components"
+    //class diagram settings
+    draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+    //collaboration diagram settings
+    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+    //object diagram settings
+     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+    //sequence diagram settings
+    show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+    //state diagram settings
+    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+    show_activities default region_horizontally default drawing_language default
+    //class settings
+    //activity diagram settings
+    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+    show_infonote default drawing_language default
+    
+    class 131205 "StreamProvider"
+      visibility public stereotype "boundary"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+      comment "Note: just a Placeholder for my design. Cehteh will ceratinly know much better how to organize this"
+      operation 129285 "prepareStream"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+
+      operation 129541 "getReady"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+  end
 end
diff --git a/uml/renderengine/cin3/128645.diagram b/uml/renderengine/cin3/128645.diagram
new file mode 100644
index 000000000..1c61b8251
--- /dev/null
+++ b/uml/renderengine/cin3/128645.diagram
@@ -0,0 +1,3 @@
+format 38
+
+end
diff --git a/uml/renderengine/cin3/128901 b/uml/renderengine/cin3/128901
new file mode 100644
index 000000000..00b11cb58
--- /dev/null
+++ b/uml/renderengine/cin3/128901
@@ -0,0 +1,170 @@
+format 38
+"Builder" // MObject::Builder
+  revision 1
+  modified_by 5 "hiv"
+  // class settings
+  //class diagram settings
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  //use case diagram settings
+  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  //sequence diagram settings
+  show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+  //collaboration diagram settings
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  //object diagram settings
+   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  //component diagram settings
+  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  //deployment diagram settings
+  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  //state diagram settings
+  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+  show_activities default region_horizontally default drawing_language default
+  //activity diagram settings
+  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+  show_infonote default drawing_language default
+  
+  classview 128261 "Builder Workings"
+    //class diagram settings
+    draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+    //collaboration diagram settings
+    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+    //object diagram settings
+     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+    //sequence diagram settings
+    show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+    //state diagram settings
+    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+    show_activities default region_horizontally default drawing_language default
+    //class settings
+    //activity diagram settings
+    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+    show_infonote default drawing_language default
+    
+    collaborationdiagram 128517 "build process"
+      show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+      comment "This figure shows the process of building and starting a RenderEngine"
+      size A4
+    end
+
+    class 130565 "BuilderFacade"
+      visibility package stereotype "boundary"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+      operation 128517 "buildEngine"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+
+    class 130693 "ToolFactory"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 128773 "configure"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+
+    class 130821 "ConManager"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 129029 "getConnection"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+
+    class 131077 "Assembler"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 128901 "build"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+
+    class 132741 "StateProxy"
+      abstract visibility package stereotype "interface"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl "${comment}${@}${visibility}interface ${name}${extends} {
+${members}}
+"
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+      classrelation 135941 // currFrame ()
+	relation 134533 --->
+	  a role_name "currFrame" multiplicity "" protected
+	    cpp default "    ${comment}${static}${mutable}${volatile}${const}${type} * ${name}${value};
+"
+	    classrelation_ref 135941 // currFrame ()
+	  b multiplicity "1" parent class_ref 133253 // Frame
+      end
+    end
+  end
+end
diff --git a/uml/renderengine/cin3/129029 b/uml/renderengine/cin3/129029
new file mode 100644
index 000000000..7573a8f2c
--- /dev/null
+++ b/uml/renderengine/cin3/129029
@@ -0,0 +1,111 @@
+format 38
+"Controller" // MObject::Controller
+  revision 1
+  modified_by 5 "hiv"
+  // class settings
+  //class diagram settings
+  draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+  //use case diagram settings
+  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  //sequence diagram settings
+  show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+  //collaboration diagram settings
+  show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+  //object diagram settings
+   write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  //component diagram settings
+  package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  //deployment diagram settings
+  package_name_in_tab default show_context default write_horizontally default auto_label_position default draw_all_relations default shadow default
+  draw_component_as_icon default show_component_req_prov default show_component_rea default
+  //state diagram settings
+  package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+  show_activities default region_horizontally default drawing_language default
+  //activity diagram settings
+  package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+  show_infonote default drawing_language default
+  
+  classview 128389 "Controller Workings"
+    //class diagram settings
+    draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+    //collaboration diagram settings
+    show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
+    //object diagram settings
+     write_horizontally default package_name_in_tab default show_context default auto_label_position default draw_all_relations default shadow default
+    //sequence diagram settings
+    show_full_operations_definition default write_horizontally default drawing_language default draw_all_relations default shadow default
+    //state diagram settings
+    package_name_in_tab default show_context default auto_label_position default write_trans_label_horizontally default show_trans_definition default draw_all_relations default shadow default
+    show_activities default region_horizontally default drawing_language default
+    //class settings
+    //activity diagram settings
+    package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
+    show_infonote default drawing_language default
+    
+    classdiagram 128645 "Components"
+      draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
+      size A4
+    end
+
+    class 130309 "ControllerFacade"
+      visibility public stereotype "boundary"
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl "${comment}${abstract}${local}interface ${name}${inherit} {
+${members}};
+"
+      explicit_switch_type ""
+      
+    end
+
+    class 130437 "PathManager"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 128261 "buildProcessor"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+
+    class 130949 "RenderState"
+      visibility package 
+      cpp_decl "${comment}${template}class ${name}${inherit} {
+${members}};
+${inlines}
+"
+      java_decl ""
+      idl_decl ""
+      explicit_switch_type ""
+      
+      operation 128389 "getStateProxy"
+	public explicit_return_type ""
+	nparams 0
+	cpp_decl "    ${comment}${friend}${static}${inline}${virtual}${type} ${name}${(}${)}${const}${volatile}${throw}${abstract};
+"
+	cpp_def "${comment}${inline}${type} ${class}::${name}${(}${)}${const}${volatile}${throw}${staticnl}{
+  ${body}}
+"
+	
+	
+      end
+    end
+  end
+end
diff --git a/uml/renderengine/cin3/5.session b/uml/renderengine/cin3/5.session
index 0efe093df..098941c6a 100644
--- a/uml/renderengine/cin3/5.session
+++ b/uml/renderengine/cin3/5.session
@@ -1,16 +1,37 @@
-window_sizes 1140 830 270 860 687 62
+window_sizes 1140 830 287 843 687 62
 diagrams
   componentdiagram_ref 128005 // Overview
-    860 687 66 4 0 0
-  active  classdiagram_ref 128133 // Session structure
-    860 687 100 4 37 0
+    860 687 100 4 314 0
+  deploymentdiagram_ref 128261 // Overview Render Engine
+    674 551 100 4 109 12
+  classdiagram_ref 128133 // Session structure
+    674 551 100 4 538 0
+  active  classdiagram_ref 128389 // Render Entities
+    843 689 100 4 147 0
+  collaborationdiagram_ref 128517 // build process
+    674 551 100 4 0 0
+  classdiagram_ref 128645 // Components
+    674 551 100 4 0 0
 end
 show_stereotypes
-selected attribute_ref 128133 // relType
+selected classdiagram_ref 128389 // Render Entities
 open
-  componentview_ref 128005 // Architecture
+  class_ref 128005 // Session
   classrelation_ref 128645 // tracks ()
   class_ref 128261 // Fixture
+  class_ref 128645 // Placement
   class_ref 129413 // RelativePlacement
+  class_ref 129797 // ExplicitePlacement
+  class_ref 130181 // Constraint
+  class_ref 130565 // BuilderFacade
+  class_ref 130693 // ToolFactory
+  class_ref 130821 // ConManager
+  class_ref 131077 // Assembler
+  class_ref 132741 // StateProxy
+  class_ref 130309 // ControllerFacade
+  class_ref 130437 // PathManager
+  class_ref 130949 // RenderState
+  classview_ref 128133 // Engine Workings
+  class_ref 131205 // StreamProvider
 end
 end
diff --git a/uml/renderengine/cin3/cin3.prj b/uml/renderengine/cin3/cin3.prj
index 067d381de..e327763a2 100644
--- a/uml/renderengine/cin3/cin3.prj
+++ b/uml/renderengine/cin3/cin3.prj
@@ -1,6 +1,6 @@
 format 38
-"Cin3"
-  revision 2
+"cin3"
+  revision 3
   modified_by 5 "hiv"
   cpp_root_dir "../../../src/"
 
@@ -22,7 +22,7 @@ format 38
   package_name_in_tab yes show_context no auto_label_position yes draw_all_relations yes shadow yes
   draw_component_as_icon no show_component_req_prov no show_component_rea no
   //deployment diagram settings
-  package_name_in_tab no show_context no write_horizontally yes auto_label_position yes draw_all_relations yes shadow yes
+  package_name_in_tab yes show_context no write_horizontally yes auto_label_position yes draw_all_relations yes shadow yes
   draw_component_as_icon no show_component_req_prov no show_component_rea no
   //state diagram settings
   package_name_in_tab no show_context no auto_label_position yes write_trans_label_horizontally yes show_trans_definition no draw_all_relations yes shadow yes
@@ -37,6 +37,8 @@ format 38
 
   mark_for_import
   
+  ncouples 1
+  key "html dir" value "/mnt/Lager/heim/devel/cin3/wiki/renderengine/"
   package_ref 128005 // design
 
   package_ref 128133 // AssetManager
diff --git a/wiki/ichthyo-draft.html b/wiki/ichthyo-draft.html
index 8e9aa97fc..bcb331a5b 100644
--- a/wiki/ichthyo-draft.html
+++ b/wiki/ichthyo-draft.html
@@ -1167,6 +1167,9 @@ config.formatters.push( {
 
 <style type="text/css">#contentWrapper {display:none;}</style><div id="SplashScreen" style="border: 3px solid #ccc; display: block; text-align: center; width: 320px; margin: 100px auto; padding: 50px; color:#000; font-size: 28px; font-family:Tahoma; background-color:#eee;"><b>My TiddlyWiki</b> is loading<blink> ...</blink><br><br><span style="font-size: 14px; color:red;">Requires Javascript.</span></div>
+
+
[img[Block Diagram|renderengine/fig1.png]]
+
<!--{{{-->
 <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>

From 904c82bba44aa9f087f07ea0dd8b6db4e64e3280 Mon Sep 17 00:00:00 2001
From: Ichthyostega 
Date: Tue, 19 Jun 2007 09:22:52 +0200
Subject: [PATCH 4/4] Some notes to the wiki, including first verion of the UML
 diagrams

---
 uml/renderengine/cin3/128005                 |   2 +-
 uml/renderengine/cin3/128133.diagram         |  66 +++----
 uml/renderengine/cin3/128261                 |   2 +-
 uml/renderengine/cin3/128261.diagram         |  28 +--
 uml/renderengine/cin3/128389                 |   3 +-
 uml/renderengine/cin3/128389.diagram         |  94 ++++-----
 uml/renderengine/cin3/128517.diagram         |  18 +-
 uml/renderengine/cin3/128901                 |   2 +-
 uml/renderengine/cin3/129029                 |   4 +-
 uml/renderengine/cin3/5.session              |  21 +-
 uml/renderengine/cin3/cin3.prj               |   4 +-
 wiki/ichthyo-draft.html                      |  40 +++-
 wiki/renderengine/class100.html              |  22 +++
 wiki/renderengine/class101.html              |  22 +++
 wiki/renderengine/class102.html              |  22 +++
 wiki/renderengine/class103.html              |  24 +++
 wiki/renderengine/class105.html              |  22 +++
 wiki/renderengine/class106.html              |  22 +++
 wiki/renderengine/class107.html              |  22 +++
 wiki/renderengine/class108.html              |  22 +++
 wiki/renderengine/class112.html              |  25 +++
 wiki/renderengine/class20.html               |  24 +++
 wiki/renderengine/class23.html               |  25 +++
 wiki/renderengine/class26.html               |  27 +++
 wiki/renderengine/class31.html               |  20 ++
 wiki/renderengine/class32.html               |  24 +++
 wiki/renderengine/class34.html               |  26 +++
 wiki/renderengine/class37.html               |  23 +++
 wiki/renderengine/class38.html               |  22 +++
 wiki/renderengine/class39.html               |  22 +++
 wiki/renderengine/class40.html               |  23 +++
 wiki/renderengine/class41.html               |  23 +++
 wiki/renderengine/class42.html               |  26 +++
 wiki/renderengine/class45.html               |  24 +++
 wiki/renderengine/class46.html               |  22 +++
 wiki/renderengine/class47.html               |  29 +++
 wiki/renderengine/class51.html               |  22 +++
 wiki/renderengine/class52.html               |  23 +++
 wiki/renderengine/class53.html               |  23 +++
 wiki/renderengine/class57.html               |  24 +++
 wiki/renderengine/class59.html               |  24 +++
 wiki/renderengine/class61.html               |  24 +++
 wiki/renderengine/class63.html               |  24 +++
 wiki/renderengine/class65.html               |  24 +++
 wiki/renderengine/class70.html               |  20 ++
 wiki/renderengine/class71.html               |  24 +++
 wiki/renderengine/class73.html               |  24 +++
 wiki/renderengine/class86.html               |  25 +++
 wiki/renderengine/class89.html               |  24 +++
 wiki/renderengine/class91.html               |  22 +++
 wiki/renderengine/class92.html               |  21 ++
 wiki/renderengine/class93.html               |  23 +++
 wiki/renderengine/class94.html               |  23 +++
 wiki/renderengine/class95.html               |  22 +++
 wiki/renderengine/class96.html               |  22 +++
 wiki/renderengine/class97.html               |  22 +++
 wiki/renderengine/class98.html               |  22 +++
 wiki/renderengine/class99.html               |  22 +++
 wiki/renderengine/classdiagrams.html         |  24 +++
 wiki/renderengine/classes.html               |  67 +++++++
 wiki/renderengine/classes_list.html          |  70 +++++++
 wiki/renderengine/collaborationdiagrams.html |  22 +++
 wiki/renderengine/componentdiagrams.html     |  22 +++
 wiki/renderengine/deploymentdiagrams.html    |  22 +++
 wiki/renderengine/fig1.png                   | Bin 0 -> 37880 bytes
 wiki/renderengine/fig1.svg                   | 195 +++++++++++++++++++
 wiki/renderengine/fig2.png                   | Bin 0 -> 47828 bytes
 wiki/renderengine/fig3.png                   | Bin 0 -> 32139 bytes
 wiki/renderengine/fig4.png                   | Bin 0 -> 78 bytes
 wiki/renderengine/fig5.png                   | Bin 0 -> 36430 bytes
 wiki/renderengine/fig6.png                   | Bin 0 -> 26446 bytes
 wiki/renderengine/index-withframe.html       |  19 ++
 wiki/renderengine/index.html                 | 188 ++++++++++++++++++
 wiki/renderengine/index_65.html              |  32 +++
 wiki/renderengine/index_66.html              |  31 +++
 wiki/renderengine/index_67.html              |  36 ++++
 wiki/renderengine/index_68.html              |  25 +++
 wiki/renderengine/index_69.html              |  31 +++
 wiki/renderengine/index_70.html              |  26 +++
 wiki/renderengine/index_71.html              |  30 +++
 wiki/renderengine/index_72.html              |  23 +++
 wiki/renderengine/index_76.html              |  24 +++
 wiki/renderengine/index_77.html              |  27 +++
 wiki/renderengine/index_79.html              |  26 +++
 wiki/renderengine/index_80.html              |  34 ++++
 wiki/renderengine/index_82.html              |  31 +++
 wiki/renderengine/index_83.html              |  32 +++
 wiki/renderengine/index_84.html              |  31 +++
 wiki/renderengine/index_86.html              |  25 +++
 wiki/renderengine/index_87.html              |  23 +++
 wiki/renderengine/navig.html                 |  17 ++
 wiki/renderengine/packages.html              |  31 +++
 wiki/renderengine/public_operations.html     |  34 ++++
 wiki/renderengine/style.css                  |  30 +++
 94 files changed, 2454 insertions(+), 125 deletions(-)
 create mode 100644 wiki/renderengine/class100.html
 create mode 100644 wiki/renderengine/class101.html
 create mode 100644 wiki/renderengine/class102.html
 create mode 100644 wiki/renderengine/class103.html
 create mode 100644 wiki/renderengine/class105.html
 create mode 100644 wiki/renderengine/class106.html
 create mode 100644 wiki/renderengine/class107.html
 create mode 100644 wiki/renderengine/class108.html
 create mode 100644 wiki/renderengine/class112.html
 create mode 100644 wiki/renderengine/class20.html
 create mode 100644 wiki/renderengine/class23.html
 create mode 100644 wiki/renderengine/class26.html
 create mode 100644 wiki/renderengine/class31.html
 create mode 100644 wiki/renderengine/class32.html
 create mode 100644 wiki/renderengine/class34.html
 create mode 100644 wiki/renderengine/class37.html
 create mode 100644 wiki/renderengine/class38.html
 create mode 100644 wiki/renderengine/class39.html
 create mode 100644 wiki/renderengine/class40.html
 create mode 100644 wiki/renderengine/class41.html
 create mode 100644 wiki/renderengine/class42.html
 create mode 100644 wiki/renderengine/class45.html
 create mode 100644 wiki/renderengine/class46.html
 create mode 100644 wiki/renderengine/class47.html
 create mode 100644 wiki/renderengine/class51.html
 create mode 100644 wiki/renderengine/class52.html
 create mode 100644 wiki/renderengine/class53.html
 create mode 100644 wiki/renderengine/class57.html
 create mode 100644 wiki/renderengine/class59.html
 create mode 100644 wiki/renderengine/class61.html
 create mode 100644 wiki/renderengine/class63.html
 create mode 100644 wiki/renderengine/class65.html
 create mode 100644 wiki/renderengine/class70.html
 create mode 100644 wiki/renderengine/class71.html
 create mode 100644 wiki/renderengine/class73.html
 create mode 100644 wiki/renderengine/class86.html
 create mode 100644 wiki/renderengine/class89.html
 create mode 100644 wiki/renderengine/class91.html
 create mode 100644 wiki/renderengine/class92.html
 create mode 100644 wiki/renderengine/class93.html
 create mode 100644 wiki/renderengine/class94.html
 create mode 100644 wiki/renderengine/class95.html
 create mode 100644 wiki/renderengine/class96.html
 create mode 100644 wiki/renderengine/class97.html
 create mode 100644 wiki/renderengine/class98.html
 create mode 100644 wiki/renderengine/class99.html
 create mode 100644 wiki/renderengine/classdiagrams.html
 create mode 100644 wiki/renderengine/classes.html
 create mode 100644 wiki/renderengine/classes_list.html
 create mode 100644 wiki/renderengine/collaborationdiagrams.html
 create mode 100644 wiki/renderengine/componentdiagrams.html
 create mode 100644 wiki/renderengine/deploymentdiagrams.html
 create mode 100644 wiki/renderengine/fig1.png
 create mode 100644 wiki/renderengine/fig1.svg
 create mode 100644 wiki/renderengine/fig2.png
 create mode 100644 wiki/renderengine/fig3.png
 create mode 100644 wiki/renderengine/fig4.png
 create mode 100644 wiki/renderengine/fig5.png
 create mode 100644 wiki/renderengine/fig6.png
 create mode 100644 wiki/renderengine/index-withframe.html
 create mode 100644 wiki/renderengine/index.html
 create mode 100644 wiki/renderengine/index_65.html
 create mode 100644 wiki/renderengine/index_66.html
 create mode 100644 wiki/renderengine/index_67.html
 create mode 100644 wiki/renderengine/index_68.html
 create mode 100644 wiki/renderengine/index_69.html
 create mode 100644 wiki/renderengine/index_70.html
 create mode 100644 wiki/renderengine/index_71.html
 create mode 100644 wiki/renderengine/index_72.html
 create mode 100644 wiki/renderengine/index_76.html
 create mode 100644 wiki/renderengine/index_77.html
 create mode 100644 wiki/renderengine/index_79.html
 create mode 100644 wiki/renderengine/index_80.html
 create mode 100644 wiki/renderengine/index_82.html
 create mode 100644 wiki/renderengine/index_83.html
 create mode 100644 wiki/renderengine/index_84.html
 create mode 100644 wiki/renderengine/index_86.html
 create mode 100644 wiki/renderengine/index_87.html
 create mode 100644 wiki/renderengine/navig.html
 create mode 100644 wiki/renderengine/packages.html
 create mode 100644 wiki/renderengine/public_operations.html
 create mode 100644 wiki/renderengine/style.css

diff --git a/uml/renderengine/cin3/128005 b/uml/renderengine/cin3/128005
index e7c1f8e2e..48da8f34d 100644
--- a/uml/renderengine/cin3/128005
+++ b/uml/renderengine/cin3/128005
@@ -1,6 +1,6 @@
 format 38
 "design" // design
-  revision 3
+  revision 4
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
diff --git a/uml/renderengine/cin3/128133.diagram b/uml/renderengine/cin3/128133.diagram
index 440e77245..d0d705143 100644
--- a/uml/renderengine/cin3/128133.diagram
+++ b/uml/renderengine/cin3/128133.diagram
@@ -2,7 +2,7 @@ format 38
 
 classcanvas 128005 class_ref 128005 // Session
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 27 609 2000
+  xyz 29 609 2000
   end
 classcanvas 128133 class_ref 128133 // EDL
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -10,7 +10,7 @@ classcanvas 128133 class_ref 128133 // EDL
   end
 classcanvas 128261 class_ref 128261 // Fixture
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 196 894 2000
+  xyz 202 895 2000
   end
 classcanvas 129029 class_ref 128389 // Track
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -18,11 +18,11 @@ classcanvas 129029 class_ref 128389 // Track
   end
 classcanvas 129413 class_ref 128517 // MObject
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 309 136 2000
+  xyz 313 137 2000
   end
 classcanvas 129669 class_ref 128645 // Placement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 570 128 2000
+  xyz 574 129 2000
   end
 classcanvas 129925 class_ref 128389 // Track
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -30,7 +30,7 @@ classcanvas 129925 class_ref 128389 // Track
   end
 classcanvas 130949 class_ref 128773 // AbstractMO
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 314 258 2000
+  xyz 317 258 2000
   end
 classcanvas 131461 class_ref 128901 // Clip
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -38,7 +38,7 @@ classcanvas 131461 class_ref 128901 // Clip
   end
 classcanvas 131717 class_ref 129029 // Effect
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 335 368 2000
+  xyz 336 368 2000
   end
 classcanvas 131973 class_ref 129157 // Meta
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -46,15 +46,15 @@ classcanvas 131973 class_ref 129157 // Meta
   end
 classcanvas 132229 class_ref 129285 // DirectPlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 659 373 2000
+  xyz 664 373 2000
   end
 classcanvas 132869 class_ref 129413 // RelativePlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 477 360 2000
+  xyz 483 361 2000
   end
 classcanvas 134149 class_ref 129541 // Allocation
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 589 373 2000
+  xyz 590 373 2000
   end
 classcanvas 134405 class_ref 129669 // Label
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -62,71 +62,71 @@ classcanvas 134405 class_ref 129669 // Label
   end
 classcanvas 135429 class_ref 129797 // ExplicitePlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 652 231 2004
+  xyz 657 233 2004
   end
 classcanvas 135813 class_ref 129797 // ExplicitePlacement
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 458 805 2000
+  xyz 463 807 2000
   end
 classcanvas 136581 class_ref 129925 // Auto
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
   xyz 382 483 2005
   end
 note 136837 "Placement \"locates\" a Media Object"
-  xyzwh 375 87 3005 207 36
+  xyzwh 368 83 3005 207 36
 textcanvas 136965 "the Timeline is a list of placements reduced to absolute coordinates (time, track)"
-  xyzwh 451 912 2000 121 90
+  xyzwh 464 925 2000 121 90
 textcanvas 137093 "Fixture is the actual assembly of various Media Objects ready to be performed"
-  xyzwh 130 959 2000 147 108
+  xyzwh 39 909 2000 147 108
 classcanvas 137221 class_ref 130053 // Wish
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
   xyz 573 485 2000
   end
 classcanvas 137349 class_ref 130181 // Constraint
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 621 485 2000
+  xyz 623 485 2000
   end
 relationcanvas 128389 relation_ref 128005 // 
   geometry VH
-  from ref 128005 z 1999 to point 52 626
-  line 136453 z 1999 stereotype "<>" xyz 139 629 3000 to ref 128133
+  from ref 128005 z 1999 to point 54 626
+  line 136453 z 1999 stereotype "<>" xyz 126 606 3000 to ref 128133
   role_a_pos 201 604 3000 no_role_b
   multiplicity_a_pos 205 637 3000 no_multiplicity_b
 relationcanvas 128517 relation_ref 128133 // 
   from ref 128005 z 1999 to ref 128261
-  role_a_pos 235 869 3000 no_role_b
-  multiplicity_a_pos 209 869 3000 no_multiplicity_b
+  role_a_pos 240 870 3000 no_role_b
+  multiplicity_a_pos 214 870 3000 no_multiplicity_b
 relationcanvas 128645 relation_ref 128261 // 
   geometry VHr
-  from ref 128261 z 1999 to point 252 930
+  from ref 128261 z 1999 to point 252 931
   line 128901 z 1999 to ref 128133
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 129157 relation_ref 128389 // 
   geometry HV
-  from ref 128133 z 1999 stereotype "<>" xyz 283 628 3000 to point 326 626
+  from ref 128133 z 1999 stereotype "<>" xyz 286 629 3000 to point 326 626
   line 129285 z 1999 to ref 129029
   role_a_pos 338 687 3000 no_role_b
   multiplicity_a_pos 314 687 3000 no_multiplicity_b
 relationcanvas 129797 relation_ref 128645 // 
   from ref 129413 z 1999 to ref 129669
-  role_a_pos 509 143 3000 role_b_pos 397 143 3000
-  multiplicity_a_pos 553 176 3000 multiplicity_b_pos 397 176 3000
+  role_a_pos 513 144 3000 role_b_pos 401 144 3000
+  multiplicity_a_pos 557 177 3000 multiplicity_b_pos 401 177 3000
 relationcanvas 130181 relation_ref 129029 // 
   geometry HV
-  from ref 128261 z 1999 stereotype "<>" xyz 311 933 3000 to point 339 930
+  from ref 128261 z 1999 stereotype "<>" xyz 314 935 3000 to point 339 931
   line 130565 z 1999 to ref 129925
   role_a_pos 351 980 3000 no_role_b
   multiplicity_a_pos 315 980 3000 no_multiplicity_b
 relationcanvas 130821 relation_ref 128517 // 
   geometry VH
-  from ref 128133 z 1999 stereotype "<>" xyz 228 565 3000 to point 252 166
+  from ref 128133 z 1999 stereotype "<>" xyz 258 548 3000 to point 252 167
   line 132357 z 1999 to ref 129413
-  role_a_pos 276 144 3000 no_role_b
-  multiplicity_a_pos 294 177 3000 no_multiplicity_b
+  role_a_pos 280 145 3000 no_role_b
+  multiplicity_a_pos 298 178 3000 no_multiplicity_b
 relationcanvas 131077 relation_ref 129285 // 
   geometry VHr
-  from ref 130949 z 1999 to point 346 277
+  from ref 130949 z 1999 to point 350 277
   line 131333 z 1999 to ref 129413
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
@@ -149,8 +149,8 @@ relationcanvas 132485 relation_ref 129797 // 
 relationcanvas 132997 relation_ref 129925 // 
   from ref 132869 z 1999 to point 486 247
   line 133893 z 1999 to ref 129413
-  role_a_pos 397 171 3000 no_role_b
-  multiplicity_a_pos 397 204 3000 multiplicity_b_pos 503 335 3000
+  role_a_pos 427 197 3000 no_role_b
+  multiplicity_a_pos 401 205 3000 multiplicity_b_pos 507 336 3000
 relationcanvas 134533 relation_ref 130309 // 
   from ref 134405 z 1999 to ref 131973
   no_role_a no_role_b
@@ -172,9 +172,9 @@ relationcanvas 135685 relation_ref 130949 // 
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 135941 relation_ref 131077 // 
-  from ref 128261 z 1999 stereotype "<>" xyz 368 889 3000 to ref 135813
-  role_a_pos 411 842 3000 no_role_b
-  multiplicity_a_pos 443 875 3000 no_multiplicity_b
+  from ref 128261 z 1999 stereotype "<>" xyz 371 890 3000 to ref 135813
+  role_a_pos 416 844 3000 no_role_b
+  multiplicity_a_pos 448 877 3000 no_multiplicity_b
 relationcanvas 136069 relation_ref 131205 // 
   from ref 135813 z 1999 to point 433 897
   line 136197 z 1999 to ref 129925
diff --git a/uml/renderengine/cin3/128261 b/uml/renderengine/cin3/128261
index fbf6d9bad..c807c30fb 100644
--- a/uml/renderengine/cin3/128261
+++ b/uml/renderengine/cin3/128261
@@ -1,6 +1,6 @@
 format 38
 "MObject" // MObject
-  revision 3
+  revision 5
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
diff --git a/uml/renderengine/cin3/128261.diagram b/uml/renderengine/cin3/128261.diagram
index 15094165e..d86a21a4f 100644
--- a/uml/renderengine/cin3/128261.diagram
+++ b/uml/renderengine/cin3/128261.diagram
@@ -28,36 +28,36 @@ deploymentnodecanvas 130181 deploymentnode_ref 128389 // proc
 deploymentnodecanvas 130309 deploymentnode_ref 128389 // proc
   xyzwh 424 430 2010 97 69
 deploymentnodecanvas 130437 deploymentnode_ref 128517 // pnode
-  xyzwh 202 507 2005 51 35
+  xyzwh 202 507 2005 56 36
 deploymentnodecanvas 130565 deploymentnode_ref 128517 // pnode
-  xyzwh 201 546 2005 51 35
+  xyzwh 201 546 2005 56 36
 deploymentnodecanvas 130693 deploymentnode_ref 128517 // pnode
-  xyzwh 201 585 2005 51 35
+  xyzwh 201 585 2005 56 36
 deploymentnodecanvas 130821 deploymentnode_ref 128517 // pnode
-  xyzwh 318 505 2005 51 35
+  xyzwh 318 505 2005 56 36
 deploymentnodecanvas 130949 deploymentnode_ref 128389 // proc
   xyzwh 294 433 2010 97 69
 deploymentnodecanvas 131077 deploymentnode_ref 128517 // pnode
-  xyzwh 318 544 2005 51 35
+  xyzwh 318 544 2005 56 36
 deploymentnodecanvas 131205 deploymentnode_ref 128517 // pnode
-  xyzwh 317 584 2005 51 35
+  xyzwh 317 584 2005 56 36
 deploymentnodecanvas 133125 deploymentnode_ref 128645 // mStream
-  xyzwh 309 800 2010 65 35
+  xyzwh 309 800 2010 70 36
 deploymentnodecanvas 134021 deploymentnode_ref 128517 // pnode
-  xyzwh 442 503 2005 51 35
+  xyzwh 442 503 2005 56 36
 deploymentnodecanvas 134149 deploymentnode_ref 128517 // pnode
-  xyzwh 411 548 2005 51 35
+  xyzwh 411 548 2005 56 36
 deploymentnodecanvas 134277 deploymentnode_ref 128517 // pnode
-  xyzwh 466 548 2005 51 35
+  xyzwh 466 548 2005 56 36
 deploymentnodecanvas 134405 deploymentnode_ref 128517 // pnode
-  xyzwh 467 586 2005 51 35
+  xyzwh 467 586 2005 56 36
 componentcanvas 135045 component_ref 129285 // RenderPathManager
   draw_component_as_icon default show_component_req_prov default show_component_rea default
-  xyzwh 505 222 2000 155 63
+  xyzwh 505 222 2000 165 65
 deploymentnodecanvas 136069 deploymentnode_ref 128773 // State
   xyzwh 703 226 2000 83 52
 textcanvas 136325 "Render Engine carries out the actual processing by pulling output from the aprropriate processor "
-  xyzwh 605 382 2000 135 89
+  xyzwh 615 363 2000 135 89
 note 136453 "Input for Builder"
   xyzwh 125 83 2005 104 36
 note 136581 "Output of Builder"
@@ -68,7 +68,7 @@ packagecanvas 136837
   package_ref 129029 // Controller
     xyzwh 486 68 1994 326 228
 textcanvas 136965 "Builder is instructed by  Controller and transforms given timeline into a Render Engine, i.e.a network of processing nodes"
-  xyzwh 323 199 2005 160 101
+  xyzwh 326 196 2005 160 101
 simplerelationcanvas 128773 simplerelation_ref 128133
   from ref 128517 z 1999 to ref 128645
 line 129925 ----
diff --git a/uml/renderengine/cin3/128389 b/uml/renderengine/cin3/128389
index af729107e..ab4598401 100644
--- a/uml/renderengine/cin3/128389
+++ b/uml/renderengine/cin3/128389
@@ -1,6 +1,6 @@
 format 38
 "RenderEngine" // RenderEngine
-  revision 2
+  revision 4
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -164,7 +164,6 @@ ${inlines}
 	    classrelation_ref 132869 // 
 	  b multiplicity "" parent class_ref 131717 // ProcNode
       end
-
     end
 
     class 131717 "ProcNode"
diff --git a/uml/renderengine/cin3/128389.diagram b/uml/renderengine/cin3/128389.diagram
index a72f4c873..501e7fe3c 100644
--- a/uml/renderengine/cin3/128389.diagram
+++ b/uml/renderengine/cin3/128389.diagram
@@ -2,23 +2,23 @@ format 38
 
 classcanvas 128005 class_ref 131333 // RenderEngine
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 172 324 2000
+  xyz 175 325 2000
   end
 classcanvas 128133 class_ref 131461 // Processor
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 272 182 2000
+  xyz 276 182 2000
   end
 classcanvas 128389 class_ref 131589 // ExitNode
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 415 444 2000
+  xyz 417 444 2000
   end
 classcanvas 128517 class_ref 131717 // ProcNode
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 468 263 2000
+  xyz 472 264 2000
   end
 classcanvas 129029 class_ref 131845 // Trafo
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 497 443 2000
+  xyz 496 444 2000
   end
 classcanvas 129157 class_ref 131973 // Link
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -30,7 +30,7 @@ classcanvas 129285 class_ref 132101 // Hub
   end
 classcanvas 129413 class_ref 132229 // Projector
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 415 561 2000
+  xyz 417 561 2000
   end
 classcanvas 129541 class_ref 132357 // Mask
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
@@ -38,82 +38,82 @@ classcanvas 129541 class_ref 132357 // Mask
   end
 classcanvas 129669 class_ref 132485 // PluginAdapter
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 537 561 2000
+  xyz 539 561 2000
   end
 classcanvas 129797 class_ref 132613 // OpenGLPipe
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 683 531 2000
+  xyz 684 531 2000
   end
 classcanvas 132229 class_ref 132741 // StateProxy
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 32 373 2000
+  xyz 36 374 2000
   end
 classcanvas 132997 class_ref 132869 // ARender
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 29 511 2000
+  xyz 31 511 2000
   end
 classcanvas 133125 class_ref 132997 // VRender
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 107 511 2000
+  xyz 110 511 2000
   end
 classcanvas 133253 class_ref 133125 // GLRender
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 173 511 2000
+  xyz 175 511 2000
   end
 classcanvas 133765 class_ref 133253 // Frame
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 274 611 2000
+  xyz 278 612 2000
   end
 classcanvas 133893 class_ref 133381 // AFrame
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 225 737 2000
+  xyz 228 737 2000
   end
 classcanvas 134021 class_ref 133509 // VFrame
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 287 738 2000
+  xyz 291 737 2000
   end
 classcanvas 134149 class_ref 133637 // GLBuf
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 359 737 2000
+  xyz 360 737 2000
   end
 classcanvas 137221 class_ref 133765 // Source
   draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
-  xyz 739 444 2000
+  xyz 741 444 2000
   end
 relationcanvas 128261 relation_ref 131845 // 
-  from ref 128005 z 1999 to point 212 200
+  from ref 128005 z 1999 to point 216 200
   line 137733 z 1999 to ref 128133
-  role_a_pos 180 178 3000 no_role_b
-  multiplicity_a_pos 245 211 3000 multiplicity_b_pos 198 299 3000
+  role_a_pos 184 178 3000 no_role_b
+  multiplicity_a_pos 249 211 3000 multiplicity_b_pos 202 300 3000
 relationcanvas 128901 relation_ref 131973 // 
-  from ref 128133 z 1999 stereotype "<>" xyz 346 333 3000 to ref 128389
-  role_a_pos 439 419 3000 no_role_b
-  multiplicity_a_pos 413 419 3000 no_multiplicity_b
+  from ref 128133 z 1999 stereotype "<>" xyz 350 334 3000 to ref 128389
+  role_a_pos 441 419 3000 no_role_b
+  multiplicity_a_pos 415 419 3000 no_multiplicity_b
 relationcanvas 129925 relation_ref 132101 // 
   geometry VHV
-  from ref 128389 z 1999 to point 443 383
-  line 130693 z 1999 to point 505 383
+  from ref 128389 z 1999 to point 445 384
+  line 130693 z 1999 to point 509 384
   line 130821 z 1999 to ref 128517
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 130053 relation_ref 132229 // 
   geometry VHV
-  from ref 129029 z 1999 to point 517 383
-  line 130949 z 1999 to point 505 383
+  from ref 129029 z 1999 to point 516 384
+  line 130949 z 1999 to point 509 384
   line 131077 z 1999 to ref 128517
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 130181 relation_ref 132357 // 
   geometry VHV
-  from ref 129285 z 1999 to point 613 383
-  line 131205 z 1999 to point 505 383
+  from ref 129285 z 1999 to point 613 384
+  line 131205 z 1999 to point 509 384
   line 131333 z 1999 to ref 128517
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 130309 relation_ref 132485 // 
   geometry VHV
-  from ref 129157 z 1999 to point 668 383
-  line 131461 z 1999 to point 505 383
+  from ref 129157 z 1999 to point 668 384
+  line 131461 z 1999 to point 509 384
   line 131589 z 1999 to ref 128517
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
@@ -135,36 +135,36 @@ relationcanvas 132101 relation_ref 132997 // 
   no_multiplicity_a no_multiplicity_b
 relationcanvas 133381 relation_ref 133509 // 
   geometry VHV
-  from ref 132997 z 1999 to point 56 472
-  line 134277 z 1999 to point 69 472
+  from ref 132997 z 1999 to point 58 472
+  line 134277 z 1999 to point 73 472
   line 134405 z 1999 to ref 132229
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 133509 relation_ref 133637 // 
   geometry VHV
-  from ref 133125 z 1999 to point 133 472
-  line 134533 z 1999 to point 69 472
+  from ref 133125 z 1999 to point 136 472
+  line 134533 z 1999 to point 73 472
   line 134661 z 1999 to ref 132229
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 133637 relation_ref 133765 // 
   geometry VHV
-  from ref 133253 z 1999 to point 204 472
-  line 134789 z 1999 to point 69 472
+  from ref 133253 z 1999 to point 206 472
+  line 134789 z 1999 to point 73 472
   line 134917 z 1999 to ref 132229
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 135045 relation_ref 133893 // 
   geometry VHV
-  from ref 133893 z 1999 to point 249 704
-  line 135557 z 1999 to point 311 704
+  from ref 133893 z 1999 to point 252 704
+  line 135557 z 1999 to point 315 704
   line 135685 z 1999 to ref 133765
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 135173 relation_ref 134021 // 
   geometry VHV
-  from ref 134021 z 1999 to point 311 704
-  line 135813 z 1999 to point 311 704
+  from ref 134021 z 1999 to point 315 704
+  line 135813 z 1999 to point 315 704
   line 135941 z 1999 to ref 133765
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
@@ -173,14 +173,14 @@ relationcanvas 135429 relation_ref 134149 // 
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 136965 relation_ref 134533 // 
-  from ref 132229 z 1999 to point 310 466
+  from ref 132229 z 1999 to point 315 465
   line 137093 z 1999 to ref 133765
-  role_a_pos 322 586 3000 no_role_b
-  no_multiplicity_a multiplicity_b_pos 120 425 3000
+  role_a_pos 327 587 3000 no_role_b
+  no_multiplicity_a multiplicity_b_pos 124 426 3000
 relationcanvas 137349 relation_ref 134661 // 
   geometry VHV
-  from ref 137221 z 1999 to point 761 383
-  line 137477 z 1999 to point 505 383
+  from ref 137221 z 1999 to point 763 384
+  line 137477 z 1999 to point 509 384
   line 137605 z 1999 to ref 128517
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
@@ -189,7 +189,7 @@ relationcanvas 137861 relation_ref 134789 // 
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
 relationcanvas 137989 relation_ref 134917 // 
-  from ref 128133 z 1999 stereotype "<>" xyz 279 314 3000 to point 301 403
+  from ref 128133 z 1999 stereotype "<>" xyz 285 315 3000 to point 306 403
   line 138117 z 1999 to ref 132229
   no_role_a no_role_b
   no_multiplicity_a no_multiplicity_b
diff --git a/uml/renderengine/cin3/128517.diagram b/uml/renderengine/cin3/128517.diagram
index 66a2938d5..14becd3dc 100644
--- a/uml/renderengine/cin3/128517.diagram
+++ b/uml/renderengine/cin3/128517.diagram
@@ -11,7 +11,7 @@ classinstance 129413 class_ref 128261 // Fixture
 classinstance 129797 class_ref 130693 // ToolFactory
   xyz 381 449 2000 name ""  xyz 381 449 2000
 classinstance 129925 class_ref 130821 // ConManager
-  xyz 147 450 2005 name ""  xyz 147 450 2005
+  xyz 142 486 2005 name ""  xyz 142 486 2005
 classinstance 130053 class_ref 130949 // RenderState
   xyz 550 424 2000 name ""  xyz 550 424 2000
 note 130565 "Note: Builder subsys is stateless"
@@ -35,12 +35,12 @@ linkcanvas 129541
   from ref 128133 z 1999 to ref 129285
 dirscanvas 130181 z 1000 linkcanvas_ref 129541
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "3 buildEngine()" xyz 364 316 3000
+  forward_label "3 buildEngine()" xyz 384 313 3000
 linkcanvas 129669
   from ref 129285 z 1999 to ref 129413
 dirscanvas 132357 z 1000 linkcanvas_ref 129669
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "4 getPlaylistForRender()" xyz 126 222 3000
+  forward_label "4 getPlaylistForRender()" xyz 216 167 3000
 linkcanvas 130309
   from ref 128133 z 1999 to ref 130053
 dirscanvas 132229 z 1000 linkcanvas_ref 130309
@@ -50,7 +50,7 @@ linkcanvas 130437
   from ref 129285 z 1999 to ref 129797
 dirscanvas 132485 z 1000 linkcanvas_ref 130437
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "5 configure()" xyz 357 345 3000
+  forward_label "5 configure()" xyz 362 355 3000
 linkcanvas 131077
   from ref 129285 z 1999 to ref 130693
 dirscanvas 132613 z 1000 linkcanvas_ref 131077
@@ -60,27 +60,27 @@ linkcanvas 131205
   from ref 130693 z 1999 to ref 129925
 dirscanvas 132741 z 1000 linkcanvas_ref 131205
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "7 getConnection()" xyz 194 453 3000
+  forward_label "7 getConnection()" xyz 224 457 3000
 linkcanvas 131461
   from ref 129925 z 1999 to ref 131333
 dirscanvas 132997 z 1000 linkcanvas_ref 131461
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "9 prepareStream()" xyz 218 524 3000
+  forward_label "9 prepareStream()" xyz 218 536 3000
 linkcanvas 131589
   from ref 129925 z 1999 to ref 129413
 dirscanvas 132869 z 1000 linkcanvas_ref 131589
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "8 getAutomation()" xyz 65 280 3000
+  forward_label "8 getAutomation()" xyz 71 294 3000
 linkcanvas 131845
   from ref 128005 z 1999 to ref 131717
 dirscanvas 133125 z 1000 linkcanvas_ref 131845
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "10 play()" xyz 668 317 3000
+  forward_label "10 play()" xyz 674 348 3000
 linkcanvas 131973
   from ref 131717 z 1999 to ref 131333
 dirscanvas 133253 z 1000 linkcanvas_ref 131973
   show_full_operations_definition default show_hierarchical_rank default write_horizontally default drawing_language default package_name_in_tab default show_context default draw_all_relations default shadow default
-  forward_label "11 getReady()" xyz 458 611 3000
+  forward_label "11 getReady()" xyz 427 603 3000
 msgs
   msg operation_ref 128261 // "buildProcessor()"
     forward ranks 1 "1" dirscanvas_ref 132101
diff --git a/uml/renderengine/cin3/128901 b/uml/renderengine/cin3/128901
index 00b11cb58..dcd651815 100644
--- a/uml/renderengine/cin3/128901
+++ b/uml/renderengine/cin3/128901
@@ -1,6 +1,6 @@
 format 38
 "Builder" // MObject::Builder
-  revision 1
+  revision 3
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
diff --git a/uml/renderengine/cin3/129029 b/uml/renderengine/cin3/129029
index 7573a8f2c..29f5846e2 100644
--- a/uml/renderengine/cin3/129029
+++ b/uml/renderengine/cin3/129029
@@ -1,6 +1,6 @@
 format 38
 "Controller" // MObject::Controller
-  revision 1
+  revision 2
   modified_by 5 "hiv"
   // class settings
   //class diagram settings
@@ -43,7 +43,7 @@ format 38
     package_name_in_tab default show_context default show_opaque_action_definition default auto_label_position default write_flow_label_horizontally default draw_all_relations default shadow default
     show_infonote default drawing_language default
     
-    classdiagram 128645 "Components"
+    classdiagram 128645 "Controller Entities"
       draw_all_relations default hide_attributes default hide_operations default show_members_full_definition default show_members_visibility default show_members_stereotype default show_parameter_dir default show_parameter_name default package_name_in_tab default class_drawing_mode default drawing_language default show_context_mode default auto_label_position default show_infonote default shadow default
       size A4
     end
diff --git a/uml/renderengine/cin3/5.session b/uml/renderengine/cin3/5.session
index 098941c6a..4fea246cb 100644
--- a/uml/renderengine/cin3/5.session
+++ b/uml/renderengine/cin3/5.session
@@ -1,20 +1,21 @@
-window_sizes 1140 830 287 843 687 62
+window_sizes 1140 830 287 843 689 62
 diagrams
   componentdiagram_ref 128005 // Overview
-    860 687 100 4 314 0
+    860 687 100 4 525 0
   deploymentdiagram_ref 128261 // Overview Render Engine
-    674 551 100 4 109 12
+    674 551 100 4 0 12
   classdiagram_ref 128133 // Session structure
-    674 551 100 4 538 0
-  active  classdiagram_ref 128389 // Render Entities
+    674 551 100 4 0 0
+  classdiagram_ref 128389 // Render Entities
     843 689 100 4 147 0
-  collaborationdiagram_ref 128517 // build process
-    674 551 100 4 0 0
-  classdiagram_ref 128645 // Components
-    674 551 100 4 0 0
+  active  collaborationdiagram_ref 128517 // build process
+    674 551 100 4 0 181
+  classdiagram_ref 128645 // Controller Entities
+    674 551 100 4 538 0
 end
 show_stereotypes
-selected classdiagram_ref 128389 // Render Entities
+selected 
+  package_ref 129 // cin3
 open
   class_ref 128005 // Session
   classrelation_ref 128645 // tracks ()
diff --git a/uml/renderengine/cin3/cin3.prj b/uml/renderengine/cin3/cin3.prj
index e327763a2..27e6b19c1 100644
--- a/uml/renderengine/cin3/cin3.prj
+++ b/uml/renderengine/cin3/cin3.prj
@@ -1,6 +1,6 @@
 format 38
 "cin3"
-  revision 3
+  revision 5
   modified_by 5 "hiv"
   cpp_root_dir "../../../src/"
 
@@ -32,7 +32,7 @@ format 38
   show_infonote yes drawing_language uml
   
   class_color yellow duration_color transparent continuation_color gray note_color blue fragment_color transparent subject_color transparent usecase_color yellow package_color transparent component_color green artifact_color green deploymentnode_color gray state_color yellow stateaction_color transparent activity_color transparent activityregion_color transparent activityaction_color transparent parameterpin_color white 
-  font_size 9
+  font_size 8
   diagram_format A4
 
   mark_for_import
diff --git a/wiki/ichthyo-draft.html b/wiki/ichthyo-draft.html
index bcb331a5b..225a26a9d 100644
--- a/wiki/ichthyo-draft.html
+++ b/wiki/ichthyo-draft.html
@@ -747,6 +747,11 @@ config.macros.timeline.handler = function(place,macroName,params,wikifier,paramS
 }
 //}}}
+
+
All decisions on //how// the RenderProcess has to be carried out are concentrated in this rather complicated Builder Subsystem. The benefit of this aproach is, besides decoupling of subsystems, to keep the actually performance relevant video processing code so simple and transparent as possible. The price in terms of increased complexity to pay here in the Builder can be handled by making the Build Process genereic to a large degree, thus beeing able to decompose the various decisions into small decision modules, which can be judged solely by a Design By Contract aproach, without having to trace the actual workings of the Build Process as a whole.
+
+[img[Colaborations in the Build Process|renderengine/fig3.png]]
+
This 'index.html' becomes the entry point of some tiddlywikis managed under git. There is a 'empty.html' in the same folder serving as template for generating new wikis. Please refrain from editing it.
@@ -1154,6 +1159,13 @@ config.formatters.push( { } ) //}}}
+
+
The MObjects Subsystem contains everything related to the EDL and the various Media Objects placed within it.
+
+This Design strives at a StrongSeparation between the low-level Structures used to carry out the actual rendering and the high level Entities living in the EDL and beeing manipulated by the user. In this high level view, the Objects are grouped and located by [[Placements]], providing a flexible and open way to express different groupings, locatons and ordering constraints between the Media Objects.
+
+[img[Classess related to the EDL|renderengine/fig2.png]]
+
[[RenderEngine]]
 [[MObjects]]
@@ -1170,6 +1182,16 @@ config.formatters.push( {
 
[img[Block Diagram|renderengine/fig1.png]]
+
+
Render Engine, [[Builder]] and [[Controller]] are closely related Subsystems. Actually, the [[Builder]] //creates// a newly configurated Render Engine //for every// RenderProcess. For doing so, he queries from the Session (or, to be more preciese, from the [[Fixture]] within the current Session all necessary Media Object Placement informations and derives from this informations the actual assembly of ProcessingNodes comprising the Render Engine. Thus:
+ * the source of the build process is a sequence of absolute (explicite) [[Placements]] called the [[Playlist]]
+ * the [[build process|BuildProcess]] is driven, configured and controlled by the [[Controller]] subsystem components, encompasing the actual playback configuration and State of the Sytem
+ * the resulting Render Engine is a list of [[Processors]], each configured to calculate a segment of the timeline with a uniform properties, and each of this Processors in turn is a graph of interconnected ProcessingNodes.
+
+see also: RenderEntities
+
+[img[Overview: Components of the Renderengine|renderengine/fig5.png]]
+
<!--{{{-->
 <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
@@ -1971,12 +1993,13 @@ see : <<tag RSSFeed>> for the full list.
 
 
-
+
The key idea of Ichthyo's Design-draft is, to use the ''Builder Pattern'' for the Render Engine, thus separating completely the //building// of the Render Pipeline from //running,// i.e. doing the actual Render. The Nodes in this Pipeline should process Video/Audio and do nothing else. No more any decisions, tests and conditional operations when running the Pipeline. Move all of this out into the configuration of the pipeline, done by the Builder. Make the actual processing nodes Template classes, parametrised by the color model and number of components. Make all Nodes on equal footing of each other, able to be connected freely within the limitations of the necessary input and output. Make the OpenGL rendering into alternate implementation of some operations together with an alternate signal flow (usable only if the whole Pipeline can be built up to support this changed signal flow), thus facturing out all the complexities of managing the data flow between core and hardware accelerated rendering out of the implementation of the actual processing. Introduce separate control data connections for the automation data, separating the case of true multi-channel-effects from the case where one node just gets remote controlled by another node (or two nodes using the sama automation data). Unfold any "internal-multi" effects into separate instances, e.g. the possibility of having an arbitrary number of single masks at any point of the pipeline instead of having one special masking facility encompassing multiple sub-masks.
 
 !Why doesn't the current Design succeed with this?
-The design of Cinelerra 2 basically follows this design, but fails because of two reasons
- * too much differentiation is put into the class hierarchy instead of configuring Instances differently. Causes overly heavy use of factories and -- in order to ameliorate this -- falling back to hard wired branching
+The design of Cinelerra 2 basically follows this design, but __fails because of two reasons__
+ * too much differentiation is put into the class hierarchy instead of configuring Instances differently. 
+   This causes overly heavy use of virtual functions and -- in order to ameliorate this -- falling back to hard wired branching
  * far too much back-coupling to the internals of the EDL, forcing a overly rigid structure on the latter
 
 !Try to learn from this
@@ -1987,8 +2010,19 @@ The design of Cinelerra 2 basically follows this design, but fails because of tw
 !!see also
  * [[Overview]]
  * OverviewRenderEngine
+ * BuildProcess
  * RenderProcess
+
+
As said, the Render Engine carries out the low-level and percormance critical tasks solely; all configuration and decision concerns are to be handled by [[Builder]] and [[Controller]]. While the actual connection of the Render Nodes can be highly complex, basically each Segment of the Timeline with uniform characteristics is handled by one Processor, which is a graph of ProcessingNodes discharging into a ExitNode. The Render Engine Components as such are //stateless// themselfs; for the actual calculations they are combined with a StateProxy object generated by and connected internally to the [[Controller]], while at the same time holding the Data Buffers (Frames) for the actual calculations.
+
+[img[Entities comprising the Render Engine|renderengine/fig6.png]]
+
+
+
''TODO'' describe the Render Process.
+
+ * see also the [[Entities invoved in Rendering|RenderEntities]]
+
some aspects of Cinelerra-3 design
diff --git a/wiki/renderengine/class100.html b/wiki/renderengine/class100.html new file mode 100644 index 000000000..f4d19be30 --- /dev/null +++ b/wiki/renderengine/class100.html @@ -0,0 +1,22 @@ + + + + + + +Class ARender + + + + + +
Class ARender
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class101.html b/wiki/renderengine/class101.html new file mode 100644 index 000000000..037eb4cba --- /dev/null +++ b/wiki/renderengine/class101.html @@ -0,0 +1,22 @@ + + + + + + +Class VRender + + + + + +
Class VRender
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class102.html b/wiki/renderengine/class102.html new file mode 100644 index 000000000..1fd1eb01b --- /dev/null +++ b/wiki/renderengine/class102.html @@ -0,0 +1,22 @@ + + + + + + +Class GLRender + + + + + +
Class GLRender
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class103.html b/wiki/renderengine/class103.html new file mode 100644 index 000000000..75897a78a --- /dev/null +++ b/wiki/renderengine/class103.html @@ -0,0 +1,24 @@ + + + + + + +Class Frame + + + + + +
Class Frame
+

+ + + + +

Declaration :

  • C++ : class Frame
  • Java : package interface Frame

Directly inherited by : AFrame GLBuf VFrame

+
+ +
Relation <unidirectional association>

Declaration :

+ + diff --git a/wiki/renderengine/class105.html b/wiki/renderengine/class105.html new file mode 100644 index 000000000..c06a22987 --- /dev/null +++ b/wiki/renderengine/class105.html @@ -0,0 +1,22 @@ + + + + + + +Class AFrame + + + + + +
Class AFrame
+

+ + + + +

Declaration :

  • C++ : class AFrame : public Frame
+
+ + diff --git a/wiki/renderengine/class106.html b/wiki/renderengine/class106.html new file mode 100644 index 000000000..f3cb16c67 --- /dev/null +++ b/wiki/renderengine/class106.html @@ -0,0 +1,22 @@ + + + + + + +Class VFrame + + + + + +
Class VFrame
+

+ + + + +

Declaration :

  • C++ : class VFrame : public Frame
+
+ + diff --git a/wiki/renderengine/class107.html b/wiki/renderengine/class107.html new file mode 100644 index 000000000..9c9f32c24 --- /dev/null +++ b/wiki/renderengine/class107.html @@ -0,0 +1,22 @@ + + + + + + +Class GLBuf + + + + + +
Class GLBuf
+

+ + + + +

Declaration :

  • C++ : class GLBuf : public Frame
+
+ + diff --git a/wiki/renderengine/class108.html b/wiki/renderengine/class108.html new file mode 100644 index 000000000..898b13da7 --- /dev/null +++ b/wiki/renderengine/class108.html @@ -0,0 +1,22 @@ + + + + + + +Class Source + + + + + +
Class Source
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class112.html b/wiki/renderengine/class112.html new file mode 100644 index 000000000..a24ead126 --- /dev/null +++ b/wiki/renderengine/class112.html @@ -0,0 +1,25 @@ + + + + + + +Class StreamProvider + + + + + +
Class StreamProvider
+

+ + + + +

Declaration :

  • C++ : class StreamProvider

Note: just a Placeholder for my design. Cehteh will ceratinly know much better how to organize this

+ +
Operation prepareStream

Declaration :

  • Uml : + prepareStream() :
  • C++ : public: prepareStream()
+
Operation getReady

Declaration :

  • Uml : + getReady() :
  • C++ : public: getReady()
+

All public operations : getReady , prepareStream

+ + diff --git a/wiki/renderengine/class20.html b/wiki/renderengine/class20.html new file mode 100644 index 000000000..3362822c9 --- /dev/null +++ b/wiki/renderengine/class20.html @@ -0,0 +1,24 @@ + + + + + + +Class Session + + + + + +
Class Session
+

+ + + + +

Declaration :

  • C++ : class Session
+ +
Relation edls (<directional aggregation>)

Declaration :

  • Uml : # edls : EDL, multiplicity : 1..*
  • C++ : protected: EDL * edls
+
Relation fixture (<directional aggregation by value>)

Declaration :

  • Uml : # fixture : Fixture, multiplicity : 1
  • C++ : protected: Fixture fixture
+ + diff --git a/wiki/renderengine/class23.html b/wiki/renderengine/class23.html new file mode 100644 index 000000000..e8c184b81 --- /dev/null +++ b/wiki/renderengine/class23.html @@ -0,0 +1,25 @@ + + + + + + +Class EDL + + + + + +
Class EDL
+

+ + + + +

Declaration :

  • C++ : class EDL

Directly inherited by : Fixture

+
+ +
Relation tracks (<directional aggregation by value>)

Declaration :

  • Uml : # tracks : Track, multiplicity : *
  • C++ : protected: Track tracks
+
Relation clips (<directional aggregation>)

Declaration :

  • Uml : # clips : MObject, multiplicity : *
  • C++ : protected: MObject * clips
+ + diff --git a/wiki/renderengine/class26.html b/wiki/renderengine/class26.html new file mode 100644 index 000000000..50052fd3c --- /dev/null +++ b/wiki/renderengine/class26.html @@ -0,0 +1,27 @@ + + + + + + +Class Fixture + + + + + +
Class Fixture
+

+ + + + +

Declaration :

  • C++ : class Fixture : public EDL
+ +
Relation tracks (<directional aggregation by value>)

Declaration :

  • Uml : # tracks : Track, multiplicity : 1..*
  • C++ : protected: Track tracks
+
Relation timeline (<directional aggregation by value>)

Declaration :

+
Operation getPlaylistForRender

Declaration :

  • Uml : + getPlaylistForRender() :
  • C++ : public: getPlaylistForRender()
+
Operation getAutomation

Declaration :

  • Uml : + getAutomation() :
  • C++ : public: getAutomation()
+

All public operations : getAutomation , getPlaylistForRender

+ + diff --git a/wiki/renderengine/class31.html b/wiki/renderengine/class31.html new file mode 100644 index 000000000..bdbca81a5 --- /dev/null +++ b/wiki/renderengine/class31.html @@ -0,0 +1,20 @@ + + + + + + +Class Track + + + + + +
Class Track
+

+ + + + +

Declaration :

  • C++ : class Track
+ diff --git a/wiki/renderengine/class32.html b/wiki/renderengine/class32.html new file mode 100644 index 000000000..608b29aed --- /dev/null +++ b/wiki/renderengine/class32.html @@ -0,0 +1,24 @@ + + + + + + +Class MObject + + + + + +
Class MObject
+

+ + + + +

Declaration :

  • C++ : class MObject
  • Java : public interface MObject

Directly inherited by : AbstractMO

+
+ +
Relation placement (<association>)

Declaration :

+ + diff --git a/wiki/renderengine/class34.html b/wiki/renderengine/class34.html new file mode 100644 index 000000000..4dfee44fe --- /dev/null +++ b/wiki/renderengine/class34.html @@ -0,0 +1,26 @@ + + + + + + +Class Placement + + + + + +
Class Placement
+

+ + + + +

Declaration :

  • C++ : class Placement
  • Java : public interface Placement

Directly inherited by : Allocation DirectPlacement ExplicitePlacement RelativePlacement

+
+ +
Relation subject (<association>)

Declaration :

  • Uml : # subject : MObject, multiplicity : 1
  • C++ : protected: MObject * subject
+
Operation resolve

Declaration :

create an actual (explicite) placement while trying to satisfy the network of adjacent objects and placements.

+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class37.html b/wiki/renderengine/class37.html new file mode 100644 index 000000000..14ec9db8d --- /dev/null +++ b/wiki/renderengine/class37.html @@ -0,0 +1,23 @@ + + + + + + +Class AbstractMO + + + + + +
Class AbstractMO
+

+ + + + +

Declaration :

  • C++ : class AbstractMO : public MObject

Directly inherited by : Clip Effect Meta

+
+
+ + diff --git a/wiki/renderengine/class38.html b/wiki/renderengine/class38.html new file mode 100644 index 000000000..8c98d88f0 --- /dev/null +++ b/wiki/renderengine/class38.html @@ -0,0 +1,22 @@ + + + + + + +Class Clip + + + + + +
Class Clip
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class39.html b/wiki/renderengine/class39.html new file mode 100644 index 000000000..b22b301a3 --- /dev/null +++ b/wiki/renderengine/class39.html @@ -0,0 +1,22 @@ + + + + + + +Class Effect + + + + + +
Class Effect
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class40.html b/wiki/renderengine/class40.html new file mode 100644 index 000000000..85f829935 --- /dev/null +++ b/wiki/renderengine/class40.html @@ -0,0 +1,23 @@ + + + + + + +Class Meta + + + + + +
Class Meta
+

+ + + + +

Declaration :

Directly inherited by : Auto Label

+
+
+ + diff --git a/wiki/renderengine/class41.html b/wiki/renderengine/class41.html new file mode 100644 index 000000000..eb6136a91 --- /dev/null +++ b/wiki/renderengine/class41.html @@ -0,0 +1,23 @@ + + + + + + +Class DirectPlacement + + + + + +
Class DirectPlacement
+

+ + + + +

Declaration :

+
+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class42.html b/wiki/renderengine/class42.html new file mode 100644 index 000000000..71248c9e2 --- /dev/null +++ b/wiki/renderengine/class42.html @@ -0,0 +1,26 @@ + + + + + + +Class RelativePlacement + + + + + +
Class RelativePlacement
+

+ + + + +

Declaration :

  • C++ : class RelativePlacement : public Placement
+ +
Relation anchor (<unidirectional association>)

Declaration :

  • Uml : # anchor : MObject, multiplicity : 1
  • C++ : protected: MObject * anchor
+
Attribut relType
+

Declaration :

  • Uml : # relType :
  • C++ : protected: relType
+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class45.html b/wiki/renderengine/class45.html new file mode 100644 index 000000000..8a90a7f34 --- /dev/null +++ b/wiki/renderengine/class45.html @@ -0,0 +1,24 @@ + + + + + + +Class Allocation + + + + + +
Class Allocation
+

+ + + + +

Declaration :

Directly inherited by : Constraint Wish

+

a directive to place a MObject in a specific way

+
+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class46.html b/wiki/renderengine/class46.html new file mode 100644 index 000000000..2c26a9afb --- /dev/null +++ b/wiki/renderengine/class46.html @@ -0,0 +1,22 @@ + + + + + + +Class Label + + + + + +
Class Label
+

+ + + + +

Declaration :

  • C++ : class Label : public Meta
+
+ + diff --git a/wiki/renderengine/class47.html b/wiki/renderengine/class47.html new file mode 100644 index 000000000..eb04ece04 --- /dev/null +++ b/wiki/renderengine/class47.html @@ -0,0 +1,29 @@ + + + + + + +Class ExplicitePlacement + + + + + +
Class ExplicitePlacement
+

+ + + + +

Declaration :

  • C++ : class ExplicitePlacement : public Placement
  • Java : public interface ExplicitePlacement

Directly inherited by : DirectPlacement

+
+ +
Attribut time
+

Declaration :

  • Uml : # time : long
  • C++ : protected: long time
+
Attribut track
+

Declaration :

+
Relation <unidirectional association>

Declaration :

+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class51.html b/wiki/renderengine/class51.html new file mode 100644 index 000000000..c6cd6cd11 --- /dev/null +++ b/wiki/renderengine/class51.html @@ -0,0 +1,22 @@ + + + + + + +Class Auto + + + + + +
Class Auto
+

+ + + + +

Declaration :

  • C++ : class Auto : public Meta
+
+ + diff --git a/wiki/renderengine/class52.html b/wiki/renderengine/class52.html new file mode 100644 index 000000000..218d02b81 --- /dev/null +++ b/wiki/renderengine/class52.html @@ -0,0 +1,23 @@ + + + + + + +Class Wish + + + + + +
Class Wish
+

+ + + + +

Declaration :

+
+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class53.html b/wiki/renderengine/class53.html new file mode 100644 index 000000000..87e04df53 --- /dev/null +++ b/wiki/renderengine/class53.html @@ -0,0 +1,23 @@ + + + + + + +Class Constraint + + + + + +
Class Constraint
+

+ + + + +

Declaration :

+
+

All public operations : resolve

+ + diff --git a/wiki/renderengine/class57.html b/wiki/renderengine/class57.html new file mode 100644 index 000000000..40935c4f4 --- /dev/null +++ b/wiki/renderengine/class57.html @@ -0,0 +1,24 @@ + + + + + + +Class BuilderFacade + + + + + +
Class BuilderFacade
+

+ + + + +

Declaration :

  • C++ : class BuilderFacade
+ +
Operation buildEngine

Declaration :

  • Uml : + buildEngine() :
  • C++ : public: buildEngine()
+

All public operations : buildEngine

+ + diff --git a/wiki/renderengine/class59.html b/wiki/renderengine/class59.html new file mode 100644 index 000000000..4d741df66 --- /dev/null +++ b/wiki/renderengine/class59.html @@ -0,0 +1,24 @@ + + + + + + +Class ToolFactory + + + + + +
Class ToolFactory
+

+ + + + +

Declaration :

  • C++ : class ToolFactory
+ +
Operation configure

Declaration :

  • Uml : + configure() :
  • C++ : public: configure()
+

All public operations : configure

+ + diff --git a/wiki/renderengine/class61.html b/wiki/renderengine/class61.html new file mode 100644 index 000000000..6d18e7952 --- /dev/null +++ b/wiki/renderengine/class61.html @@ -0,0 +1,24 @@ + + + + + + +Class ConManager + + + + + +
Class ConManager
+

+ + + + +

Declaration :

  • C++ : class ConManager
+ +
Operation getConnection

Declaration :

  • Uml : + getConnection() :
  • C++ : public: getConnection()
+

All public operations : getConnection

+ + diff --git a/wiki/renderengine/class63.html b/wiki/renderengine/class63.html new file mode 100644 index 000000000..4ea9996fd --- /dev/null +++ b/wiki/renderengine/class63.html @@ -0,0 +1,24 @@ + + + + + + +Class Assembler + + + + + +
Class Assembler
+

+ + + + +

Declaration :

  • C++ : class Assembler
+ +
Operation build

Declaration :

  • Uml : + build() :
  • C++ : public: build()
+

All public operations : build

+ + diff --git a/wiki/renderengine/class65.html b/wiki/renderengine/class65.html new file mode 100644 index 000000000..b887d0295 --- /dev/null +++ b/wiki/renderengine/class65.html @@ -0,0 +1,24 @@ + + + + + + +Class StateProxy + + + + + +
Class StateProxy
+

+ + + + +

Declaration :

  • C++ : class StateProxy
  • Java : package interface StateProxy

Directly inherited by : ARender GLRender VRender

+
+ +
Relation currFrame (<unidirectional association>)

Declaration :

  • Uml : # currFrame : Frame
  • C++ : protected: Frame * currFrame
+ + diff --git a/wiki/renderengine/class70.html b/wiki/renderengine/class70.html new file mode 100644 index 000000000..f74fdddd1 --- /dev/null +++ b/wiki/renderengine/class70.html @@ -0,0 +1,20 @@ + + + + + + +Class ControllerFacade + + + + + +
Class ControllerFacade
+

+ + + + +

Declaration :

  • C++ : class ControllerFacade
+ diff --git a/wiki/renderengine/class71.html b/wiki/renderengine/class71.html new file mode 100644 index 000000000..b246c37bd --- /dev/null +++ b/wiki/renderengine/class71.html @@ -0,0 +1,24 @@ + + + + + + +Class PathManager + + + + + +
Class PathManager
+

+ + + + +

Declaration :

  • C++ : class PathManager
+ +
Operation buildProcessor

Declaration :

  • Uml : + buildProcessor() :
  • C++ : public: buildProcessor()
+

All public operations : buildProcessor

+ + diff --git a/wiki/renderengine/class73.html b/wiki/renderengine/class73.html new file mode 100644 index 000000000..10c79ab76 --- /dev/null +++ b/wiki/renderengine/class73.html @@ -0,0 +1,24 @@ + + + + + + +Class RenderState + + + + + +
Class RenderState
+

+ + + + +

Declaration :

  • C++ : class RenderState
+ +
Operation getStateProxy

Declaration :

  • Uml : + getStateProxy() :
  • C++ : public: getStateProxy()
+

All public operations : getStateProxy

+ + diff --git a/wiki/renderengine/class86.html b/wiki/renderengine/class86.html new file mode 100644 index 000000000..2714afbae --- /dev/null +++ b/wiki/renderengine/class86.html @@ -0,0 +1,25 @@ + + + + + + +Class RenderEngine + + + + + +
Class RenderEngine
+

+ + + + +

Declaration :

+ +
Operation play

Declaration :

  • Uml : + play() :
  • C++ : public: play()
+
Relation renderSegments (<directional aggregation by value>)

Declaration :

  • Uml : - renderSegments : Processor, multiplicity : 0..*
  • C++ : private: Processor renderSegments
+

All public operations : play

+ + diff --git a/wiki/renderengine/class89.html b/wiki/renderengine/class89.html new file mode 100644 index 000000000..b0cdec94d --- /dev/null +++ b/wiki/renderengine/class89.html @@ -0,0 +1,24 @@ + + + + + + +Class Processor + + + + + +
Class Processor
+

+ + + + +

Declaration :

  • C++ : class Processor

Directly inherited by : RenderEngine

+
+ +
Relation output (<unidirectional association>)

Declaration :

+ + diff --git a/wiki/renderengine/class91.html b/wiki/renderengine/class91.html new file mode 100644 index 000000000..d96080d50 --- /dev/null +++ b/wiki/renderengine/class91.html @@ -0,0 +1,22 @@ + + + + + + +Class ExitNode + + + + + +
Class ExitNode
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class92.html b/wiki/renderengine/class92.html new file mode 100644 index 000000000..d0f7ee496 --- /dev/null +++ b/wiki/renderengine/class92.html @@ -0,0 +1,21 @@ + + + + + + +Class ProcNode + + + + + +
Class ProcNode
+

+ + + + +

Declaration :

  • C++ : class ProcNode
  • Java : public interface ProcNode

Directly inherited by : ExitNode Hub Link Source Trafo

+ + diff --git a/wiki/renderengine/class93.html b/wiki/renderengine/class93.html new file mode 100644 index 000000000..bf0f5ab81 --- /dev/null +++ b/wiki/renderengine/class93.html @@ -0,0 +1,23 @@ + + + + + + +Class Trafo + + + + + +
Class Trafo
+

+ + + + +

Declaration :

Directly inherited by : Mask PluginAdapter Projector

+
+
+ + diff --git a/wiki/renderengine/class94.html b/wiki/renderengine/class94.html new file mode 100644 index 000000000..9b0589b67 --- /dev/null +++ b/wiki/renderengine/class94.html @@ -0,0 +1,23 @@ + + + + + + +Class Link + + + + + +
Class Link
+

+ + + + +

Declaration :

Directly inherited by : OpenGLPipe

+
+
+ + diff --git a/wiki/renderengine/class95.html b/wiki/renderengine/class95.html new file mode 100644 index 000000000..af40c3ca7 --- /dev/null +++ b/wiki/renderengine/class95.html @@ -0,0 +1,22 @@ + + + + + + +Class Hub + + + + + +
Class Hub
+

+ + + + +

Declaration :

+
+ + diff --git a/wiki/renderengine/class96.html b/wiki/renderengine/class96.html new file mode 100644 index 000000000..528c7e640 --- /dev/null +++ b/wiki/renderengine/class96.html @@ -0,0 +1,22 @@ + + + + + + +Class Projector + + + + + +
Class Projector
+

+ + + + +

Declaration :

  • C++ : class Projector : public Trafo
+
+ + diff --git a/wiki/renderengine/class97.html b/wiki/renderengine/class97.html new file mode 100644 index 000000000..c72200bf9 --- /dev/null +++ b/wiki/renderengine/class97.html @@ -0,0 +1,22 @@ + + + + + + +Class Mask + + + + + +
Class Mask
+

+ + + + +

Declaration :

  • C++ : class Mask : public Trafo
+
+ + diff --git a/wiki/renderengine/class98.html b/wiki/renderengine/class98.html new file mode 100644 index 000000000..e63dc5c68 --- /dev/null +++ b/wiki/renderengine/class98.html @@ -0,0 +1,22 @@ + + + + + + +Class PluginAdapter + + + + + +
Class PluginAdapter
+

+ + + + +

Declaration :

  • C++ : class PluginAdapter : public Trafo
+
+ + diff --git a/wiki/renderengine/class99.html b/wiki/renderengine/class99.html new file mode 100644 index 000000000..6b816617d --- /dev/null +++ b/wiki/renderengine/class99.html @@ -0,0 +1,22 @@ + + + + + + +Class OpenGLPipe + + + + + +
Class OpenGLPipe
+

+ + + + +

Declaration :

  • C++ : class OpenGLPipe : public Link
+
+ + diff --git a/wiki/renderengine/classdiagrams.html b/wiki/renderengine/classdiagrams.html new file mode 100644 index 000000000..17dfee4a7 --- /dev/null +++ b/wiki/renderengine/classdiagrams.html @@ -0,0 +1,24 @@ + + + + + + +Class Diagram Index + + + + + +
Class Diagram Index
+

+ + + + + + + +
Controller Entities
Render Entities
Session structure
+ + diff --git a/wiki/renderengine/classes.html b/wiki/renderengine/classes.html new file mode 100644 index 000000000..6a16597dd --- /dev/null +++ b/wiki/renderengine/classes.html @@ -0,0 +1,67 @@ + + + + + + +Classes Index + + + + + +
Classes Index
+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AbstractMO
AFrame
Allocationa directive to place a MObject in a specific way
ARender
Assembler
Auto
BuilderFacadeboundary
Clip
ConManager
Constraint
ControllerFacadeboundary
DirectPlacement
EDL
Effect
ExitNode
ExplicitePlacementinterface
Fixture
Frameinterface
GLBuf
GLRender
Hub
Label
Link
Mask
Meta
MObjectinterface
OpenGLPipe
PathManager
Placementinterface
PluginAdapter
Processor
ProcNodeinterface
Projector
RelativePlacement
RenderEngine
RenderState
Session
Source
StateProxyinterface
StreamProviderboundaryNote: just a Placeholder for my design. Cehteh will ceratinly know much better how to organize this
ToolFactory
Track
Trafo
VFrame
VRender
Wish
+ + diff --git a/wiki/renderengine/classes_list.html b/wiki/renderengine/classes_list.html new file mode 100644 index 000000000..48091ba7e --- /dev/null +++ b/wiki/renderengine/classes_list.html @@ -0,0 +1,70 @@ + + + + + + +Classes + + + + + +
Classes
+

+ + + + + + + +
AbstractMO
+AFrame
+Allocation
+ARender
+Assembler
+Auto
+BuilderFacade
+Clip
+ConManager
+Constraint
+ControllerFacade
+DirectPlacement
+EDL
+Effect
+ExitNode
+ExplicitePlacement
+Fixture
+Frame
+GLBuf
+GLRender
+Hub
+Label
+Link
+Mask
+Meta
+MObject
+OpenGLPipe
+PathManager
+Placement
+PluginAdapter
+Processor
+ProcNode
+Projector
+RelativePlacement
+RenderEngine
+RenderState
+Session
+Source
+StateProxy
+StreamProvider
+ToolFactory
+Track
+Trafo
+VFrame
+VRender
+Wish
+
+ + diff --git a/wiki/renderengine/collaborationdiagrams.html b/wiki/renderengine/collaborationdiagrams.html new file mode 100644 index 000000000..fa8019a48 --- /dev/null +++ b/wiki/renderengine/collaborationdiagrams.html @@ -0,0 +1,22 @@ + + + + + + +Collaboration Diagram Index + + + + + +
Collaboration Diagram Index
+

+ + + + + +
build processThis figure shows the process of building and starting a RenderEngine
+ + diff --git a/wiki/renderengine/componentdiagrams.html b/wiki/renderengine/componentdiagrams.html new file mode 100644 index 000000000..2dd38605d --- /dev/null +++ b/wiki/renderengine/componentdiagrams.html @@ -0,0 +1,22 @@ + + + + + + +Component Diagram Index + + + + + +
Component Diagram Index
+

+ + + + + +
OverviewThis drawing shows the top level compoents and relations
+ + diff --git a/wiki/renderengine/deploymentdiagrams.html b/wiki/renderengine/deploymentdiagrams.html new file mode 100644 index 000000000..5ded69ac5 --- /dev/null +++ b/wiki/renderengine/deploymentdiagrams.html @@ -0,0 +1,22 @@ + + + + + + +Deployment Diagram Index + + + + + +
Deployment Diagram Index
+

+ + + + + +
Overview Render Engine
+ + diff --git a/wiki/renderengine/fig1.png b/wiki/renderengine/fig1.png new file mode 100644 index 0000000000000000000000000000000000000000..6c40efdf44f0a973d2bf5838d3902eef244380ce GIT binary patch literal 37880 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 + + + + + + UI Layer + + + + + + + Processing Layer + + + + + + + Backend Layer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AssetManager + + + + + RenderEngine + + + + + + + <<component>> + Dispatcher + + + + + + + + + <<component>> + Stream Provider + + + + + + + + + <<component>> + Cache + + + + + + + + codecs, stream I/O here + + + + MObject + + + + + + border of the low-level, + performance-critical part of + the system + + + + + + <<component>> + AssetManagement + + + + + + + + + <<component>> + Engine + + + + + + + + just works, + never decides + + + + + + <<component>> + Session + + + + + + + + + <<subsystem>> + Controller + + + + + + + + + <<subsystem>> + Builder + + + + + + + + + <<entity>> + EDL + + + + + + + + + <<entity>> + Fixture + + + + + + + + Structures edited by the User + + + + + Coordinates Playback + and Rendering + + diff --git a/wiki/renderengine/fig2.png b/wiki/renderengine/fig2.png new file mode 100644 index 0000000000000000000000000000000000000000..57d4aea7a88e78ed56aaec40c99b5f6a32c1e084 GIT binary patch literal 47828 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 literal 0 HcmV?d00001 diff --git a/wiki/renderengine/fig3.png b/wiki/renderengine/fig3.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd1c7ebef3b6c40fec5a51df205ecd2b3a216b6 GIT binary patch literal 32139 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Ď-nAZ1DI4tuG^yC*ci~ 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 literal 0 HcmV?d00001 diff --git a/wiki/renderengine/fig4.png b/wiki/renderengine/fig4.png new file mode 100644 index 0000000000000000000000000000000000000000..7baed24d45cb7035f9b05ba30b0796ccf852fc6c GIT binary patch literal 78 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 literal 0 HcmV?d00001 diff --git a/wiki/renderengine/fig6.png b/wiki/renderengine/fig6.png new file mode 100644 index 0000000000000000000000000000000000000000..a45bb4c3a81c047e9bda39e458b8e683d4e5cd52 GIT binary patch literal 26446 zcmeFZWn7hg*DZR15&{C=3P=m0C=${j5-t@)K#*>bZltAAQYk@NQlzB2OQgFSM7q1{ zOz!)6&hwtV-}7yM*dN~Y`zZ_7x?=rf&N0UrbA6P0C2|#q3L2ei(VPGcM{(}YusFq^za!nlEh9+`q*RiAne;OWfdm5Z(#$$ zLm$5Vlr;Qui|Oa{RldRo=^r6K8nP}I7GOWWo%`$6t}rV2@YKR=zN4KkXtpidN>9C0 z)uW@%JUd>6gW z!ji3AXcQyhJYv26UGz&!=mTz(p@%fTPLKD?ZC91ctPLe4J1wRguF$Zlh)pCD{@Gg{ zHLp5MrW1Yj>eVGoyqi34<7XKZveh%?(!;{T2leBe^?vw^26Nc1C=w6^zQ2UEx6oZz zS9kl~y?eeQ9P267)zyUG)GHl=f`a;g$fYahY9+l44P#Q#t2;H4d2=pRejCx8Z&GZE zobQZ_du(sn^qJ-hy<~vDzgm@(y{2aT;>1Xyv51IBXPlr0HtV~M-+$eCsaoxFy40U8 z8T$xW`Nke`8?)v1UW$2qauidqAJ}#~zr^Br|O5?$- z@sHQ(iJ4V-;6w`x3(tLtbvJ$HPW}A+ZlEam9SSt6T}F#cVI)Q-Djm7aCrsKav5_3t zzo^+zd!oTR`;)Har5BGockj0N!-(9!e}Aj8xw-jpdp?}5*?^<0v=rupghgEy+v5D} zH297fF{9$cy22ULmQ~A%kz(`7Pec#O?A8TzTSBbUOG-<}tDMWF5>W6_?n{67IYAGj zyU)ZV5lpvDZb_{^Bw1Q-zyUY2TkDRsI#QSpw+BBo-l0d*i8?%<=jY&%t)l$vuWv>g zNKMCPDQd=#!mFpJ=dbJ6)zsAdg|$(r4~r8ghudGxzUtpNwAC|?M3?u*r=-1od$~Uy zCb81Z4Uv?TqtMIK68LxeuRjwAj3JI13G_!L#yg z@)!0eV^S@V!p_xg4RdpI!wWYYFWWuXoQ~sn3=0mXjXT}`Sx6<|bTAvPA>g>j$i!rN zytg_rF%g!|Vbo_Z+Y*ZMkxQ4q-y^A{tUQvQU8P*|c1pnc$Z5A<0Slkv-Bd%nXmH$# z_Ct=e*NOWq)zPipO9*oOv;k$-7ANR>dbArG8!MA69?5Ae@73D&m3w`z{VSX`U9~h% zHOOH~IbA;Uk;R{9Y0^nAL+<684Ciqg4=84_*{zKwiG|B&D0Wvchlac0&`i9W_J?&8 zNX37&T0FV8wPiF}bqaeezntalb#j}SF9}v4_2lwc>5!Y7PjnVOlEWSyh!HcKrz@5y z><{O**k2oGko)o2n3*>5LO2l5@4A@k7VTQ10|h^Orc+v%{6)eB=HfNw#)9zJb+N`)k_f=8}hl4;0K~ zGZg1K1FzoPZqZfBBbR)=LUi=x05Z;M={tcE zU-!(12#?_Iy{TU@$|N65RHg(_96C=oX{)hkM|X4AE` z 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 literal 0 HcmV?d00001 diff --git a/wiki/renderengine/index-withframe.html b/wiki/renderengine/index-withframe.html new file mode 100644 index 000000000..44db32d02 --- /dev/null +++ b/wiki/renderengine/index-withframe.html @@ -0,0 +1,19 @@ + + + + + + +/mnt/Lager/heim/devel/cin3/wiki/renderengine/index-withframe + + + + + + + + + + +<H2>Frame Alert</H2><P>This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.<BR>Link to <A HREF="index.html">Non-frame version.</A> + diff --git a/wiki/renderengine/index.html b/wiki/renderengine/index.html new file mode 100644 index 000000000..86c48f6a3 --- /dev/null +++ b/wiki/renderengine/index.html @@ -0,0 +1,188 @@ + + + + + + +cin3 +Documentation + + + + + +
cin3
Documentation
+

+ + + + + +

1 Package design

+

All things concering the big picture.
Not a real code package, rather a container for design drafts, specifications, decisions.

+ +

1.1 Component View Architecture

+

The various Components comprising the Cinelerra3 Video editing Application

+
+ +

+

Overview



+

This drawing shows the top level compoents and relations

+
Component Builder
+ +
Component Session
+
+ +
Component EDL
+

nested in Session

+ +
Component Fixture
+

nested in Session

+
+ +
Component Controller
+

Depends on Builder

+
+ +
Component AssetManagement
+ +
Component Dispatcher
+ +
Component Engine
+

Depends on Stream Provider

+
+ +
Component Stream Provider
+

Depends on Cache

+
+ +
Component Cache
+ +
Component RenderPathManager
+
+
+ +

2 Package AssetManager

+ +

3 Package MObject

+
+ +

3.1 Class View Session

+
+ +

+

Session structure



+
Class Session
+
Class EDL
+
Class Fixture
+
Class Track
+
Class MObject
+
Class Placement
+
+
Class Clip
+
Class Effect
+
Class Meta
+
+
+
+
Class Label
+
+
Class Auto
+
Class Wish
+
+
+ +

3.2 Package Builder

+
+ +

3.2.1 Class View Builder Workings

+
+ +

+

build process



+

This figure shows the process of building and starting a RenderEngine

+
+
+
Class Assembler
+
+
+
+ +

3.3 Package Controller

+
+ +

3.3.1 Class View Controller Workings

+
+ +

+

Controller Entities



+
+
+
+
+
+
+ +

4 Package RenderEngine

+
+ +

4.1 Deployment View Engine Parts

+
+ +

+

Overview Render Engine



+ +
Node timeline
+ +
Node playlist
+ +
Node proc
+ +
Node pnode
+ +
Node mStream
+ +
Node State
+
+ +

4.2 Class View Engine Workings

+
+ +

+

Render Entities



+
+
Class Processor
+
Class ExitNode
+
Class ProcNode
+
Class Trafo
+
Class Link
+
Class Hub
+
Class Projector
+
Class Mask
+
+
+
Class ARender
+
Class VRender
+
Class GLRender
+
Class Frame
+
Class AFrame
+
Class VFrame
+
Class GLBuf
+
Class Source
+
+
+ +

5 Package CommonLib

+ +

6 Package Vault

+

This package is used here just to hold entities thought to belong to the backend layer. The Backend is not in Focus for this Design draft.

+ +

6.1 Class View Backend Components

+
+
+
+
+ +

7 Package GUI

+

GUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft

+ diff --git a/wiki/renderengine/index_65.html b/wiki/renderengine/index_65.html new file mode 100644 index 000000000..4bdf8591a --- /dev/null +++ b/wiki/renderengine/index_65.html @@ -0,0 +1,32 @@ + + + + + + +A + + + + + +
A
+

+ + + + + + + + + + + + + + + +
NameKindDescription
AbstractMOclass
AFrameclass
Allocationclassa directive to place a MObject in a specific way
anchorrelation
Architecturecomponent viewThe various Components comprising the Cinelerra3 Video editing Application
ARenderclass
Assemblerclass
AssetManagementcomponent
AssetManagerpackage
Autoclass
+ + diff --git a/wiki/renderengine/index_66.html b/wiki/renderengine/index_66.html new file mode 100644 index 000000000..717e561c1 --- /dev/null +++ b/wiki/renderengine/index_66.html @@ -0,0 +1,31 @@ + + + + + + +B + + + + + +
B
+

+ + + + + + + + + + + + + + +
NameKindDescription
Backend Componentsclass view
buildoperation
build processcollaboration diagramThis figure shows the process of building and starting a RenderEngine
buildEngineoperation
Buildercomponent
Builderpackage
Builder Workingsclass view
BuilderFacadeclass
buildProcessoroperation
+ + diff --git a/wiki/renderengine/index_67.html b/wiki/renderengine/index_67.html new file mode 100644 index 000000000..e5c04a7ec --- /dev/null +++ b/wiki/renderengine/index_67.html @@ -0,0 +1,36 @@ + + + + + + +C + + + + + +
C
+

+ + + + + + + + + + + + + + + + + + + +
NameKindDescription
Cachecomponent
cin3package
Clipclass
clipsrelation
CommonLibpackage
configureoperation
ConManagerclass
Constraintclass
Controllercomponent
Controllerpackage
Controller Entitiesclass diagram
Controller Workingsclass view
ControllerFacadeclass
currFramerelation
+ + diff --git a/wiki/renderengine/index_68.html b/wiki/renderengine/index_68.html new file mode 100644 index 000000000..36986e68d --- /dev/null +++ b/wiki/renderengine/index_68.html @@ -0,0 +1,25 @@ + + + + + + +D + + + + + +
D
+

+ + + + + + + + +
NameKindDescription
designpackageAll things concering the big picture.
Not a real code package, rather a container for design drafts, specifications, decisions.
DirectPlacementclass
Dispatchercomponent
+ + diff --git a/wiki/renderengine/index_69.html b/wiki/renderengine/index_69.html new file mode 100644 index 000000000..0f638c86c --- /dev/null +++ b/wiki/renderengine/index_69.html @@ -0,0 +1,31 @@ + + + + + + +E + + + + + +
E
+

+ + + + + + + + + + + + + + +
NameKindDescription
EDLcomponent
EDLclass
edlsrelation
Effectclass
Enginecomponent
Engine Partsdeployment view
Engine Workingsclass view
ExitNodeclass
ExplicitePlacementclass
+ + diff --git a/wiki/renderengine/index_70.html b/wiki/renderengine/index_70.html new file mode 100644 index 000000000..b094de41d --- /dev/null +++ b/wiki/renderengine/index_70.html @@ -0,0 +1,26 @@ + + + + + + +F + + + + + +
F
+

+ + + + + + + + + +
NameKindDescription
fixturerelation
Fixtureclass
Fixturecomponent
Frameclass
+ + diff --git a/wiki/renderengine/index_71.html b/wiki/renderengine/index_71.html new file mode 100644 index 000000000..ff1cf9ec9 --- /dev/null +++ b/wiki/renderengine/index_71.html @@ -0,0 +1,30 @@ + + + + + + +G + + + + + +
G
+

+ + + + + + + + + + + + + +
NameKindDescription
getAutomationoperation
getConnectionoperation
getPlaylistForRenderoperation
getReadyoperation
getStateProxyoperation
GLBufclass
GLRenderclass
GUIpackageGUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft
+ + diff --git a/wiki/renderengine/index_72.html b/wiki/renderengine/index_72.html new file mode 100644 index 000000000..f7f8cb3a7 --- /dev/null +++ b/wiki/renderengine/index_72.html @@ -0,0 +1,23 @@ + + + + + + +H + + + + + +
H
+

+ + + + + + +
NameKindDescription
Hubclass
+ + diff --git a/wiki/renderengine/index_76.html b/wiki/renderengine/index_76.html new file mode 100644 index 000000000..a6432f656 --- /dev/null +++ b/wiki/renderengine/index_76.html @@ -0,0 +1,24 @@ + + + + + + +L + + + + + +
L
+

+ + + + + + + +
NameKindDescription
Labelclass
Linkclass
+ + diff --git a/wiki/renderengine/index_77.html b/wiki/renderengine/index_77.html new file mode 100644 index 000000000..e9228808d --- /dev/null +++ b/wiki/renderengine/index_77.html @@ -0,0 +1,27 @@ + + + + + + +M + + + + + +
M
+

+ + + + + + + + + + +
NameKindDescription
Maskclass
Metaclass
MObjectpackage
MObjectclass
mStreamnode
+ + diff --git a/wiki/renderengine/index_79.html b/wiki/renderengine/index_79.html new file mode 100644 index 000000000..f3c5d810b --- /dev/null +++ b/wiki/renderengine/index_79.html @@ -0,0 +1,26 @@ + + + + + + +O + + + + + +
O
+

+ + + + + + + + + +
NameKindDescription
OpenGLPipeclass
outputrelation
Overviewcomponent diagramThis drawing shows the top level compoents and relations
Overview Render Enginedeployment diagram
+ + diff --git a/wiki/renderengine/index_80.html b/wiki/renderengine/index_80.html new file mode 100644 index 000000000..15b636f18 --- /dev/null +++ b/wiki/renderengine/index_80.html @@ -0,0 +1,34 @@ + + + + + + +P + + + + + +
P
+

+ + + + + + + + + + + + + + + + + +
NameKindDescription
PathManagerclass
placementrelation
Placementclass
playoperation
playlistnode
PluginAdapterclass
pnodenode
prepareStreamoperation
procnode
Processorclass
ProcNodeclass
Projectorclass
+ + diff --git a/wiki/renderengine/index_82.html b/wiki/renderengine/index_82.html new file mode 100644 index 000000000..af0a7ecab --- /dev/null +++ b/wiki/renderengine/index_82.html @@ -0,0 +1,31 @@ + + + + + + +R + + + + + +
R
+

+ + + + + + + + + + + + + + +
NameKindDescription
RelativePlacementclass
relTypeattribute
Render Entitiesclass diagram
RenderEnginepackage
RenderEngineclass
RenderPathManagercomponent
renderSegmentsrelation
RenderStateclass
resolveoperationcreate an actual (explicite) placement while trying to satisfy the network of adjacent objects and placements.
+ + diff --git a/wiki/renderengine/index_83.html b/wiki/renderengine/index_83.html new file mode 100644 index 000000000..1e7c56117 --- /dev/null +++ b/wiki/renderengine/index_83.html @@ -0,0 +1,32 @@ + + + + + + +S + + + + + +
S
+

+ + + + + + + + + + + + + + + +
NameKindDescription
Sessioncomponent
Sessionclass view
Sessionclass
Session structureclass diagram
Sourceclass
Statenode
StateProxyclass
Stream Providercomponent
StreamProviderclassNote: just a Placeholder for my design. Cehteh will ceratinly know much better how to organize this
subjectrelation
+ + diff --git a/wiki/renderengine/index_84.html b/wiki/renderengine/index_84.html new file mode 100644 index 000000000..c4478df6e --- /dev/null +++ b/wiki/renderengine/index_84.html @@ -0,0 +1,31 @@ + + + + + + +T + + + + + +
T
+

+ + + + + + + + + + + + + + +
NameKindDescription
timeattribute
timelinenode
timelinerelation
ToolFactoryclass
trackattribute
Trackclass
tracksrelation
tracksrelation
Trafoclass
+ + diff --git a/wiki/renderengine/index_86.html b/wiki/renderengine/index_86.html new file mode 100644 index 000000000..bf2a140e5 --- /dev/null +++ b/wiki/renderengine/index_86.html @@ -0,0 +1,25 @@ + + + + + + +V + + + + + +
V
+

+ + + + + + + + +
NameKindDescription
VaultpackageThis package is used here just to hold entities thought to belong to the backend layer. The Backend is not in Focus for this Design draft.
VFrameclass
VRenderclass
+ + diff --git a/wiki/renderengine/index_87.html b/wiki/renderengine/index_87.html new file mode 100644 index 000000000..6c1f93d5d --- /dev/null +++ b/wiki/renderengine/index_87.html @@ -0,0 +1,23 @@ + + + + + + +W + + + + + +
W
+

+ + + + + + +
NameKindDescription
Wishclass
+ + diff --git a/wiki/renderengine/navig.html b/wiki/renderengine/navig.html new file mode 100644 index 000000000..e8901be71 --- /dev/null +++ b/wiki/renderengine/navig.html @@ -0,0 +1,17 @@ + + + + + + +/mnt/Lager/heim/devel/cin3/wiki/renderengine/navig + + + +


+

-Top- -Classes- -Public Operations- -Packages- -Class Diagrams- -Collaboration Diagrams- -Component Diagrams- -Deployment Diagrams-

+

+

+

A B C D E F G H L M O P R S T V W

+ + diff --git a/wiki/renderengine/packages.html b/wiki/renderengine/packages.html new file mode 100644 index 000000000..db48a6682 --- /dev/null +++ b/wiki/renderengine/packages.html @@ -0,0 +1,31 @@ + + + + + + +Packages Index + + + + + +
Packages Index
+

+ + + + + + + + + + + + + + +
AssetManager
Builder
cin3
CommonLib
Controller
designAll things concering the big picture.
Not a real code package, rather a container for design drafts, specifications, decisions.
GUIGUI is here just a container to hold any entities considered to be User Interface related, which is not in focus for this Design draft
MObject
RenderEngine
VaultThis package is used here just to hold entities thought to belong to the backend layer. The Backend is not in Focus for this Design draft.
+ + diff --git a/wiki/renderengine/public_operations.html b/wiki/renderengine/public_operations.html new file mode 100644 index 000000000..d39f5b605 --- /dev/null +++ b/wiki/renderengine/public_operations.html @@ -0,0 +1,34 @@ + + + + + + +Public Operations Index + + + + + +
Public Operations Index
+

+ + + + + + + + + + + + + + + + + +
OperationClassDescription
buildAssembler
buildEngineBuilderFacade
buildProcessorPathManager
configureToolFactory
getAutomationFixture
getConnectionConManager
getPlaylistForRenderFixture
getReadyStreamProvider
getStateProxyRenderState
playRenderEngine
prepareStreamStreamProvider
resolvePlacementcreate an actual (explicite) placement while trying to satisfy the network of adjacent objects and placements.
+ + diff --git a/wiki/renderengine/style.css b/wiki/renderengine/style.css new file mode 100644 index 000000000..2f256177f --- /dev/null +++ b/wiki/renderengine/style.css @@ -0,0 +1,30 @@ +div.title { font-size: 150%; background: #87ceff; text-align: center; font-weight: bold; } + +div.sub { margin-left : 20; } +div.element { background: #d3d3d3; } + +h1.package { background: #ffe4c4; } +h1.view { background: #98fb98; } + +h2.package { background: #ffe4c4; } +h2.view { background: #98fb98; } +h2.class { background: #87ceff; } +h2.usecase { background: #87ceff; } +h2.state { background: #87ceff; } +h2.activity { background: #87ceff; } + +h3.package { background: #ffe4c4; } +h3.view { background: #98fb98; } +h3.class { background: #87ceff; } +h3.usecase { background: #87ceff; } +h3.state { background: #87ceff; } +h3.stateregion { background: #87ceff; } +h3.activity { background: #87ceff; } + +h4.package { background: #ffe4c4; } +h4.view { background: #98fb98; } +h4.class { background: #87ceff; } +h4.usecase { background: #87ceff; } +h4.state { background: #87ceff; } +h4.stateregion { background: #87ceff; } +h4.activity { background: #87ceff; }