/*
* Scriptographer
*
* This file is part of Scriptographer, a Scripting Plugin for Adobe Illustrator
* http://scriptographer.org/
*
* Copyright (c) 2002-2010, Juerg Lehni
* http://scratchdisk.com/
*
* All rights reserved. See LICENSE file for details.
*
* File created on 31.12.2004.
*/
package com.scriptographer.adm;
import java.util.EnumSet;
import com.scratchdisk.script.Callable;
import com.scratchdisk.util.EnumUtils;
import com.scratchdisk.util.IntegerEnumUtils;
/**
* @author lehni
*/
public class HierarchyListBox extends ListItem<HierarchyListEntry> {
public HierarchyListBox(Dialog dialog) {
super(dialog, ItemType.HIERARCHY_LISTBOX);
}
private HierarchyListEntry parentEntry = null;
/**
* Creates a child List for a HierarchyListEntry. This constructor
* is used indirectly through HierarchyListEntry only.
* @param entry
*/
protected HierarchyListBox(HierarchyListEntry entry) {
listHandle = nativeCreateChildList(entry);
// determine the parent hierarchyList:
parentEntry = entry;
parentEntry.childList = this;
HierarchyListBox parentList = (HierarchyListBox) entry.getList();
// Pass through track / draw callback settings
// This requires the callback to be set before child lists are created
// as otherwise only the parent list would recieve callbacks!
this.setTrackEntryCallback(parentList.getTrackEntryCallback());
this.setDrawEntryCallback(parentList.getDrawEntryCallback());
}
public Class<? extends ListEntry> getComponentType() {
return HierarchyListEntry.class;
}
public EnumSet<ListStyle> getStyle() {
return IntegerEnumUtils.getSet(ListStyle.class, nativeGetStyle());
}
public void setStyle(EnumSet<ListStyle> style) {
nativeSetStyle(IntegerEnumUtils.getFlags(style));
}
public void setStyle(ListStyle[] style) {
setStyle(EnumUtils.asSet(style));
}
public boolean remove() {
HierarchyListEntry parentEntry = nativeRemoveList(listHandle);
if (parentEntry != null) {
parentEntry.childList = null;
listHandle = 0;
return true;
}
return false;
}
protected int getUniqueId() {
// walk the hierarchy up and use the root's uniqueId function only:
if (parentEntry != null) {
return parentEntry.getList().getUniqueId();
} else {
return super.getUniqueId();
}
}
private native int nativeCreateChildList(HierarchyListEntry entry);
private native HierarchyListEntry nativeRemoveList(int listHandle);
/*
* Override all getters for ScriptFunctions in HierarchyListBoxes, so they
* walk up the list chain on find a function in the parent if they
* do not define one locally.
*/
public Callable getOnChangeEntryText() {
Callable func = super.getOnChangeEntryText();
return func == null && parentEntry != null ?
parentEntry.getList().getOnChangeEntryText() : func;
}
public Callable getOnSelectEntry() {
Callable func = super.getOnSelectEntry();
return func == null && parentEntry != null ?
parentEntry.getList().getOnSelectEntry() : func;
}
public Callable getOnDestroyEntry() {
Callable func = super.getOnDestroyEntry();
return func == null && parentEntry != null ?
parentEntry.getList().getOnDestroyEntry() : func;
}
public Callable getOnDrawEntry() {
Callable func = super.getOnDrawEntry();
return func == null && parentEntry != null ?
parentEntry.getList().getOnDrawEntry() : func;
}
public Callable getOnTrackEntry() {
Callable func = super.getOnTrackEntry();
return func == null && parentEntry != null ?
parentEntry.getList().getOnTrackEntry() : func;
}
public Callable getOnDestroy() {
Callable func = super.getOnDestroy();
return func == null && parentEntry != null ?
parentEntry.getList().getOnDestroy() : func;
}
public Callable getOnDraw() {
Callable func = super.getOnDraw();
return func == null && parentEntry != null ?
parentEntry.getList().getOnDraw() : func;
}
public Callable getOnResize() {
Callable func = super.getOnResize();
return func == null && parentEntry != null ?
parentEntry.getList().getOnResize() : func;
}
public Callable getOnTrack() {
Callable func = super.getOnTrack();
return func == null && parentEntry != null ?
parentEntry.getList().getOnTrack() : func;
}
/*
* item draw proc
*
*/
// public native void setDrawProcRecursive(ADMListEntryDrawProc drawProc);
/*
* item trackg proc
*
*/
// public native void setTrackProcRecursive(ADMListEntryTrackProc trackProc);
/*
* item action mask
*
*/
// public native void setMaskRecursive(ADMHierarchyListRef entry, ADMActionMask mask);
/*
* item notify proc
*
*/
// public native void setNotifyProcRecursive(ADMListEntryNotifyProc notifyProc);
/*
* item destroy proc
*
*/
// public native void setDestroyProcRecursive(ADMListEntryDestroyProc destroyProc);
/*
* item entry bounds
*
*/
public native void setEntrySize(int width, int height, boolean recursive);
public native void setEntryTextRect(int x, int y, int width, int height,
boolean recursive);
public void setEntrySize(Size size, boolean recursive) {
setEntrySize(size.width, size.height, recursive);
}
public void setEntryTextRect(Rectangle rect, boolean recursive) {
setEntryTextRect(rect.x, rect.y, rect.width, rect.height, recursive);
}
public native int getNonLeafEntryWidth();
public native void setNonLeafEntryTextRect(int x, int y, int width,
int height, boolean recursive);
public native Rectangle getNonLeafEntryTextRect();
public void setNonLeafEntryTextRect(Rectangle rect, boolean recursive) {
setNonLeafEntryTextRect(rect.x, rect.y, rect.width, rect.height, recursive);
}
public void setNonLeafEntryTextRect(Rectangle rect) {
setNonLeafEntryTextRect(rect, false);
}
/*
* item hierarchy
*
*/
public HierarchyListEntry getParentEntry() {
return parentEntry;
}
/*
* coordate system conversion
*
*/
public native Rectangle getLocalRect();
public native Point localToScreen(int x, int y);
public native Point screenToLocal(int x, int y);
public native Point localToGlobal(int x, int y);
public native Point globalToLocal(int x, int y);
public native Rectangle localToGlobal(int x, int y, int width, int height);
public native Rectangle globalToLocal(int x, int y, int width, int height);
public Point localToScreen(Point point) {
return localToScreen(point.x, point.y);
}
public Point screenToLocal(Point point) {
return screenToLocal(point.x, point.y);
}
public Point localToGlobal(Point point) {
return localToScreen(point.x, point.y);
}
public Point globalToLocal(Point point) {
return screenToLocal(point.x, point.y);
}
public Rectangle localToGlobal(Rectangle rect) {
return localToGlobal(rect.x, rect.y, rect.width, rect.height);
}
public Rectangle globalToLocal(Rectangle rect) {
return globalToLocal(rect.x, rect.y, rect.width, rect.height);
}
/*
* item marg accessors
*
*/
public native void setIndentationWidth(int width, boolean recursive);
public native int getIndentationWidth();
public native void setLocalLeftMargin(int width);
public native int getLocalLeftMargin();
public native int getGlobalLeftMargin();
public native void setDivided(boolean divided, boolean recursive);
public native boolean isDivided();
public native void setFlags(int flags, boolean recursive);
public native int getFlags();
public void setIndentationWidth(int width) {
setIndentationWidth(width, false);
}
public void setDivided(boolean divided) {
setDivided(divided, false);
}
public void setFlags(int flags) {
setFlags(flags, false);
}
/*
* item invalidation
*
*/
public native void invalidate();
/*
* leaf item accessors
*
*/
public native HierarchyListEntry[] getLeafEntries();
/**
* @deprecated
*/
public HierarchyListEntry[] getLeafs() {
return getLeafEntries();
}
public native int getLeafEntryIndex(HierarchyListEntry entry);
/**
* @deprecated
*/
public int getLeafIndex(HierarchyListEntry entry) {
return getLeafEntryIndex(entry);
}
/*
* item list manipulation
*
*/
protected HierarchyListEntry createEntry(int index) {
return new HierarchyListEntry(this, index);
}
public native HierarchyListEntry getLeafEntryAt(int x, int y);
/**
* @deprecated
*/
public HierarchyListEntry getLeafAt(int x, int y) {
return getLeafEntryAt(x, y);
}
public native HierarchyListEntry getSelectedLeafEntry();
/**
* @deprecated
*/
public HierarchyListEntry getActiveLeaf() {
return getSelectedLeafEntry();
}
public void getLeafEntryAt(Point point) {
getLeafEntryAt(point.x, point.y);
}
/*
* selection list manipulation
*
*/
/**
* Returns all selected entries.
*/
public native HierarchyListEntry[] getSelectedEntries();
/**
* Returns all unnested selected entries.
*/
public native HierarchyListEntry[] getUnnestedSelectedEntries();
/*
* item sequence manipulation
*
*/
public native void swap(int fromIndex, int toIndex);
/*
* item selection
*
*/
public native void deselectAll();
/*
* expanded item accessors
*
*/
public native HierarchyListEntry[] getExpandedEntries();
public HierarchyListEntry[] getExpanded() {
return getExpandedEntries();
}
public native int getExpandedEntryIndex(HierarchyListEntry entry);
public int getExpandedIndex(HierarchyListEntry entry) {
return getExpandedEntryIndex(entry);
}
/*
* restrict item invalidation
*
*/
/*
public native void startMultipleItemInvalidate();
public native void stopMultipleItemInvalidate();
*/
}