Flash navigator enhancements:

- The tooltip is always at 1:1 scale even if the whole graph is zoomed out.
- Provide some feedback when an error occurs while loading the data (instead of spinning forever)

SVN:trunk[825]
This commit is contained in:
Denis Flaven
2010-09-12 10:08:28 +00:00
parent 384c8c8ba9
commit f77364d520
5 changed files with 64 additions and 21 deletions

View File

@@ -65,7 +65,7 @@
m_oIcon.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onLoadError);
m_oIcon.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
m_oIcon.load(myURL);
addChild(m_oIcon);
//addChild(m_oIcon);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)
addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
addEventListener( MouseEvent.MOUSE_OVER, mouseOver );
@@ -99,15 +99,16 @@
// Add the Loader on the Sprite when the loading is completed
m_oIcon.x = -m_oIcon.width / 2;
m_oIcon.y = -m_oIcon.height + 8; // Slightly shifted downward
// Construct a tooltip
addChild(m_oToolTip);
addChild(m_oIcon);
//hitArea = m_oIcon; // Drag only by the icon...
trace('m_sLabel, getChildIndex:'+getChildIndex(m_sLabel));
trace('m_oToolTip, getChildIndex:'+getChildIndex(m_oToolTip));
trace('m_oIcon, getChildIndex:'+getChildIndex(m_oIcon));
//swapChildren(m_oToolTip, );
// Start the tooltip
m_oToolTip.start();
m_oToolTip.start();
}
function mouseDown(event:MouseEvent):void

View File

@@ -1,4 +1,4 @@
package iTop
package iTop
{
import flash.display.*;
import flash.geom.*;
@@ -35,7 +35,7 @@ package iTop
protected var m_Ks = 30; // Solid friction coeff
protected var m_deltaT = 0.1; // Interval of time between updates
protected var m_MAX_ITEMS_PER_ROW = 8;
protected var m_FOCUS_DELAY_COUNTDOWN = 50; // 50 images to zoom & pan correctly
protected var m_FOCUS_DELAY_COUNTDOWN = 30; // 30 images to zoom & pan correctly
protected var m_fZoom:Number;
// Constructor
@@ -99,6 +99,10 @@ package iTop
m_oCanvas.scaleX = m_fZoom;
m_oCanvas.scaleY = m_fZoom;
}
function GetZommLevel()
{
return m_fZoom;
}
function doLoadData()
{
@@ -119,25 +123,52 @@ package iTop
function onXMLLoadComplete(event:Event):void
{
var myXML:XML = XML(m_oLoader.data);
//trace("Data loaded." + myXML);
//trace("===========================");
parseXMLData(null, myXML, 0, 0);
m_sTitle.text = myXML.attribute("title");
m_oZoomSlider.enabled = true;
removeChild(m_oPreloader);
addEventListener(Event.ENTER_FRAME, drawLines);
m_oZoomSlider.value = 100;
m_oZoomSlider.addEventListener(SliderEvent.CHANGE, onZoomChange);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)
stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
//trace('======= Initial Posistions =========');
//DumpPositions();
try
{
var myXML:XML = XML(m_oLoader.data);
//trace("Data loaded." + myXML);
//trace("===========================");
parseXMLData(null, myXML, 0, 0);
m_sTitle.text = myXML.attribute("title");
m_oZoomSlider.enabled = true;
addEventListener(Event.ENTER_FRAME, drawLines);
m_oZoomSlider.value = 100;
m_oZoomSlider.addEventListener(SliderEvent.CHANGE, onZoomChange);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown)
stage.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);
//trace('======= Initial Posistions =========');
//DumpPositions();
}
catch(error:IOErrorEvent)
{
m_sTitle.text = "I/O Error: unable to load the graph data ("+error+")";
}
catch(error:TypeError)
{
m_sTitle.text = "Error: unable to load the graph data (Invalid XML data)";
}
catch(error:Error)
{
m_sTitle.text = "Error: unable to load the graph data ("+error+")";
}
finally
{
if (m_oPreloader != null)
{
removeChild(m_oPreloader);
m_oPreloader = null;
}
}
}
function onXMLLoadError(event:IOErrorEvent):void
{
trace("An error occured:" + Event);
if (m_oPreloader != null)
{
removeChild(m_oPreloader);
m_oPreloader = null;
}
m_sTitle.text = "I/O Error: unable to load the graph data ("+event+")";
}
function parseXMLData(oParentNode:GraphNode, oXMLData:XML, iChildIndex:Number, iChildCount:Number)
@@ -363,6 +394,13 @@ package iTop
trace('FOCUS_DELAY:'+this.m_FOCUS_DELAY_COUNTDOWN);
UpdatePanAndZoom(m_FOCUS_DELAY_COUNTDOWN / 30);
}
else if (this.m_FOCUS_DELAY_COUNTDOWN == 0)
{
// Increase the friction so that manually manipulating objects gets easier
trace("More friction now...");
m_Ks = 5*m_Ks; // 5 times more friction
this.m_FOCUS_DELAY_COUNTDOWN--;
}
}
function drawArrow(oPt:Point, dx:Number, dy:Number, color:uint):void
{

View File

@@ -1,4 +1,4 @@
package iTop
package iTop
{
import flash.display.*;
import flash.geom.*;
@@ -93,6 +93,10 @@ package iTop
private function appear(i:uint):void
{
// The delay has elapsed, show (smoothly) the tooltip
// Make sure that the tooltip always appears at se same scale 1:1 even
// if the whole scene is zoomed out
scaleX = 1 / this.parent.parent.scaleX;
scaleY = 1 / this.parent.parent.scaleY;
if (this.timer != null)
{
this.timer.stop();

Binary file not shown.

Binary file not shown.