<?php
/*******************************************************************************
 * Copyright (c) 2015 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Anne Haugommard (Atos) - Initial implementation
 *******************************************************************************/

	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());	
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/gendoc/public/css/pages.css" media="screen"/><link rel="shortcut icon" href="/gendoc/public/images/favicon.ico" />');
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="styles.css"/>' . "\n\t");
#	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="_styles.css"/>' . "\n\t");

  $variables['hide_breadcrumbs'] = true;
  $App->setThemeVariables($variables);
	
	#### Project dependant variables ####
	$projectTitle = "Gendoc";
	$pageTitle = "Gendoc";
	$pageAuthor = "Anne Haugommard";
	$pageKeywords = "Gendoc, roadmap";

	
	$html = <<<EOHTML
			<div id="midcolumn">
			<h3> Future releases </h3
			<ul>
				<li> <b>Gendoc v0.7.0</b>  (2018) 
					<ul>
						<li>Workbench and project Preferences to configure templates that can be used directly from the eclipse workbench without the need to set the source in the template itself.</li>
						<li>Support for recursive fragments and queries.</li>
						<li>XLSX as output file format.</li>
						<li>PPTX as output format.</li>
						<li>Support for Table diagrams.</li>
						<li>Gendoc Help catalogs.</li>
						<li>A number of bug fixes that increase the stability of the Gendoc generator.</li>
					</ul>
				</li>
				<li> <b>Gendoc v1.0</b>  (2018) 
					<ul> 
						<li> API freeze </li>
					</ul>
				</li>
			</ul>
			<br/>
			</div>
      <div id="rightcolumn">				                  
        <div style="height:100px">				 				                  
        </div>				                  
        <div class="sideitem">					                      
          <h6><center>Incubation Phase</center>                      
          </h6>					                      
          <center>					                          
            <a href="http://www.eclipse.org/projects/what-is-incubation.php">					                              
              <img width="70" border="0" alt="Incubation" src="http://www.eclipse.org/images/egg-incubation.png">					</a>					                      
          </center>				                  
        </div>
      </div>	
EOHTML;
	
	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
