/* ============================================================================== 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. ============================================================================== */ #include "../JuceDemoHeader.h" // these classes are C++11-only #if JUCE_COMPILER_SUPPORTS_INITIALIZER_LISTS struct DemoFlexPanel : public juce::Component { DemoFlexPanel (juce::Colour col, FlexItem& item) : flexItem (item), colour (col) { int x = 70; int y = 3; setupTextEditor (flexOrderEditor, { x, y, 20, 18 }, "0", [this] { flexItem.order = (int) flexOrderEditor.getText().getFloatValue(); }); addLabel ("order", flexOrderEditor); y += 20; setupTextEditor (flexGrowEditor, { x, y, 20, 18 }, "0", [this] { flexItem.flexGrow = flexGrowEditor.getText().getFloatValue(); }); addLabel ("flex-grow", flexGrowEditor); y += 20; setupTextEditor (flexShrinkEditor, { x, y, 20, 18 }, "1", [this] { flexItem.flexShrink = flexShrinkEditor.getText().getFloatValue(); }); addLabel ("flex-shrink", flexShrinkEditor); y += 20; setupTextEditor (flexBasisEditor, { x, y, 33, 18 }, "100", [this] { flexItem.flexBasis = flexBasisEditor.getText().getFloatValue(); }); addLabel ("flex-basis", flexBasisEditor); y += 20; alignSelfCombo.addItem ("auto", 1); alignSelfCombo.addItem ("flex-start", 2); alignSelfCombo.addItem ("flex-end", 3); alignSelfCombo.addItem ("center", 4); alignSelfCombo.addItem ("stretch", 5); alignSelfCombo.setBounds (x, y, 90, 18); alignSelfCombo.onChange = [this] { updateAssignSelf(); }; alignSelfCombo.setSelectedId (5); alignSelfCombo.setColour (ComboBox::outlineColourId, Colours::transparentBlack); addAndMakeVisible (alignSelfCombo); addLabel ("align-self", alignSelfCombo); } void setupTextEditor (TextEditor& te, Rectangle b, StringRef initialText, std::function updateFn) { te.setBounds (b); te.setText (initialText); te.onTextChange = [this, updateFn] { updateFn(); refreshLayout(); }; addAndMakeVisible (te); } void addLabel (const String& name, Component& target) { auto label = new Label (name, name); label->attachToComponent (&target, true); labels.add (label); addAndMakeVisible (label); } void updateAssignSelf() { switch (alignSelfCombo.getSelectedId()) { case 1: flexItem.alignSelf = FlexItem::AlignSelf::autoAlign; break; case 2: flexItem.alignSelf = FlexItem::AlignSelf::flexStart; break; case 3: flexItem.alignSelf = FlexItem::AlignSelf::flexEnd; break; case 4: flexItem.alignSelf = FlexItem::AlignSelf::center; break; case 5: flexItem.alignSelf = FlexItem::AlignSelf::stretch; break; } refreshLayout(); } void refreshLayout() { if (auto parent = getParentComponent()) parent->resized(); } void paint (Graphics& g) override { auto r = getLocalBounds(); g.setColour (colour); g.fillRect (r); g.setColour (Colours::black); g.drawFittedText ("w: " + String (r.getWidth()) + newLine + "h: " + String (r.getHeight()), r.reduced (4), Justification::bottomRight, 2); } void lookAndFeelChanged() override { flexOrderEditor.applyFontToAllText (flexOrderEditor.getFont()); flexGrowEditor.applyFontToAllText (flexGrowEditor.getFont()); flexShrinkEditor.applyFontToAllText (flexShrinkEditor.getFont()); flexBasisEditor.applyFontToAllText (flexBasisEditor.getFont()); } FlexItem& flexItem; TextEditor flexOrderEditor, flexGrowEditor, flexShrinkEditor, flexBasisEditor; ComboBox alignSelfCombo; juce::Colour colour; OwnedArray