@BeanSettings(useXdevCustomizer=true) public class XdevTree extends JTree implements XdevFocusCycleComponent, Persistable
JTree
.JTree
,
Serialized FormModifier and Type | Class and Description |
---|---|
protected class |
XdevTree.XdevTreeUI |
JTree.AccessibleJTree, JTree.DropLocation, JTree.DynamicUtilTreeNode, JTree.EmptySelectionModel, JTree.TreeModelHandler, JTree.TreeSelectionRedirector
JComponent.AccessibleJComponent
Container.AccessibleAWTContainer
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
Modifier and Type | Field and Description |
---|---|
static String |
CLOSED_FOLDER_ICON_PROPERTY |
static String |
HOLE_LINE_TREE_PROPERTY |
static String |
LEAF_ICON_PROPERTY |
static String |
OPEN_FOLDER_ICON_PROPERTY |
static String |
PAINT_TREE_LINES_PROPERTY |
ANCHOR_SELECTION_PATH_PROPERTY, CELL_EDITOR_PROPERTY, CELL_RENDERER_PROPERTY, cellEditor, cellRenderer, editable, EDITABLE_PROPERTY, EXPANDS_SELECTED_PATHS_PROPERTY, INVOKES_STOP_CELL_EDITING_PROPERTY, invokesStopCellEditing, LARGE_MODEL_PROPERTY, largeModel, LEAD_SELECTION_PATH_PROPERTY, ROOT_VISIBLE_PROPERTY, rootVisible, ROW_HEIGHT_PROPERTY, rowHeight, SCROLLS_ON_EXPAND_PROPERTY, scrollsOnExpand, SELECTION_MODEL_PROPERTY, selectionModel, selectionRedirector, SHOWS_ROOT_HANDLES_PROPERTY, showsRootHandles, TOGGLE_CLICK_COUNT_PROPERTY, toggleClickCount, TREE_MODEL_PROPERTY, treeModel, treeModelListener, VISIBLE_ROW_COUNT_PROPERTY, visibleRowCount
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
TAB_INDEX_PROPERTY
VALUE_SEPARATOR
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
Constructor and Description |
---|
XdevTree()
|
XdevTree(TreeModel model)
Constructs a
XdevTree that is initialized with model
as the data model and a DefaultXdevTreeManager . |
XdevTree(XdevTreeNode root)
|
Modifier and Type | Method and Description |
---|---|
void |
collapseAll()
Ensures that all nodes in this
XdevTree are collapsed. |
void |
collapseNode(XdevTreeNode node)
Ensures that the
node is collapsed and viewable. |
void |
collapsePath(Collection<?> path)
Ensures that the node identified by the specified path is collapsed and
viewable.
|
void |
expandAll()
Expand all nodes of this
XdevTree . |
void |
expandAll(TreeNode node)
Expand all nodes which the
DefaultMutableTreeNode contains. |
void |
expandNode(XdevTreeNode node)
Ensures that the
node is expanded and viewable. |
void |
expandPath(List<?> path)
Ensures that the node identified by the specified path is expanded and
viewable.
|
Icon |
getClosedFolderIcon()
Returns the
Icon of the closed folder nodes. |
boolean |
getHoleLineTree()
Gets the
holeLineTree property. |
Icon |
getLeafIcon()
Returns the
Icon of the leaf nodes. |
XdevTreeNode |
getNodeAt(int x,
int y)
Returns the
XdevTreeNode at the specified location. |
Icon |
getOpenFolderIcon()
Returns the
Icon of the open folder nodes. |
boolean |
getPaintTreeLines()
Gets the
paintTreeLines property. |
String |
getPersistentId()
Uses the name of the component as a persistent id.
|
Dimension |
getPreferredScrollableViewportSize() |
XdevTreeNode |
getRoot()
Returns the root of the tree.
|
XdevTreeNode |
getSelectedNode()
Returns the first selected
XdevTreeNode . |
List<DefaultMutableTreeNode> |
getSelectedNodes()
Returns a
List of all selected nodes. |
int |
getSelectionMode()
Returns the current selection mode.
|
List<?> |
getSelectionPathAsList() |
List<List<?>> |
getSelectionPathsAsList() |
int |
getTabIndex()
Returns the tabindex assigned to this component.
|
XdevTreeManager |
getTreeManager()
Returns the
XdevTreeManager of this XdevTree . |
boolean |
isPersistenceEnabled()
Flag, indicates, if the gui state for this component should be persisted.
|
void |
loadPersistentState(String persistentState)
Restores this
Components persistent state. |
String |
savePersistentState()
Generates a
String representation of this Components
persistent state and returns it for being stored. |
void |
setClosedFolderIcon(Icon closedFolderIcon)
Sets the
Icon which render the closed folder nodes. |
void |
setDefaultTreeManager()
Sets a
DefaultXdevTreeManager as tree manager for this
XdevTree . |
void |
setForeground(Color fg) |
void |
setHoleLineTree(boolean holeLineTree)
Sets the hole line tree property.
|
void |
setLeafIcon(Icon leafIcon)
Sets the
Icon which render the leaf nodes. |
void |
setModel(VirtualTable vt,
String rootsColumnName,
Object rootsID,
String idColumnName,
String ownerColumnName,
String captionColumnName,
String dataColumnName)
Creates a tree model for this tree containing data of the VirtualTable
vt by creating XdevTreeNode s out of
VirtualTable.VirtualTableRow s. |
void |
setModel(VirtualTable vt,
String rootsColumnName,
Object rootsID,
String idColumnName,
String ownerColumnName,
String captionColumnName,
String dataColumnName,
boolean multipleRoots)
Creates a tree model for this tree containing data of the VirtualTable
vt by creating XdevTreeNode s out of
VirtualTable.VirtualTableRow s. |
void |
setOpenFolderIcon(Icon openFolderIcon)
Sets the
Icon which render the open folder nodes. |
void |
setPaintTreeLines(boolean paintTreeLines)
Sets the
paintTreeLines property. |
void |
setPersistenceEnabled(boolean persistenceEnabled)
Sets the persistenceEnabled flag.
|
void |
setRoot(TreeNode root) |
void |
setSelectedNode(XdevTreeNode node)
Selects the node identified by the given
node . |
void |
setSelectedNodes(Collection<? extends DefaultMutableTreeNode> nodes)
Selects all nodes identified by the given
Collection . |
void |
setSelectionMode(int mode)
Sets the selection model, which must be one of SINGLE_TREE_SELECTION,
CONTIGUOUS_TREE_SELECTION or DISCONTIGUOUS_TREE_SELECTION in
TreeSelectionModel . |
void |
setSelectionPath(Collection<?> path)
Selects the node identified by the given
path . |
void |
setSelectionPaths(Collection<?> path)
Sets the selection by creating
TreePath s out of path
. |
void |
setTabIndex(int tabIndex)
Sets the tabindex of this component.
|
void |
setTreeManager(XdevTreeManager manager)
Sets the tree manager for this
XdevTree . |
String |
toString() |
void |
updateUI() |
addSelectionInterval, addSelectionPath, addSelectionPaths, addSelectionRow, addSelectionRows, addTreeExpansionListener, addTreeSelectionListener, addTreeWillExpandListener, cancelEditing, clearSelection, clearToggledPaths, collapsePath, collapseRow, convertValueToText, createTreeModel, createTreeModelListener, expandPath, expandRow, fireTreeCollapsed, fireTreeExpanded, fireTreeWillCollapse, fireTreeWillExpand, fireValueChanged, getAccessibleContext, getAnchorSelectionPath, getCellEditor, getCellRenderer, getClosestPathForLocation, getClosestRowForLocation, getDefaultTreeModel, getDescendantToggledPaths, getDragEnabled, getDropLocation, getDropMode, getEditingPath, getExpandedDescendants, getExpandsSelectedPaths, getInvokesStopCellEditing, getLastSelectedPathComponent, getLeadSelectionPath, getLeadSelectionRow, getMaxSelectionRow, getMinSelectionRow, getModel, getNextMatch, getPathBetweenRows, getPathBounds, getPathForLocation, getPathForRow, getRowBounds, getRowCount, getRowForLocation, getRowForPath, getRowHeight, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, getScrollsOnExpand, getSelectionCount, getSelectionModel, getSelectionPath, getSelectionPaths, getSelectionRows, getShowsRootHandles, getToggleClickCount, getToolTipText, getTreeExpansionListeners, getTreeSelectionListeners, getTreeWillExpandListeners, getUI, getUIClassID, getVisibleRowCount, hasBeenExpanded, isCollapsed, isCollapsed, isEditable, isEditing, isExpanded, isExpanded, isFixedRowHeight, isLargeModel, isPathEditable, isPathSelected, isRootVisible, isRowSelected, isSelectionEmpty, isVisible, makeVisible, paramString, removeDescendantSelectedPaths, removeDescendantToggledPaths, removeSelectionInterval, removeSelectionPath, removeSelectionPaths, removeSelectionRow, removeSelectionRows, removeTreeExpansionListener, removeTreeSelectionListener, removeTreeWillExpandListener, scrollPathToVisible, scrollRowToVisible, setAnchorSelectionPath, setCellEditor, setCellRenderer, setDragEnabled, setDropMode, setEditable, setExpandedState, setExpandsSelectedPaths, setInvokesStopCellEditing, setLargeModel, setLeadSelectionPath, setModel, setRootVisible, setRowHeight, setScrollsOnExpand, setSelectionInterval, setSelectionModel, setSelectionPath, setSelectionPaths, setSelectionRow, setSelectionRows, setShowsRootHandles, setToggleClickCount, setUI, setVisibleRowCount, startEditingAtPath, stopEditing, treeDidChange
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
public static final String HOLE_LINE_TREE_PROPERTY
public static final String PAINT_TREE_LINES_PROPERTY
public static final String OPEN_FOLDER_ICON_PROPERTY
public static final String CLOSED_FOLDER_ICON_PROPERTY
public static final String LEAF_ICON_PROPERTY
public XdevTree()
XdevTree(TreeModel)
public XdevTree(XdevTreeNode root)
root
- a XdevTreeNode
object that is the root of the treeXdevTree(TreeModel)
,
XdevTreeNode
public XdevTree(TreeModel model)
XdevTree
that is initialized with model
as the data model and a DefaultXdevTreeManager
.model
- the TreeModel
to use as the data modelJTree(TreeModel)
,
setDefaultTreeManager()
,
DefaultXdevTreeManager
public void setRoot(TreeNode root)
public XdevTreeNode getRoot()
null
if this
XdevTree
has no nodes or the root is not a instance of
XdevTreeNode
public XdevTreeManager getTreeManager()
XdevTreeManager
of this XdevTree
.XdevTreeManager
of this XdevTree
. If no valid
tree manager is available null
is returnedpublic void setTreeManager(XdevTreeManager manager)
XdevTree
. manager
is null the method
setDefaultTreeManager()
is called.manager
- the new XdevTreeManager
public void setDefaultTreeManager()
DefaultXdevTreeManager
as tree manager for this
XdevTree
.public void setModel(VirtualTable vt, String rootsColumnName, Object rootsID, String idColumnName, String ownerColumnName, String captionColumnName, String dataColumnName)
vt
by creating XdevTreeNode
s out of
VirtualTable.VirtualTableRow
s.
This is a synonym for:
setModel(vt,rootsColumnName,rootsID,idColumnName,ownerColumnName,captionColumnName,dataColumnName, false);
For a detailed description see
VirtualTable.createTree(String, Object, String, String, String, String, boolean)
vt
- the data sourcerootsColumnName
- the column name for the root conditionrootsID
- the value for the root conditionidColumnName
- the id column nameownerColumnName
- the referenced owner column namecaptionColumnName
- the column name for the caption of the nodesdataColumnName
- the data column name, or null
if the
VirtualTable.VirtualTableRow
s should be used as data objectpublic void setModel(VirtualTable vt, String rootsColumnName, Object rootsID, String idColumnName, String ownerColumnName, String captionColumnName, String dataColumnName, boolean multipleRoots)
vt
by creating XdevTreeNode
s out of
VirtualTable.VirtualTableRow
s.
For a detailed description see
VirtualTable.createTree(String, Object, String, String, String, String, boolean)
vt
- the data sourcerootsColumnName
- the column name for the root conditionrootsID
- the value for the root conditionidColumnName
- the id column nameownerColumnName
- the referenced owner column namecaptionColumnName
- the column name for the caption of the nodesdataColumnName
- the data column name, or null
if the
VirtualTable.VirtualTableRow
s should be used as data objectmultipleRoots
- true
for a dummy root with multiple sub-roots, or
false
for a single rootpublic void setSelectionMode(int mode)
TreeSelectionModel
.
This may change the selection if the current selection is not valid for
the new mode. For example, if three TreePaths are selected when the mode
is changed to SINGLE_TREE_SELECTION
, only one TreePath will
remain selected. It is up to the particular implementation to decide what
TreePath remains selected.
mode
- the new selection modeTreeSelectionModel.setSelectionMode(int)
public int getSelectionMode()
TreeSelectionModel
:
SINGLE_TREE_SELECTION
CONTIGUOUS_TREE_SELECTION
DISCONTIGUOUS_TREE_SELECTION
int
TreeSelectionModel
public List<?> getSelectionPathAsList()
null
if nothing is selectedpublic void setSelectionPath(Collection<?> path)
path
. If the given
path
is null
the selection is canceled.path
- the Collection
with the paths specifying the
selectionJTree.clearSelection()
public List<List<?>> getSelectionPathsAsList()
null
if nothing is selectedpublic void setSelectionPaths(Collection<?> path) throws IllegalArgumentException
TreePath
s out of path
. TreePath
or a
Collection
.
If path
is null
or empty the selection is
cleared.
path
- the path elementsIllegalArgumentException
- if an element of path isn't either a TreePath
nor a
List
public XdevTreeNode getSelectedNode()
XdevTreeNode
.XdevTreeNode
. If the selected node is
not a XdevTreeNode
or no node is selected
null
is returned.TreePath
public void setSelectedNode(XdevTreeNode node)
node
. If the given
node
is null
the selection is canceled.node
- the XdevTreeNode
specifying the selectionJTree.clearSelection()
public List<DefaultMutableTreeNode> getSelectedNodes()
List
of all selected nodes.public void setSelectedNodes(Collection<? extends DefaultMutableTreeNode> nodes)
Collection
. If the
given Collection
is null
the selection is canceled.nodes
- the Collection
specifying the selectionJTree.clearSelection()
public void expandPath(List<?> path)
path
- the path to expandpublic void expandNode(XdevTreeNode node)
node
is expanded and viewable.node
- the XdevTreeNode
to expandJTree.expandPath(TreePath)
public void expandAll()
XdevTree
.#expandAll(DefaultMutableTreeNode)
public void expandAll(TreeNode node)
DefaultMutableTreeNode
contains.node
- the DefaultMutableTreeNode
identifying the nodesJTree.expandPath(TreePath)
public void collapsePath(Collection<?> path)
path
- the path to collapsepublic void collapseNode(XdevTreeNode node)
node
is collapsed and viewable.node
- the XdevTreeNode
to collapsepublic void collapseAll()
XdevTree
are collapsed.JTree.collapseRow(int)
public XdevTreeNode getNodeAt(int x, int y)
XdevTreeNode
at the specified location.x
- an integer giving the number of pixels horizontally from the
left edge of the display area, minus any left marginy
- an integer giving the number of pixels vertically from the top
of the display area, minus any top marginXdevTreeNode
for the node at that location. If
no valid node is available null
is returned.public void setHoleLineTree(boolean holeLineTree)
holeLineTree
- true
if a tree line should always cover the whole
width of the tree, false
otherwisepublic boolean getHoleLineTree()
holeLineTree
property.holeLineTree
propertysetHoleLineTree(boolean)
public void setPaintTreeLines(boolean paintTreeLines)
paintTreeLines
property. If true
the
tree line is painted. The default value for the
paintTreeLines
property is true
.paintTreeLines
- if true
the tree line is paintedgetPaintTreeLines()
public boolean getPaintTreeLines()
paintTreeLines
property.paintTreeLines
propertysetPaintTreeLines(boolean)
public Icon getOpenFolderIcon()
Icon
of the open folder nodes.Icon
of the open folder nodespublic void setOpenFolderIcon(Icon openFolderIcon)
Icon
which render the open folder nodes.openFolderIcon
- the new open folder iconpublic Icon getClosedFolderIcon()
Icon
of the closed folder nodes.Icon
of the closed folder nodespublic void setClosedFolderIcon(Icon closedFolderIcon)
Icon
which render the closed folder nodes.closedFolderIcon
- the new closed folder iconpublic Icon getLeafIcon()
Icon
of the leaf nodes.Icon
of the leaf nodespublic void setLeafIcon(Icon leafIcon)
Icon
which render the leaf nodes.leafIcon
- the new leaf iconpublic Dimension getPreferredScrollableViewportSize()
getPreferredScrollableViewportSize
in interface Scrollable
getPreferredScrollableViewportSize
in class JTree
public int getTabIndex()
getTabIndex
in interface XdevFocusCycleComponent
public void setTabIndex(int tabIndex)
To exclude this component from the focus cycle set tabindex to -1.
setTabIndex
in interface XdevFocusCycleComponent
tabIndex
- to be setpublic void loadPersistentState(String persistentState)
Components
persistent state.
By calling this method, the passed state information get interpreted and applied on the affected attributes.
loadPersistentState
in interface Persistable
persistentState
- String
representation for the persistent state of the
Component
.savePersistentState()
public String savePersistentState()
String
representation of this Components
persistent state and returns it for being stored.
Persisted properties:
savePersistentState
in interface Persistable
String
containing persistent statepublic String getPersistentId()
If no name is specified the name of the class will be used. This will work only for one persistent instance of the class!
Return a persistent id for thisComponent
.
The following requirements have to be met for the persistent id:
getPersistentId
in interface Persistable
public boolean isPersistenceEnabled()
isPersistenceEnabled
in interface Persistable
true
if a instance of type Persistable
is to be
persisted.public void setPersistenceEnabled(boolean persistenceEnabled)
persistenceEnabled
- the state for this instancepublic void setForeground(Color fg)
setForeground
in class JComponent
Copyright © 2003–2021 XDEV Software. All rights reserved.