Spec-Zone.ru › OpenJDK 27

Class MetalTreeUI

java.lang.Object
javax.swing.plaf.ComponentUI
javax.swing.plaf.TreeUI
javax.swing.plaf.basic.BasicTreeUI
javax.swing.plaf.metal.MetalTreeUI
public class MetalTreeUI extends BasicTreeUI
The metal look and feel implementation of TreeUI.

MetalTreeUI allows for configuring how to visually render the spacing and delineation between nodes. The following hints are supported:

Descriptions of supported hints: Angled, Horizontal, and None
Hint Description
Angled A line is drawn connecting the child to the parent. For handling of the root node refer to JTree.setRootVisible(boolean) and JTree.setShowsRootHandles(boolean).
Horizontal A horizontal line is drawn dividing the children of the root node.
None Do not draw any visual indication between nodes.

As it is typically impractical to obtain the TreeUI from the JTree and cast to an instance of MetalTreeUI you enable this property via the client property JTree.lineStyle. For example, to switch to Horizontal style you would do: tree.putClientProperty("JTree.lineStyle", "Horizontal");

The default is Angled.

Nested Class Summary

Nested classes/interfaces declared in class BasicTreeUI

BasicTreeUI.CellEditorHandler, BasicTreeUI.ComponentHandler, BasicTreeUI.FocusHandler, BasicTreeUI.KeyHandler, BasicTreeUI.MouseHandler, BasicTreeUI.MouseInputHandler, BasicTreeUI.NodeDimensionsHandler, BasicTreeUI.PropertyChangeHandler, BasicTreeUI.SelectionModelPropertyChangeHandler, BasicTreeUI.TreeCancelEditingAction, BasicTreeUI.TreeExpansionHandler, BasicTreeUI.TreeHomeAction, BasicTreeUI.TreeIncrementAction, BasicTreeUI.TreeModelHandler, BasicTreeUI.TreePageAction, BasicTreeUI.TreeSelectionHandler, BasicTreeUI.TreeToggleAction, BasicTreeUI.TreeTraverseAction
Modifier and Type Class Description
class  BasicTreeUI.CellEditorHandler
Listener responsible for getting cell editing events and updating the tree accordingly.
class  BasicTreeUI.ComponentHandler
Updates the preferred size when scrolling (if necessary).
class  BasicTreeUI.FocusHandler
Repaints the lead selection row when focus is lost/gained.
class  BasicTreeUI.KeyHandler
This is used to get multiple key down events to appropriately generate events.
class  BasicTreeUI.MouseHandler
TreeMouseListener is responsible for updating the selection based on mouse events.
class  BasicTreeUI.MouseInputHandler
MouseInputHandler handles passing all mouse events, including mouse motion events, until the mouse is released to the destination it is constructed with.
class  BasicTreeUI.NodeDimensionsHandler
Class responsible for getting size of node, method is forwarded to BasicTreeUI method.
class  BasicTreeUI.PropertyChangeHandler
PropertyChangeListener for the tree.
class  BasicTreeUI.SelectionModelPropertyChangeHandler
Listener on the TreeSelectionModel, resets the row selection if any of the properties of the model change.
class  BasicTreeUI.TreeCancelEditingAction
ActionListener that invokes cancelEditing when action performed.
class  BasicTreeUI.TreeExpansionHandler
Updates the TreeState in response to nodes expanding/collapsing.
class  BasicTreeUI.TreeHomeAction
TreeHomeAction is used to handle end/home actions.
class  BasicTreeUI.TreeIncrementAction
TreeIncrementAction is used to handle up/down actions.
class  BasicTreeUI.TreeModelHandler
Forwards all TreeModel events to the TreeState.
class  BasicTreeUI.TreePageAction
TreePageAction handles page up and page down events.
class  BasicTreeUI.TreeSelectionHandler
Listens for changes in the selection model and updates the display accordingly.
class  BasicTreeUI.TreeToggleAction
For the first selected row expandedness will be toggled.
class  BasicTreeUI.TreeTraverseAction
TreeTraverseAction is the action used for left/right keys.

