<?php
/*******************************************************************************
* Copyright (c) 2009-2011 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:
*    Jeff Overbey (Illinois) - Photran customizations based on Nova template
*******************************************************************************/

	# Set the theme for your project's web pages.
	# See the Committer Tools "How Do I" for list of themes
	# https://dev.eclipse.org/committers/
	# Optional: defaults to system theme 
	$theme = "Nova";

	# Define your project-wide Nav bars here.
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
    # these are optional
    $Nav->addNavSeparator("Photran",            "/photran/index.php");
        $Nav->addCustomNav("Home",              "/photran/index.php", "_self", 2);
        $Nav->addCustomNav("Screenshots",       "/photran/screenshots.php", "_self", 2);
        $Nav->addCustomNav("Download",          "/photran/download.php", "_self", 2);
        $Nav->addCustomNav("Mailing Lists",     "/photran/mailinglists.php", "_self", 2);
        $Nav->addCustomNav("Report a Bug",      "https://bugs.eclipse.org/bugs/enter_bug.cgi?assigned_to=photran-inbox%40eclipse.org&component=Photran.Unknown&product=PTP&version=7.0", "_self", 2);
        $Nav->addCustomNav("Suggest a Feature", "https://bugs.eclipse.org/bugs/enter_bug.cgi?assigned_to=photran-inbox%40eclipse.org&component=Photran.Unknown&bug_severity=enhancement&product=PTP&version=7.0", "_self", 2);
        #$Nav->addCustomNav("Documentation",    "/photran/documentation.php", "_self", 2);
            #$Nav->addCustomNav("Refactoring",  "/photran/refactoring.php", "_self", 3);
            #$Nav->addCustomNav("Wiki",         "http://wiki.eclipse.org/index.php?title=Parallel_Tools_Platform#Photran_Information", "_self", 2);
        $Nav->addCustomNav("Wiki",              "http://wiki.eclipse.org/PTP/photran/", "_self", 2);
            #$Nav->addCustomNav("Installation", "http://wiki.eclipse.org/PTP/photran/installation", "_self", 3);
            $Nav->addCustomNav("Documentation", "http://wiki.eclipse.org/PTP/photran/documentation", "_self", 3);
            $Nav->addCustomNav("FAQ",           "http://wiki.eclipse.org/PTP/photran/faq", "_self", 3);
        $Nav->addCustomNav("People",            "/photran/contributors.php", "_self", 2);
        $Nav->addCustomNav("Internals",         "/photran/contributorinfo.php", "_self", 2);
            #$Nav->addCustomNav("New Contributors",    "/photran/newcontributors.php", "_self", 3);
            #$Nav->addCustomNav("Project Plan",        "/photran/project-info/project-plan.php", "_self", 3);
            #$Nav->addCustomNav("IP Log",              "/photran/project-info/ip-log.php", "_self", 3);
        $Nav->addCustomNav("About This Project", "/projects/project_summary.php?projectid=tools.ptp.photran", "_self", 2);

        #$Nav->addCustomNav("Download", "/project/download.php", "_self", 3);
        #$Nav->addCustomNav("Documentation", "/project/documentation.php", "_blank", 3);
        #$Nav->addCustomNav("Support", "/project/support.php", "_blank", 3);
        #$Nav->addCustomNav("Getting Involved", "/project/developers", "_blank", 3);

        # Define keywords, author and title here, or in each PHP page specifically
        $pageKeywords    = "photran, fortran, ide, integrated development environment, refactoring, eclipse";
        $pageAuthor      = "Jeffrey Overbey";
                
        # To enable occasional Eclipse Foundation Promotion banners on your pages (EclipseCon, etc)
        $App->Promotion = FALSE;
?>
