<?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>. We have finalized the Oxygen development stream and are now focussing on providing a first related bugfix/service release. See <a href="https://projects.eclipse.org/projects/tools.gef">GEF@projects.eclipse.org</a> for details.
</p>
</div>

<div id="headlines">

<h3>Release 5.0.0 Available</h3>
<p><i>Juni 28, 2017 -</i> Release <a href="https://projects.eclipse.org/projects/tools.gef/releases/5.0.0-oxygen">5.0.0</a> is available as part of the Oxygen simultaneous release, including major revisions of all GEF 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);

?>
