<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
<title>User Guide (Oomph Setup Documentation)</title>

<link rel="stylesheet" href="../book.css">

<noscript></noscript>
<script type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="User Guide (Oomph Setup Documentation)";
    }
}
</script>

<link rel="stylesheet" href="../../editor.css">

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>

<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.min.js"></script>

<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.1/themes/smoothness/jquery-ui.css">

<script>
$(function() {
$( ".resizable" ).resizable({ handles:"s,e,se", autoHide:true });
});
</script>

<script type="text/javascript">
function maximize(id)
{
  e = document.getElementById('max_' + id);
  c1 = document.getElementById('editor_content_1_' + id);
  c2 = document.getElementById('editor_content_2_' + id);
  pv = document.getElementById('max_pv_' + id);
  if (e.className == 'max')
  {
    e.className = 'rst';
    e.setAttribute('title', 'Restore');
    c1.setAttribute('style_orig', c1.getAttribute('style'));
    c1.setAttribute('style', 'border:2px solid #99b4d1; border-top:none;');
    c2.setAttribute('style', '');
    if (pv != null)
    {
      pv.setAttribute('width_orig', pv.getAttribute('width'));
      pv.setAttribute('width', '');
    }
  }
  else
  {
    e.className = 'max';
    e.setAttribute('title', 'Maximize');
    c1.setAttribute('style', c1.getAttribute('style_orig'));
    c1.setAttribute('style_orig', '');
    c2.setAttribute('style', 'overflow:scroll; width:100%; height:100%;');
    if (pv != null)
    {
      pv.setAttribute('width', pv.getAttribute('width_orig'));
      pv.setAttribute('width_orig', '');
    }
  }
}
</script>
</head>

<body bgcolor="white" onload="windowTitle();">
<!-- <div class="help_breadcrumbs breadcrumbs_top"><a href="../Overview.html" title="Oomph Setup Documentation">Oomph Setup Documentation</a></div> -->

<table border="0">
	<tr>
		<td width="100%"><h1>User Guide</h1></td>
		<td align="right" valign="middle" nowrap><a href="../concepts/DocBundlePool.html" title="Backward to Bundle Pools"><img src="../../images/backward.png" border="0"></a>&nbsp;<a href="wizard/index.html" title="Forward to Wizards and Wizard Pages"><img src="../../images/forward.png" border="0"></a></td>
	</tr>
</table>
<p>
<table border="0">
<tr><td><img src="../../images/category.gif">&nbsp;</td><td class="te" colspan="4"><a href="wizard/index.html" title="Category in Oomph Setup Documentation">Wizards and Wizard Pages</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocInstallWizard.html" title="Article in Oomph Setup Documentation">Install Wizard</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocImportWizard.html" title="Article in Oomph Setup Documentation">Import Wizard</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocUpdateWizard.html" title="Article in Oomph Setup Documentation">Update Wizard</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocProductPage.html" title="Article in Oomph Setup Documentation">Product Page</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocProjectPage.html" title="Article in Oomph Setup Documentation">Projects Page</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocVariablePage.html" title="Article in Oomph Setup Documentation">Variables Page</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocConfirmationPage.html" title="Article in Oomph Setup Documentation">Confirmation Page</a></td></tr>
<tr><td></td><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="wizard/DocProgressPage.html" title="Article in Oomph Setup Documentation">Progress Page</a></td></tr>
<tr><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="4"><a href="DocBundlePoolManager.html" title="Article in Oomph Setup Documentation">Bundle Pool Management</a></td></tr>
</table>
</p>


<p align="right">
<a href="../concepts/DocBundlePool.html" title="Backward to Bundle Pools"><img src="../../images/backward.png" border="0"></a>&nbsp;<a href="wizard/index.html" title="Forward to Wizards and Wizard Pages"><img src="../../images/forward.png" border="0"></a></p>
<!-- <div class="help_breadcrumbs breadcrumbs_bottom"><a href="../Overview.html" title="Oomph Setup Documentation">Oomph Setup Documentation</a></div> -->

<div class="copyright">Copyright (c) 2014 Eike Stepper (Loehne, Germany) and others.<br>All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v20.html</div>
</body>
</html>
