fix invert selection logic

This commit is contained in:
Rudolf Polzer 2011-06-30 13:34:23 +02:00
parent 11186bfec5
commit 4cd61dfa7d

View File

@ -290,13 +290,16 @@ void Select_Delete (void)
class InvertSelectionWalker : public scene::Graph::Walker
{
SelectionSystem::EMode m_mode;
mutable Selectable* m_selectable;
public:
InvertSelectionWalker(SelectionSystem::EMode mode)
: m_mode(mode), m_selectable(0)
: m_mode(mode)
{
}
bool pre(const scene::Path& path, scene::Instance& instance) const
{
return true;
}
void post(const scene::Path& path, scene::Instance& instance) const
{
Selectable* selectable = Instance_getSelectable(instance);
if(selectable)
@ -305,26 +308,17 @@ public:
{
case SelectionSystem::eEntity:
if(Node_isEntity(path.top()) != 0)
{
m_selectable = path.top().get().visible() ? selectable : 0;
}
if(path.top().get().visible())
selectable->setSelected(!selectable->isSelected());
break;
case SelectionSystem::ePrimitive:
m_selectable = path.top().get().visible() ? selectable : 0;
if(path.top().get().visible())
selectable->setSelected(!selectable->isSelected());
break;
case SelectionSystem::eComponent:
break;
}
}
return true;
}
void post(const scene::Path& path, scene::Instance& instance) const
{
if(m_selectable != 0)
{
m_selectable->setSelected(!m_selectable->isSelected());
m_selectable = 0;
}
}
};