[TechDraw] Multiselection mode implementation

This commit is contained in:
pavltom
2023-11-16 16:43:13 +01:00
committed by WandererFan
parent 4703c77067
commit 3876f23f4d
12 changed files with 162 additions and 1 deletions

View File

@@ -32,6 +32,10 @@
#include <App/Application.h>
#include <Gui/Selection.h>
#include <Mod/TechDraw/App/DrawView.h>
#include "QGIPrimPath.h"
#include "PreferencesGui.h"
#include "QGIView.h"
@@ -55,6 +59,7 @@ QGIPrimPath::QGIPrimPath():
setAcceptHoverEvents(true);
isHighlighted = false;
multiselectActivated = false;
m_colOverride = false;
m_colNormal = getNormalColor();
@@ -259,6 +264,50 @@ Qt::PenCapStyle QGIPrimPath::prefCapStyle()
return result;
}
void QGIPrimPath::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Qt::KeyboardModifiers originalModifiers = event->modifiers();
if (event->button()&Qt::LeftButton) {
multiselectActivated = false;
}
if (event->button() == Qt::LeftButton
&& multiselectEligible()
&& PreferencesGui::multiSelection()) {
auto parent = dynamic_cast<QGIView *>(parentItem());
if (parent) {
std::vector<Gui::SelectionObject> selection = Gui::Selection().getSelectionEx();
if (selection.size() == 1
&& selection.front().getObject() == parent->getViewObject()) {
multiselectActivated = true;
event->setModifiers(originalModifiers | Qt::ControlModifier);
}
}
}
QGraphicsPathItem::mousePressEvent(event);
event->setModifiers(originalModifiers);
}
void QGIPrimPath::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Qt::KeyboardModifiers originalModifiers = event->modifiers();
if ((event->button()&Qt::LeftButton) && multiselectActivated) {
if (PreferencesGui::multiSelection()) {
event->setModifiers(originalModifiers | Qt::ControlModifier);
}
multiselectActivated = false;
}
QGraphicsPathItem::mouseReleaseEvent(event);
event->setModifiers(originalModifiers);
}
void QGIPrimPath::setFill(QColor c, Qt::BrushStyle s) {
setFillColor(c);
m_fillNormal = s;