| 
							- /*
 -   ==============================================================================
 - 
 -    This file is part of the JUCE library - "Jules' Utility Class Extensions"
 -    Copyright 2004-9 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.
 - 
 -   ==============================================================================
 - */
 - 
 - #include "../../jucer_Headers.h"
 - #include "jucer_DrawableObjectComponent.h"
 - #include "jucer_DrawableEditor.h"
 - #include "../jucer_JucerTreeViewBase.h"
 - #include "jucer_DrawableTreeViewItem.h"
 - 
 - 
 - //==============================================================================
 - class RightHandPanel  : public Component
 - {
 - public:
 -     RightHandPanel (DrawableEditor& editor_)
 -       : editor (editor_)
 -     {
 -         setOpaque (true);
 - 
 -         addAndMakeVisible (tree = new TreeView());
 -         tree->setRootItemVisible (true);
 -         tree->setMultiSelectEnabled (true);
 -         tree->setDefaultOpenness (true);
 -         tree->setColour (TreeView::backgroundColourId, Colours::white);
 -         tree->setIndentSize (15);
 -         tree->setRootItem (DrawableTreeViewItem::createItemForNode (editor, editor.getDocument().getRootDrawableNode()));
 -     }
 - 
 -     ~RightHandPanel()
 -     {
 -         tree->deleteRootItem();
 -         deleteAllChildren();
 -     }
 - 
 -     void paint (Graphics& g)
 -     {
 -         g.fillAll (Colour::greyLevel (0.92f));
 -     }
 - 
 -     void resized()
 -     {
 -         tree->setSize (getWidth(), getHeight());
 -     }
 - 
 - private:
 -     DrawableEditor& editor;
 -     TreeView* tree;
 - };
 - 
 - //==============================================================================
 - DrawableEditor::DrawableEditor (OpenDocumentManager::Document* document,
 -                                 Project* project_,
 -                                 DrawableDocument* drawableDocument_)
 -     : DocumentEditorComponent (document),
 -       project (project_),
 -       drawableDocument (drawableDocument_)
 - {
 -     jassert (drawableDocument_ != 0);
 - 
 -     setOpaque (true);
 - 
 -     addAndMakeVisible (rightHandPanel = new RightHandPanel (*this));
 - 
 -     Canvas* canvas = new Canvas (*this);
 -     addAndMakeVisible (viewport = new Viewport());
 -     viewport->setViewedComponent (canvas);
 -     canvas->createRootObject();
 - }
 - 
 - DrawableEditor::~DrawableEditor()
 - {
 -     deleteAllChildren();
 - }
 - 
 - int64 DrawableEditor::getHashForNode (const ValueTree& node)
 - {
 -     return node ["id"].toString().hashCode64();
 - }
 - 
 - void DrawableEditor::paint (Graphics& g)
 - {
 -     g.fillAll (Colours::white);
 - }
 - 
 - void DrawableEditor::resized()
 - {
 -     rightHandPanel->setBounds (getWidth() - 200, 0, 200, getHeight());
 -     viewport->setBounds (0, 0, rightHandPanel->getX(), getHeight());
 -     getCanvas()->updateSize();
 - }
 - 
 - //==============================================================================
 - DrawableEditor::Canvas::Canvas (DrawableEditor& editor_)
 -    : editor (editor_), border (40)
 - {
 -     origin.setXY (50, 50);
 - }
 - 
 - DrawableEditor::Canvas::~Canvas()
 - {
 -     rootObject = 0;
 - }
 - 
 - void DrawableEditor::Canvas::createRootObject()
 - {
 -     addAndMakeVisible (rootObject = DrawableObjectComponent::create (editor.getDocument().getRootDrawableNode(),
 -                                                                      editor, 0));
 -     rootObject->drawableOriginRelativeToParentTopLeft = origin;
 -     rootObject->reloadFromValueTree();
 - }
 - 
 - void DrawableEditor::Canvas::paint (Graphics& g)
 - {
 - /*    g.setColour (Colours::lightgrey);
 - 
 -     g.fillRect (0, border.getTop() - 1, getWidth(), 1);
 -     g.fillRect (0, getHeight() - border.getBottom(), getWidth(), 1);
 -     g.fillRect (border.getLeft() - 1, 0, 1, getHeight());
 -     g.fillRect (getWidth() - border.getRight(), 0, 1, getHeight());*/
 - 
 -     g.setColour (Colours::grey);
 -     g.fillRect (0, origin.getY(), getWidth(), 1);
 -     g.fillRect (origin.getX(), 0, 1, getHeight());
 - }
 - 
 - void DrawableEditor::Canvas::mouseDown (const MouseEvent& e)
 - {
 -     lasso = 0;
 - 
 -     if (e.mods.isPopupMenu())
 -     {
 -         PopupMenu m;
 -         m.addItem (1, "New Rectangle");
 -         m.addItem (2, "New Circle");
 - 
 -         switch (m.show())
 -         {
 -         case 1:
 -             editor.getDocument().addRectangle();
 -             break;
 - 
 -         case 2:
 -             editor.getDocument().addCircle();
 -             break;
 - 
 -         default:
 -             break;
 -         }
 -     }
 -     else
 -     {
 -         addAndMakeVisible (lasso = new LassoComponent <int64>());
 -         lasso->beginLasso (e, this);
 -     }
 - }
 - 
 - void DrawableEditor::Canvas::mouseDrag (const MouseEvent& e)
 - {
 -     if (lasso != 0)
 -         lasso->dragLasso (e);
 - }
 - 
 - void DrawableEditor::Canvas::mouseUp (const MouseEvent& e)
 - {
 -     if (lasso != 0)
 -     {
 -         lasso->endLasso();
 -         lasso = 0;
 -     }
 - }
 - 
 - void DrawableEditor::Canvas::findLassoItemsInArea (Array <int64>& itemsFound, int x, int y, int width, int height)
 - {
 -     for (int i = getNumChildComponents(); --i >= 0;)
 -     {
 -         DrawableObjectComponent* d = dynamic_cast <DrawableObjectComponent*> (getChildComponent(i));
 - 
 -         if (d != 0)
 -             d->findLassoItemsInArea (itemsFound, Rectangle<int> (x, y, width, height));
 -     }
 - }
 - 
 - SelectedItemSet <int64>& DrawableEditor::Canvas::getLassoSelection()
 - {
 -     return editor.selectedItems;
 - }
 - 
 - void DrawableEditor::Canvas::updateSize()
 - {
 -     Rectangle<int> r (rootObject->getBounds());
 - 
 -     setSize (jmax (editor.viewport->getMaximumVisibleWidth(), r.getRight()),
 -              jmax (editor.viewport->getMaximumVisibleHeight(), r.getBottom()));
 - }
 - 
 - void DrawableEditor::Canvas::childBoundsChanged (Component* child)
 - {
 -     if (child == rootObject)
 -         updateSize();
 - }
 
 
  |