File indexing completed on 2024-06-23 04:27:04

0001 /* This file is part of the KDE project
0002  * SPDX-FileCopyrightText: 2007 Jan Hambrecht <jaham@gmx.net>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "RectangleShapeConfigWidget.h"
0008 #include "RectangleShape.h"
0009 #include "RectangleShapeConfigCommand.h"
0010 #include "kis_signals_blocker.h"
0011 #include "kis_assert.h"
0012 
0013 #include "kis_document_aware_spin_box_unit_manager.h"
0014 
0015 RectangleShapeConfigWidget::RectangleShapeConfigWidget()
0016     : m_rectangle(0)
0017 {
0018     widget.setupUi(this);
0019 
0020     connect(widget.cornerRadiusX, SIGNAL(valueChangedPt(qreal)), this, SIGNAL(propertyChanged()));
0021     connect(widget.cornerRadiusY, SIGNAL(valueChangedPt(qreal)), this, SIGNAL(propertyChanged()));
0022 }
0023 
0024 void RectangleShapeConfigWidget::setUnit(const KoUnit &unit)
0025 {
0026     widget.cornerRadiusX->setUnit(unit);
0027     widget.cornerRadiusY->setUnit(unit);
0028 }
0029 
0030 void RectangleShapeConfigWidget::open(KoShape *shape)
0031 {
0032     if (m_rectangle) {
0033         m_rectangle->removeShapeChangeListener(this);
0034     }
0035 
0036     m_rectangle = dynamic_cast<RectangleShape *>(shape);
0037     if (!m_rectangle) return;
0038 
0039     loadPropertiesFromShape(m_rectangle);
0040 
0041     m_rectangle->addShapeChangeListener(this);
0042 }
0043 
0044 void RectangleShapeConfigWidget::loadPropertiesFromShape(RectangleShape *shape)
0045 {
0046     KisSignalsBlocker b(widget.cornerRadiusX, widget.cornerRadiusY);
0047 
0048     QSizeF size = shape->size();
0049 
0050     widget.cornerRadiusX->setMaximum(0.5 * size.width());
0051     widget.cornerRadiusX->changeValue(0.01 * shape->cornerRadiusX() * 0.5 * size.width());
0052     widget.cornerRadiusY->setMaximum(0.5 * size.height());
0053     widget.cornerRadiusY->changeValue(0.01 * shape->cornerRadiusY() * 0.5 * size.height());
0054 }
0055 
0056 void RectangleShapeConfigWidget::save()
0057 {
0058     if (!m_rectangle) {
0059         return;
0060     }
0061 
0062     QSizeF size = m_rectangle->size();
0063 
0064     m_rectangle->setCornerRadiusX(100.0 * widget.cornerRadiusX->value() / (0.5 * size.width()));
0065     m_rectangle->setCornerRadiusY(100.0 * widget.cornerRadiusY->value() / (0.5 * size.height()));
0066 }
0067 
0068 KUndo2Command *RectangleShapeConfigWidget::createCommand()
0069 {
0070     if (!m_rectangle) {
0071         return 0;
0072     }
0073     QSizeF size = m_rectangle->size();
0074 
0075     qreal cornerRadiusX = 100.0 * widget.cornerRadiusX->value() / (0.5 * size.width());
0076     qreal cornerRadiusY = 100.0 * widget.cornerRadiusY->value() / (0.5 * size.height());
0077 
0078     return new RectangleShapeConfigCommand(m_rectangle, cornerRadiusX, cornerRadiusY);
0079 }
0080 
0081 void RectangleShapeConfigWidget::notifyShapeChanged(KoShape::ChangeType type, KoShape *shape)
0082 {
0083     KIS_SAFE_ASSERT_RECOVER_RETURN(m_rectangle && shape == m_rectangle);
0084 
0085     if (type == KoShape::ParameterChanged) {
0086         loadPropertiesFromShape(m_rectangle);
0087     }
0088 }