File indexing completed on 2025-02-02 04:22:09

0001 /*
0002  * SPDX-FileCopyrightText: 2008 Boudewijn Rempt <boud@valdyas.org>
0003  * SPDX-FileCopyrightText: 2014 Mohit Goyal <mohit.bits2011@gmail.com>
0004  *
0005  * SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef KIS_BRUSH_SELECTION_WIDGET_H
0008 #define KIS_BRUSH_SELECTION_WIDGET_H
0009 
0010 #include <QWidget>
0011 
0012 #include <KoGroupButton.h>
0013 
0014 #include <kis_properties_configuration.h>
0015 #include <kis_brush.h>
0016 
0017 #include "kis_precision_option.h"
0018 #include "ui_wdgbrushchooser.h"
0019 
0020 #include <lager/cursor.hpp>
0021 #include <KisBrushModel.h>
0022 #include <KisBrushOptionWidgetFlags.h>
0023 
0024 class KisAutoBrushWidget;
0025 class KisPredefinedBrushChooser;
0026 class KisTextBrushChooser;
0027 class KisCustomBrushWidget;
0028 class KisClipboardBrushWidget;
0029 class KisBrush;
0030 class QStackedWidget;
0031 class KisAutoBrushModel;
0032 class KisPredefinedBrushModel;
0033 class KisTextBrushModel;
0034 
0035 /**
0036  *Compound widget that collects all the various brush selection widgets.
0037  */
0038 class PAINTOP_EXPORT KisBrushSelectionWidget : public QWidget
0039 {
0040     Q_OBJECT
0041 
0042 public:
0043     KisBrushSelectionWidget(int maxBrushSize,
0044                             KisAutoBrushModel *autoBrushModel,
0045                             KisPredefinedBrushModel *predefinedBrushModel,
0046                             KisTextBrushModel *textBrushModel,
0047                             lager::cursor<KisBrushModel::BrushType> brushType,
0048                             lager::cursor<KisBrushModel::PrecisionData> precisionData,
0049                             KisBrushOptionWidgetFlags flags,
0050                             QWidget *parent = 0);
0051 
0052     ~KisBrushSelectionWidget() override;
0053 
0054     KisBrushSP brush() const;
0055 
0056     void setImage(KisImageWSP image);
0057     void hideOptions(const QStringList &options);
0058 
0059     lager::reader<bool> lightnessModeEnabled() const;
0060 
0061 Q_SIGNALS:
0062 
0063     void sigBrushChanged();
0064     void sigPrecisionChanged();
0065 
0066 private:
0067     void setCurrentWidget(QWidget *widget);
0068     void addChooser(const QString & text, QWidget *widget, int id, KoGroupButton::GroupPosition pos);
0069 
0070 private:
0071     enum Type {
0072         AUTOBRUSH,
0073         PREDEFINEDBRUSH,
0074         TEXTBRUSH,
0075     };
0076 
0077     Ui_WdgBrushChooser uiWdgBrushChooser;
0078     QGridLayout *m_layout {0};
0079     QWidget *m_currentBrushWidget {0};
0080     QHash<int, QWidget*> m_chooserMap;
0081     QButtonGroup *m_buttonGroup {0};
0082     QSize m_minimumSize;
0083     QStackedWidget *m_stackedWidget{0};
0084 
0085     KisAutoBrushWidget *m_autoBrushWidget {0};
0086     KisPredefinedBrushChooser *m_predefinedBrushWidget {0};
0087     KisTextBrushChooser *m_textBrushWidget {0};
0088 
0089     struct Private;
0090     const QScopedPointer<Private> m_d;
0091 };
0092 
0093 #endif