<?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
/*******************************************************************************
 * Copyright (c) 2010
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    
 *******************************************************************************/

	$pageTitle 		= "BPMN2 Modeler - New &amp; Noteworthy";

	$html  = <<<EOHTML
<div id="midcolumn">
	<h2>$pageTitle</h2>
	<h4>Version 0.2.2 Bug Fixes (February 7, 2013)</h4>
	What's new in this version:
	<ul>
		<li>
			Added Connection Routers for Manhattan style and direct routing.
			Added support for selecting routing style in user preferences.
		</li>
		<li>
			Fixed bug in jbpm5 runtime plugin that corrupts files generated by jbpm web designer.
		</li>
		<li>
			Updated the jbpm5 runtime plugin extension model:
			<ul>
				<li>
					Added support for Simulation parameters. These now appear in a "Simulation" Property Tab for certain BPMN2 elements.
				</li>
				<li>
					Fixed handling of ImportType extension elements (these are completely different from the BPMN2 Import element - yikes!)
				</li>
				<li>
					The GlobalType extension element now subclasses ItemAwareElement to make it assignment compatible with DataAssociation sources and targets.
				</li>
			</ul>
		</li>
		<li>
			<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=398544">Bug 398544</a> - did not check for CallActivity.calledElement in setValueFromId()
		</li>
		<li>
			<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=398591">Bug 398591</a> - sync name with ID
			only for Property, Message and DataObject, save name feature for Message and DataObject
		</li>
		<li>
			Added a simple change to allow custom tasks to be added to existing
			toolpalette drawers. Thanks to Andrey Pavlenko for that hint <img src="/bpmn2-modeler/images/bigsmile.png" width="20" height="20" border="0"/>
		</li>
		<li>
			All of the custom UserTask properties defined by the jbpm5 runtime plugin have been
			separated as individual fields in the "User Task" Property Tab "Attributes" section.
			These were previously displayed in the I/O Parameters table.
		</li>
		<li>
			<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=374299">Bug 374299</a> - fixed boundary
			anchor calculation and improved the manhattan router.
		</li>
		<li>
			Added double-click listener to tables to open the details section to the
			right. This is better than having the details show up whenever a table
			row is selected.
		</li>
		<li>
			Fixed a bug in the table Cell Editors, which was causing all kinds of "Widget disposed" errors.
			In general, the Cell Editor handling has been much improved over previous releases.
		</li>
		<li>
			Fixed jbpm Data Items tab to check for duplicate imports.
		</li>
		<li>
			Fixed jbpm I/O Parameter mapping for Globals.
		</li>
		<li>
			The "Diagram" Property Tab contributed by the jbpm5 runtime plugin was removed and replaced with the "Process"
			Tab which contained some duplicated information.
		</li>
		<li>
			All texts and labels that refer to BPMN2 "Property" elements (which actually represent scoped variables defined in a Process or Activity)
			have been changed to "Variable" - hopefully this helps to distinguish these "properties" from all of the other properties
			floating around out there.
		</li>
		<li>
			Once again, great pains have been taken to keep the editor backwards compatible with eclipse 3.6.2 (Helios)
			EMF and Graphiti introduced some breaking API changes which are causing all kinds of headaches.
		</li>
		<li>
			Added a user preference to simplify the Documentation list for all
			BaseElements so that only a multiline text editor for the first
			Documentation list item is shown in Property Tabs. The "textFormat" is always
			set to "text/plain"
		</li>
		<li>
			The missing "Default Flow" checkbox on Gateways has been restored (yay!) Note that this is only available on
			outgoing Sequence Flows that DO NOT have a Condition expression.
		</li>
		<li>
			The "customTask" extension element has been enhanced a bit:
			<ul>
				<li>
					An optional "propertyTabs" attribute has been added to allow specific Property Tabs to be displayed when the
					Custom Task element is selected.
				</li>
				<li>
					An optional "icon" attribute has been added to specify an image file to use for the toolpalette entry and for decorating the
					Custom Task element. Your extension plugin must provide a "small" (16x16 pixels) and "large" format of the image file,
					and these must be located in the plugin project's folders "icons/small" and "icons/large". Be sure to include these
					folders with the binary build of your plugin!
				</li>
				<li>
					The "description" attribute is now used as the text in the "Description" Property Tab. If none is provided,
					the default text defined by the BPMN2 Modeler UI is used.
				</li>
			</ul>
		</li>
		<li>
			The "Diagram" main menu contribution, which mysteriously disappeared sometime around the Juno release has been restored.
			These menu contributions allow you to create new Process, Collaboration and Choreography diagrams, which appear as new
			tabs in the editor.
		</li>
		<li>
			Selection of the targets for CallActivity, CallChoreography and CallConversation has been fixed. The combobox selection widget
			now has a "+" button which, when clicked, creates a new diagram of the correct type.
		</li>
	</ul>
</div>
EOHTML;

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
