void QDesignerMenuBar::dropEvent(QDropEvent *event) { m_dragging = false; if (const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData())) { QAction *action = d->actionList().first(); if (checkAction(action) == AcceptActionDrag) { event->acceptProposedAction(); int index = findAction(event->pos()); index = qMin(index, actions().count() - 1); QDesignerFormWindowInterface *fw = formWindow(); InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw); cmd->init(this, action, safeActionAt(index)); fw->commandHistory()->push(cmd); m_currentIndex = index; update(); adjustIndicator(QPoint(-1, -1)); return; } } event->ignore(); }
void QDesignerMenuBar::startDrag(const QPoint &pos) { const int index = findAction(pos); if (m_currentIndex == -1 || index >= realActionCount()) return; QAction *action = safeActionAt(index); QDesignerFormWindowInterface *fw = formWindow(); RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw); cmd->init(this, action, actions().at(index + 1)); fw->commandHistory()->push(cmd); adjustSize(); hideMenu(index); QDrag *drag = new QDrag(this); drag->setPixmap(ActionRepositoryMimeData::actionDragPixmap(action)); drag->setMimeData(new ActionRepositoryMimeData(action, Qt::MoveAction)); const int old_index = m_currentIndex; m_currentIndex = -1; if (drag->start(Qt::MoveAction) == Qt::IgnoreAction) { InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw); cmd->init(this, action, safeActionAt(index)); fw->commandHistory()->push(cmd); m_currentIndex = old_index; adjustSize(); } }
void ToolBarEventFilter::slotInsertSeparator() { QDesignerFormWindowInterface *fw = formWindow(); QAction *theSender = qobject_cast<QAction*>(sender()); QAction *previous = qvariant_cast<QAction *>(theSender->data()); fw->beginCommand(tr("Insert Separator")); QAction *action = createAction(fw, QLatin1String("separator"), true); InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw); cmd->init(m_toolBar, action, previous); fw->commandHistory()->push(cmd); fw->endCommand(); }
bool ToolBarEventFilter::handleDropEvent(QDropEvent *event) { const ActionRepositoryMimeData *d = qobject_cast<const ActionRepositoryMimeData*>(event->mimeData()); if (!d) return false; if (d->actionList().isEmpty()) { event->ignore(); hideDragIndicator(); return true; } QAction *action = d->actionList().first(); const ActionList actions = m_toolBar->actions(); if (!action || actions.contains(action)) { event->ignore(); hideDragIndicator(); return true; } // Try to find action to 'insert before'. Click on action or in free area, else ignore. QAction *beforeAction = 0; const QPoint pos = event->pos(); const int index = actionIndexAt(m_toolBar, pos, m_toolBar->orientation()); if (index != -1) { beforeAction = actions.at(index); } else { if (!freeArea(m_toolBar).contains(pos)) { event->ignore(); hideDragIndicator(); return true; } } event->acceptProposedAction(); QDesignerFormWindowInterface *fw = formWindow(); InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw); cmd->init(m_toolBar, action, beforeAction); fw->commandHistory()->push(cmd); hideDragIndicator(); return true; }
void ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers) { const int index = actionIndexAt(m_toolBar, pos, m_toolBar->orientation()); if (index == - 1) return; const ActionList actions = m_toolBar->actions(); QAction *action = actions.at(index); QDesignerFormWindowInterface *fw = formWindow(); const Qt::DropAction dropAction = (modifiers & Qt::ControlModifier) ? Qt::CopyAction : Qt::MoveAction; if (dropAction == Qt::MoveAction) { RemoveActionFromCommand *cmd = new RemoveActionFromCommand(fw); const int nextIndex = index + 1; QAction *nextAction = nextIndex < actions.size() ? actions.at(nextIndex) : 0; cmd->init(m_toolBar, action, nextAction); fw->commandHistory()->push(cmd); } QDrag *drag = new QDrag(m_toolBar); drag->setPixmap(ActionRepositoryMimeData::actionDragPixmap( action)); drag->setMimeData(new ActionRepositoryMimeData(action, dropAction)); if (drag->start(dropAction) == Qt::IgnoreAction) { hideDragIndicator(); if (dropAction == Qt::MoveAction) { const ActionList currentActions = m_toolBar->actions(); QAction *previous = 0; if (index >= 0 && index < currentActions.size()) previous = currentActions.at(index); InsertActionIntoCommand *cmd = new InsertActionIntoCommand(fw); cmd->init(m_toolBar, action, previous); fw->commandHistory()->push(cmd); } } }