<?php  																														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());    # All on the same line to unclutter the user's desktop'

#*****************************************************************************
#
# template.php
#
# Author: 		Denis Roy
# Date:			2005-06-16
#
# Description: Type your page comments here - these are not sent to the browser
#
#
#****************************************************************************

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Tigerstripe Online Documentation";
$pageKeywords	= "Type, page, keywords, here";
$pageAuthor		= "Eric Dillon";

# Add page-specific Nav bars here
# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

# End: page-specific settings
#

# Paste your HTML content between the EOHTML markers!
$html = <<<EOHTML

<div id="maincontent">
	<div id="midcolumn">
		<h1>$pageTitle</h1>
		<p>A complete Help Index is provided with Tigerstripe (see Help->Help Contents->Tigerstripe Workbench once you have installed Tigerstripe). This page provides a number of additional Tutorials and resources to help new users get started.</p>
		<p>Should you have further questions, visit our <a href="http://wiki.eclipse.org/Tigerstripe_FAQ">FAQ</a> or post them in the <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.tigerstripe">eclipse.technology.tigerstripe</a> newsgroup.</p>
		<div class="homeitem3col">
			<h3>Online Help</h3>
			<p>Tigerstripe Workbench includes a Help section that is organized as follows:
			</p>
			<ul>
				<li><strong><a href="help/com_2.2.4/index.php">Tigerstripe Workbench Help (Old commercial v2.2.4)</a></strong>: containing all details about using Tigerstripe Workbench, from modeling, configuration, plugins and generation.</li>
				<li><strong>Tigerstripe API</strong>: the javadoc about the API into Tigerstripe, allowing to write applications to manipulate Tigerstripe models.</li>
			</ul>
		</div>
		<div class="homeitem3col">
			<h3>Tigerstripe Tutorials</h3>
			<ul>
				<li><a href="http://wiki.eclipse.org/Tigerstripe_Tutorials#Tigerstripe_Modeling">Modeling with Tigerstripe</a>
					<ul class="midlist">
						<p>A series of tutorials walking you from simple modeling tasks with Tigerstripe to more advanced concepts such as <i>model facets</i>. Learn about the concepts, the Tigerstripe meta-model and the diagraming features.</p>
					</ul>
				</li>
				<li><a href="http://wiki.eclipse.org/Tigerstripe_Tutorials#Code_Generation">Model-based generation with Tigerstripe</a>
					<ul class="midlist">
						<p>Once you understand the basics of modeling with Tigerstripe, these tutorials will walk you through the basics of model-driven generation with Tigerstripe, and then introduce the more advanced concepts. The modeling tutorials are a pre-requisite for this series.</p>
					</ul>
				</li>
				<li><a href="http://wiki.eclipse.org/Tigerstripe_Tutorials#Model_Import.2FExport">Model Import/Export with Tigerstripe</a>
					<ul class="midlist">
						<p>Import UML2 models from other Modeling Environments into Tigerstripe, export Tigerstripe models in multiple formats.</p>
					</ul>
				</li>
				<li><a href="http://wiki.eclipse.org/Tigerstripe_Tutorials#Tigerstripe_Profiles">Work with Tigerstripe Profiles</a>
					<ul class="midlist">
						<p>Customize your modeling environment and create your own Tigerstripe profiles.</p>
					</ul>
				</li>
			</ul>
			<ul>
			<p><a href="http://wiki.eclipse.org/Tigerstripe_Tutorials">Read more...</a></p>
			</ul>
		</div>
	</div>
	<div id="rightcolumn">
		<div class="sideitem">
			<h6>Related links</h6>
		</div>
	</div>
</div>


EOHTML;


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