Browse Source

Added a way to specify some space between PropertyComponents in a PropertyPanel

tags/2021-05-28
ed 4 years ago
parent
commit
0f975ee482
2 changed files with 27 additions and 10 deletions
  1. +23
    -8
      modules/juce_gui_basics/properties/juce_PropertyPanel.cpp
  2. +4
    -2
      modules/juce_gui_basics/properties/juce_PropertyPanel.h

+ 23
- 8
modules/juce_gui_basics/properties/juce_PropertyPanel.cpp View File

@@ -30,9 +30,11 @@ struct PropertyPanel::SectionComponent : public Component
{ {
SectionComponent (const String& sectionTitle, SectionComponent (const String& sectionTitle,
const Array<PropertyComponent*>& newProperties, const Array<PropertyComponent*>& newProperties,
bool sectionIsOpen)
bool sectionIsOpen,
int extraPadding)
: Component (sectionTitle), : Component (sectionTitle),
isOpen (sectionIsOpen)
isOpen (sectionIsOpen),
padding (extraPadding)
{ {
lookAndFeelChanged(); lookAndFeelChanged();
@@ -63,7 +65,7 @@ struct PropertyPanel::SectionComponent : public Component
for (auto* propertyComponent : propertyComps) for (auto* propertyComponent : propertyComps)
{ {
propertyComponent->setBounds (1, y, getWidth() - 2, propertyComponent->getPreferredHeight()); propertyComponent->setBounds (1, y, getWidth() - 2, propertyComponent->getPreferredHeight());
y = propertyComponent->getBottom();
y = propertyComponent->getBottom() + padding;
} }
} }
@@ -78,10 +80,16 @@ struct PropertyPanel::SectionComponent : public Component
{ {
auto y = titleHeight; auto y = titleHeight;
if (isOpen)
auto numComponents = propertyComps.size();
if (numComponents > 0 && isOpen)
{
for (auto* propertyComponent : propertyComps) for (auto* propertyComponent : propertyComps)
y += propertyComponent->getPreferredHeight(); y += propertyComponent->getPreferredHeight();
y += (numComponents - 1) * padding;
}
return y; return y;
} }
@@ -122,6 +130,7 @@ struct PropertyPanel::SectionComponent : public Component
OwnedArray<PropertyComponent> propertyComps; OwnedArray<PropertyComponent> propertyComps;
int titleHeight; int titleHeight;
bool isOpen; bool isOpen;
int padding;
JUCE_DECLARE_NON_COPYABLE (SectionComponent) JUCE_DECLARE_NON_COPYABLE (SectionComponent)
}; };
@@ -241,26 +250,32 @@ int PropertyPanel::getTotalContentHeight() const
return propertyHolderComponent->getHeight(); return propertyHolderComponent->getHeight();
} }
void PropertyPanel::addProperties (const Array<PropertyComponent*>& newProperties)
void PropertyPanel::addProperties (const Array<PropertyComponent*>& newProperties,
int extraPaddingBetweenComponents)
{ {
if (isEmpty()) if (isEmpty())
repaint(); repaint();
propertyHolderComponent->insertSection (-1, new SectionComponent (String(), newProperties, true));
propertyHolderComponent->insertSection (-1, new SectionComponent ({}, newProperties, true, extraPaddingBetweenComponents));
updatePropHolderLayout(); updatePropHolderLayout();
} }
void PropertyPanel::addSection (const String& sectionTitle, void PropertyPanel::addSection (const String& sectionTitle,
const Array<PropertyComponent*>& newProperties, const Array<PropertyComponent*>& newProperties,
bool shouldBeOpen, bool shouldBeOpen,
int indexToInsertAt)
int indexToInsertAt,
int extraPaddingBetweenComponents)
{ {
jassert (sectionTitle.isNotEmpty()); jassert (sectionTitle.isNotEmpty());
if (isEmpty()) if (isEmpty())
repaint(); repaint();
propertyHolderComponent->insertSection (indexToInsertAt, new SectionComponent (sectionTitle, newProperties, shouldBeOpen));
propertyHolderComponent->insertSection (indexToInsertAt, new SectionComponent (sectionTitle,
newProperties,
shouldBeOpen,
extraPaddingBetweenComponents));
updatePropHolderLayout(); updatePropHolderLayout();
} }


+ 4
- 2
modules/juce_gui_basics/properties/juce_PropertyPanel.h View File

@@ -65,7 +65,8 @@ public:
These properties are added without them being inside a named section. If you 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. want them to be kept together in a collapsible section, use addSection() instead.
*/ */
void addProperties (const Array<PropertyComponent*>& newPropertyComponents);
void addProperties (const Array<PropertyComponent*>& newPropertyComponents,
int extraPaddingBetweenComponents = 0);
/** Adds a set of properties to the panel. /** Adds a set of properties to the panel.
@@ -81,7 +82,8 @@ public:
void addSection (const String& sectionTitle, void addSection (const String& sectionTitle,
const Array<PropertyComponent*>& newPropertyComponents, const Array<PropertyComponent*>& newPropertyComponents,
bool shouldSectionInitiallyBeOpen = true, bool shouldSectionInitiallyBeOpen = true,
int indexToInsertAt = -1);
int indexToInsertAt = -1,
int extraPaddingBetweenComponents = 0);
/** Calls the refresh() method of all PropertyComponents in the panel */ /** Calls the refresh() method of all PropertyComponents in the panel */
void refreshAll() const; void refreshAll() const;


Loading…
Cancel
Save