Field Summary

Fields declared in class BasicTreeUI

cellEditor, collapsedIcon, createdCellEditor, createdRenderer, currentCellRenderer, depthOffset, drawingCache, editingComponent, editingPath, editingRow, editorHasDifferentSize, expandedIcon, largeModel, lastSelectedRow, leftChildIndent, nodeDimensions, preferredMinSize, preferredSize, rendererPane, rightChildIndent, stopEditingInCompleteEditing, totalChildIndent, tree, treeModel, treeSelectionModel, treeState, validCachedPreferredSize
Modifier and Type Field Description
protected TreeCellEditor cellEditor
Editor for the tree.
protected Icon collapsedIcon
The collapsed icon.
protected boolean createdCellEditor
Set to true if editor that is currently in the tree was created by this instance.
protected boolean createdRenderer
Set to true if the renderer that is currently in the tree was created by this instance.
protected TreeCellRenderer currentCellRenderer
Renderer that is being used to do the actual cell drawing.
protected int depthOffset
How much the depth should be offset to properly calculate x locations.
protected Hashtable<TreePath,Boolean> drawingCache
Used for minimizing the drawing of vertical lines.
protected Component editingComponent
When editing, this will be the Component that is doing the actual editing.
protected TreePath editingPath
Path that is being edited.
protected int editingRow
Row that is being edited.
protected boolean editorHasDifferentSize
Set to true if the editor has a different size than the renderer.
protected Icon expandedIcon
The expanded icon.
protected boolean largeModel
True if doing optimizations for a largeModel.
protected int lastSelectedRow
Index of the row that was last selected.
protected int leftChildIndent
Distance between left margin and where vertical dashes will be drawn.
protected AbstractLayoutCache.NodeDimensions nodeDimensions
Responsible for telling the TreeState the size needed for a node.
protected Dimension preferredMinSize
Minimum preferred size.
protected Dimension preferredSize
Size needed to completely display all the nodes.
protected CellRendererPane rendererPane
Used to paint the TreeCellRenderer.
protected int rightChildIndent
Distance to add to leftChildIndent to determine where cell contents will be drawn.
protected boolean stopEditingInCompleteEditing
Set to false when editing and shouldSelectCell() returns true meaning the node should be selected before editing, used in completeEditing.
protected int totalChildIndent
Total distance that will be indented.
protected JTree tree
Component that we're going to be drawing into.
protected TreeModel treeModel
Used to determine what to display.
protected TreeSelectionModel treeSelectionModel
Model maintaining the selection.
protected AbstractLayoutCache treeState
Object responsible for handling sizing and expanded issues.
protected boolean validCachedPreferredSize
Is the preferredSize valid?

Constructor Summary

Constructor Description
MetalTreeUI()
Constructs the MetalTreeUI.

Method Summary

Modifier and Type Method Description
static ComponentUI createUI(JComponent x)
Constructs the MetalTreeUI.
protected void decodeLineStyle(Object lineStyleFlag)
Converts between the string passed into the client property and the internal representation (currently and int)
protected boolean isLocationInExpandControl(int row, int rowLevel, int mouseX, int mouseY)
Returns true if a point with X coordinate mouseX and Y coordinate mouseY is in expanded control.
protected void paintHorizontalSeparators(Graphics g, JComponent c)
Paints the horizontal separators.

Methods declared in class BasicTreeUI

