A component that displays a text string, and can optionally become a text editor when clicked.
More...
|
| Label (const String &componentName=String(), const String &labelText=String()) |
| Creates a Label. More...
|
|
| ~Label () override |
| Destructor. More...
|
|
void | setText (const String &newText, NotificationType notification) |
| Changes the label text. More...
|
|
String | getText (bool returnActiveEditorContents=false) const |
| Returns the label's current text. More...
|
|
Value & | getTextValue () noexcept |
| Returns the text content as a Value object. More...
|
|
void | setFont (const Font &newFont) |
| Changes the font to use to draw the text. More...
|
|
Font | getFont () const noexcept |
| Returns the font currently being used. More...
|
|
void | setJustificationType (Justification justification) |
| Sets the style of justification to be used for positioning the text. More...
|
|
Justification | getJustificationType () const noexcept |
| Returns the type of justification, as set in setJustificationType(). More...
|
|
void | setBorderSize (BorderSize< int > newBorderSize) |
| Changes the border that is left between the edge of the component and the text. More...
|
|
BorderSize< int > | getBorderSize () const noexcept |
| Returns the size of the border to be left around the text. More...
|
|
void | attachToComponent (Component *owner, bool onLeft) |
| Makes this label "stick to" another component. More...
|
|
Component * | getAttachedComponent () const |
| If this label has been attached to another component using attachToComponent, this returns the other component. More...
|
|
bool | isAttachedOnLeft () const noexcept |
| If the label is attached to the left of another component, this returns true. More...
|
|
void | setMinimumHorizontalScale (float newScale) |
| Specifies the minimum amount that the font can be squashed horizontally before it starts using ellipsis. More...
|
|
float | getMinimumHorizontalScale () const noexcept |
| Specifies the amount that the font can be squashed horizontally. More...
|
|
void | setKeyboardType (TextInputTarget::VirtualKeyboardType type) noexcept |
| Set a keyboard type for use when the text editor is shown. More...
|
|
void | addListener (Listener *listener) |
| Registers a listener that will be called when the label's text changes. More...
|
|
void | removeListener (Listener *listener) |
| Deregisters a previously-registered listener. More...
|
|
void | setEditable (bool editOnSingleClick, bool editOnDoubleClick=false, bool lossOfFocusDiscardsChanges=false) |
| Makes the label turn into a TextEditor when clicked. More...
|
|
bool | isEditableOnSingleClick () const noexcept |
| Returns true if this option was set using setEditable(). More...
|
|
bool | isEditableOnDoubleClick () const noexcept |
| Returns true if this option was set using setEditable(). More...
|
|
bool | doesLossOfFocusDiscardChanges () const noexcept |
| Returns true if this option has been set in a call to setEditable(). More...
|
|
bool | isEditable () const noexcept |
| Returns true if the user can edit this label's text. More...
|
|
void | showEditor () |
| Makes the editor appear as if the label had been clicked by the user. More...
|
|
void | hideEditor (bool discardCurrentEditorContents) |
| Hides the editor if it was being shown. More...
|
|
bool | isBeingEdited () const noexcept |
| Returns true if the editor is currently focused and active. More...
|
|
TextEditor * | getCurrentTextEditor () const noexcept |
| Returns the currently-visible text editor, or nullptr if none is open. More...
|
|
| Component () noexcept |
| Creates a component. More...
|
|
| ~Component () override |
| Destructor. More...
|
|
| Component (const String &componentName) noexcept |
| Creates a component, setting its name at the same time. More...
|
|
const String & | getName () const noexcept |
| Returns the name of this component. More...
|
|
virtual void | setName (const String &newName) |
| Sets the name of this component. More...
|
|
const String & | getComponentID () const noexcept |
| Returns the ID string that was set by setComponentID(). More...
|
|
void | setComponentID (const String &newID) |
| Sets the component's ID string. More...
|
|
virtual void | setVisible (bool shouldBeVisible) |
| Makes the component visible or invisible. More...
|
|
bool | isVisible () const noexcept |
| Tests whether the component is visible or not. More...
|
|
virtual void | visibilityChanged () |
| Called when this component's visibility changes. More...
|
|
bool | isShowing () const |
| Tests whether this component and all its parents are visible. More...
|
|
virtual void | addToDesktop (int windowStyleFlags, void *nativeWindowToAttachTo=nullptr) |
| Makes this component appear as a window on the desktop. More...
|
|
void | removeFromDesktop () |
| If the component is currently showing on the desktop, this will hide it. More...
|
|
bool | isOnDesktop () const noexcept |
| Returns true if this component is currently showing on the desktop. More...
|
|
ComponentPeer * | getPeer () const |
| Returns the heavyweight window that contains this component. More...
|
|
virtual void | userTriedToCloseWindow () |
| For components on the desktop, this is called if the system wants to close the window. More...
|
|
virtual void | minimisationStateChanged (bool isNowMinimised) |
| Called for a desktop component which has just been minimised or un-minimised. More...
|
|
virtual float | getDesktopScaleFactor () const |
| Returns the default scale factor to use for this component when it is placed on the desktop. More...
|
|
void | toFront (bool shouldAlsoGainFocus) |
| Brings the component to the front of its siblings. More...
|
|
void | toBack () |
| Changes this component's z-order to be at the back of all its siblings. More...
|
|
void | toBehind (Component *other) |
| Changes this component's z-order so that it's just behind another component. More...
|
|
void | setAlwaysOnTop (bool shouldStayOnTop) |
| Sets whether the component should always be kept at the front of its siblings. More...
|
|
bool | isAlwaysOnTop () const noexcept |
| Returns true if this component is set to always stay in front of its siblings. More...
|
|
int | getX () const noexcept |
| Returns the x coordinate of the component's left edge. More...
|
|
int | getY () const noexcept |
| Returns the y coordinate of the top of this component. More...
|
|
int | getWidth () const noexcept |
| Returns the component's width in pixels. More...
|
|
int | getHeight () const noexcept |
| Returns the component's height in pixels. More...
|
|
int | getRight () const noexcept |
| Returns the x coordinate of the component's right-hand edge. More...
|
|
Point< int > | getPosition () const noexcept |
| Returns the component's top-left position as a Point. More...
|
|
int | getBottom () const noexcept |
| Returns the y coordinate of the bottom edge of this component. More...
|
|
Rectangle< int > | getBounds () const noexcept |
| Returns this component's bounding box. More...
|
|
Rectangle< int > | getLocalBounds () const noexcept |
| Returns the component's bounds, relative to its own origin. More...
|
|
Rectangle< int > | getBoundsInParent () const noexcept |
| Returns the area of this component's parent which this component covers. More...
|
|
int | getScreenX () const |
| Returns this component's x coordinate relative the screen's top-left origin. More...
|
|
int | getScreenY () const |
| Returns this component's y coordinate relative the screen's top-left origin. More...
|
|
Point< int > | getScreenPosition () const |
| Returns the position of this component's top-left corner relative to the screen's top-left. More...
|
|
Rectangle< int > | getScreenBounds () const |
| Returns the bounds of this component, relative to the screen's top-left. More...
|
|
Point< int > | getLocalPoint (const Component *sourceComponent, Point< int > pointRelativeToSourceComponent) const |
| Converts a point to be relative to this component's coordinate space. More...
|
|
Point< float > | getLocalPoint (const Component *sourceComponent, Point< float > pointRelativeToSourceComponent) const |
| Converts a point to be relative to this component's coordinate space. More...
|
|
Rectangle< int > | getLocalArea (const Component *sourceComponent, Rectangle< int > areaRelativeToSourceComponent) const |
| Converts a rectangle to be relative to this component's coordinate space. More...
|
|
Point< int > | localPointToGlobal (Point< int > localPoint) const |
| Converts a point relative to this component's top-left into a screen coordinate. More...
|
|
Point< float > | localPointToGlobal (Point< float > localPoint) const |
| Converts a point relative to this component's top-left into a screen coordinate. More...
|
|
Rectangle< int > | localAreaToGlobal (Rectangle< int > localArea) const |
| Converts a rectangle from this component's coordinate space to a screen coordinate. More...
|
|
void | setTopLeftPosition (int x, int y) |
| Moves the component to a new position. More...
|
|
void | setTopLeftPosition (Point< int > newTopLeftPosition) |
| Moves the component to a new position. More...
|
|
void | setTopRightPosition (int x, int y) |
| Moves the component to a new position. More...
|
|
void | setSize (int newWidth, int newHeight) |
| Changes the size of the component. More...
|
|
void | setBounds (int x, int y, int width, int height) |
| Changes the component's position and size. More...
|
|
void | setBounds (Rectangle< int > newBounds) |
| Changes the component's position and size. More...
|
|
void | setBoundsRelative (float proportionalX, float proportionalY, float proportionalWidth, float proportionalHeight) |
| Changes the component's position and size in terms of fractions of its parent's size. More...
|
|
void | setBoundsRelative (Rectangle< float > proportionalArea) |
| Changes the component's position and size in terms of fractions of its parent's size. More...
|
|
void | setBoundsInset (BorderSize< int > borders) |
| Changes the component's position and size based on the amount of space to leave around it. More...
|
|
void | setBoundsToFit (Rectangle< int > targetArea, Justification justification, bool onlyReduceInSize) |
| Positions the component within a given rectangle, keeping its proportions unchanged. More...
|
|
void | setCentrePosition (int x, int y) |
| Changes the position of the component's centre. More...
|
|
void | setCentrePosition (Point< int > newCentrePosition) |
| Changes the position of the component's centre. More...
|
|
void | setCentreRelative (float x, float y) |
| Changes the position of the component's centre. More...
|
|
void | centreWithSize (int width, int height) |
| Changes the component's size and centres it within its parent. More...
|
|
void | setTransform (const AffineTransform &transform) |
| Sets a transform matrix to be applied to this component. More...
|
|
AffineTransform | getTransform () const |
| Returns the transform that is currently being applied to this component. More...
|
|
bool | isTransformed () const noexcept |
| Returns true if a non-identity transform is being applied to this component. More...
|
|
int | proportionOfWidth (float proportion) const noexcept |
| Returns a proportion of the component's width. More...
|
|
int | proportionOfHeight (float proportion) const noexcept |
| Returns a proportion of the component's height. More...
|
|
int | getParentWidth () const noexcept |
| Returns the width of the component's parent. More...
|
|
int | getParentHeight () const noexcept |
| Returns the height of the component's parent. More...
|
|
Rectangle< int > | getParentMonitorArea () const |
| Returns the screen coordinates of the monitor that contains this component. More...
|
|
int | getNumChildComponents () const noexcept |
| Returns the number of child components that this component contains. More...
|
|
Component * | getChildComponent (int index) const noexcept |
| Returns one of this component's child components, by it index. More...
|
|
int | getIndexOfChildComponent (const Component *child) const noexcept |
| Returns the index of this component in the list of child components. More...
|
|
const Array< Component * > & | getChildren () const noexcept |
| Provides access to the underlying array of child components. More...
|
|
Component * | findChildWithID (StringRef componentID) const noexcept |
| Looks for a child component with the specified ID. More...
|
|
void | addChildComponent (Component *child, int zOrder=-1) |
| Adds a child component to this one. More...
|
|
void | addChildComponent (Component &child, int zOrder=-1) |
| Adds a child component to this one. More...
|
|
void | addAndMakeVisible (Component *child, int zOrder=-1) |
| Adds a child component to this one, and also makes the child visible if it isn't already. More...
|
|
void | addAndMakeVisible (Component &child, int zOrder=-1) |
| Adds a child component to this one, and also makes the child visible if it isn't already. More...
|
|
void | addChildAndSetID (Component *child, const String &componentID) |
| Adds a child component to this one, makes it visible, and sets its component ID. More...
|
|
void | removeChildComponent (Component *childToRemove) |
| Removes one of this component's child-components. More...
|
|
Component * | removeChildComponent (int childIndexToRemove) |
| Removes one of this component's child-components by index. More...
|
|
void | removeAllChildren () |
| Removes all this component's children. More...
|
|
void | deleteAllChildren () |
| Removes and deletes all of this component's children. More...
|
|
Component * | getParentComponent () const noexcept |
| Returns the component which this component is inside. More...
|
|
template<class TargetClass > |
TargetClass * | findParentComponentOfClass () const |
| Searches the parent components for a component of a specified class. More...
|
|
Component * | getTopLevelComponent () const noexcept |
| Returns the highest-level component which contains this one or its parents. More...
|
|
bool | isParentOf (const Component *possibleChild) const noexcept |
| Checks whether a component is anywhere inside this component or its children. More...
|
|
virtual void | parentHierarchyChanged () |
| Called to indicate that the component's parents have changed. More...
|
|
virtual void | childrenChanged () |
| Subclasses can use this callback to be told when children are added or removed, or when their z-order changes. More...
|
|
virtual bool | hitTest (int x, int y) |
| Tests whether a given point is inside the component. More...
|
|
void | setInterceptsMouseClicks (bool allowClicksOnThisComponent, bool allowClicksOnChildComponents) noexcept |
| Changes the default return value for the hitTest() method. More...
|
|
void | getInterceptsMouseClicks (bool &allowsClicksOnThisComponent, bool &allowsClicksOnChildComponents) const noexcept |
| Retrieves the current state of the mouse-click interception flags. More...
|
|
bool | contains (Point< int > localPoint) |
| Returns true if a given point lies within this component or one of its children. More...
|
|
bool | reallyContains (Point< int > localPoint, bool returnTrueIfWithinAChild) |
| Returns true if a given point lies in this component, taking any overlapping siblings into account. More...
|
|
Component * | getComponentAt (int x, int y) |
| Returns the component at a certain point within this one. More...
|
|
Component * | getComponentAt (Point< int > position) |
| Returns the component at a certain point within this one. More...
|
|
void | repaint () |
| Marks the whole component as needing to be redrawn. More...
|
|
void | repaint (int x, int y, int width, int height) |
| Marks a subsection of this component as needing to be redrawn. More...
|
|
void | repaint (Rectangle< int > area) |
| Marks a subsection of this component as needing to be redrawn. More...
|
|
void | setBufferedToImage (bool shouldBeBuffered) |
| Makes the component use an internal buffer to optimise its redrawing. More...
|
|
Image | createComponentSnapshot (Rectangle< int > areaToGrab, bool clipImageToComponentBounds=true, float scaleFactor=1.0f) |
| Generates a snapshot of part of this component. More...
|
|
void | paintEntireComponent (Graphics &context, bool ignoreAlphaLevel) |
| Draws this component and all its subcomponents onto the specified graphics context. More...
|
|
void | setPaintingIsUnclipped (bool shouldPaintWithoutClipping) noexcept |
| This allows you to indicate that this component doesn't require its graphics context to be clipped when it is being painted. More...
|
|
bool | isPaintingUnclipped () const noexcept |
| Returns true if this component doesn't require its graphics context to be clipped when it is being painted. More...
|
|
void | setComponentEffect (ImageEffectFilter *newEffect) |
| Adds an effect filter to alter the component's appearance. More...
|
|
ImageEffectFilter * | getComponentEffect () const noexcept |
| Returns the current component effect. More...
|
|
LookAndFeel & | getLookAndFeel () const noexcept |
| Finds the appropriate look-and-feel to use for this component. More...
|
|
void | setLookAndFeel (LookAndFeel *newLookAndFeel) |
| Sets the look and feel to use for this component. More...
|
|
virtual void | lookAndFeelChanged () |
| Called to let the component react to a change in the look-and-feel setting. More...
|
|
void | sendLookAndFeelChange () |
| Calls the lookAndFeelChanged() method in this component and all its children. More...
|
|
void | setOpaque (bool shouldBeOpaque) |
| Indicates whether any parts of the component might be transparent. More...
|
|
bool | isOpaque () const noexcept |
| Returns true if no parts of this component are transparent. More...
|
|
void | setBroughtToFrontOnMouseClick (bool shouldBeBroughtToFront) noexcept |
| Indicates whether the component should be brought to the front when clicked. More...
|
|
bool | isBroughtToFrontOnMouseClick () const noexcept |
| Indicates whether the component should be brought to the front when clicked-on. More...
|
|
void | setWantsKeyboardFocus (bool wantsFocus) noexcept |
| Sets a flag to indicate whether this component needs keyboard focus or not. More...
|
|
bool | getWantsKeyboardFocus () const noexcept |
| Returns true if the component is interested in getting keyboard focus. More...
|
|
void | setMouseClickGrabsKeyboardFocus (bool shouldGrabFocus) |
| Chooses whether a click on this component automatically grabs the focus. More...
|
|
bool | getMouseClickGrabsKeyboardFocus () const noexcept |
| Returns the last value set with setMouseClickGrabsKeyboardFocus(). More...
|
|
void | grabKeyboardFocus () |
| Tries to give keyboard focus to this component. More...
|
|
bool | hasKeyboardFocus (bool trueIfChildIsFocused) const |
| Returns true if this component currently has the keyboard focus. More...
|
|
void | moveKeyboardFocusToSibling (bool moveToNext) |
| Tries to move the keyboard focus to one of this component's siblings. More...
|
|
int | getExplicitFocusOrder () const |
| Returns the focus order of this component, if one has been specified. More...
|
|
void | setExplicitFocusOrder (int newFocusOrderIndex) |
| Sets the index used in determining the order in which focusable components should be traversed. More...
|
|
void | setFocusContainer (bool shouldBeFocusContainer) noexcept |
| Indicates whether this component is a parent for components that can have their focus traversed. More...
|
|
bool | isFocusContainer () const noexcept |
| Returns true if this component has been marked as a focus container. More...
|
|
bool | isEnabled () const noexcept |
| Returns true if the component (and all its parents) are enabled. More...
|
|
void | setEnabled (bool shouldBeEnabled) |
| Enables or disables this component. More...
|
|
float | getAlpha () const noexcept |
| Returns the component's current transparency level. More...
|
|
void | setAlpha (float newAlpha) |
| Changes the transparency of this component. More...
|
|
virtual void | alphaChanged () |
| Called when setAlpha() is used to change the alpha value of this component. More...
|
|
void | setMouseCursor (const MouseCursor &cursorType) |
| Changes the mouse cursor shape to use when the mouse is over this component. More...
|
|
virtual MouseCursor | getMouseCursor () |
| Returns the mouse cursor shape to use when the mouse is over this component. More...
|
|
void | updateMouseCursor () const |
| Forces the current mouse cursor to be updated. More...
|
|
virtual void | paintOverChildren (Graphics &g) |
| Components can override this method to draw over the top of their children. More...
|
|
void | mouseMove (const MouseEvent &event) override |
| Called when the mouse moves inside a component. More...
|
|
void | mouseEnter (const MouseEvent &event) override |
| Called when the mouse first enters a component. More...
|
|
void | mouseExit (const MouseEvent &event) override |
| Called when the mouse moves out of a component. More...
|
|
void | mouseDown (const MouseEvent &event) override |
| Called when a mouse button is pressed. More...
|
|
void | mouseDrag (const MouseEvent &event) override |
| Called when the mouse is moved while a button is held down. More...
|
|
void | mouseWheelMove (const MouseEvent &event, const MouseWheelDetails &wheel) override |
| Called when the mouse-wheel is moved. More...
|
|
void | mouseMagnify (const MouseEvent &event, float scaleFactor) override |
| Called when a pinch-to-zoom mouse-gesture is used. More...
|
|
void | setRepaintsOnMouseActivity (bool shouldRepaint) noexcept |
| Causes automatic repaints when the mouse enters or exits this component. More...
|
|
void | addMouseListener (MouseListener *newListener, bool wantsEventsForAllNestedChildComponents) |
| Registers a listener to be told when mouse events occur in this component. More...
|
|
void | removeMouseListener (MouseListener *listenerToRemove) |
| Deregisters a mouse listener. More...
|
|
void | addKeyListener (KeyListener *newListener) |
| Adds a listener that wants to hear about keypresses that this component receives. More...
|
|
void | removeKeyListener (KeyListener *listenerToRemove) |
| Removes a previously-registered key listener. More...
|
|
virtual bool | keyPressed (const KeyPress &key) |
| Called when a key is pressed. More...
|
|
virtual bool | keyStateChanged (bool isKeyDown) |
| Called when a key is pressed or released. More...
|
|
virtual void | modifierKeysChanged (const ModifierKeys &modifiers) |
| Called when a modifier key is pressed or released. More...
|
|
virtual void | focusLost (FocusChangeType cause) |
| Called to indicate that this component has just lost the keyboard focus. More...
|
|
virtual void | focusOfChildComponentChanged (FocusChangeType cause) |
| Called to indicate a change in whether or not this component is the parent of the currently-focused component. More...
|
|
bool | isMouseOver (bool includeChildren=false) const |
| Returns true if the mouse is currently over this component. More...
|
|
bool | isMouseButtonDown (bool includeChildren=false) const |
| Returns true if the mouse button is currently held down in this component. More...
|
|
bool | isMouseOverOrDragging (bool includeChildren=false) const |
| True if the mouse is over this component, or if it's being dragged in this component. More...
|
|
Point< int > | getMouseXYRelative () const |
| Returns the mouse's current position, relative to this component. More...
|
|
virtual void | moved () |
| Called when this component's position has been changed. More...
|
|
virtual void | childBoundsChanged (Component *child) |
| Called when one of this component's children is moved or resized. More...
|
|
virtual void | parentSizeChanged () |
| Called when this component's immediate parent has been resized. More...
|
|
virtual void | broughtToFront () |
| Called when this component has been moved to the front of its siblings. More...
|
|
void | addComponentListener (ComponentListener *newListener) |
| Adds a listener to be told about changes to the component hierarchy or position. More...
|
|
void | removeComponentListener (ComponentListener *listenerToRemove) |
| Removes a component listener. More...
|
|
void | postCommandMessage (int commandId) |
| Dispatches a numbered message to this component. More...
|
|
virtual void | handleCommandMessage (int commandId) |
| Called to handle a command that was sent by postCommandMessage(). More...
|
|
int | runModalLoop () |
| Runs a component modally, waiting until the loop terminates. More...
|
|
void | enterModalState (bool takeKeyboardFocus=true, ModalComponentManager::Callback *callback=nullptr, bool deleteWhenDismissed=false) |
| Puts the component into a modal state. More...
|
|
void | exitModalState (int returnValue) |
| Ends a component's modal state. More...
|
|
bool | isCurrentlyModal (bool onlyConsiderForemostModalComponent=true) const noexcept |
| Returns true if this component is the modal one. More...
|
|
bool | isCurrentlyBlockedByAnotherModalComponent () const |
| Checks whether there's a modal component somewhere that's stopping this one from receiving messages. More...
|
|
virtual bool | canModalEventBeSentToComponent (const Component *targetComponent) |
| When a component is modal, this callback allows it to choose which other components can still receive events. More...
|
|
NamedValueSet & | getProperties () noexcept |
| Returns the set of properties that belong to this component. More...
|
|
const NamedValueSet & | getProperties () const noexcept |
| Returns the set of properties that belong to this component. More...
|
|
Colour | findColour (int colourID, bool inheritFromParent=false) const |
| Looks for a colour that has been registered with the given colour ID number. More...
|
|
void | setColour (int colourID, Colour newColour) |
| Registers a colour to be used for a particular purpose. More...
|
|
void | removeColour (int colourID) |
| If a colour has been set with setColour(), this will remove it. More...
|
|
bool | isColourSpecified (int colourID) const |
| Returns true if the specified colour ID has been explicitly set for this component using the setColour() method. More...
|
|
void | copyAllExplicitColoursTo (Component &target) const |
| This looks for any colours that have been specified for this component, and copies them to the specified target component. More...
|
|
void * | getWindowHandle () const |
| Returns the underlying native window handle for this component. More...
|
|
Positioner * | getPositioner () const noexcept |
| Returns the Positioner object that has been set for this component. More...
|
|
void | setPositioner (Positioner *newPositioner) |
| Sets a new Positioner object for this component. More...
|
|
void | setCachedComponentImage (CachedComponentImage *newCachedImage) |
| Gives the component a CachedComponentImage that should be used to buffer its painting. More...
|
|
CachedComponentImage * | getCachedComponentImage () const noexcept |
| Returns the object that was set by setCachedComponentImage(). More...
|
|
void | setViewportIgnoreDragFlag (bool ignoreDrag) noexcept |
| Sets a flag to indicate whether mouse drag events on this Component should be ignored when it is inside a Viewport with drag-to-scroll functionality enabled. More...
|
|
bool | getViewportIgnoreDragFlag () const noexcept |
| Retrieves the current state of the Viewport drag-to-scroll functionality flag. More...
|
|
virtual | ~MouseListener ()=default |
| Destructor. More...
|
|
| ~SettableTooltipClient () override=default |
| Destructor. More...
|
|
virtual void | setTooltip (const String &newTooltip) |
| Assigns a new tooltip to this object. More...
|
|
String | getTooltip () override |
| Returns the tooltip assigned to this object. More...
|
|
virtual | ~TooltipClient ()=default |
| Destructor. More...
|
|