1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-01-16 18:59:57 +00:00
openmw/apps/opencs/view/widget/scenetooltexturebrush.hpp
2022-10-31 21:04:01 +01:00

136 lines
3.5 KiB
C++

#ifndef CSV_WIDGET_SCENETOOLTEXTUREBRUSH_H
#define CSV_WIDGET_SCENETOOLTEXTUREBRUSH_H
#include <QFrame>
#include <QGroupBox>
#ifndef Q_MOC_RUN
#include "brushshapes.hpp"
#include "scenetool.hpp"
#endif
class QTableWidget;
class QDragEnterEvent;
class QDropEvent;
class QHBoxLayout;
class QLabel;
class QModelIndex;
class QObject;
class QPoint;
class QPushButton;
class QSlider;
class QSpinBox;
class QWidget;
namespace CSVRender
{
class TerrainTextureMode;
}
namespace CSMDoc
{
class Document;
}
namespace CSVWidget
{
class SceneToolbar;
/// \brief Layout-box for some brush button settings
class BrushSizeControls : public QGroupBox
{
Q_OBJECT
public:
BrushSizeControls(const QString& title, QWidget* parent);
private:
QHBoxLayout* mLayoutSliderSize;
QSlider* mBrushSizeSlider;
QSpinBox* mBrushSizeSpinBox;
friend class SceneToolTextureBrush;
friend class CSVRender::TerrainTextureMode;
};
/// \brief Brush settings window
class TextureBrushWindow : public QFrame
{
Q_OBJECT
public:
TextureBrushWindow(CSMDoc::Document& document, QWidget* parent = nullptr);
void configureButtonInitialSettings(QPushButton* button);
const QString toolTipPoint = "Paint single point";
const QString toolTipSquare = "Paint with square brush";
const QString toolTipCircle = "Paint with circle brush";
const QString toolTipCustom = "Paint custom selection (not implemented yet)";
private:
CSVWidget::BrushShape mBrushShape = CSVWidget::BrushShape_Point;
int mBrushSize = 1;
std::string mBrushTexture = "L0#0";
CSMDoc::Document& mDocument;
QLabel* mSelectedBrush;
QGroupBox* mHorizontalGroupBox;
std::string mBrushTextureLabel;
QPushButton* mButtonPoint;
QPushButton* mButtonSquare;
QPushButton* mButtonCircle;
QPushButton* mButtonCustom;
BrushSizeControls* mSizeSliders;
friend class SceneToolTextureBrush;
friend class CSVRender::TerrainTextureMode;
public slots:
void setBrushTexture(std::string brushTexture);
void setBrushShape();
void setBrushSize(int brushSize);
signals:
void passBrushSize(int brushSize);
void passBrushShape(CSVWidget::BrushShape brushShape);
void passTextureId(std::string brushTexture);
};
class SceneToolTextureBrush : public SceneTool
{
Q_OBJECT
QString mToolTip;
CSMDoc::Document& mDocument;
QFrame* mPanel;
QTableWidget* mTable;
std::vector<std::string> mBrushHistory;
TextureBrushWindow* mTextureBrushWindow;
private:
void adjustToolTips();
public:
SceneToolTextureBrush(SceneToolbar* parent, const QString& toolTip, CSMDoc::Document& document);
void showPanel(const QPoint& position) override;
void updatePanel();
void dropEvent(QDropEvent* event) override;
void dragEnterEvent(QDragEnterEvent* event) override;
friend class CSVRender::TerrainTextureMode;
public slots:
void setButtonIcon(CSVWidget::BrushShape brushShape);
void updateBrushHistory(const std::string& mBrushTexture);
void clicked(const QModelIndex& index);
void activate() override;
signals:
void passEvent(QDropEvent* event);
void passEvent(QDragEnterEvent* event);
void passTextureId(std::string brushTexture);
};
}
#endif