blob: 0006c9306e0d0a92559f0a76e701a4c24dcff7b1 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="description" content="The Visual Editor - David Orme, RCP consultant and trainer muses about visual programming and model-driven architectures" />
<meta name="keywords" content="Eclipse Plugin RCP SWT Java Visual Editor CompositeTable data binding JFace Platform VE training consulting" />
<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="http://www.coconut-palm-software.com/the_visual_editor/?feed=rss2" />
<link rel="alternate" type="text/xml" title="RSS .92" href="http://www.coconut-palm-software.com/the_visual_editor/?feed=rss" />
<link rel="alternate" type="application/atom+xml" title="Atom 0.3" href="http://www.coconut-palm-software.com/the_visual_editor/?feed=atom" />
<link rel="pingback" href="http://www.coconut-palm-software.com/the_visual_editor/xmlrpc.php" />
<title>Coconut Palm Software -- Eclipse RCP training and consulting</title>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.coconut-palm-software.com/the_visual_editor/xmlrpc.php?rsd" />
<script language="javascript">
/* Jesse Ruderman
* July 18, 2004
*
* Remaining problems:
* IE sometimes crashes on exit after using the this script.
* In IE, it is a little ugly because IE doesn't support border-radius.
* In IE, it does not work at standalone Flash URLs.
*/
function setupSeekBar() {
setTimeout(initFlashControls, 100);
function initFlashControls()
{
var count = 0;
function tt(elem)
{
if (typeof elem.TotalFrames != "undefined") /* do not coerce elem.StopPlay to bool, because that breaks IE */
{
addFlashControls(elem);
++count;
}
}
var i, x;
for (i = 0; x = document.getElementsByTagName("object")[i]; ++i)
tt(x);
for (i = 0; x = document.getElementsByTagName("embed")[i]; ++i)
tt(x);
}
function addFlashControls(flash)
{
var controlsDiv = document.createElement("div");
/* Put the controls under the Flash.
*
* If the Flash is an <embed> in an <object>, we do not want to touch the <object>, because that would make
* Mozilla re-test whether the <object> is broken and reset the <embed>. So in that case, we put the controls
* under the <object>.
*/
var where = flash;
while (where.parentNode.tagName.toLowerCase() == "object")
where = where.parentNode;
where.parentNode.insertBefore(controlsDiv, where.nextSibling);
/* Construct controls using DOM2 instead of innerHTML.
* In Mozilla, innerHTML= is like innerText= at standalone flash URLs.
*/
var table = document.createElement("table");
controlsDiv.appendChild(table);
var row = table.insertRow(-1);
var pauseButton = document.createElement("button");
pauseButton.appendChild(document.createTextNode("Pause"));
var buttonCell = row.insertCell(-1);
buttonCell.appendChild(pauseButton);
var slider = row.insertCell(-1);
slider.width = "100%";
var visibleSlider = document.createElement("div");
visibleSlider.style.position = "relative";
visibleSlider.style.height = "10px";
visibleSlider.style.width = "100%";
visibleSlider.style.MozBorderRadius = "4px";
visibleSlider.style.background = "#aaa";
slider.appendChild(visibleSlider);
var thumb = document.createElement("div");
thumb.style.position = "absolute";
thumb.style.height = "20px";
thumb.style.width = "10px";
thumb.style.top = "-5px";
thumb.style.MozBorderRadius = "4px";
thumb.style.background = "#666";
visibleSlider.appendChild(thumb);
var sliderWidth;
var paused = false;
var dragging = false;
table.width = Math.max(parseInt(flash.width) || 0, 400);
addEvent(pauseButton, "click", pauseUnpause);
addEvent(slider, "mousedown", drag);
addEvent(slider, "drag", function() { return false; }); /* For IE */
window.setInterval(update, 30);
function pauseUnpause()
{
paused = !paused;
pauseButton.style.borderStyle = paused ? "inset" : "";
if (paused)
flash.StopPlay();
else
flash.Play();
}
function update()
{
sliderWidth = parseInt(getWidth(slider) - getWidth(thumb));
if (!paused && !dragging)
thumb.style.left = parseInt(flash.CurrentFrame() / totalFrames() * sliderWidth) + "px";
}
function dragMousemove(e)
{
var pageX = e.clientX + document.body.scrollLeft; /* cross-browser, unlike e.pageX, which IE does not support */
var pos = bounds(0, pageX - getX(slider) - 5, sliderWidth);
var frame = bounds(1, Math.ceil(totalFrames() * pos / sliderWidth), totalFrames() - 2);
thumb.style.left = pos + "px";
flash.GotoFrame(frame);
}
function release(e)
{
removeEvent(document, "mousemove", dragMousemove);
removeEvent(document, "mouseup", release);
if (!paused)
flash.Play();
dragging = false;
}
function drag(e)
{
addEvent(document, "mousemove", dragMousemove);
addEvent(document, "mouseup", release);
dragging = true;
dragMousemove(e);
}
/* Boring functions, some of which only exist to hide differences between IE and Mozilla. */
function bounds(min, val, max)
{
return Math.min(Math.max(min, val), max);
}
function totalFrames()
{
/* This is weird. TotalFrames differs between IE and Mozilla. CurrentFrame does not. */
if (typeof flash.TotalFrames == "number")
return flash.TotalFrames; /* IE */
else if (typeof flash.TotalFrames == "function")
return flash.TotalFrames(); /* Mozilla */
else
return 1; /* Partially loaded Flash in IE? */
}
function getWidth(elem)
{
if (document.defaultView && document.defaultView.getComputedStyle)
return parseFloat(document.defaultView.getComputedStyle(elem,null).getPropertyValue("width")); /* Mozilla */
else
return parseFloat(elem.offsetWidth); /* IE (currentStyle.width can be "auto" or "100%") */
}
function getX(elem)
{
if (!elem) return 0;
return (elem.offsetLeft) + getX(elem.offsetParent);
}
function addEvent(elem, eventName, fun)
{
if (elem.addEventListener) /* Mozilla */
elem.addEventListener(eventName, fun, false);
else /* IE */
elem.attachEvent("on" + eventName, fun);
}
function removeEvent(elem, eventName, fun)
{
if (elem.addEventListener)
elem.removeEventListener(eventName, fun, false);
else
elem.detachEvent("on" + eventName, fun);
}
}
}
</script>
</head>
<body onload="setupSeekBar();">
<center>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="1024" height="768"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">
<param name="movie" value="compositetable-30sec.swf">
<param name="play" value="true">
<param name="loop" value="false">
<param name="quality" value="low">
<embed src="compositetable-30sec.swf" width="1024" height="768" play="true"
loop="false" quality="low" type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed></object>
<p>Coconut Palm Software offers Eclipse consulting, training, and mentoring</p>
<p>
<a href="/"><i>Return to Coconut Palm Software home page</i></a><br/>
<a href="/the_visual_editor"><i>Return to The Visual Editor</i></a><br/>
<a href="http://www.eclipse.org/nebula/widgets/compositetable/compositetable.php"><i>Return to Eclipse CompositeTable home page</i></a>
</p>
</center>
</body>
</html>