File indexing completed on 2024-06-23 04:28:10
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "DefaultToolTabbedWidget.h" 0008 0009 #include <QLabel> 0010 #include "kis_icon_utils.h" 0011 #include "DefaultToolGeometryWidget.h" 0012 #include "KoStrokeConfigWidget.h" 0013 #include "KoFillConfigWidget.h" 0014 #include <KoInteractionTool.h> 0015 0016 #include <kis_document_aware_spin_box_unit_manager.h> 0017 0018 0019 DefaultToolTabbedWidget::DefaultToolTabbedWidget(KoInteractionTool *tool, QWidget *parent) 0020 : KoTitledTabWidget(parent) 0021 { 0022 setObjectName("default-tool-tabbed-widget"); 0023 0024 m_geometryWidget = new DefaultToolGeometryWidget(tool, this); 0025 m_geometryWidget->setWindowTitle(i18n("Geometry")); 0026 addTab(m_geometryWidget, KisIconUtils::loadIcon("geometry"), QString()); 0027 0028 m_strokeWidget = new KoStrokeConfigWidget(tool->canvas(), this); 0029 m_strokeWidget->setWindowTitle(i18nc("Draws a line around an area", "Stroke")); 0030 0031 KisDocumentAwareSpinBoxUnitManager* managerLineWidth = new KisDocumentAwareSpinBoxUnitManager(m_strokeWidget); 0032 KisDocumentAwareSpinBoxUnitManager* managerMitterLimit = new KisDocumentAwareSpinBoxUnitManager(m_strokeWidget); 0033 managerLineWidth->setApparentUnitFromSymbol("px"); 0034 managerMitterLimit->setApparentUnitFromSymbol("px"); //set unit to px by default 0035 m_strokeWidget->setUnitManagers(managerLineWidth, managerMitterLimit); 0036 0037 addTab(m_strokeWidget, KisIconUtils::loadIcon("krita_tool_line"), QString()); 0038 0039 0040 m_fillWidget = new KoFillConfigWidget(tool->canvas(), KoFlake::Fill, true, this); 0041 m_fillWidget->setWindowTitle(i18n("Fill")); 0042 addTab(m_fillWidget, KisIconUtils::loadIcon("krita_tool_color_fill"), QString()); 0043 0044 connect(this, SIGNAL(currentChanged(int)), SLOT(slotCurrentIndexChanged(int))); 0045 m_oldTabIndex = currentIndex(); 0046 0047 connect(m_fillWidget, SIGNAL(sigMeshGradientResetted()), SIGNAL(sigMeshGradientResetted())); 0048 } 0049 0050 DefaultToolTabbedWidget::~DefaultToolTabbedWidget() 0051 { 0052 } 0053 0054 void DefaultToolTabbedWidget::activate() 0055 { 0056 if (currentIndex() == StrokeTab) { 0057 m_strokeWidget->activate(); 0058 } else { 0059 m_fillWidget->activate(); 0060 } 0061 } 0062 0063 void DefaultToolTabbedWidget::deactivate() 0064 { 0065 if (m_oldTabIndex == StrokeTab) { 0066 m_strokeWidget->deactivate(); 0067 } else { 0068 m_fillWidget->deactivate(); 0069 } 0070 } 0071 0072 bool DefaultToolTabbedWidget::useUniformScaling() const 0073 { 0074 return m_geometryWidget->useUniformScaling(); 0075 } 0076 0077 void DefaultToolTabbedWidget::slotMeshGradientHandleSelected(KoShapeMeshGradientHandles::Handle h) 0078 { 0079 if (h.type == KoShapeMeshGradientHandles::Handle::Corner) { 0080 m_fillWidget->setSelectedMeshGradientHandle(SvgMeshPosition {h.row, h.col, h.segmentType}); 0081 } else { 0082 m_fillWidget->setSelectedMeshGradientHandle(SvgMeshPosition()); 0083 } 0084 } 0085 0086 void DefaultToolTabbedWidget::slotCurrentIndexChanged(int current) 0087 { 0088 // because of nesting we are required to only let one widget be active at at time 0089 deactivate(); 0090 activate(); 0091 0092 if (m_oldTabIndex == FillTab) { 0093 emit sigSwitchModeEditFillGradient(false); 0094 } else if (m_oldTabIndex == StrokeTab) { 0095 emit sigSwitchModeEditStrokeGradient(false); 0096 } 0097 0098 m_oldTabIndex = current; 0099 0100 if (current == FillTab) { 0101 emit sigSwitchModeEditFillGradient(true); 0102 } else if (m_oldTabIndex == StrokeTab) { 0103 emit sigSwitchModeEditStrokeGradient(true); 0104 } 0105 }