<?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"); 
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/common/project-info.class.php");
$App = new App(); $Nav = new Nav(); $Menu = new Menu(); 
$projectInfo = new ProjectInfo("webtools");
$projectInfo->generate_common_nav( $Nav );
include ($App->getProjectCommon()); # All on the same line to unclutter the user's desktop' 
	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Tim Wagner (stolen unabashedly from Rich Gronback)
	# Date:			2006-09-19
	#
	# Description: 
	#
	#
	#****************************************************************************

#
# Begin: page-specific settings.  Change these. 
$pageTitle = "Web Tools Platform";
$pageKeywords = "eclipse,project,webtools,WTP,J2EE,JEE";
$pageAuthor = "Tim Wagner";

# 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", 3);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!	
$html =<<<EOHTML
<div id="maincontent">
<div id="midcolumn">
		<table width="100%">
		<tr><td>&nbsp;</td></tr>
			<tr>

				<td width="50%" align="top">
				The Eclipse Graphical Modeling Framework (GMF) provides a generative component and 
				runtime infrastructure for developing graphical editors based on <a href="http://www.eclipse.org/emf" target="_top"><b>EMF</b></a> 
				and <a href="http://www.eclipse.org/gef" target="_top"><b>GEF</b></a>.
				The project aims to provide these components, in addition to
				exemplary tools for select domain models which illustrate its capabilities. 
				</td>
				 <td align="right">
					<img src="http://www.eclipse.org/gmf/images/logo_banner.png" />
				</td>
			</tr>
		</table><hr/>
		
		<div class="homeitem">
			<h3>Quick Links</h3>
				<ul class="midlist">
					<li><a href="http://wiki.eclipse.org/index.php/Graphical_Modeling_Framework" target="_blank"><b>Wiki</b></a> | Find a set of <a href="http://wiki.eclipse.org/index.php/Graphical_Modeling_Framework_FAQ">FAQs</a> and other information.</li>
					<li><a href="news://news.eclipse.org/eclipse.modeling.gmf" target="_blank"><b>Newsgroup</b></a> | For general questions and community discussion.</li>
					<li><a href="http://dev.eclipse.org/mailman/listinfo/gmf-dev" target="_blank"><b>Mailing List</b></a> | For project development discussions.</li>
					<li><a href="http://bugs.eclipse.org/bugs" target="_blank"><b>Bugs</b></a> | View <a href="http://dev.eclipse.org/bugs/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&product=GMF&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=&cmdtype=doit&order=Reuse+same+sort+as+last+time">all open</a> issues.</li>
					<li><a href="http://wiki.eclipse.org/index.php/GMF_Project_Plan"><b>Project Plan</b></a> | Also, view a list of project <a href="http://www.eclipse.org/gmf/requirements.php">requirements</a>.</li>
					<li><a href="http://www.eclipse.org/gmf/development/build_schedule.php"><b>Version 1.0 Endgame Build Schedule</b></a> | More info on the GMF dependencies could be found on a Callisto Plan Summary <a href="http://wiki.eclipse.org/index.php/Callisto_Plan_Summary">page</a>.</li>
		</div>
		<div class="homeitem">
			<h3>Events</h3>
			<ul class="midlist">			
				<li><a href="http://www.eclipse.org/callisto/webinars.php" target="_blank"><b>Callisto Webinar</b></a> to feature Modeling projects (EMF & GMF). View <a href="http://adobedev.breezecentral.com/p17835008/">recording</a>.</li>
				<li><a href="http://www.oopsla.org/2006/" target="_blank"><b>Developing a Domain-Specific Modeler with the Eclipse Graphical Modeling Framework</b></a> tutorial accepted for <a href="http://www.oopsla.org/2006/">OOPSLA 2006</a>.</li>
				<li><a href="http://www.eclipseworld.net/friday_am.htm" target="_blank"><b>How to Leverage Domain Specific Modeling Using Eclipse</b></a> talk accepted for <a href="http://www.eclipseworld.net/">EclipseWorld 2006</a>.</li>
				<li><a href="http://www.eclipseworld.net/thursday_am.htm" target="_blank"><b>Build Better Graphical Editors With the Graphical Modeling Framework</b></a> talk accepted for <a href="http://www.eclipseworld.net/">EclipseWorld 2006</a>.</li>
		</div>
		<br/>
		
		<hr class="clearer" />
		
		<div class="homeitem3col">
		<h3>What can you do with GMF?&nbsp;<a href="./gallery/index.php"><img src="http://www.eclipse.org/images/more.gif" alt="More..." /></a></h3>
			<table width="100%">
			<tr>
 				<td colspan="2"><p>Well, if you've taken a look at the <a target="_blank" href="http://dev.eclipse.org/viewcvs/indextools.cgi/%7Echeckout%7E/uml2-home/docs/articles/Getting_Started_with_UML2/article.html">Getting Started with UML2</a> article and had trouble visualizing the model, GMF can help. On the left is the generated environment for working with a domain model (any EMF-based model), while on the right is a view of a graphical editor generated with GMF. To see more of what you can do with GMF, click the thumbnails below or <a href="./gallery/index.php">this link</a> to visit our gallery.</p>
 				</td>
 			</tr>
 			<tr><td colspan="2" align="center"><a href="./gallery/index.php"><img src="./images/gallery_thumb.png"/></a></td></tr>
 			<tr><td align="center"><b>Before GMF</b></td><td align="center"><b>After GMF</b></td></tr>
 			</table>
		</div>
	</div>
	
	<div id="rightcolumn">
		<br />
		<div>
			<a href="http://www.eclipse.org/callisto/"><img src="http://www.eclipse.org/callisto/images/callistosmall.gif" border=0 alt="The Next Total Eclipse" title="Callisto"></a>
		</div>
		<div class="sideitem">
			<h6>Getting started</h6>
			<ul>				
				<li><a
					href="http://wiki.eclipse.org/index.php/GMF_Tutorial"
					target="_self">Tutorial</a></li>
				<li><a href="http://wiki.eclipse.org/index.php/GMF_Development_Guidelines">Development Guidelines</a></li>
				<li><a href="http://www.eclipse.org/gmf/development/index.php">Developer Resources</a></li>
				<li><a href="http://help.eclipse.org/help31/index.jsp">Online Documentation</a></li>
				<li><a href="http://download.eclipse.org/modeling/gmf/downloads/index.php">Downloads</a></li>
			</ul>
		</div>
		
		<div class="sideitem">
			<h6>What's New</h6>
			<ul> 
			    <li>Sept 4th: GMF 2.0M1 available for <a href="http://download.eclipse.org/modeling/gmf/downloads/drops/S-2.0M1-200609041500/index.php">download</a></li>
			    <li>June 30th: GMF 1.0 available for <a
					href="http://download3.eclipse.org/modeling/gmf/downloads/drops/R-1.0-200606271200/index.php"
					target="_self">download!</a></li>
				<li>May 26th: Release Review for 1.0 complete. Slides posted <a
					href="http://www.eclipse.org/gmf/development/ReleaseReviewGMF1.0.pdf"
					target="_self">here</a></li>
				<li>Apr 19th: Top-Level <a
					href="http://www.eclipse.org/proposals/modeling/"
					target="_self">Modeling project</a> approved!</li>
			</ul>
		</div>
	</div>
</div>


EOHTML;

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