<?php
/*******************************************************************************
 * Copyright (c) 2014 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:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/

  # Set the theme for your project's web pages.
  # See the Committer Tools "Phoenix" secion in the How Do I? for list of themes
  # https://dev.eclipse.org/committers/
  $theme = "solstice";

  # Define your project-wide Nav bars here.
  # Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank).
  $Nav->addNavSeparator("About this project",   "/gendoc/index.php");
  $Nav->addCustomNav("Wiki", "https://wiki.eclipse.org/Gendoc", "_self", NULL);
  $Nav->addCustomNav("File a bug", "https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Gendoc", "_self", NULL);
  $Nav->addNavSeparator("Developers",   "");
  $Nav->addCustomNav("Git", "http://git.eclipse.org/c/gendoc/org.eclipse.gendoc.git/", "_self", NULL);
  $Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/gendoc-dev", "_self", NULL);
  $Nav->addNavSeparator("Related Projects",   "");
  $Nav->addCustomNav("Papyrus", "https://www.eclipse.org/papyrus/", "_self", NULL);
  $Nav->addCustomNav("Acceleo", "http://eclipse.org/acceleo/", "_self", NULL);
  $Nav->addCustomNav("EMF", "https://www.eclipse.org/modeling/emf/", "_self", NULL);

  # Define the content of your horizontal menu.
  $Menu->setMenuItemList(array());
  $Menu->addMenuItem("Home", "/gendoc/index.php", "_self");
  $Menu->addMenuItem("Documentation", "/gendoc/documentation/documentation.php", "_self");
  $Menu->addMenuItem("Downloads", "/gendoc/downloads/download.php", "_self");
  $Menu->addMenuItem("Roadmap", "/gendoc/roadmap/roadmap.php", "_self");
  $Menu->addMenuItem("Community", "/gendoc/community/community.php", "_self");