mirror of https://github.com/dcoredump/dexed.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.3 KiB
93 lines
3.3 KiB
11 years ago
|
/*
|
||
|
==============================================================================
|
||
|
|
||
|
This file is part of the JUCE library.
|
||
|
Copyright (c) 2013 - Raw Material Software Ltd.
|
||
|
|
||
|
Permission is granted to use this software under the terms of either:
|
||
|
a) the GPL v2 (or any later version)
|
||
|
b) the Affero GPL v3
|
||
|
|
||
|
Details of these licenses can be found 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.juce.com for more information.
|
||
|
|
||
|
==============================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef JUCE_RELATIVECOORDINATEPOSITIONER_H_INCLUDED
|
||
|
#define JUCE_RELATIVECOORDINATEPOSITIONER_H_INCLUDED
|
||
|
|
||
|
|
||
|
//==============================================================================
|
||
|
/**
|
||
|
Base class for Component::Positioners that are based upon relative coordinates.
|
||
|
*/
|
||
|
class JUCE_API RelativeCoordinatePositionerBase : public Component::Positioner,
|
||
|
public ComponentListener,
|
||
|
public MarkerList::Listener
|
||
|
{
|
||
|
public:
|
||
|
RelativeCoordinatePositionerBase (Component& component);
|
||
|
~RelativeCoordinatePositionerBase();
|
||
|
|
||
|
void componentMovedOrResized (Component&, bool, bool);
|
||
|
void componentParentHierarchyChanged (Component&);
|
||
|
void componentChildrenChanged (Component& component);
|
||
|
void componentBeingDeleted (Component& component);
|
||
|
void markersChanged (MarkerList*);
|
||
|
void markerListBeingDeleted (MarkerList* markerList);
|
||
|
|
||
|
void apply();
|
||
|
|
||
|
bool addCoordinate (const RelativeCoordinate& coord);
|
||
|
bool addPoint (const RelativePoint& point);
|
||
|
|
||
|
//==============================================================================
|
||
|
/** Used for resolving a RelativeCoordinate expression in the context of a component. */
|
||
|
class ComponentScope : public Expression::Scope
|
||
|
{
|
||
|
public:
|
||
|
ComponentScope (Component& component);
|
||
|
|
||
|
Expression getSymbolValue (const String& symbol) const;
|
||
|
void visitRelativeScope (const String& scopeName, Visitor& visitor) const;
|
||
|
String getScopeUID() const;
|
||
|
|
||
|
protected:
|
||
|
Component& component;
|
||
|
|
||
|
Component* findSiblingComponent (const String& componentID) const;
|
||
|
|
||
|
private:
|
||
|
JUCE_DECLARE_NON_COPYABLE (ComponentScope)
|
||
|
};
|
||
|
|
||
|
protected:
|
||
|
virtual bool registerCoordinates() = 0;
|
||
|
virtual void applyToComponentBounds() = 0;
|
||
|
|
||
|
private:
|
||
|
class DependencyFinderScope;
|
||
|
friend class DependencyFinderScope;
|
||
|
Array <Component*> sourceComponents;
|
||
|
Array <MarkerList*> sourceMarkerLists;
|
||
|
bool registeredOk;
|
||
|
|
||
|
void registerComponentListener (Component& comp);
|
||
|
void registerMarkerListListener (MarkerList* const list);
|
||
|
void unregisterListeners();
|
||
|
|
||
|
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (RelativeCoordinatePositionerBase)
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // JUCE_RELATIVECOORDINATEPOSITIONER_H_INCLUDED
|