|  | /*
  ==============================================================================
   This file is part of the JUCE library - "Jules' Utility Class Extensions"
   Copyright 2004-11 by Raw Material Software Ltd.
  ------------------------------------------------------------------------------
   JUCE can be redistributed and/or modified under the terms of the GNU General
   Public License (Version 2), as published by the Free Software Foundation.
   A copy of the license is included in the JUCE distribution, or can be found
   online at www.gnu.org/licenses.
   JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  ------------------------------------------------------------------------------
   To release a closed-source product which uses JUCE, commercial licenses are
   available: visit www.rawmaterialsoftware.com/juce for more information.
  ==============================================================================
*/
#ifndef __JUCER_PROJECTINFORMATIONCOMPONENT_H_30FFCD07__
#define __JUCER_PROJECTINFORMATIONCOMPONENT_H_30FFCD07__
#include "jucer_Project.h"
#include "../Utility/jucer_JucerTreeViewBase.h"
//==============================================================================
JucerTreeViewBase* createProjectConfigTreeViewRoot (Project& project);
//==============================================================================
class PropertyGroup  : public Component
{
public:
    PropertyGroup()  {}
    void setProperties (const PropertyListBuilder& newProps)
    {
        properties.clear();
        properties.addArray (newProps.components);
        for (int i = properties.size(); --i >= 0;)
            addAndMakeVisible (properties.getUnchecked(i));
    }
    int updateSize (int x, int y, int width)
    {
        int height = 38;
        for (int i = 0; i < properties.size(); ++i)
        {
            PropertyComponent* pp = properties.getUnchecked(i);
            pp->setBounds (10, height, width - 20, pp->getPreferredHeight());
            height += pp->getHeight();
        }
        height += 16;
        setBounds (x, y, width, height);
        return height;
    }
    void paint (Graphics& g)
    {
        const Colour bkg (findColour (mainBackgroundColourId));
        g.setColour (Colours::white.withAlpha (0.35f));
        g.fillRect (0, 30, getWidth(), getHeight() - 38);
        g.setFont (Font (15.0f, Font::bold));
        g.setColour (bkg.contrasting (0.7f));
        g.drawFittedText (getName(), 12, 0, getWidth() - 16, 25, Justification::bottomLeft, 1);
    }
    OwnedArray<PropertyComponent> properties;
private:
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyGroup)
};
//==============================================================================
class PropertyPanelViewport  : public Component
{
public:
    PropertyPanelViewport (Component* content)
    {
        addAndMakeVisible (&viewport);
        addAndMakeVisible (&rolloverHelp);
        viewport.setViewedComponent (content, true);
    }
    void paint (Graphics& g)
    {
        IntrojucerLookAndFeel::fillWithBackgroundTexture (*this, g);
    }
    void resized()
    {
        Rectangle<int> r (getLocalBounds());
        rolloverHelp.setBounds (r.removeFromBottom (70).reduced (10, 0));
        viewport.setBounds (r);
    }
    Viewport viewport;
    RolloverHelpComp rolloverHelp;
private:
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (PropertyPanelViewport)
};
//==============================================================================
class SettingsTreeViewItemBase  : public JucerTreeViewBase,
                                  public ValueTree::Listener
{
public:
    SettingsTreeViewItemBase() {}
    void showSettingsPage (Component* content);
    void closeSettingsPage();
    void deleteAllSelectedItems()
    {
        TreeView* const tree = getOwnerView();
        jassert (tree->getNumSelectedItems() <= 1); // multi-select should be disabled
        if (SettingsTreeViewItemBase* s = dynamic_cast <SettingsTreeViewItemBase*> (tree->getSelectedItem (0)))
            s->deleteItem();
    }
    void itemOpennessChanged (bool isNowOpen)
    {
        if (isNowOpen)
           refreshSubItems();
    }
    void valueTreePropertyChanged (ValueTree&, const Identifier&) {}
    void valueTreeChildAdded (ValueTree&, ValueTree&) {}
    void valueTreeChildRemoved (ValueTree&, ValueTree&) {}
    void valueTreeChildOrderChanged (ValueTree&) {}
    void valueTreeParentChanged (ValueTree&) {}
    static void updateSize (Component& comp, PropertyGroup& group)
    {
        const int width = jmax (550, comp.getParentWidth() - 20);
        int y = 0;
        y += group.updateSize (12, y, width - 12);
        comp.setSize (width, y);
    }
};
#endif   // __JUCER_PROJECTINFORMATIONCOMPONENT_H_30FFCD07__
 |