| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library.
 -    Copyright (c) 2020 - Raw Material Software Limited
 - 
 -    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 6 End-User License
 -    Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020).
 - 
 -    End User License Agreement: www.juce.com/juce-6-licence
 -    Privacy Policy: www.juce.com/juce-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.
 - 
 -   ==============================================================================
 - */
 - 
 - namespace juce
 - {
 - 
 - //==============================================================================
 - /**
 -     A panel that holds a list of PropertyComponent objects.
 - 
 -     This panel displays a list of PropertyComponents, and allows them to be organised
 -     into collapsible sections.
 - 
 -     To use, simply create one of these and add your properties to it with addProperties()
 -     or addSection().
 - 
 -     @see PropertyComponent
 - 
 -     @tags{GUI}
 - */
 - class JUCE_API  PropertyPanel  : public Component
 - {
 - public:
 -     //==============================================================================
 -     /** Creates an empty property panel. */
 -     PropertyPanel();
 - 
 -     /** Creates an empty property panel. */
 -     PropertyPanel (const String& name);
 - 
 -     /** Destructor. */
 -     ~PropertyPanel() override;
 - 
 -     //==============================================================================
 -     /** Deletes all property components from the panel. */
 -     void clear();
 - 
 -     /** Adds a set of properties to the panel.
 - 
 -         The components in the list will be owned by this object and will be automatically
 -         deleted later on when no longer needed.
 - 
 -         These properties are added without them being inside a named section. If you
 -         want them to be kept together in a collapsible section, use addSection() instead.
 -     */
 -     void addProperties (const Array<PropertyComponent*>& newPropertyComponents,
 -                         int extraPaddingBetweenComponents = 0);
 - 
 -     /** Adds a set of properties to the panel.
 - 
 -         These properties are added under a section heading with a plus/minus button that
 -         allows it to be opened and closed. If indexToInsertAt is < 0 then it will be added
 -         at the end of the list, or before the given index if the index is non-zero.
 - 
 -         The components in the list will be owned by this object and will be automatically
 -         deleted later on when no longer needed.
 - 
 -         To add properties without them being in a section, use addProperties().
 -     */
 -     void addSection (const String& sectionTitle,
 -                      const Array<PropertyComponent*>& newPropertyComponents,
 -                      bool shouldSectionInitiallyBeOpen = true,
 -                      int indexToInsertAt = -1,
 -                      int extraPaddingBetweenComponents = 0);
 - 
 -     /** Calls the refresh() method of all PropertyComponents in the panel */
 -     void refreshAll() const;
 - 
 -     /** Returns true if the panel contains no properties. */
 -     bool isEmpty() const;
 - 
 -     /** Returns the height that the panel needs in order to display all of its content
 -         without scrolling.
 -     */
 -     int getTotalContentHeight() const;
 - 
 -     //==============================================================================
 -     /** Returns a list of all the names of sections in the panel.
 -         These are the sections that have been added with addSection().
 -     */
 -     StringArray getSectionNames() const;
 - 
 -     /** Returns true if the section at this index is currently open.
 -         The index is from 0 up to the number of items returned by getSectionNames().
 -     */
 -     bool isSectionOpen (int sectionIndex) const;
 - 
 -     /** Opens or closes one of the sections.
 -         The index is from 0 up to the number of items returned by getSectionNames().
 -     */
 -     void setSectionOpen (int sectionIndex, bool shouldBeOpen);
 - 
 -     /** Enables or disables one of the sections.
 -         The index is from 0 up to the number of items returned by getSectionNames().
 -     */
 -     void setSectionEnabled (int sectionIndex, bool shouldBeEnabled);
 - 
 -     /** Remove one of the sections using the section index.
 -         The index is from 0 up to the number of items returned by getSectionNames().
 -     */
 -     void removeSection (int sectionIndex);
 - 
 -     //==============================================================================
 -     /** Saves the current state of open/closed sections so it can be restored later.
 -         To restore this state, use restoreOpennessState().
 -         @see restoreOpennessState
 -     */
 -     std::unique_ptr<XmlElement> getOpennessState() const;
 - 
 -     /** Restores a previously saved arrangement of open/closed sections.
 - 
 -         This will try to restore a snapshot of the panel's state that was created by
 -         the getOpennessState() method. If any of the sections named in the original
 -         XML aren't present, they will be ignored.
 - 
 -         @see getOpennessState
 -     */
 -     void restoreOpennessState (const XmlElement& newState);
 - 
 -     //==============================================================================
 -     /** Sets a message to be displayed when there are no properties in the panel.
 -         The default message is "nothing selected".
 -     */
 -     void setMessageWhenEmpty (const String& newMessage);
 - 
 -     /** Returns the message that is displayed when there are no properties.
 -         @see setMessageWhenEmpty
 -     */
 -     const String& getMessageWhenEmpty() const noexcept;
 - 
 -     //==============================================================================
 -     /** Returns the PropertyPanel's internal Viewport. */
 -     Viewport& getViewport() noexcept        { return viewport; }
 - 
 -     //==============================================================================
 -     /** @internal */
 -     void paint (Graphics&) override;
 -     /** @internal */
 -     void resized() override;
 - 
 - private:
 -     Viewport viewport;
 -     struct SectionComponent;
 -     struct PropertyHolderComponent;
 -     PropertyHolderComponent* propertyHolderComponent;
 -     String messageWhenEmpty;
 - 
 -     void init();
 -     void updatePropHolderLayout() const;
 -     void updatePropHolderLayout (int width) const;
 - 
 -     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyPanel)
 - };
 - 
 - } // namespace juce
 
 
  |