/* ============================================================================== 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. ============================================================================== */ #ifndef __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ #define __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__ #include "../../model/jucer_ComponentDocument.h" #include "../jucer_DocumentEditorComponent.h" class ComponentEditor; //============================================================================== class ComponentEditorCanvas : public Component, public ValueTree::Listener, public Timer { public: //============================================================================== ComponentEditorCanvas (ComponentEditor& editor_); ~ComponentEditorCanvas(); //============================================================================== ComponentEditor& getEditor(); ComponentDocument& getDocument(); typedef SelectedItemSet SelectedItems; SelectedItems& getSelection(); class ComponentHolder; ComponentHolder* getComponentHolder() const; //============================================================================== void timerCallback(); void paint (Graphics& g); void resized(); void updateComponents(); const Rectangle getContentArea() const; void drawXAxis (Graphics& g, const Rectangle& r); void drawYAxis (Graphics& g, const Rectangle& r); //============================================================================== void valueTreePropertyChanged (ValueTree&, const var::identifier&) { updateComponents(); } void valueTreeChildrenChanged (ValueTree& treeWhoseChildHasChanged) { updateComponents(); } void valueTreeParentChanged (ValueTree& treeWhoseParentHasChanged) {} //============================================================================== void getSelectedItemProperties (Array & props); void deleteSelection(); void selectionToFront(); void selectionToBack(); //============================================================================== void showSizeGuides(); void hideSizeGuides(); //============================================================================== class DragOperation; void beginDrag (const MouseEvent& e, const ResizableBorderComponent::Zone& zone); void continueDrag (const MouseEvent& e); void endDrag (const MouseEvent& e); private: ComponentEditor& editor; const BorderSize border; ScopedPointer dragger; //============================================================================== class OverlayItemComponent : public Component { public: OverlayItemComponent (ComponentEditorCanvas& canvas_); void setBoundsInTargetSpace (const Rectangle& r); ComponentDocument& getDocument() { return canvas.getDocument(); } protected: ComponentEditorCanvas& canvas; }; friend class OverlayItemComponent; class ComponentResizeFrame; class MarkerComponent; class WholeComponentResizer; class OverlayComponent; //============================================================================== ComponentHolder* componentHolder; OverlayComponent* overlay; WholeComponentResizer* resizeFrame; SelectedItems selection; Component* getComponentForUID (const uint32 uid) const; const Array getSelectedComps() const; const Array getUnselectedComps() const; }; #endif // __JUCER_COMPONENTEDITORCANVAS_H_37C33B56__