PDA

Просмотр полной версии : Определение габаритов mx:Tree


yana_flash
27.06.2007, 18:02
У меня есть дерево mx:Tree. По левому клику на элементе дерева я создаю и вывожу меню (с разным набором пунктов для элементов разного типа). Если же я кликаю ниже самого нижнего видимого пункта дерева, вызывается меню для выделенного элемента дерева. Как мне определить, что клик был произведен ниже, чем видимая часть дерева, чтобы не создавать меню при клике на пустой области?

MyTree.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*"
width="100%" height="100%" backgroundColor="#c9c9c7"
styleName="loginSection">

<mx:Script><![CDATA[
import mx.controls.List;
import mx.collections.ICollectionView;
import mx.collections.XMLListCollection;
import mx.controls.treeClasses.*;

import mx.controls.Menu;
import mx.events.MenuEvent;
import mx.controls.Alert;
import flash.geom.Point;

private var point1:Point = new Point();
private var myMenu:Menu;

// Create and display the Menu control.
public function showMenu():void {
if (selectedNode.@type =="book") {
myMenu= Menu.createMenu(this, myMenuDataBook, false);
} else if (selectedNode.@type == "cd") {
myMenu= Menu.createMenu(this, myMenuDataCD, false);
} else {
return;
}
myMenu.labelField="@label"
myMenu.addEventListener("itemClick", menuHandler);

// Calculate position of Menu in Application's coordinates.
point1.x=mouseX;
point1.y=mouseY+5;
point1=this.localToGlobal(point1);

myMenu.show(point1.x, point1.y);
}

// Event handler for the Menu control's change event.
private function menuHandler(event:MenuEvent):void {
if ( event.item.@eventName == "closeMenu" ) {
return;
}
Alert.show("Label: " + event.item.@label, "Clicked menu item");
}

...

<mx:Tree id="devTree" x="0" y="0" height="100%" width="100%" labelField="@label" showRoot="true" dataProvider="{treeData}" click="showMenu();" change="treeChanged(event)" />

<mx:XML id="myMenuDataBook">
<rootAlarm>
<menuitem label="Print book" eventName="book_print"/>
<menuitem label="Read book" eventName="book_read"/>
<separator type="separator"/>
<menuitem label="Close menu" eventName="closeMenu"/>
</rootAlarm>
</mx:XML>

<mx:XML id="myMenuDataCD">
<rootAccess>
<menuitem label="Воспроизвести" eventName="cd_play"/>
<menuitem label="Записать на CD-R" eventName="cd_copy"/>
<separator type="separator"/>
<menuitem label="Close menu" eventName="closeMenu"/>
</rootAccess>
</mx:XML>

</mx:Canvas>

MaxD
04.07.2007, 14:31
У тебя что-то недописано в коде.
if (selectedNode.@type =="book") { - что за selectedNode? И тип нигде не задается...