
<?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:			2006-06-06
	#
	# Description: 
	# This page contains pointers to download and tutorial information for
	# individuals interested in using Eclipse for Java development.
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse for Plug-in and RCP Developers";
	$pageKeywords	= "callisto plug-in rcp rich client platform eclipse 3.2 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
	#
			
	require_once("links.php");
	
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML
<link rel="stylesheet" type="text/css" href="callisto.css" media="screen" />

<script type="text/javascript">
function show_section(name) {
	if (document.getElementById(name).style.display=='block') return;
	document.getElementById(name +'-down').style.display='none';
	document.getElementById(name).style.display='block'
}
function hide_section(name) {
	if (document.getElementById(name).style.display=='none') return;
	document.getElementById(name +'-down').style.display='inline';
	document.getElementById(name).style.display='none'
}
</script>

<div class="callistoRealEstate paddingLeft">
	<div class="maincontent">
        <table cellspacing=0 class="callistoButtons">
        	<tr>
        		<td width="50"><img src="images/plugin.jpg"></a></td>
				<td width="100%"class="noRightBorder">$pageTitle</td>
			</tr>
		</table>
        
		<p>The Eclipse Software Development Kit (SDK) contains everything 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.</p>
		<p>The new Eclipse SDK 3.2 release features some exciting new capabilities for plug-in and RCP developers, including:
		<ul>
			<li>Java 6 support</li>
			<li>Support for Mac OSX on Intel and Preview support for Windows Vista</li>
			<li><a href="/swt">SWT</a> Enhancements including support for OpenGL, virtual trees, custom table cell drawing</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>Common Navigator Framework</li>
			<li>New standalone OSGi framework</li>
		</ul>	
		<p>For a more complete list, check out the <a href="$new_noteworthy">New and Noteworthy</a>.</p>
		
		<p>The Eclipse SDK can be extended to provide additional functionality by adding features from the 
		<a href="$callisto_discovery">Callisto Discovery Site</a>.</p>
	      
      	<div class="homeitem">
      		<h3>Upgrade to Eclipse SDK 3.2</h3>
      		<ul>
      			<li style="border-style: none">The <a href="$eclipse_sdk">Eclipse SDK</a> <span style="white-space:nowrap">3.2<img id="platform-down" src="images/down.png" onclick="show_section('platform');"/></span>
      				<div id="platform" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('platform');" align="right" src="images/close.png"/>Eclipse SDK 3.2</h3>
	      						The SDK provides Java development tools.
	      						<h4>Tutorials and Help</h4>
					      		<ul>
					      		    <li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/install-eclipse/install-eclipse.html">Installing the Eclipse SDK 3.2</a></li>
      		    					<li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/testfirst/testfirst.html">Test First Development using Eclipse</a></li>
					      		</ul>
      						</div>
      					</li>
      			<li style="border-style: none">Optional features available via the <a href="$callisto_discovery">Callisto&nbsp;Discovery&nbsp;Site</a>
      				<ul>      					
      					<li style="border-style: none">Visual Editor <span style="white-space:nowrap">(<a href="/ve">VE</a>)<img id="ve-down" src="images/down.png" onclick="show_section('ve');"/></span>
      						<div id="ve" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('ve');" align="right" src="images/close.png"/>Visual Editor</h3>
	      						The Eclipse Visual Editor (VE) project is a vendor-neutral, open 
      							development platform supplying frameworks for creating GUI 
      							builders, and exemplary, extensible tool implementations for 
      							<a href="/swt">SWT</a>/<a href="/rcp">RCP</a>.
      						</div>
      					</li>
      					<li style="border-style: none">Eclipse Modeling Framework <span style="white-space:nowrap">(<a href="/emf">EMF</a>)<img id="emf-down" src="images/down.png" onclick="show_section('emf');"/></span>
      						<div id="emf" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('emf');" align="right" src="images/close.png"/>Eclipse Modeling Framework</h3>
      							EMF is a modeling framework and code generation facility for building tools and other 
      							applications based on a structured data model.
      						</div>
      					</li>
      					<li style="border-style: none">Graphical Editing Framework <span style="white-space:nowrap">(<a href="/gef">GEF</a>)<img id="gef-down" src="images/down.png" onclick="show_section('gef');"/></span>
      						<div id="gef" style="border-style:solid;border-width:1px;margin-left:5%;display:none">      							
      							<h3><img onclick="hide_section('gef');" align="right" src="images/close.png"/>Graphical Editing Framework</h3>
      							The Graphical Editing Framework (GEF) allows developers to take an existing 
      							application model and quickly create a rich graphical editor.
      						</div>
      					</li>
      					<li style="border-style: none">Graphical Modeling Framework <span style="white-space:nowrap">(<a href="/gmf">GMF</a>)<img id="gmf-down" src="images/down.png" onclick="show_section('gmf');"/></span>
      						<div id="gmf" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('gmf');" align="right" src="images/close.png"/>Graphical Modeling Framework</h3>
      							The Eclipse Graphical Modeling Framework (GMF) provides a 
      							generative component and runtime infrastructure for developing 
      							graphical editors.
      						</div>
      					</li>
 
      					
       					
      					<li style="border-style: none">Reporting Tools <span style="white-space:nowrap">(<a href="/birt">BIRT</a>)<img id="birt-down" src="images/down.png" onclick="show_section('birt');"/></span>
      						<div id="birt" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('birt');" align="right" src="images/close.png"/>Reporting Tools</h3>
	      						BIRT is a reporting system that integrates with your application to produce 
	      						compelling reports for both web and PDF.
	      						<ul>
					      		    <li style="list-style-image: url(images/tutorial.png);border-style: none"><a href="http://www.eclipse.org/birt/phoenix/tutorial/basic">Building a Simple Report with BIRT</a></li>
									<li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://download.eclipse.org/birt/downloads/demos/FirstReport/MyFirstReport.html">My First Report</a></li>
									<li style="list-style-image: url(images/tutorial.png);border-style: none"><a href="http://www.eclipse.org/birt/phoenix/tutorial/">More BIRT Tutorials and screen casts...</a></li>
								</ul>
      						</div>
      					</li>
      					
      					<li style="border-style: none">Data Tools <span style="white-space:nowrap">(<a href="/datatools">DTP</a>)<img id="dtp-down" src="images/down.png" onclick="show_section('dtp');"/></span>
      						<div id="dtp" style="border-style:solid;border-width:1px;margin-left:5%;display:none">
      							<h3><img onclick="hide_section('dtp');" align="right" src="images/close.png"/>Data Tools</h3>
	      						The Eclipse Data Tools Platform (DTP) is a set of extensible frameworks and
								exemplary tools for developing data-centric applications in Eclipse.
      						</div>
      					</li>
      				</ul>
   				</li>
      		</ul>
      	</div>
      	
      	<div class="homeitem">
      		<h3>Tutorials and help</h3>
      		<ul>
      		    <li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/install-eclipse/install-eclipse.html">Installing the Eclipse SDK 3.2</a></li>
      			<li style="list-style-image: url(images/movie.png);border-style: none"><a href="$install_callisto">Installing Features from the Callisto Discovery Site</a></li>
      			<li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/install-ve/install-ve.html">Installing and using the Eclipse Visual Editor</a></li>
      			<li style="list-style-image: url(images/movie.png);border-style: none"><a href="http://www.eclipse.org/downloads/download.php?r=1&file=/technology/phoenix/demos/testfirst/testfirst.html">Test First Development using Eclipse</a></li>
      		</ul>
      	</div>
      			
      	<div class="homeitem">
      		<h3>Suggested reading</h3>
      		<ul>
      			<li style="list-style-image: url(images/document.png);border-style: none"><a href="http://www.eclipse.org/articles/">Eclipse Corner Articles</a></li>
      			<li style="list-style-image: url(images/document.png);border-style: none"><a href="http://local.phoenix.eclipse.org/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>
      			<li style="list-style-image: url(images/document.png);border-style: none">Building a Common Navigator based viewer
      				<a href="http://scribbledideas.blogspot.com/2006/05/building-common-navigator-based-viewer.html">Part I</a>,
      				<a href="http://scribbledideas.blogspot.com/2006/05/building-common-navigator-based-viewer_22.html">Part II</a>,
      				<a href="http://scribbledideas.blogspot.com/2006/06/building-common-navigator-based-viewer.html">Part III</a>, and
      				<a href="http://scribbledideas.blogspot.com/2006/06/building-common-navigator-based-viewer_18.html">Part IV</a>
      			</li>
      		</ul>
      	</div>      	
	</div>

</div>




EOHTML;

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