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;
}