<?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'

#*****************************************************************************
#
# template.php
#
# Author: 		Wayne Beaton
# Date:			2007-06-22
#
# Description:
# This page contains pointers to download and tutorial information for
# individuals interested in using Eclipse for RCP development.
#****************************************************************************

require_once("links.php");
#
# Begin: page-specific settings.  Change these.
$title 		= $rcpTitle;
$download = $rcpDownload;
$pageKeywords	= "eclipse europa java mustang 3.3 matisse windowbuilder j2ee jee enterprise servlet tomcat eclipse resource screencam screen cam tutorial ";
$pageAuthor		= "Wayne Beaton";

# Add page-specific Nav bars here
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
# $Nav->addCustomNav("My Link", "mypage.php", "_self", 1);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 1);

# End: page-specific settings
#


ob_start();
?>
<link rel="stylesheet" type="text/css" href="moreinfo.css" media="screen" />
<div id="fullcolumn">
<div id="midcolumn">
<table cellspacing=0 class="callistoButtons">
	<tr>
		<td width="50"></a></td>
		<td width="100%" class="noRightBorder"><?= $title ?></td>
	</tr>
</table>
<p><img src="../images/rcp.jpg" align="left" style="padding-right: 10px;"/>The <?= $title ?> 
contains what you need to build Eclipse applications, including
plug-ins for the development environment and Eclipse Rich Client
Platform (<a
	href="http://wiki.eclipse.org/index.php/Rich_Client_Platform">RCP</a>)
applications. Designed specifically for the task, this is the best tool
available for building Eclipse plug-ins and applications (it is also
considered by many to be the best Java development tool available). The <?= $title ?> 
provides superior Java editing with incremental compilation, the Plug-in
Development Environment (<a href="/pde">PDE</a>), an XML Editor, <a href="/mylyn">Mylyn</a>,
complete source code for the Eclipse <a href="/eclipse">Platform</a>, and much more.  <a href="compare.php">Looking for what's in each package?</a></p>

<p>If you are building Java applications, not Eclipse plug-ins, 
consider <a href="java.php"><?= $javaTitle ?></a></em>.</p>

<div class="homeitem3col">
<h3>What You Need</h3>
<p><img src="http://www.eclipse.org/downloads/images/update_wiz.gif"
	align="right" />You will need a <a
	href="<?= $java_runtime ?>">Java Runtime Environment</a> (JRE) to run <?= $title ?>.
A Java 5 JRE is recommended.</p>

<ul>
	<li>Download the <a href="<?= $download ?>"><?= $title ?></a> (<a href="compare.php">Package Contents</a> - <a href="/epp/faq.php">Package FAQ</a>)</li>
	<li>Use the utility for your platform to decompress the downloaded file onto
	your file system (<?= $windows_warning ?>).	
	<li>Additional features can be installed from the Europa
			Update Site via the Update Manager, including:
	<ul>
		<li>Ruby Development Tools (<a href="/dltk">DLTK</a>)</li>
		<li>Eclipse Modeling Framework (<a href="/emf">EMF</a>)</li>
		<li>Graphical Editing Framework (<a href="/gef">GEF</a>)</li>
		<li>Test and Performance Tools (<a href="/tptp">TPTP</a>)</li>
		<li>Graphical Modeling Framework (<a href="/gmf">GMF</a>)</li>
		<li>Data Tools (<a href="/datatools">DTP</a>)</li>
	</ul>

	</li>
</ul>
</div>
<div class="homeitem" style="clear:both;">
<h3>New and Noteworthy</h3>
<div class="content"><p><?= $title ?>&mdash;built using <a href="/eclipse">Eclipse</a>
3.3&mdash;includes numerous enhancements over previous versions,
including:</p>
<ul>
	<li>Improved debugging support, including hyperlink stepping.</li>
	<li>A new Quick Access feature (ctrl-3) to enhance IDE navigation.</li>
	<li>Support for Mac OSX on Intel and <em>early access</em> support for
	Windows Vista.</li>
	<li>Improvements in Plug-in Development Environment (<a
		href="http://www.eclipse.org/pde/">PDE</a>) to make building RCP
	applications easier.</li>
	<li>Task-focused development (<a href="http://www.eclipse.org/mylyn/">Mylyn</a>).</li>
</ul>
<p>For a list of new features in Eclipse 3.3, check out the <a
	href="<?= $platform_new_and_noteworthy_url ?>">New and Noteworthy</a>.</p>
</div>
</div>
<div class="homeitem" style="clear:none;">
<h3>Tutorials and help</h3>
<div class="content">
<ul>
	<li style="list-style-image: url(images/movie.png)"><a
		href="">Installing and Using <?= $title ?></a></li>
	<li style="list-style-image: url(images/movie.png)"><a
		href="<?= $movie_install_features_url ?>"><?= $movie_install_features_title ?></a>
	(Adding&nbsp;Ruby&nbsp;Development&nbsp;Tools)</li>
	<li style="list-style-image: url(images/movie.png); border-style: none"><a
		href="<?= $movie_test_first_url ?>"><?= $movie_test_first_title ?></a></li>
</ul>
<h4>Documentation and Newsgroups</h4>
<ul>
	<li style="list-style-image: url(images/document.png)"><a
		href="<?= $user_guide_url ?>">Eclipse User's Guide</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.tools.jdt">Eclipse Java
	development tools Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.platform">Eclipse Platform Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.platform.rcp">Eclipse Rich Client Platform Newsgroup</a></li>
	<li style="list-style-image: url(images/news.png)"><a
		href="news://news.eclipse.org/eclipse.technology.equinox">Eclipse Equinox (OSGi) Newsgroup</a></li>	
</ul>
<h4>Suggested reading</h4>
<ul>
	<li
		style="list-style-image: url(images/document.png); border-style: none"><a
		href="/articles/">Eclipse Corner Articles</a></li>
	<li
		style="list-style-image: url(images/document.png); border-style: none"><a
		href="/articles/Whitepaper-Platform-3.1/eclipse-platform-whitepaper.html">Eclipse
	Platform Technical Overview</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,032142672X,00.html">Eclipse:
	Building Commercial-Quality Plug-ins</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,0321205758,00.html">Contributing
	to Eclipse: Principles, Patterns, and Plug-Ins</a></li>
	<li style="list-style-image: url(images/book.png); border-style: none"><a
		href="http://www.aw-bc.com/catalog/academic/product/0,1144,0321334612,00.html">Eclipse
	Rich Client Platform: Designing, Coding, and Packaging Java&trade;
	Applications</a></li>
</ul>
</div>
</div>
</div>
</div>
<?= $moreInfoHTML ?>
<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $title, $html);
?>
