| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2017 - ROLI Ltd.
 - 
 -    JUCE is an open source library subject to commercial or open-source
 -    licensing.
 - 
 -    By using JUCE, you agree to the terms of both the JUCE 5 End-User License
 -    Agreement and JUCE 5 Privacy Policy (both updated and effective as of the
 -    27th April 2017).
 - 
 -    End User License Agreement: www.juce.com/juce-5-licence
 -    Privacy Policy: www.juce.com/juce-5-privacy-policy
 - 
 -    Or: You may also use this code under the terms of the GPL v3 (see
 -    www.gnu.org/licenses).
 - 
 -    JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
 -    EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
 -    DISCLAIMED.
 - 
 -   ==============================================================================
 - */
 - 
 - 
 - /**
 -     Defines an item in a Grid
 -     @see Grid
 - */
 - class JUCE_API  GridItem
 - {
 - public:
 -     enum class Keyword { autoValue };
 - 
 -     //==============================================================================
 -     /** */
 -     struct Span
 -     {
 -         explicit Span (int numberToUse) noexcept : number (numberToUse)
 -         {
 -             /* Span must be at least one and positive */
 -             jassert (numberToUse > 0);
 -         }
 - 
 -         explicit Span (int numberToUse, const juce::String& nameToUse) : Span (numberToUse)
 -         {
 -             /* Name must not be empty */
 -             jassert (nameToUse.isNotEmpty());
 -             name = nameToUse;
 -         }
 - 
 -         explicit Span (const juce::String& nameToUse) : name (nameToUse)
 -         {
 -             /* Name must not be empty */
 -             jassert (nameToUse.isNotEmpty());
 -         }
 - 
 -         int number = 1;
 -         juce::String name;
 -     };
 - 
 -     //==============================================================================
 -     /** */
 -     struct Property
 -     {
 -         /** */
 -         Property() noexcept;
 - 
 -         /** */
 -         Property (Keyword keyword) noexcept;
 - 
 -         /** */
 -         Property (const char* lineNameToUse) noexcept;
 - 
 -         /** */
 -         Property (const juce::String& lineNameToUse) noexcept;
 - 
 -         /** */
 -         Property (int numberToUse) noexcept;
 - 
 -         /** */
 -         Property (int numberToUse, const juce::String& lineNameToUse) noexcept;
 - 
 -         /** */
 -         Property (Span spanToUse) noexcept;
 - 
 -     private:
 -         bool hasSpan() const noexcept       { return isSpan && ! isAuto; }
 -         bool hasAbsolute() const noexcept   { return ! (isSpan || isAuto);  }
 -         bool hasAuto() const noexcept       { return isAuto; }
 -         bool hasName() const noexcept       { return name.isNotEmpty(); }
 - 
 -         friend class Grid;
 - 
 -         juce::String name;
 -         int number = 1; /** Either an absolute line number or number of lines to span across. */
 -         bool isSpan = false;
 -         bool isAuto = false;
 -     };
 - 
 -     //==============================================================================
 -     /** */
 -     struct StartAndEndProperty { Property start, end; };
 - 
 -     //==============================================================================
 -     /** */
 -     enum class JustifySelf : int { start = 0, end, center, stretch, autoValue };
 -     /** */
 -     enum class AlignSelf   : int { start = 0, end, center, stretch, autoValue };
 - 
 -     /** */
 -     GridItem() noexcept;
 -     /** */
 -     GridItem (juce::Component& componentToUse) noexcept;
 -     /** */
 -     GridItem (juce::Component* componentToUse) noexcept;
 - 
 -     /** Destructor. */
 -     ~GridItem() noexcept;
 - 
 -     //==============================================================================
 -     /** */
 -     juce::Component* associatedComponent = nullptr;
 - 
 -     //==============================================================================
 -     /** */
 -     int order = 0;
 - 
 -     /** */
 -     JustifySelf  justifySelf = JustifySelf::autoValue;
 -     /** */
 -     AlignSelf    alignSelf   = AlignSelf::autoValue;
 - 
 -     /** */
 -     StartAndEndProperty column = { Keyword::autoValue, Keyword::autoValue };
 -     /** */
 -     StartAndEndProperty row    = { Keyword::autoValue, Keyword::autoValue };
 - 
 -     /** */
 -     juce::String area;
 - 
 -     //==============================================================================
 -     enum
 -     {
 -         useDefaultValue = -2, /* TODO: useDefaultValue should be named useAuto */
 -         notAssigned = -1
 -     };
 - 
 -     /* TODO: move all of this into a common class that is shared with the FlexItem */
 -     float width = notAssigned;
 -     float minWidth = 0;
 -     float maxWidth = notAssigned;
 - 
 -     float height = notAssigned;
 -     float minHeight = 0;
 -     float maxHeight = notAssigned;
 - 
 -     struct Margin
 -     {
 -         Margin() noexcept;
 -         Margin (int size) noexcept;
 -         Margin (float size) noexcept;
 -         Margin (float top, float right, float bottom, float left) noexcept;   /**< Creates a margin with these sizes. */
 - 
 -         float left;
 -         float right;
 -         float top;
 -         float bottom;
 -     };
 - 
 -     /** */
 -     Margin margin;
 - 
 -     /** */
 -     juce::Rectangle<float> currentBounds;
 - 
 -     /** Short-hand */
 -     void setArea (Property rowStart, Property columnStart, Property rowEnd, Property columnEnd);
 - 
 -     /** Short-hand, span of 1 by default */
 -     void setArea (Property rowStart, Property columnStart);
 - 
 -     /** Short-hand */
 -     void setArea (const juce::String& areaName);
 - 
 -     /** Short-hand */
 -     GridItem withArea (Property rowStart, Property columnStart, Property rowEnd, Property columnEnd) const noexcept;
 - 
 -     /** Short-hand, span of 1 by default */
 -     GridItem withArea (Property rowStart, Property columnStart) const noexcept;
 - 
 -     /** Short-hand */
 -     GridItem withArea (const juce::String& areaName)  const noexcept;
 - 
 -     /**  */
 -     GridItem withRow (StartAndEndProperty row) const noexcept;
 - 
 -     /**  */
 -     GridItem withColumn (StartAndEndProperty column) const noexcept;
 - 
 -     /** */
 -     GridItem withAlignSelf (AlignSelf newAlignSelf) const noexcept;
 - 
 -     /** */
 -     GridItem withJustifySelf (JustifySelf newJustifySelf) const noexcept;
 - 
 -     /** */
 -     GridItem withWidth (float newWidth) const noexcept;
 - 
 -     /** */
 -     GridItem withHeight (float newHeight) const noexcept;
 - 
 -     /** */
 -     GridItem withSize (float newWidth, float newHeight) const noexcept;
 - 
 -     /** */
 -     GridItem withMargin (Margin newMargin) const noexcept;
 - 
 -     /** Returns a copy of this object with a new order. */
 -     GridItem withOrder (int newOrder) const noexcept;
 - };
 
 
  |