1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
#pragma once
#include "scene/Node.h"
#include "iselectiongroup.h"
#include "iundo.h"
namespace scene
{
/**
* \brief
* Subclass of scene::Node which implements the Selectable interface.
*
* The GlobalSelectionSystem will be notified of selection changes.
*/
class SelectableNode :
public scene::Node,
public IGroupSelectable,
public IUndoable
{
private:
// Current selection state
bool _selected;
// The groups this node is a member of. The last value in the list
// represents the group this node has been added to most recently
GroupIds _groups;
IUndoStateSaver* _undoStateSaver;
public:
SelectableNode();
SelectableNode(const SelectableNode& other);
virtual ~SelectableNode();
virtual void onInsertIntoScene(IMapRootNode& root) override;
// override scene::Inode::onRemoveFromScene to de-select self
virtual void onRemoveFromScene(IMapRootNode& root) override;
/**
* \brief
* Set the selection state.
*/
virtual void setSelected(bool select) override;
virtual void addToGroup(std::size_t groupId) override;
virtual void removeFromGroup(std::size_t groupId) override;
virtual bool isGroupMember() override;
virtual std::size_t getMostRecentGroupId() override;
virtual const GroupIds& getGroupIds() const override;
virtual void setSelected(bool select, bool changeGroupStatus) override;
virtual bool isSelected() const override;
IUndoMementoPtr exportState() const override;
void importState(const IUndoMementoPtr& state) override;
protected:
/**
* \brief
* Invoked when the selection status changes.
*/
virtual void onSelectionStatusChange(bool changeGroupStatus);
private:
void connectUndoSystem(IUndoSystem& undoSystem);
void disconnectUndoSystem(IUndoSystem& undoSystem);
void undoSave();
};
} // namespace
|