<?php
/*******************************************************************************
 * Copyright (c) 2010 Eclipse Foundation and others.
 * 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:
 *
 *******************************************************************************/

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());
$localVersion = false;
$pageTitle = "GEF";

// 	# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML
<div id="bigbuttons">
<h3>Primary Links</h3>
<ul>
<li><a id="buttonDashboard" href="https://projects.eclipse.org/projects/tools.gef" title="GEF@projects.eclipse.org">GEF@projects.eclipse.org<br>Bugzilla, Update-Sites, Forum, Mailing List, Hudson, ...</a></li>
<li><a id="buttonGitHub" href="https://github.com/eclipse/gef" title="GEF@GitHub">GEF@github.com<br>README, Code,<br>Pull Requests,<br> Wiki, ...</a></li>
</ul>
</div>

<div id="midcolumn">
<h3>GEF (Graphical Editing Framework)</h3>
<div id="introText">
<p>
The Eclipse <a href="http://www.eclipse.org/gef">Graphical Editing Framework (GEF)</a> provides Eclipse-integrated end-user tools in terms of a <a href="http://www.graphviz.org">Graphviz</a> authoring (<a href="https://github.com/eclipse/gef/wiki/DOT-User-Guide">DOT editor, DOT Graph view</a>) and a word cloud rendering environment (<a href="https://github.com/eclipse/gef/wiki/Cloudio-User-Guide">Tag Cloud view</a>), as well as framework components (<a href="https://github.com/eclipse/gef/wiki/Common">Common</a>, <a href="https://github.com/eclipse/gef/wiki/Geometry">Geometry</a>, <a href="https://github.com/eclipse/gef/wiki/FX">FX</a>, <a href="https://github.com/eclipse/gef/wiki/MVC">MVC</a>, <a href="https://github.com/eclipse/gef/wiki/Graph">Graph</a>, <a href="https://github.com/eclipse/gef/wiki/Layout">Layout</a>, <a href="https://github.com/eclipse/gef/wiki/Zest">Zest</a>, <a href="https://github.com/eclipse/gef/wiki/DOT">DOT</a>, and <a href="https://github.com/eclipse/gef/wiki/Cloudio">Cloudio</a>) to create rich graphical Java client applications, Eclipse-integrated or standalone. All relevant information can either be found on <a href="https://github.com/eclipse/gef#eclipse-graphical-editing-framework-gef">github.com</a> or on <a href="http://www.eclipse.org/projects/project_summary.php?projectid=tools.gef">projects.eclipse.org</a>.

<img class="displayed" width="450" src="/gef/images/GEF4_MVC_FX_UI_Example.png" alt="GEF4 MVC.FX.UI Example" border="0"/>
</div>
</div>

<div id="rightcolumn">
<div>
<h3>Current Status</h3>
<p>
GEF is participating in the annual <a href="http://wiki.eclipse.org/Simultaneous_Release">Eclipse Simultaneous Release</a>. Having recently published the 4.1.0 (Neon.1) release, we have finalized the Neon development stream and are now focussing on a 5.0.0 (Oxygen) major release, in which all GEF4 components are transferred to the original project namespace, while all GEF-Legacy components are now put into 'pure maintenance' mode. See <a href="https://projects.eclipse.org/projects/tools.gef">GEF@projects.eclipse.org</a> for details.
</p>
</div>

<div id="headlines">

<h3>Release 4.1.0 Available</h3>
<p><i>September 28, 2016 -</i> Release <a href="https://projects.eclipse.org/projects/tools.gef/releases/4.1.0-neon.1">4.1.0</a> is available as part of the Neon simultaneous release, including bugfix revisions (1.1.0, 1.0.1) of all GEF4 components. Follow the <a href="/gef/downloads/index.php">Download</a> link to obtain it. 
</p>

</div>
EOHTML;

# To define additional CSS or other pre-body headers
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/gef/style.css"/>');

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

?>
