Add toolbar widget for edit size of handler in diagram editor.

Add a combo box in the tool bar of diagram editor
to quickly change the size of the graphics handler item.

The sarto commit :D

NOTE
only available for diagram editor, element editor will
come later.
This commit is contained in:
joshua 2022-01-03 21:01:25 +01:00
parent e087270b6d
commit ae9faa2192
11 changed files with 223 additions and 6 deletions

View File

@ -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);
}

View File

@ -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};

View File

@ -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();

View File

@ -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);

View File

@ -30,6 +30,7 @@
#include "conductortextitem.h"
#include "element.h"
#include "../QetGraphicsItemModeler/qetgraphicshandleritem.h"
#include "../utils/qetutils.h"
#include <QMultiHash>
#include <QtDebug>
@ -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)
{

View File

@ -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);

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#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<QetGraphicsHandlerItem *>(item);
handler->setSize((index+1) * 10);
}
}
}
}
}
}
}

View File

@ -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 <http://www.gnu.org/licenses/>.
*/
#ifndef DIAGRAMEDITORHANDLERSIZEWIDGET_H
#define DIAGRAMEDITORHANDLERSIZEWIDGET_H
#include <QWidget>
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

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DiagramEditorHandlerSizeWidget</class>
<widget class="QWidget" name="DiagramEditorHandlerSizeWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>471</width>
<height>62</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Poignées :</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox">
<item>
<property name="text">
<string>x 1</string>
</property>
</item>
<item>
<property name="text">
<string>x 2</string>
</property>
</item>
<item>
<property name="text">
<string>x 3</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -18,6 +18,9 @@
#include "qetutils.h"
#include <QString>
#include <QStringList>
#include <QGraphicsView>
#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;
}

View File

@ -20,6 +20,8 @@
#include <QMargins>
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