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

<head>
<title>Programmer's Guide (Oomph Targlets 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="Programmer's Guide (Oomph Targlets 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 Targlets Documentation">Oomph Targlets Documentation</a></div> -->

<table border="0">
	<tr>
		<td width="100%"><h1>Programmer's Guide</h1></td>
		<td align="right" valign="middle" nowrap><a href="../Overview.html" title="Backward to Overview"><img src="../../images/backward.png" border="0"></a>&nbsp;<a href="UnderstandingTargletContainers.html" title="Forward to Understanding Targlet Containers"><img src="../../images/forward.png" border="0"></a></td>
	</tr>
</table>
<p>
<table border="0">
<tr><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="UnderstandingTargletContainers.html" title="Article in Oomph Targlets Documentation">Understanding Targlet Containers</a></td></tr>
<tr><td><img src="../../images/article.gif">&nbsp;</td><td class="te" colspan="3"><a href="ListeningToEvents.html" title="Article in Oomph Targlets Documentation">Listening To Targlet Container Events</a></td></tr>
</table>
</p>


<p align="right">
<a href="../Overview.html" title="Backward to Overview"><img src="../../images/backward.png" border="0"></a>&nbsp;<a href="UnderstandingTargletContainers.html" title="Forward to Understanding Targlet Containers"><img src="../../images/forward.png" border="0"></a></p>
<!-- <div class="help_breadcrumbs breadcrumbs_bottom"><a href="../Overview.html" title="Oomph Targlets Documentation">Oomph Targlets 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>
