+ Smach::event_result result;
+ synfig::ValueNode_DynamicList::ListEntry source;
+ int target_index;
+
+ // the new line's start extends an existing line
+ if(extend_start)
+ {
+ if(complete_loop)trans_bline.pop_back();
+ trans_bline.pop_front();
+ if(start_duck_index==0)
+ { // We need to reverse the BLine first.
+ reverse_bline(trans_bline);
+ result=extend_bline_from_begin(start_duck_value_node_bline,trans_bline,complete_loop);
+ source=start_duck_value_node_bline->list.front();
+ target_index=trans_bline.size()+finish_duck_index;
+ }
+ else
+ {
+ result=extend_bline_from_end(start_duck_value_node_bline,trans_bline,complete_loop);
+ source=start_duck_value_node_bline->list.back();
+ target_index=finish_duck_index;
+ }
+
+ if(extend_start_join_different)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,finish_duck_value_desc.get_value_node());
+ else if(extend_start_join_same)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,synfigapp::ValueDesc(LinkableValueNode::Handle::cast_dynamic(start_duck_value_node_bline->
+ list[target_index].value_node),0).get_value_node());
+ return result;
+ }
+
+ // the new line's end extends an existing line
+ if(extend_finish)
+ { // SPECIAL CASE -- EXTENSION
+ trans_bline.pop_back();
+ if(finish_duck_index==0)
+ {
+ result=extend_bline_from_begin(finish_duck_value_node_bline,trans_bline,false);
+ source=finish_duck_value_node_bline->list.front();
+ target_index=trans_bline.size()+start_duck_index;
+ }
+ else
+ { // We need to reverse the BLine first.
+ reverse_bline(trans_bline);
+ result=extend_bline_from_end(finish_duck_value_node_bline,trans_bline,false);
+ source=finish_duck_value_node_bline->list.back();
+ target_index=start_duck_index;
+ }
+
+ if(extend_finish_join_different)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,start_duck_value_desc.get_value_node());
+ else if(extend_finish_join_same)
+ LinkableValueNode::Handle::cast_dynamic(source.value_node)->
+ set_link(0,synfigapp::ValueDesc(LinkableValueNode::Handle::cast_dynamic(finish_duck_value_node_bline->
+ list[target_index].value_node),0).get_value_node());
+ return result;
+ }
+