liveDragging="true"
이렇게 주면 HDividedBox의 사이즈가 변화는 즉시 화면에 반영된다.
liveDragging="true"
이렇게 주면 HDividedBox의 사이즈가 변화는 즉시 화면에 반영된다.
디자인 툴을 만들기 위해 http://www.rogue-development.com/objectHandles.html를 사용한다. 여러 개의 컴포넌트 중 한 개가 선택되면 기존에 선택되어 있던 것은 해제되고 새로운 것만 선택된다. 이 구조를 어떻게 구현했는지 찾아보니 다음과 같다.
1. ObjectHandles의 onMouseDown 발생
2. SelectionManager.instance.setSelected(this); 실행
3. 2번의 setSelected 메소드에서 기존에 선택된 것이 있으면 deselect() 시키고 새로운 것을 select() 한다.
화면을 lock 시키면 select되지 않게 만들어야 했다. SelectionManager을 살펴보니 addSelectable, removeSelectable 메소드가 있다. addSelectable에서 _items 라는 곳에 select 가능한 object들이 추가 되는데 SelectionManager는 위에서 쓰는 것처럼 싱글톤이다. 그래서 application 전체의 Object들이 이 곳에 담기게 된다. application 내부 에서 두 개의 design 화면을 띄우고 이쪽은 lock 저쪽은 unlock 시키려고 이 _items를 사용하면 안된다.
Flex의 List에서 아이템을 더블클릭 하면 수정되게 하고싶을 때가 있다. 아래 링크한 문서에서 Comments에 JabbyPandaUA 라는 사람이 남겨놓은 답이 좋아 보인다.
참고 : http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=8983
addEventListener(ListEvent.ITEM_DOUBLE_CLICK, onItemDoubleClick, false, EventPriority.DEFAULT_HANDLER);
protected function onItemDoubleClick(event : ListEvent) : void {
var isEventPrevented : Boolean = event.isDefaultPrevented();
if (event.isDefaultPrevented()) {
return;
}
editable = true;
editedItemPosition = {columnIndex : 0, rowIndex : event.rowIndex};
}
위와 같이 한다. 단순히 editable = true 속성을 지정해 두면 더블 클릭이 아닌 원 클릭에도 수정모드로 들어간다. 위의 코드도 한 번 editable이 되면 계속 editable이 되므로 change 이벤트 등에서 무조건 editable = false; 로 지정해 주니 잘 된다.
flexmdi라는 flex에 데스크탑을 구현한 오픈소스가 있다. 여기를 클릭하면 볼 수 있다. 여기 샘플 코드에 괜찮은 설명이 있어서 옮겨 적는다.
// the flex framework dispatches all kinds of events
// in order to avoid catching one of those and throwing a coercion error
// have your listener accept Event and check the type inside the function
// this is good practice for all Flex development, not specific to flexmdi
private function confirmWindowClose(event:Event):void
{
if(event is MDIManagerEvent && confirmCloseCb.selected)
{
// store a copy of the event in case we want to resume later (user confirms their intention)
queuedEvent = event.clone() as MDIManagerEvent;
// this is the line that prevents the default behavior from executing as usual
// because the default handler checks event.isDefaultPrevented()
event.preventDefault();
Alert.show("Seriously? Close it?", null, 3, null, handleAlertResponse);
}
}
// called when the Alert window is closed
// if the user said yes, we execute the default behavior of playing an effect
// and then removing the window by sending the stored event to
// the appropriately named executeDefaultBehavior() method
private function handleAlertResponse(event:CloseEvent):void
{
if(event.detail == mx.controls.Alert.YES)
{
mdiCanvas.windowManager.executeDefaultBehavior(queuedEvent);
}
}
윈도우를 닫을 때 발생한 이벤트에서 이벤트를 clone하여 queuedEvent라는 곳에 임시 저장하고 event는 preventDefault() 한다. 만약 사용자가 윈도우를 닫기 원하면 queuedEvent를 처리한다.
이벤트를 받을 때 타입체크를 하라는 설명도 보인다.
아래처럼 하면 object에 붙어있는 스크롤바를 가장 하단으로 내릴 수 있다.
object.verticalScrollPosition = object.maxVerticalScrollPosition;
object.validateNow();
적어놨다고 생각했는데 없네.