| 
							- /*
 -   ==============================================================================
 - 
 -    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.
 - 
 -   ==============================================================================
 - */
 - 
 - #pragma once
 - 
 - 
 - //==============================================================================
 - class FileGroupInformationComponent  : public Component,
 -                                        private ListBoxModel,
 -                                        private ValueTree::Listener
 - {
 - public:
 -     FileGroupInformationComponent (const Project::Item& group)
 -         : item (group),
 -           header (item.getName(), { getIcons().openFolder, Colours::transparentBlack })
 -     {
 -         list.setHeaderComponent (new ListBoxHeader ( { "File", "Binary Resource", "Xcode Resource", "Compile" },
 -                                                      { 0.4f, 0.2f, 0.2f, 0.2f } ));
 -         list.setModel (this);
 -         list.setColour (ListBox::backgroundColourId, Colours::transparentBlack);
 -         addAndMakeVisible (list);
 -         list.updateContent();
 -         list.setRowHeight (30);
 -         item.state.addListener (this);
 -         lookAndFeelChanged();
 - 
 -         addAndMakeVisible (header);
 -     }
 - 
 -     ~FileGroupInformationComponent()
 -     {
 -         item.state.removeListener (this);
 -     }
 - 
 -     //==============================================================================
 -     void paint (Graphics& g) override
 -     {
 -         g.setColour (findColour (secondaryBackgroundColourId));
 -         g.fillRect (getLocalBounds().reduced (12, 0));
 -     }
 - 
 -     void resized() override
 -     {
 -         auto bounds = getLocalBounds().reduced (12, 0);
 - 
 -         header.setBounds (bounds.removeFromTop (40));
 -         list.setBounds (bounds.reduced (10, 4));
 -     }
 - 
 -     void parentSizeChanged() override
 -     {
 -         setSize (jmax (550, getParentWidth()), getParentHeight());
 -     }
 - 
 -     int getNumRows() override
 -     {
 -         return item.getNumChildren();
 -     }
 - 
 -     void paintListBoxItem (int rowNumber, Graphics& g, int width, int height, bool /*rowIsSelected*/) override
 -     {
 -         g.setColour (findColour (rowNumber % 2 == 0 ? widgetBackgroundColourId
 -                                                     : secondaryWidgetBackgroundColourId));
 -         g.fillRect (0, 0, width, height - 1);
 -     }
 - 
 -     Component* refreshComponentForRow (int rowNumber, bool /*isRowSelected*/, Component* existingComponentToUpdate) override
 -     {
 -         std::unique_ptr<Component> existing (existingComponentToUpdate);
 - 
 -         if (rowNumber < getNumRows())
 -         {
 -             auto child = item.getChild (rowNumber);
 - 
 -             if (existingComponentToUpdate == nullptr
 -                  || dynamic_cast<FileOptionComponent*> (existing.get())->item != child)
 -             {
 -                 existing.reset();
 -                 existing.reset (new FileOptionComponent (child, dynamic_cast<ListBoxHeader*> (list.getHeaderComponent())));
 -             }
 -         }
 - 
 -         return existing.release();
 -     }
 - 
 -     String getGroupPath() const    { return item.getFile().getFullPathName(); }
 - 
 -     //==============================================================================
 -     void valueTreePropertyChanged (ValueTree&, const Identifier&) override    { itemChanged(); }
 -     void valueTreeChildAdded (ValueTree&, ValueTree&) override                { itemChanged(); }
 -     void valueTreeChildRemoved (ValueTree&, ValueTree&, int) override         { itemChanged(); }
 -     void valueTreeChildOrderChanged (ValueTree&, int, int) override           { itemChanged(); }
 -     void valueTreeParentChanged (ValueTree&) override                         { itemChanged(); }
 - 
 - private:
 -     Project::Item item;
 -     ListBox list;
 -     ContentViewHeader header;
 - 
 -     void itemChanged()
 -     {
 -         list.updateContent();
 -         repaint();
 -     }
 - 
 -     //==============================================================================
 -     class FileOptionComponent  : public Component
 -     {
 -     public:
 -         FileOptionComponent (const Project::Item& fileItem, ListBoxHeader* listBoxHeader)
 -             : item (fileItem),
 -               header (listBoxHeader)
 -         {
 -             if (item.isFile())
 -             {
 -                 addAndMakeVisible (compileButton);
 -                 compileButton.getToggleStateValue().referTo (item.getShouldCompileValue());
 - 
 -                 addAndMakeVisible (binaryResourceButton);
 -                 binaryResourceButton.getToggleStateValue().referTo (item.getShouldAddToBinaryResourcesValue());
 - 
 -                 addAndMakeVisible (xcodeResourceButton);
 -                 xcodeResourceButton.getToggleStateValue().referTo (item.getShouldAddToXcodeResourcesValue());
 -             }
 -         }
 - 
 -         void paint (Graphics& g) override
 -         {
 -             if (header != nullptr)
 -             {
 -                 auto textBounds = getLocalBounds().removeFromLeft (roundToInt (header->getProportionAtIndex (0) * getWidth()));
 - 
 -                 auto iconBounds = textBounds.removeFromLeft (25);
 - 
 -                 if (item.isImageFile())
 -                     iconBounds.reduce (5, 5);
 - 
 -                 item.getIcon().withColour (findColour (treeIconColourId)).draw (g, iconBounds.toFloat(), item.isIconCrossedOut());
 - 
 -                 g.setColour (findColour (widgetTextColourId));
 - 
 -                 g.drawText (item.getName(), textBounds, Justification::centredLeft);
 -             }
 -         }
 - 
 -         void resized() override
 -         {
 -             if (header != nullptr)
 -             {
 -                 auto bounds = getLocalBounds();
 -                 auto width = getWidth();
 - 
 -                 bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (0) * width));
 - 
 -                 binaryResourceButton.setBounds (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (1) * width)));
 -                 xcodeResourceButton.setBounds  (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (2) * width)));
 -                 compileButton.setBounds        (bounds.removeFromLeft (roundToInt (header->getProportionAtIndex (3) * width)));
 -             }
 -         }
 - 
 -         Project::Item item;
 - 
 -     private:
 -         ListBoxHeader* header;
 - 
 -         ToggleButton compileButton, binaryResourceButton, xcodeResourceButton;
 -     };
 - 
 -     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (FileGroupInformationComponent)
 - };
 
 
  |