|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/tselectionhandle.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "toonzqt/selection.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//=============================================================================
|
|
Toshihiro Shimizu |
890ddd |
// TSelectionHandle
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TSelectionHandle::TSelectionHandle() { m_selectionStack.push_back(0); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TSelectionHandle::~TSelectionHandle() {}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TSelection *TSelectionHandle::getSelection() const {
|
|
Shinya Kitaoka |
120a6e |
return m_selectionStack.back();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TSelectionHandle::setSelection(TSelection *selection) {
|
|
Shinya Kitaoka |
120a6e |
if (getSelection() == selection) return;
|
|
shun-iwasawa |
afe084 |
TSelection *oldSelection = getSelection();
|
|
shun-iwasawa |
afe084 |
CommandManager *commandManager = CommandManager::instance();
|
|
Shinya Kitaoka |
120a6e |
if (oldSelection) {
|
|
Shinya Kitaoka |
120a6e |
oldSelection->selectNone();
|
|
Shinya Kitaoka |
120a6e |
// disable selection related commands
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < (int)m_enabledCommandIds.size(); i++)
|
|
Shinya Kitaoka |
120a6e |
commandManager->setHandler(m_enabledCommandIds[i].c_str(), 0);
|
|
Shinya Kitaoka |
120a6e |
m_enabledCommandIds.clear();
|
|
shun-iwasawa |
afe084 |
|
|
shun-iwasawa |
afe084 |
// revert alternative command names to original ones kept in the icon texts
|
|
shun-iwasawa |
afe084 |
for (auto commandId : oldSelection->alternativeCommandNames().keys()) {
|
|
shun-iwasawa |
afe084 |
QAction *action = commandManager->getAction(commandId);
|
|
shun-iwasawa |
afe084 |
action->setText(action->iconText());
|
|
shun-iwasawa |
afe084 |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
m_selectionStack.back() = selection;
|
|
shun-iwasawa |
afe084 |
if (selection) {
|
|
shun-iwasawa |
afe084 |
selection->enableCommands();
|
|
shun-iwasawa |
afe084 |
|
|
shun-iwasawa |
afe084 |
// set alternative command names
|
|
shun-iwasawa |
afe084 |
QMap<commandid, qstring="">::const_iterator i =</commandid,>
|
|
shun-iwasawa |
afe084 |
selection->alternativeCommandNames().constBegin();
|
|
shun-iwasawa |
afe084 |
while (i != selection->alternativeCommandNames().constEnd()) {
|
|
shun-iwasawa |
afe084 |
QAction *action = commandManager->getAction(i.key());
|
|
shun-iwasawa |
afe084 |
action->setText(i.value());
|
|
shun-iwasawa |
afe084 |
++i;
|
|
shun-iwasawa |
afe084 |
}
|
|
shun-iwasawa |
afe084 |
}
|
|
Shinya Kitaoka |
120a6e |
emit selectionSwitched(oldSelection, selection);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TSelectionHandle::pushSelection() {
|
|
Shinya Kitaoka |
120a6e |
// NOTE
|
|
Shinya Kitaoka |
120a6e |
// We push 0, and NOT a copy of the last item. I think this is done on
|
|
Shinya Kitaoka |
120a6e |
// purpose,
|
|
Shinya Kitaoka |
120a6e |
// as having it copied and then selecting a different one invokes
|
|
Shinya Kitaoka |
120a6e |
// selectNone()
|
|
Shinya Kitaoka |
120a6e |
// on the former.
|
|
Shinya Kitaoka |
120a6e |
m_selectionStack.push_back(0);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TSelectionHandle::popSelection() {
|
|
Shinya Kitaoka |
120a6e |
if (m_selectionStack.size() > 1) m_selectionStack.pop_back();
|
|
Shinya Kitaoka |
120a6e |
TSelection *selection = getSelection();
|
|
Shinya Kitaoka |
120a6e |
if (selection) selection->enableCommands();
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TSelectionHandle::enableCommand(std::string cmdId,
|
|
Shinya Kitaoka |
120a6e |
CommandHandlerInterface *handler) {
|
|
Shinya Kitaoka |
120a6e |
CommandManager::instance()->setHandler(cmdId.c_str(), handler);
|
|
Shinya Kitaoka |
120a6e |
m_enabledCommandIds.push_back(cmdId);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void TSelectionHandle::notifySelectionChanged() {
|
|
Shinya Kitaoka |
120a6e |
emit selectionChanged(m_selectionStack.back());
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
//-----------------------------------------------------------------------------
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
TSelectionHandle *TSelectionHandle::getCurrent() {
|
|
Shinya Kitaoka |
120a6e |
static TSelectionHandle _currentSelection;
|
|
Shinya Kitaoka |
120a6e |
return &_currentSelection;
|
|
Toshihiro Shimizu |
890ddd |
}
|