diff --git a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp index a6c779f63..16c418e90 100644 --- a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp +++ b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.cpp @@ -24,11 +24,16 @@ @brief QetGraphicsHandlerItem::QetGraphicsHandlerItem @param size : the size of the handler */ -QetGraphicsHandlerItem::QetGraphicsHandlerItem(qreal size) : - m_size(size) +QetGraphicsHandlerItem::QetGraphicsHandlerItem(qreal size) { setFlag(QGraphicsItem::ItemIgnoresTransformations); - + setSize(size); +} + +void QetGraphicsHandlerItem::setSize(qreal size) +{ + prepareGeometryChange(); + m_size = size; m_handler_rect.setRect(0-m_size/2, 0-m_size/2, m_size, m_size); m_br.setRect(-1-m_size/2, -1-m_size/2, m_size+2, m_size+2); } diff --git a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h index b482ebbb7..e8a2b2884 100644 --- a/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h +++ b/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h @@ -37,6 +37,7 @@ class QetGraphicsHandlerItem : public QGraphicsItem { public: QetGraphicsHandlerItem(qreal size = 10); + void setSize(qreal size); QRectF boundingRect() const override; enum { Type = UserType + 1200}; diff --git a/sources/qetdiagrameditor.cpp b/sources/qetdiagrameditor.cpp index baa6f69ab..64f8ebe4b 100644 --- a/sources/qetdiagrameditor.cpp +++ b/sources/qetdiagrameditor.cpp @@ -43,6 +43,7 @@ #include "undocommand/rotatetextscommand.h" #include "diagram.h" #include "TerminalStrip/ui/terminalstripeditor.h" +#include "ui/diagrameditorhandlersizewidget.h" #ifdef BUILD_WITHOUT_KF5 #else @@ -65,6 +66,9 @@ QETDiagramEditor::QETDiagramEditor(const QStringList &files, QWidget *parent) : m_file_actions_group (this), open_dialog_dir (QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)) { + //Trivial property use to set the graphics handler size + setProperty("graphics_handler_size", 10); + activeSubWindowIndex = 0; QSplitter *splitter_ = new QSplitter(this); @@ -732,6 +736,8 @@ void QETDiagramEditor::setUpToolBar() view_tool_bar -> addAction(m_mode_selection); view_tool_bar -> addAction(m_mode_visualise); view_tool_bar -> addSeparator(); + view_tool_bar -> addWidget(new DiagramEditorHandlerSizeWidget(this)); + view_tool_bar -> addSeparator(); view_tool_bar -> addAction(m_draw_grid); view_tool_bar -> addAction (m_grey_background); view_tool_bar -> addSeparator(); diff --git a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp index 9cc7e63fa..7f336bbb1 100644 --- a/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp +++ b/sources/qetgraphicsitem/ViewItem/qetgraphicstableitem.cpp @@ -766,6 +766,7 @@ void QetGraphicsTableItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { adjustHandlerPos(); this->scene()->addItem(&m_handler_item); + m_handler_item.setSize(QETUtils::graphicsHandlerSize(this)); m_handler_item.installSceneEventFilter(this); } QGraphicsObject::hoverEnterEvent(event); diff --git a/sources/qetgraphicsitem/conductor.cpp b/sources/qetgraphicsitem/conductor.cpp index 068764e05..b24f87674 100644 --- a/sources/qetgraphicsitem/conductor.cpp +++ b/sources/qetgraphicsitem/conductor.cpp @@ -30,6 +30,7 @@ #include "conductortextitem.h" #include "element.h" #include "../QetGraphicsItemModeler/qetgraphicshandleritem.h" +#include "../utils/qetutils.h" #include #include @@ -860,7 +861,7 @@ void Conductor::addHandler() { if (m_handler_vector.isEmpty() && scene()) { - m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(handlerPoints())); + m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(handlerPoints()), QETUtils::graphicsHandlerSize(this)); for(QetGraphicsHandlerItem *handler : m_handler_vector) { diff --git a/sources/qetgraphicsitem/qetshapeitem.cpp b/sources/qetgraphicsitem/qetshapeitem.cpp index f76d60f3f..d0c705af7 100644 --- a/sources/qetgraphicsitem/qetshapeitem.cpp +++ b/sources/qetgraphicsitem/qetshapeitem.cpp @@ -27,6 +27,7 @@ #include "../qeticons.h" #include "../qetxml.h" #include "../ui/shapegraphicsitempropertieswidget.h" +#include "../utils/qetutils.h" /** @brief QetShapeItem::QetShapeItem @@ -591,9 +592,9 @@ void QetShapeItem::addHandler() if(!points_vector.isEmpty() && scene()) { - m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(points_vector)); + m_handler_vector = QetGraphicsHandlerItem::handlerForPoint(mapToScene(points_vector), QETUtils::graphicsHandlerSize(this)); - for(QetGraphicsHandlerItem *handler : m_handler_vector) + for(const auto handler : qAsConst(m_handler_vector)) { handler->setZValue(this->zValue()+1); handler->setColor(Qt::blue); diff --git a/sources/ui/diagrameditorhandlersizewidget.cpp b/sources/ui/diagrameditorhandlersizewidget.cpp new file mode 100644 index 000000000..bf28b8c93 --- /dev/null +++ b/sources/ui/diagrameditorhandlersizewidget.cpp @@ -0,0 +1,73 @@ +/* + Copyright 2006-2021 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#include "diagrameditorhandlersizewidget.h" +#include "ui_diagrameditorhandlersizewidget.h" +#include "../qetapp.h" +#include "../qetdiagrameditor.h" +#include "../projectview.h" +#include "../diagramview.h" +#include "../diagram.h" +#include "../../QetGraphicsItemModeler/qetgraphicshandleritem.h" + +DiagramEditorHandlerSizeWidget::DiagramEditorHandlerSizeWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::DiagramEditorHandlerSizeWidget) +{ + ui->setupUi(this); + + if (auto editor = QETApp::instance()->diagramEditorAncestorOf(this)) + { + const auto size = editor->property("graphics_handler_size").toInt(); + + if (size == 10 || size < 10) + ui->comboBox->setCurrentIndex(0); + else if (size == 20) + ui->comboBox->setCurrentIndex(1); + else if (size == 30 || size > 30) + ui->comboBox->setCurrentIndex(2); + } +} + +DiagramEditorHandlerSizeWidget::~DiagramEditorHandlerSizeWidget() +{ + delete ui; +} + +void DiagramEditorHandlerSizeWidget::on_comboBox_currentIndexChanged(int index) +{ + if (auto editor_ = QETApp::instance()->diagramEditorAncestorOf(this)) + { + editor_->setProperty("graphics_handler_size", (index+1) * 10); + if (auto project_view = editor_->currentProjectView()) { + if (auto diagram_view = project_view->currentDiagram()) { + if (auto diagram = diagram_view->diagram()) + { + for (const auto item : diagram->items()) + { + if (item->type() == QetGraphicsHandlerItem::Type) + { + auto handler = qgraphicsitem_cast(item); + handler->setSize((index+1) * 10); + } + } + } + } + } + } +} + diff --git a/sources/ui/diagrameditorhandlersizewidget.h b/sources/ui/diagrameditorhandlersizewidget.h new file mode 100644 index 000000000..1df07e5f2 --- /dev/null +++ b/sources/ui/diagrameditorhandlersizewidget.h @@ -0,0 +1,49 @@ +/* + Copyright 2006-2021 The QElectroTech Team + This file is part of QElectroTech. + + QElectroTech is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + QElectroTech is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with QElectroTech. If not, see . +*/ +#ifndef DIAGRAMEDITORHANDLERSIZEWIDGET_H +#define DIAGRAMEDITORHANDLERSIZEWIDGET_H + +#include + +namespace Ui { + class DiagramEditorHandlerSizeWidget; +} + +/** + * @brief The DiagramEditorHandlerSizeWidget class + * A little widget with a combo box to edit the size of + * the graphics handler item in a QetDiagramEditor. + * Just create a new instance of this widget, everything + * is done by the widget itself. + */ +class DiagramEditorHandlerSizeWidget : public QWidget +{ + Q_OBJECT + + public: + explicit DiagramEditorHandlerSizeWidget(QWidget *parent = nullptr); + ~DiagramEditorHandlerSizeWidget(); + + private slots: + void on_comboBox_currentIndexChanged(int index); + + private: + Ui::DiagramEditorHandlerSizeWidget *ui; +}; + +#endif // DIAGRAMEDITORHANDLERSIZEWIDGET_H diff --git a/sources/ui/diagrameditorhandlersizewidget.ui b/sources/ui/diagrameditorhandlersizewidget.ui new file mode 100644 index 000000000..9d5a12c4d --- /dev/null +++ b/sources/ui/diagrameditorhandlersizewidget.ui @@ -0,0 +1,47 @@ + + + DiagramEditorHandlerSizeWidget + + + + 0 + 0 + 471 + 62 + + + + Form + + + + + + Poignées : + + + + + + + + x 1 + + + + + x 2 + + + + + x 3 + + + + + + + + + diff --git a/sources/utils/qetutils.cpp b/sources/utils/qetutils.cpp index 10c560d44..7bb3c92b6 100644 --- a/sources/utils/qetutils.cpp +++ b/sources/utils/qetutils.cpp @@ -18,6 +18,9 @@ #include "qetutils.h" #include #include +#include +#include "../qetapp.h" +#include "../qetdiagrameditor.h" /** @brief QETUtils::marginsToString @@ -57,3 +60,30 @@ QMargins QETUtils::marginsFromString(const QString &string) return margins; } + +/** + * @brief QETUtils::graphicsHandlerSize + * @param item + * @return Return the handler size to use in the QGraphicsScene of @a item. + * If size can't be found, return 10 by default. + */ +qreal QETUtils::graphicsHandlerSize(QGraphicsItem *item) +{ + if (const auto scene_ = item->scene()) + { + if (!scene_->views().isEmpty()) + { + if (const auto editor_ = QETApp::instance()->diagramEditorAncestorOf(scene_->views().at(0))) + { + const auto variant_ = editor_->property("graphics_handler_size"); + //If variant_ can't be converted to qreal, the returned qreal is 0.0 + //it's sufficient for us to check if value is set or not. + if (const auto value_ = variant_.toReal()) + return value_; + } + } + } + + //Default value + return 10; +} diff --git a/sources/utils/qetutils.h b/sources/utils/qetutils.h index a997b4504..7ff299e23 100644 --- a/sources/utils/qetutils.h +++ b/sources/utils/qetutils.h @@ -20,6 +20,8 @@ #include +class QGraphicsItem; + /** Provide some small utils function */ @@ -27,6 +29,7 @@ namespace QETUtils { QString marginsToString(const QMargins &margins); QMargins marginsFromString(const QString &string); + qreal graphicsHandlerSize(QGraphicsItem *item); } #endif // QETUTILS_H