cancelEditing, checkForClickInExpandControl, completeEditing, completeEditing, completeUIInstall, completeUIUninstall, configureLayoutCache, createCellEditorListener, createCellRendererPane, createComponentListener, createDefaultCellEditor, createDefaultCellRenderer, createFocusListener, createKeyListener, createLayoutCache, createMouseListener, createNodeDimensions, createPropertyChangeListener, createSelectionModelPropertyChangeListener, createTreeExpansionListener, createTreeModelListener, createTreeSelectionListener, drawCentered, drawDashedHorizontalLine, drawDashedVerticalLine, ensureRowsAreVisible, getBaseline, getBaselineResizeBehavior, getCellEditor, getCellRenderer, getClosestPathForLocation, getCollapsedIcon, getDropLineRect, getEditingPath, getExpandedIcon, getHashColor, getHorizontalLegBuffer, getLastChildPath, getLeadSelectionRow, getLeftChildIndent, getMaximumSize, getMinimumSize, getModel, getPathBounds, getPathForRow, getPreferredMinSize, getPreferredSize, getPreferredSize, getRightChildIndent, getRowCount, getRowForPath, getRowHeight, getRowX, getSelectionModel, getShowsRootHandles, getVerticalLegBuffer, handleExpandControlClick, installComponents, installDefaults, installKeyboardActions, installListeners, isDropLine, isEditable, isEditing, isLargeModel, isLeaf, isLocationInExpandControl, isMultiSelectEvent, isRootVisible, isToggleEvent, isToggleSelectionEvent, paintDropLine, paintExpandControl, paintHorizontalLine, paintHorizontalPartOfLeg, paintRow, paintVerticalLine, paintVerticalPartOfLeg, pathWasCollapsed, pathWasExpanded, prepareForUIInstall, prepareForUIUninstall, selectPathForEvent, setCellEditor, setCellRenderer, setCollapsedIcon, setEditable, setExpandedIcon, setHashColor, setLargeModel, setLeftChildIndent, setModel, setPreferredMinSize, setRightChildIndent, setRootVisible, setRowHeight, setSelectionModel, setShowsRootHandles, shouldPaintExpandControl, startEditing, startEditingAtPath, stopEditing, toggleExpandState, uninstallComponents, uninstallDefaults, uninstallKeyboardActions, uninstallListeners, updateCachedPreferredSize, updateCellEditor, updateDepthOffset, updateExpandedDescendants, updateLayoutCacheExpandedNodes, updateLeadSelectionRow, updateRenderer, updateSize
Modifier and Type Method Description
void cancelEditing(JTree tree)
Cancels the current editing session.
protected void checkForClickInExpandControl(TreePath path, int mouseX, int mouseY)
If the mouseX and mouseY are in the expand/collapse region of the row, this will toggle the row.
protected void completeEditing()
Messages to stop the editing session.
protected void completeEditing(boolean messageStop, boolean messageCancel, boolean messageTree)
Stops the editing session.
protected void completeUIInstall()
Invoked from installUI after all the defaults/listeners have been installed.
protected void completeUIUninstall()
Uninstalls UI.
protected void configureLayoutCache()
Resets the TreeState instance based on the tree we're providing the look and feel for.
protected CellEditorListener createCellEditorListener()
Creates a listener to handle events from the current editor.
protected CellRendererPane createCellRendererPane()
Returns the renderer pane that renderer components are placed in.
protected ComponentListener createComponentListener()
Creates and returns a new ComponentHandler.
protected TreeCellEditor createDefaultCellEditor()
Creates a default cell editor.
protected TreeCellRenderer createDefaultCellRenderer()
Returns the default cell renderer that is used to do the stamping of each node.
protected FocusListener createFocusListener()
Creates a listener that is responsible for updating the display when focus is lost/gained.
protected KeyListener createKeyListener()
Creates the listener responsible for getting key events from the tree.
protected AbstractLayoutCache createLayoutCache()
Creates the object responsible for managing what is expanded, as well as the size of nodes.
protected MouseListener createMouseListener()
Creates the listener responsible for updating the selection based on mouse events.
protected AbstractLayoutCache.NodeDimensions createNodeDimensions()
Creates an instance of NodeDimensions that is able to determine the size of a given node in the tree.
protected PropertyChangeListener createPropertyChangeListener()
Creates a listener that is responsible that updates the UI based on how the tree changes.
protected PropertyChangeListener createSelectionModelPropertyChangeListener()
Creates the listener responsible for getting property change events from the selection model.
protected TreeExpansionListener createTreeExpansionListener()
Creates and returns the object responsible for updating the treestate when nodes expanded state changes.
protected TreeModelListener createTreeModelListener()
Returns a listener that can update the tree when the model changes.
protected TreeSelectionListener createTreeSelectionListener()
Creates the listener that updates the display based on selection change methods.
protected void drawCentered(Component c, Graphics graphics, Icon icon, int x, int y)
Draws the icon centered at (x,y).
protected void drawDashedHorizontalLine(Graphics g, int y, int x1, int x2)
Draws a horizontal dashed line.
protected void drawDashedVerticalLine(Graphics g, int x, int y1, int y2)
Draws a vertical dashed line.
protected void ensureRowsAreVisible(int beginRow, int endRow)
Ensures that the rows identified by beginRow through endRow are visible.
int getBaseline(JComponent c, int width, int height)
Returns the baseline.
Component.BaselineResizeBehavior getBaselineResizeBehavior(JComponent c)
Returns an enum indicating how the baseline of the component changes as the size changes.
protected TreeCellEditor getCellEditor()
Returns the editor used to edit entries in the drawn tree component, or null if the tree cannot be edited.
protected TreeCellRenderer getCellRenderer()
Returns the current instance of the TreeCellRenderer that is rendering each cell.
TreePath getClosestPathForLocation(JTree tree, int x, int y)
Returns the path to the node that is closest to x,y.
Icon getCollapsedIcon()
Returns the collapsed icon.
protected Rectangle getDropLineRect(JTree.DropLocation loc)
Returns a unbounding box for the drop line.
TreePath getEditingPath(JTree tree)
Returns the path to the element that is being edited.
Icon getExpandedIcon()
Returns the expanded icon.
protected Color getHashColor()
Returns the hash color.
protected int getHorizontalLegBuffer()
The horizontal element of legs between nodes starts at the right of the left-hand side of the child node by default.
protected TreePath getLastChildPath(TreePath parent)
Returns a path to the last child of parent.
protected int getLeadSelectionRow()
Returns the lead row of the selection.
int getLeftChildIndent()
Returns the left child indent.
Dimension getMaximumSize(JComponent c)
Returns the maximum size for this component, which will be the preferred size if the instance is currently in a JTree, or 0, 0.
Dimension getMinimumSize(JComponent c)
Returns the minimum size for this component.
protected TreeModel getModel()
Returns the tree model.
Rectangle getPathBounds(JTree tree, TreePath path)
Returns the Rectangle enclosing the label portion that the last item in path will be drawn into.
TreePath getPathForRow(JTree tree, int row)
Returns the path for passed in row.
Dimension getPreferredMinSize()
Returns the minimum preferred size.
Dimension getPreferredSize(JComponent c)
Returns the preferred size to properly display the tree, this is a cover method for getPreferredSize(c, true).
Dimension getPreferredSize(JComponent c, boolean checkConsistency)
Returns the preferred size to represent the tree in c.
int getRightChildIndent()
Returns the right child indent.
int getRowCount(JTree tree)
Returns the number of rows that are being displayed.
int getRowForPath(JTree tree, TreePath path)
Returns the row that the last item identified in path is visible at.
protected int getRowHeight()
Returns the height of each row in the drawn tree component.
protected int getRowX(int row, int depth)
Returns the location, along the x-axis, to render a particular row at.
protected TreeSelectionModel getSelectionModel()
Returns the current instance of the TreeSelectionModel which is the model for selections.
protected boolean getShowsRootHandles()
Returns true if the root handles are to be displayed.
protected int getVerticalLegBuffer()
The vertical element of legs between nodes starts at the bottom of the parent node by default.
protected void handleExpandControlClick(TreePath path, int mouseX, int mouseY)
Messaged when the user clicks the particular row, this invokes toggleExpandState.
protected void installComponents()
Installs the subcomponents of the tree, which is the renderer pane.
protected void installDefaults()
Installs default properties.
protected void installKeyboardActions()
Registers keyboard actions.
protected void installListeners()
Registers listeners.
protected boolean isDropLine(JTree.DropLocation loc)
Tells if a DropLocation should be indicated by a line between nodes.
protected boolean isEditable()
Returns whether the drawn tree component should be enabled for editing.
boolean isEditing(JTree tree)
Returns true if the tree is being edited.
protected boolean isLargeModel()
Returns true if large model is set.
protected boolean isLeaf(int row)
Returns true if the node at row is a leaf.
protected boolean isLocationInExpandControl(TreePath path, int mouseX, int mouseY)
Returns true if mouseX and mouseY fall in the area of row that is used to expand/collapse the node and the node at row does not represent a leaf.
protected boolean isMultiSelectEvent(MouseEvent event)
Returning true signifies a mouse event on the node should select from the anchor point.
protected boolean isRootVisible()
Returns whether the root node of the drawn tree component should be displayed.
protected boolean isToggleEvent(MouseEvent event)
Returning true indicates the row under the mouse should be toggled based on the event.
protected boolean isToggleSelectionEvent(MouseEvent event)
Returning true signifies a mouse event on the node should toggle the selection of only the row under mouse.
protected void paintDropLine(Graphics g)
Paints the drop line.
protected void paintExpandControl(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)
Paints the expand (toggle) part of a row.
protected void paintHorizontalLine(Graphics g, JComponent c, int y, int left, int right)
Paints a horizontal line.
protected void paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)
Paints the horizontal part of the leg.
protected void paintRow(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)
Paints the renderer part of a row.
protected void paintVerticalLine(Graphics g, JComponent c, int x, int top, int bottom)
Paints a vertical line.
protected void paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets, TreePath path)
Paints the vertical part of the leg.
protected void pathWasCollapsed(TreePath path)
Messaged from the VisibleTreeNode after it has collapsed.
protected void pathWasExpanded(TreePath path)
Messaged from the VisibleTreeNode after it has been expanded.
protected void prepareForUIInstall()
Invoked after the tree instance variable has been set, but before any defaults/listeners have been installed.
protected void prepareForUIUninstall()
Invoked before uninstallation of UI.
protected void selectPathForEvent(TreePath path, MouseEvent event)
Messaged to update the selection based on a MouseEvent over a particular row.
protected void setCellEditor(TreeCellEditor editor)
Sets the cell editor.
protected void setCellRenderer(TreeCellRenderer tcr)
Sets the TreeCellRenderer to tcr.
void setCollapsedIcon(Icon newG)
Sets the collapsed icon.
protected void setEditable(boolean newValue)
Configures the receiver to allow, or not allow, editing.
void setExpandedIcon(Icon newG)
Sets the expanded icon.
protected void setHashColor(Color color)
Sets the hash color.
protected void setLargeModel(boolean largeModel)
Sets the largeModel.
void setLeftChildIndent(int newAmount)
Sets the left child indent.
protected void setModel(TreeModel model)
Sets the TreeModel.
void setPreferredMinSize(Dimension newSize)
Sets the preferred minimum size.
void setRightChildIndent(int newAmount)
Sets the right child indent.
protected void setRootVisible(boolean newValue)
Sets the root to being visible.
protected void setRowHeight(int rowHeight)
Sets the row height, this is forwarded to the treeState.
protected void setSelectionModel(TreeSelectionModel newLSM)
Resets the selection model.
protected void setShowsRootHandles(boolean newValue)
Determines whether the node handles are to be displayed.
protected boolean shouldPaintExpandControl(TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)
Returns true if the expand (toggle) control should be drawn for the specified row.
protected boolean startEditing(TreePath path, MouseEvent event)
Will start editing for node if there is a cellEditor and shouldSelectCell returns true.
void startEditingAtPath(JTree tree, TreePath path)
Selects the last item in path and tries to edit it.
boolean stopEditing(JTree tree)
Stops the current editing session.
protected void toggleExpandState(TreePath path)
Expands path if it is not expanded, or collapses row if it is expanded.
protected void uninstallComponents()
Uninstalls the renderer pane.
protected void uninstallDefaults()
Uninstalls default properties.
protected void uninstallKeyboardActions()
Unregisters keyboard actions.
protected void uninstallListeners()
Unregisters listeners.
protected void updateCachedPreferredSize()
Updates the preferredSize instance variable, which is returned from getPreferredSize().
protected void updateCellEditor()
Updates the cellEditor based on the editability of the JTree that we're contained in.
protected void updateDepthOffset()
Updates how much each depth should be offset by.
protected void updateExpandedDescendants(TreePath path)
Updates the expanded state of all the descendants of path by getting the expanded descendants from the tree and forwarding to the tree state.
protected void updateLayoutCacheExpandedNodes()
Makes all the nodes that are expanded in JTree expanded in LayoutCache.
protected void updateLeadSelectionRow()
Updates the lead row of the selection.
protected void updateRenderer()
Messaged from the tree we're in when the renderer has changed.
protected void updateSize()
Marks the cached size as being invalid, and messages the tree with treeDidChange.

