28 std::stable_sort(elements.begin(), elements.end(), [](
const auto &a,
const auto &b) {
29 return a->pos().rx() < b->pos().rx();
31 std::stable_sort(elements.begin(), elements.end(), [](
const auto &a,
const auto &b) {
32 return a->pos().ry() < b->pos().ry();
39 if (event->type() != QEvent::KeyPress) {
43 auto *keyEvent =
dynamic_cast<QKeyEvent *
>(event);
45 if (!keyEvent || (m_editor->m_elements.size() != 1)) {
49 const bool moveFwd = (keyEvent->key() == Qt::Key_Tab);
50 const bool moveBack = (keyEvent->key() == Qt::Key_Backtab);
52 if (!moveFwd && !moveBack) {
56 Scene *scene = m_editor->m_scene;
62 auto *elm = m_editor->m_elements.constFirst();
65 const qsizetype elmPos = elements.indexOf(elm);
73 const qsizetype step = moveFwd ? 1 : -1;
74 const qsizetype total = elements.size();
76 auto *widget = qobject_cast<QWidget *>(obj);
77 qsizetype pos = (total + elmPos + step) % total;
81 for (; pos != elmPos; pos = (total + pos + step) % total) {
82 elm = elements.at(pos);
83 m_editor->setCurrentElements({elm});
85 if (widget->isEnabled()) {
90 scene->clearSelection();
92 if (!widget->isEnabled()) {
93 elm = elements.at(elmPos);
96 elm->setSelected(
true);