diff --git a/uml/renderengine/cin3/128005 b/uml/renderengine/cin3/128005 index 0979f4a42..48da8f34d 100644 --- a/uml/renderengine/cin3/128005 +++ b/uml/renderengine/cin3/128005 @@ -1,6 +1,6 @@ format 38 "design" // design - revision 2 + revision 4 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..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 25 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 231 911 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 396 115 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 657 114 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,79 +30,103 @@ 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 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 - 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 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 - 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 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 581 329 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 727 346 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 - 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 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 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 368 83 3005 207 36 +textcanvas 136965 "the Timeline is a list of placements reduced to absolute coordinates (time, track)" + xyzwh 464 925 2000 121 90 +textcanvas 137093 "Fixture is the actual assembly of various Media Objects ready to be performed" + 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 623 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 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 246 885 3000 no_role_b - multiplicity_a_pos 219 885 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 280 627 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 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 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 290 932 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 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 258 548 3000 to point 252 167 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 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 437 257 + 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 @@ -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 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 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 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 + 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..c807c30fb 100644 --- a/uml/renderengine/cin3/128261 +++ b/uml/renderengine/cin3/128261 @@ -1,6 +1,6 @@ format 38 "MObject" // MObject - revision 2 + revision 5 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..d86a21a4f --- /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 56 36 +deploymentnodecanvas 130565 deploymentnode_ref 128517 // pnode + xyzwh 201 546 2005 56 36 +deploymentnodecanvas 130693 deploymentnode_ref 128517 // pnode + xyzwh 201 585 2005 56 36 +deploymentnodecanvas 130821 deploymentnode_ref 128517 // pnode + 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 56 36 +deploymentnodecanvas 131205 deploymentnode_ref 128517 // pnode + xyzwh 317 584 2005 56 36 +deploymentnodecanvas 133125 deploymentnode_ref 128645 // mStream + xyzwh 309 800 2010 70 36 +deploymentnodecanvas 134021 deploymentnode_ref 128517 // pnode + xyzwh 442 503 2005 56 36 +deploymentnodecanvas 134149 deploymentnode_ref 128517 // pnode + xyzwh 411 548 2005 56 36 +deploymentnodecanvas 134277 deploymentnode_ref 128517 // pnode + xyzwh 466 548 2005 56 36 +deploymentnodecanvas 134405 deploymentnode_ref 128517 // pnode + 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 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 615 363 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 326 196 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..ab4598401 100644 --- a/uml/renderengine/cin3/128389 +++ b/uml/renderengine/cin3/128389 @@ -1,6 +1,6 @@ format 38 "RenderEngine" // RenderEngine - revision 1 + revision 4 modified_by 5 "hiv" // class settings //class diagram settings @@ -26,4 +26,450 @@ 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..501e7fe3c --- /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 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 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 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 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 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 + 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 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 + 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 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 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 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 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 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 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 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 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 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 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 741 444 2000 + end +relationcanvas 128261 relation_ref 131845 // + from ref 128005 z 1999 to point 216 200 + line 137733 z 1999 to ref 128133 + 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 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 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 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 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 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 +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 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 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 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 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 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 +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 315 465 + line 137093 z 1999 to ref 133765 + 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 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 +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 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 +end diff --git a/uml/renderengine/cin3/128517.diagram b/uml/renderengine/cin3/128517.diagram new file mode 100644 index 000000000..14becd3dc --- /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 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" + 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 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 216 167 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 362 355 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 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 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 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 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 427 603 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..dcd651815 --- /dev/null +++ b/uml/renderengine/cin3/128901 @@ -0,0 +1,170 @@ +format 38 +"Builder" // MObject::Builder + revision 3 + 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..29f5846e2 --- /dev/null +++ b/uml/renderengine/cin3/129029 @@ -0,0 +1,111 @@ +format 38 +"Controller" // MObject::Controller + revision 2 + 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 "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 + + 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..4fea246cb 100644 --- a/uml/renderengine/cin3/5.session +++ b/uml/renderengine/cin3/5.session @@ -1,16 +1,38 @@ -window_sizes 1140 830 270 860 687 62 +window_sizes 1140 830 287 843 689 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 525 0 + deploymentdiagram_ref 128261 // Overview Render Engine + 674 551 100 4 0 12 + classdiagram_ref 128133 // Session structure + 674 551 100 4 0 0 + classdiagram_ref 128389 // Render Entities + 843 689 100 4 147 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 attribute_ref 128133 // relType +selected + package_ref 129 // cin3 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..27e6b19c1 100644 --- a/uml/renderengine/cin3/cin3.prj +++ b/uml/renderengine/cin3/cin3.prj @@ -1,6 +1,6 @@ format 38 -"Cin3" - revision 2 +"cin3" + revision 5 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 @@ -32,11 +32,13 @@ 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 + 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 new file mode 100644 index 000000000..225a26a9d --- /dev/null +++ b/wiki/ichthyo-draft.html @@ -0,0 +1,11597 @@ + + + + + + + + + + + +
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);
+              }
+}
+//}}}
+
+
+
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.
+
+
+
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;
+ }
+ }
+} )
+//}}}
+
+
+
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]]
+[[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>
+
+
+
[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]]'>
+	<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. 
+   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
+ * 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
+ * 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
+
+
+
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);
+		}
+	}
+}
+//}}}
+
+
+ + + + + + + + + + diff --git a/wiki/index.html b/wiki/index.html index b2809230c..76dce81e7 100644 --- a/wiki/index.html +++ b/wiki/index.html @@ -784,11 +784,16 @@ This distributed wiki might be used instead the pipapo.org wiki, investigate tha Wiki works it is simple to use and just flexible enough to handle the task. I don't go to install any other software for such tasks on my server. While the design progresses I'd propose to move our work into git repositories and eventually phase this wiki pages out anyways. I'd rather like to start out distributed/git right away .. but git gives us only a fine storage layer, for a design process we need some good presentation layer (later when using git and starting the implementation everyones favorite editor serves for that) I have no better ideas yet to solve the presentation problem other than using this wiki (or maybe bouml). -
+
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.
 
 * I started a GitNotes where we will collect some information about git, howto and special setups
-* we maintain (semi-) final design docs in DesignDocumentation
+* we maintain (semi-) final design docs in DesignDocumentation + +!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
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 000000000..6c40efdf4 Binary files /dev/null and b/wiki/renderengine/fig1.png differ diff --git a/wiki/renderengine/fig1.svg b/wiki/renderengine/fig1.svg new file mode 100644 index 000000000..1f3a41976 --- /dev/null +++ b/wiki/renderengine/fig1.svg @@ -0,0 +1,195 @@ + + + + + + + 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 000000000..57d4aea7a Binary files /dev/null and b/wiki/renderengine/fig2.png differ diff --git a/wiki/renderengine/fig3.png b/wiki/renderengine/fig3.png new file mode 100644 index 000000000..2cd1c7ebe Binary files /dev/null and b/wiki/renderengine/fig3.png differ diff --git a/wiki/renderengine/fig4.png b/wiki/renderengine/fig4.png new file mode 100644 index 000000000..7baed24d4 Binary files /dev/null and b/wiki/renderengine/fig4.png differ diff --git a/wiki/renderengine/fig5.png b/wiki/renderengine/fig5.png new file mode 100644 index 000000000..330bb9a3e Binary files /dev/null and b/wiki/renderengine/fig5.png differ diff --git a/wiki/renderengine/fig6.png b/wiki/renderengine/fig6.png new file mode 100644 index 000000000..a45bb4c3a Binary files /dev/null and b/wiki/renderengine/fig6.png differ 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; }