Methods declared in class ComponentUI

contains, getAccessibleChild, getAccessibleChildrenCount, installUI, paint, uninstallUI, update
Modifier and Type Method Description
boolean contains(JComponent c, int x, int y)
Returns true if the specified x,y location is contained within the look and feel's defined shape of the specified component.
Accessible getAccessibleChild(JComponent c, int i)
Returns the ith Accessible child of the object.
int getAccessibleChildrenCount(JComponent c)
Returns the number of accessible children in the object.
void installUI(JComponent c)
Configures the specified component appropriately for the look and feel.
void paint(Graphics g, JComponent c)
Paints the specified component appropriately for the look and feel.
void uninstallUI(JComponent c)
Reverses configuration which was done on the specified component during installUI.
void update(Graphics g, JComponent c)
Notifies this UI delegate that it is time to paint the specified component.

Methods declared in class Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Modifier and Type Method Description
protected Object clone()
Creates and returns a copy of this object.
boolean equals(Object obj)
Indicates whether some other object is "equal to" this one.
protected void finalize()
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
final Class<?> getClass()
Returns the runtime class of this Object.
int hashCode()
Returns a hash code value for this object.
final void notify()
Wakes up a single thread that is waiting on this object's monitor.
final void notifyAll()
Wakes up all threads that are waiting on this object's monitor.
String toString()
Returns a string representation of the object.
final void wait()
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
final void wait(long timeoutMillis)
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
final void wait(long timeoutMillis, int nanos)
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

Constructor Details

MetalTreeUI

public MetalTreeUI()
Constructs the MetalTreeUI.

Method Details

createUI

public static ComponentUI createUI(JComponent x)
Constructs the MetalTreeUI.
Parameters:
x - a component
Returns:
the instance of the MetalTreeUI

decodeLineStyle

protected void decodeLineStyle(Object lineStyleFlag)
Converts between the string passed into the client property and the internal representation (currently and int)
Parameters:
lineStyleFlag - a flag

isLocationInExpandControl

protected boolean isLocationInExpandControl(int row, int rowLevel, int mouseX, int mouseY)
Returns true if a point with X coordinate mouseX and Y coordinate mouseY is in expanded control.
Parameters:
row - a row
rowLevel - a row level
mouseX - X coordinate
mouseY - Y coordinate
Returns:
true if a point with X coordinate mouseX and Y coordinate mouseY is in expanded control.

paintHorizontalSeparators

protected void paintHorizontalSeparators(Graphics g, JComponent c)
Paints the horizontal separators.
Parameters:
g - an instance of Graphics
c - a component

Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2026, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API