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 }