Blob Blame Raw


#include "toonzqt/tselectionhandle.h"
#include "toonzqt/selection.h"

//=============================================================================
// TSelectionHandle
//-----------------------------------------------------------------------------

TSelectionHandle::TSelectionHandle()
{
	m_selectionStack.push_back(0);
}

//-----------------------------------------------------------------------------

TSelectionHandle::~TSelectionHandle()
{
}

//-----------------------------------------------------------------------------

TSelection *TSelectionHandle::getSelection() const
{
	return m_selectionStack.back();
}

//-----------------------------------------------------------------------------

void TSelectionHandle::setSelection(TSelection *selection)
{
	if (getSelection() == selection)
		return;
	TSelection *oldSelection = getSelection();
	if (oldSelection) {
		oldSelection->selectNone();
		// disable selection related commands
		CommandManager *commandManager = CommandManager::instance();
		int i;
		for (i = 0; i < (int)m_enabledCommandIds.size(); i++)
			commandManager->setHandler(m_enabledCommandIds[i].c_str(), 0);
		m_enabledCommandIds.clear();
	}
	m_selectionStack.back() = selection;
	if (selection)
		selection->enableCommands();
	emit selectionSwitched(oldSelection, selection);
}

//-----------------------------------------------------------------------------

void TSelectionHandle::pushSelection()
{
	//NOTE
	//  We push 0, and NOT a copy of the last item. I think this is done on purpose,
	//  as having it copied and then selecting a different one invokes selectNone()
	//  on the former.
	m_selectionStack.push_back(0);
}

//-----------------------------------------------------------------------------

void TSelectionHandle::popSelection()
{
	if (m_selectionStack.size() > 1)
		m_selectionStack.pop_back();
	TSelection *selection = getSelection();
	if (selection)
		selection->enableCommands();
}

//-----------------------------------------------------------------------------

void TSelectionHandle::enableCommand(std::string cmdId, CommandHandlerInterface *handler)
{
	CommandManager::instance()->setHandler(cmdId.c_str(), handler);
	m_enabledCommandIds.push_back(cmdId);
}

//-----------------------------------------------------------------------------

void TSelectionHandle::notifySelectionChanged()
{
	emit selectionChanged(m_selectionStack.back());
}

//-----------------------------------------------------------------------------

TSelectionHandle *TSelectionHandle::getCurrent()
{
	static TSelectionHandle _currentSelection;
	return &_currentSelection;
}