mirror of
https://github.com/creyD/intelliphoto.git
synced 2026-04-16 13:20:33 +02:00
all comments for headers
This commit is contained in:
@@ -240,13 +240,13 @@ void IntelliPhotoGui::slotSetActiveLayer(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntelliPhotoGui::slotUpdateRenderSettingsOn(){
|
void IntelliPhotoGui::slotUpdateFastRenderSettingsOn(){
|
||||||
paintingArea->setRenderSettings(true);
|
paintingArea->setRenderSettings(true);
|
||||||
FastRendererLabel->setText("Fast Render: On");
|
FastRendererLabel->setText("Fast Render: On");
|
||||||
UpdateGui();
|
UpdateGui();
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntelliPhotoGui::slotUpdateRenderSettingsOff(){
|
void IntelliPhotoGui::slotUpdateFastRenderSettingsOff(){
|
||||||
paintingArea->setRenderSettings(false);
|
paintingArea->setRenderSettings(false);
|
||||||
FastRendererLabel->setText("Fast Render: Off");
|
FastRendererLabel->setText("Fast Render: Off");
|
||||||
UpdateGui();
|
UpdateGui();
|
||||||
@@ -327,7 +327,7 @@ void IntelliPhotoGui::slotEnterPressed(){
|
|||||||
paintingArea->Toolsettings.setInnerAlpha(string.toInt());
|
paintingArea->Toolsettings.setInnerAlpha(string.toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IntelliPhotoGui::slotResetTools(){
|
void IntelliPhotoGui::slotResetToolButtons(){
|
||||||
CircleButton->setChecked(false);
|
CircleButton->setChecked(false);
|
||||||
FloodFillButton->setChecked(false);
|
FloodFillButton->setChecked(false);
|
||||||
LineButton->setChecked(false);
|
LineButton->setChecked(false);
|
||||||
@@ -467,13 +467,13 @@ void IntelliPhotoGui::createActions(){
|
|||||||
connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
|
connect(actionMoveLayerDown, SIGNAL(triggered()), this, SLOT(slotMoveLayerDown()));
|
||||||
|
|
||||||
//Create Update RenderSettings Actions here
|
//Create Update RenderSettings Actions here
|
||||||
actionUpdateRenderSettingsOn = new QAction(tr("&On"), this);
|
actionUpdateFastRenderSettingsOn = new QAction(tr("&On"), this);
|
||||||
actionUpdateRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A));
|
actionUpdateFastRenderSettingsOn->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_A));
|
||||||
connect(actionUpdateRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOn()));
|
connect(actionUpdateFastRenderSettingsOn, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOn()));
|
||||||
|
|
||||||
actionUpdateRenderSettingsOff = new QAction(tr("&Off"), this);
|
actionUpdateFastRenderSettingsOff = new QAction(tr("&Off"), this);
|
||||||
actionUpdateRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D));
|
actionUpdateFastRenderSettingsOff->setShortcut(QKeySequence(Qt::ALT + Qt::SHIFT + +Qt::Key_D));
|
||||||
connect(actionUpdateRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateRenderSettingsOff()));
|
connect(actionUpdateFastRenderSettingsOff, SIGNAL(triggered()),this, SLOT(slotUpdateFastRenderSettingsOff()));
|
||||||
|
|
||||||
//Create Color Actions here
|
//Create Color Actions here
|
||||||
actionColorPickerFirstColor = new QAction(tr("&Main"), this);
|
actionColorPickerFirstColor = new QAction(tr("&Main"), this);
|
||||||
@@ -494,42 +494,42 @@ void IntelliPhotoGui::createActions(){
|
|||||||
//Create Tool actions down here
|
//Create Tool actions down here
|
||||||
actionCreatePlainTool = new QAction(tr("&Plain"), this);
|
actionCreatePlainTool = new QAction(tr("&Plain"), this);
|
||||||
actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P));
|
actionCreatePlainTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_P));
|
||||||
connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
|
connect(actionCreatePlainTool, SIGNAL(triggered()), this, SLOT(slotCreatePlainTool()));
|
||||||
|
|
||||||
|
|
||||||
actionCreatePenTool = new QAction(tr("&Pen"),this);
|
actionCreatePenTool = new QAction(tr("&Pen"),this);
|
||||||
actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S));
|
actionCreatePenTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_S));
|
||||||
connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
|
connect(actionCreatePenTool, SIGNAL(triggered()), this, SLOT(slotCreatePenTool()));
|
||||||
|
|
||||||
actionCreateLineTool = new QAction(tr("&Line"), this);
|
actionCreateLineTool = new QAction(tr("&Line"), this);
|
||||||
actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L));
|
actionCreateLineTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_L));
|
||||||
connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
|
connect(actionCreateLineTool, SIGNAL(triggered()), this, SLOT(slotCreateLineTool()));
|
||||||
|
|
||||||
actionCreateCircleTool = new QAction(tr("&Circle"), this);
|
actionCreateCircleTool = new QAction(tr("&Circle"), this);
|
||||||
actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C));
|
actionCreateCircleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_C));
|
||||||
connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
|
connect(actionCreateCircleTool, SIGNAL(triggered()), this, SLOT(slotCreateCircleTool()));
|
||||||
|
|
||||||
actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
|
actionCreateRectangleTool = new QAction(tr("&Rectangle"), this);
|
||||||
actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R));
|
actionCreateRectangleTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_R));
|
||||||
connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
|
connect(actionCreateRectangleTool, SIGNAL(triggered()), this, SLOT(slotCreateRectangleTool()));
|
||||||
|
|
||||||
actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
|
actionCreatePolygonTool = new QAction(tr("&Polygon"), this);
|
||||||
actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V));
|
actionCreatePolygonTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_V));
|
||||||
connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
|
connect(actionCreatePolygonTool, SIGNAL(triggered()), this, SLOT(slotCreatePolygonTool()));
|
||||||
|
|
||||||
actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
|
actionCreateFloodFillTool = new QAction(tr("&FloodFill"), this);
|
||||||
actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F));
|
actionCreateFloodFillTool->setShortcut(QKeySequence(Qt::CTRL + Qt::ALT + Qt::SHIFT + Qt::Key_F));
|
||||||
connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
|
connect(actionCreateFloodFillTool, SIGNAL(triggered()), this, SLOT(slotCreateFloodFillTool()));
|
||||||
|
|
||||||
actionCreateGradientTool = new QAction(tr("&Gradient"),this);
|
actionCreateGradientTool = new QAction(tr("&Gradient"),this);
|
||||||
connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetTools()));
|
connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool()));
|
connect(actionCreateGradientTool, SIGNAL(triggered()), this, SLOT(slotCreateGradientTool()));
|
||||||
|
|
||||||
// Create about action and tie to IntelliPhotoGui::about()
|
// Create about action and tie to IntelliPhotoGui::about()
|
||||||
@@ -545,28 +545,28 @@ void IntelliPhotoGui::createActions(){
|
|||||||
connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
|
connect(EditLineWidth, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
|
||||||
connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
|
connect(EditLineInnerAlpha, SIGNAL(returnPressed()), this, SLOT(slotEnterPressed()));
|
||||||
|
|
||||||
connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(CircleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
|
connect(CircleButton, SIGNAL(clicked()), this, SLOT(slotCreateCircleTool()));
|
||||||
|
|
||||||
connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(FloodFillButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
|
connect(FloodFillButton, SIGNAL(clicked()), this, SLOT(slotCreateFloodFillTool()));
|
||||||
|
|
||||||
connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(GradientButton, SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool()));
|
connect(GradientButton, SIGNAL(clicked()), this, SLOT(slotCreateGradientTool()));
|
||||||
|
|
||||||
connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(LineButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
|
connect(LineButton, SIGNAL(clicked()), this, SLOT(slotCreateLineTool()));
|
||||||
|
|
||||||
connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(PenButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
|
connect(PenButton, SIGNAL(clicked()), this, SLOT(slotCreatePenTool()));
|
||||||
|
|
||||||
connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(PlainButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
|
connect(PlainButton, SIGNAL(clicked()), this, SLOT(slotCreatePlainTool()));
|
||||||
|
|
||||||
connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(PolygonButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
|
connect(PolygonButton, SIGNAL(clicked()), this, SLOT(slotCreatePolygonTool()));
|
||||||
|
|
||||||
connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetTools()));
|
connect(RectangleButton,SIGNAL(pressed()), this, SLOT(slotResetToolButtons()));
|
||||||
connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
|
connect(RectangleButton, SIGNAL(clicked()), this, SLOT(slotCreateRectangleTool()));
|
||||||
|
|
||||||
actionSetWidth = new QAction(tr("&Set Width"),this);
|
actionSetWidth = new QAction(tr("&Set Width"),this);
|
||||||
@@ -602,8 +602,8 @@ void IntelliPhotoGui::createMenus(){
|
|||||||
|
|
||||||
//Attach all actions to Render Settings
|
//Attach all actions to Render Settings
|
||||||
renderMenu = new QMenu(tr("&Fast Renderer"), this);
|
renderMenu = new QMenu(tr("&Fast Renderer"), this);
|
||||||
renderMenu->addAction(actionUpdateRenderSettingsOn);
|
renderMenu->addAction(actionUpdateFastRenderSettingsOn);
|
||||||
renderMenu->addAction(actionUpdateRenderSettingsOff);
|
renderMenu->addAction(actionUpdateFastRenderSettingsOff);
|
||||||
|
|
||||||
//Attach all Layer Creations to Menu
|
//Attach all Layer Creations to Menu
|
||||||
layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
|
layerCreationMenu = new QMenu(tr("&Create new Layer"), this);
|
||||||
@@ -783,10 +783,10 @@ void IntelliPhotoGui::createGui(){
|
|||||||
SwitchColorButton->setIcon(preview);
|
SwitchColorButton->setIcon(preview);
|
||||||
SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height()));
|
SwitchColorButton->setIconSize(QSize(Buttonsize.width() * 2,Buttonsize.height()));
|
||||||
|
|
||||||
ActiveLayerLine = new QLabel();
|
ActiveLayerLabel = new QLabel();
|
||||||
QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
|
QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
|
||||||
ActiveLayerLine->setText(string);
|
ActiveLayerLabel->setText(string);
|
||||||
ActiveLayerLine->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3);
|
ActiveLayerLabel->setFixedSize(Buttonsize.width() * 2 + 10,(Buttonsize.height() * 2) / 3);
|
||||||
|
|
||||||
IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
|
IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
|
||||||
if(activePicture) {
|
if(activePicture) {
|
||||||
@@ -837,7 +837,7 @@ void IntelliPhotoGui::createGui(){
|
|||||||
mainLayout->addWidget(FirstColorButton,9,2,1,1);
|
mainLayout->addWidget(FirstColorButton,9,2,1,1);
|
||||||
mainLayout->addWidget(SecondColorButton,9,3,1,1);
|
mainLayout->addWidget(SecondColorButton,9,3,1,1);
|
||||||
mainLayout->addWidget(SwitchColorButton,10,2,1,2);
|
mainLayout->addWidget(SwitchColorButton,10,2,1,2);
|
||||||
mainLayout->addWidget(ActiveLayerLine,11,2,1,2);
|
mainLayout->addWidget(ActiveLayerLabel,11,2,1,2);
|
||||||
mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2);
|
mainLayout->addWidget(ActiveLayerImageLabel,12,2,1,2);
|
||||||
mainLayout->addWidget(dimActive,13,2,1,2);
|
mainLayout->addWidget(dimActive,13,2,1,2);
|
||||||
mainLayout->addWidget(dimCanvas,14,2,1,2);
|
mainLayout->addWidget(dimCanvas,14,2,1,2);
|
||||||
@@ -923,7 +923,7 @@ void IntelliPhotoGui::setToolWidth(int value){
|
|||||||
|
|
||||||
void IntelliPhotoGui::UpdateGui(){
|
void IntelliPhotoGui::UpdateGui(){
|
||||||
QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
|
QString string = QString("Active Layer: %1").arg(paintingArea->getIndexOfActiveLayer() + 1);
|
||||||
ActiveLayerLine->setText(string);
|
ActiveLayerLabel->setText(string);
|
||||||
|
|
||||||
IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
|
IntelliImage* activePicture = paintingArea->getImageOfActiveLayer();
|
||||||
if(activePicture) {
|
if(activePicture) {
|
||||||
|
|||||||
@@ -43,8 +43,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
IntelliPhotoGui();
|
IntelliPhotoGui();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief UpdateGui a function to update all gui elements.
|
||||||
|
*/
|
||||||
void UpdateGui();
|
void UpdateGui();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief setToolWidth stes a width to the tool
|
||||||
|
* \param value - the width of the tool
|
||||||
|
*/
|
||||||
void setToolWidth(int value);
|
void setToolWidth(int value);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -54,182 +61,591 @@ protected:
|
|||||||
void closeEvent(QCloseEvent*event) override;
|
void closeEvent(QCloseEvent*event) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotOpen opens a new image
|
||||||
|
*/
|
||||||
void slotOpen();
|
void slotOpen();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSave saves the current canvas
|
||||||
|
*/
|
||||||
void slotSave();
|
void slotSave();
|
||||||
|
|
||||||
// layer slots here
|
/*!
|
||||||
|
* \brief slotCreateNewRasterLayer creates a new rasterImage
|
||||||
|
*/
|
||||||
void slotCreateNewRasterLayer();
|
void slotCreateNewRasterLayer();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateNewShapedLayer creates a new shapedImage
|
||||||
|
*/
|
||||||
void slotCreateNewShapedLayer();
|
void slotCreateNewShapedLayer();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotDeleteLayer deletes a layer
|
||||||
|
*/
|
||||||
void slotDeleteLayer();
|
void slotDeleteLayer();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetActiveLayer sets a layer to be active
|
||||||
|
*/
|
||||||
void slotSetActiveLayer();
|
void slotSetActiveLayer();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetActiveAlpha stes the alpha value of the active layer
|
||||||
|
*/
|
||||||
void slotSetActiveAlpha();
|
void slotSetActiveAlpha();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetPolygon sets a polygon to the active layer
|
||||||
|
*/
|
||||||
void slotSetPolygon();
|
void slotSetPolygon();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotPositionMoveUp moves the current layer to the front
|
||||||
|
*/
|
||||||
void slotPositionMoveUp();
|
void slotPositionMoveUp();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotPositionMoveDown moves the crrent layer to the back
|
||||||
|
*/
|
||||||
void slotPositionMoveDown();
|
void slotPositionMoveDown();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotPositionMoveLeft moves the current layer left
|
||||||
|
*/
|
||||||
void slotPositionMoveLeft();
|
void slotPositionMoveLeft();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotPositionMoveRight moves the current layer right
|
||||||
|
*/
|
||||||
void slotPositionMoveRight();
|
void slotPositionMoveRight();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotMoveLayerUp moves the current layer up
|
||||||
|
*/
|
||||||
void slotMoveLayerUp();
|
void slotMoveLayerUp();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotMoveLayerDown moves the current layer down
|
||||||
|
*/
|
||||||
void slotMoveLayerDown();
|
void slotMoveLayerDown();
|
||||||
|
|
||||||
void slotUpdateRenderSettingsOn();
|
/*!
|
||||||
void slotUpdateRenderSettingsOff();
|
* \brief slotUpdateFastRenderSettingsOn activates the fast renderer
|
||||||
|
*/
|
||||||
|
void slotUpdateFastRenderSettingsOn();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotUpdateFastRenderSettingsOff deactivates the fast render
|
||||||
|
*/
|
||||||
|
void slotUpdateFastRenderSettingsOff();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetFirstColor sets the first color
|
||||||
|
*/
|
||||||
void slotSetFirstColor();
|
void slotSetFirstColor();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetSecondColor sets the second color
|
||||||
|
*/
|
||||||
void slotSetSecondColor();
|
void slotSetSecondColor();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSwapColor swaps first and second color
|
||||||
|
*/
|
||||||
void slotSwapColor();
|
void slotSwapColor();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreatePenTool creates the pen tool
|
||||||
|
*/
|
||||||
void slotCreatePenTool();
|
void slotCreatePenTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreatePlainTool creates the plain tool
|
||||||
|
*/
|
||||||
void slotCreatePlainTool();
|
void slotCreatePlainTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateLineTool creates the line tool
|
||||||
|
*/
|
||||||
void slotCreateLineTool();
|
void slotCreateLineTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateRectangleTool creates the rectangle tool
|
||||||
|
*/
|
||||||
void slotCreateRectangleTool();
|
void slotCreateRectangleTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateCircleTool creates the cricle tool
|
||||||
|
*/
|
||||||
void slotCreateCircleTool();
|
void slotCreateCircleTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreatePolygonTool creates the polygon tool
|
||||||
|
*/
|
||||||
void slotCreatePolygonTool();
|
void slotCreatePolygonTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateFloodFillTool creates the floodfill tool
|
||||||
|
*/
|
||||||
void slotCreateFloodFillTool();
|
void slotCreateFloodFillTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotCreateGradientTool creates the gradient tool
|
||||||
|
*/
|
||||||
void slotCreateGradientTool();
|
void slotCreateGradientTool();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotAboutDialog displays the about dialog
|
||||||
|
*/
|
||||||
void slotAboutDialog();
|
void slotAboutDialog();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotChangeDim changes the dimension of the canvas
|
||||||
|
*/
|
||||||
void slotChangeDim();
|
void slotChangeDim();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotEnterPressed read current input of input boxes, and adjusts settings
|
||||||
|
*/
|
||||||
void slotEnterPressed();
|
void slotEnterPressed();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetWidth sets the width of the tool
|
||||||
|
*/
|
||||||
void slotSetWidth();
|
void slotSetWidth();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotSetInnerAlpha sets the inner alpha of the tool
|
||||||
|
*/
|
||||||
void slotSetInnerAlpha();
|
void slotSetInnerAlpha();
|
||||||
|
|
||||||
void slotResetTools();
|
/*!
|
||||||
|
* \brief slotResetTools resets all tool Buttons to unclikced
|
||||||
|
*/
|
||||||
|
void slotResetToolButtons();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotGoBack undoes the last action
|
||||||
|
*/
|
||||||
void slotGoBack();
|
void slotGoBack();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief slotGoForward redoes the last action
|
||||||
|
*/
|
||||||
void slotGoForward();
|
void slotGoForward();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
//setup functions for gui
|
/*!
|
||||||
|
* \brief createActions creates all actions
|
||||||
|
*/
|
||||||
void createActions();
|
void createActions();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief createMenus creates all menus
|
||||||
|
*/
|
||||||
void createMenus();
|
void createMenus();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief createGui sets up the gui
|
||||||
|
*/
|
||||||
void createGui();
|
void createGui();
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief setIntelliStyle sets the stylesheet of the gui
|
||||||
|
*/
|
||||||
void setIntelliStyle();
|
void setIntelliStyle();
|
||||||
|
|
||||||
// Will check if changes have occurred since last save
|
/*!
|
||||||
|
* \brief maybeSave chekcs if the canvas has unsaved work
|
||||||
|
* \return return true if there is unsaved work, false otherwise
|
||||||
|
*/
|
||||||
bool maybeSave();
|
bool maybeSave();
|
||||||
// Opens the Save dialog and saves
|
|
||||||
|
/*!
|
||||||
|
* \brief saveFile saves the canvas
|
||||||
|
* \param fileFormat the ileformat to save into
|
||||||
|
* \return true if saving worked, false otherwise
|
||||||
|
*/
|
||||||
bool saveFile(const QByteArray &fileFormat);
|
bool saveFile(const QByteArray &fileFormat);
|
||||||
|
|
||||||
//basic to set tool values to begin
|
/*!
|
||||||
|
* \brief setDefaultValues sets basic tool values
|
||||||
|
*/
|
||||||
void setDefaultValues();
|
void setDefaultValues();
|
||||||
|
|
||||||
// What we'll draw on
|
/*!
|
||||||
|
* \brief paintingArea the logic manager of the backbone
|
||||||
|
*/
|
||||||
PaintingArea* paintingArea;
|
PaintingArea* paintingArea;
|
||||||
|
|
||||||
//used to display a preview of the active layer
|
/*!
|
||||||
|
* \brief preview a small pixmap to show the active layer
|
||||||
|
*/
|
||||||
QPixmap preview;
|
QPixmap preview;
|
||||||
|
|
||||||
//size of all buttons
|
/*!
|
||||||
|
* \brief Buttonsize the size of all standard buttons
|
||||||
|
*/
|
||||||
const QSize Buttonsize = QSize(35,35);
|
const QSize Buttonsize = QSize(35,35);
|
||||||
|
|
||||||
//buttons used for gui
|
/*!
|
||||||
|
* \brief CircleButton for creating a circle Tool
|
||||||
|
*/
|
||||||
QPushButton* CircleButton;
|
QPushButton* CircleButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief FloodFillButton for creating a floodfill Tool
|
||||||
|
*/
|
||||||
QPushButton* FloodFillButton;
|
QPushButton* FloodFillButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief GradientButton for creating a gradient Tool
|
||||||
|
*/
|
||||||
QPushButton* GradientButton;
|
QPushButton* GradientButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief LineButton for creating a line Tool.
|
||||||
|
*/
|
||||||
QPushButton* LineButton;
|
QPushButton* LineButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief PenButton for creating a pen tool.
|
||||||
|
*/
|
||||||
QPushButton* PenButton;
|
QPushButton* PenButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief PlainButton for creating a plain Tool.
|
||||||
|
*/
|
||||||
QPushButton* PlainButton;
|
QPushButton* PlainButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief PolygonButton for creating a Polygon Tool.
|
||||||
|
*/
|
||||||
QPushButton* PolygonButton;
|
QPushButton* PolygonButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief RectangleButton for creating a Rectangle Tool.
|
||||||
|
*/
|
||||||
QPushButton* RectangleButton;
|
QPushButton* RectangleButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief FirstColorButton for setting the First color.
|
||||||
|
*/
|
||||||
QPushButton* FirstColorButton;
|
QPushButton* FirstColorButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief SecondColorButton for setting the Second color.
|
||||||
|
*/
|
||||||
QPushButton* SecondColorButton;
|
QPushButton* SecondColorButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief SwitchColorButton for switching second and first color
|
||||||
|
*/
|
||||||
QPushButton* SwitchColorButton;
|
QPushButton* SwitchColorButton;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief dimActive for displaying the dimesnion of the active layer
|
||||||
|
*/
|
||||||
QPushButton* dimActive;
|
QPushButton* dimActive;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief dimCanvas for displaying the dimension of the canvas
|
||||||
|
*/
|
||||||
QPushButton* dimCanvas;
|
QPushButton* dimCanvas;
|
||||||
|
|
||||||
//labels used for gui
|
/*!
|
||||||
|
* \brief WidthLine to indicate the line width
|
||||||
|
*/
|
||||||
QLabel* WidthLine;
|
QLabel* WidthLine;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief innerAlphaLine to indicate the inner alpha
|
||||||
|
*/
|
||||||
QLabel* innerAlphaLine;
|
QLabel* innerAlphaLine;
|
||||||
QLabel* ActiveLayerLine;
|
|
||||||
|
/*!
|
||||||
|
* \brief ActiveLayerLine to indicate the active Layer
|
||||||
|
*/
|
||||||
|
QLabel* ActiveLayerLabel;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ActiveLayerImageLabel to indicate the active Image
|
||||||
|
*/
|
||||||
QLabel* ActiveLayerImageLabel;
|
QLabel* ActiveLayerImageLabel;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief FastRendererLabel to indicate render settings
|
||||||
|
*/
|
||||||
QLabel* FastRendererLabel;
|
QLabel* FastRendererLabel;
|
||||||
|
|
||||||
//scroll area to display canvas
|
/*!
|
||||||
|
* \brief ScrollArea to scroll the painting area on
|
||||||
|
*/
|
||||||
QScrollArea* ScrollArea;
|
QScrollArea* ScrollArea;
|
||||||
|
|
||||||
//line edits used for gui
|
/*!
|
||||||
|
* \brief EditLineWidth to get the input of the line width
|
||||||
|
*/
|
||||||
QLineEdit* EditLineWidth;
|
QLineEdit* EditLineWidth;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief EditLineInnerAlpha to get the input of the inner alpha
|
||||||
|
*/
|
||||||
QLineEdit* EditLineInnerAlpha;
|
QLineEdit* EditLineInnerAlpha;
|
||||||
|
|
||||||
//int validator used for gui
|
/*!
|
||||||
|
* \brief ValidatorLineWidth to limit input
|
||||||
|
*/
|
||||||
QIntValidator* ValidatorLineWidth;
|
QIntValidator* ValidatorLineWidth;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief ValidatorInnerAlpha to limit input
|
||||||
|
*/
|
||||||
QIntValidator* ValidatorInnerAlpha;
|
QIntValidator* ValidatorInnerAlpha;
|
||||||
|
|
||||||
|
|
||||||
// The menu widgets
|
/*!
|
||||||
|
* \brief saveAsMenu to display save options
|
||||||
|
*/
|
||||||
QMenu* saveAsMenu;
|
QMenu* saveAsMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief fileMenu to display file options
|
||||||
|
*/
|
||||||
QMenu* fileMenu;
|
QMenu* fileMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief renderMenu to display render options
|
||||||
|
*/
|
||||||
QMenu* renderMenu;
|
QMenu* renderMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief optionMenu to display general options
|
||||||
|
*/
|
||||||
QMenu* optionMenu;
|
QMenu* optionMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief layerCreationMenu to display layer creation options
|
||||||
|
*/
|
||||||
QMenu* layerCreationMenu;
|
QMenu* layerCreationMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief layerMenu to display layer options
|
||||||
|
*/
|
||||||
QMenu* layerMenu;
|
QMenu* layerMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief colorMenu to display color options
|
||||||
|
*/
|
||||||
QMenu* colorMenu;
|
QMenu* colorMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief toolCreationMenu to display tool creation options
|
||||||
|
*/
|
||||||
QMenu* toolCreationMenu;
|
QMenu* toolCreationMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief toolSettingsMenu to display settings options
|
||||||
|
*/
|
||||||
QMenu* toolSettingsMenu;
|
QMenu* toolSettingsMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief toolMenu to display tool options
|
||||||
|
*/
|
||||||
QMenu* toolMenu;
|
QMenu* toolMenu;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief helpMenu to display the help options
|
||||||
|
*/
|
||||||
QMenu* helpMenu;
|
QMenu* helpMenu;
|
||||||
|
|
||||||
// All the actions that can occur
|
/*!
|
||||||
// meta image actions (need further modularisation)
|
* \brief actionOpen to open a project
|
||||||
|
*/
|
||||||
QAction* actionOpen;
|
QAction* actionOpen;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionExit to exit the project
|
||||||
|
*/
|
||||||
QAction* actionExit;
|
QAction* actionExit;
|
||||||
|
|
||||||
//Rendersetting actions
|
/*!
|
||||||
QAction*actionUpdateRenderSettingsOn;
|
* \brief actionUpdateFastRenderSettingsOn to set fast render settings to on
|
||||||
QAction*actionUpdateRenderSettingsOff;
|
*/
|
||||||
|
QAction* actionUpdateFastRenderSettingsOn;
|
||||||
|
|
||||||
// color Picker actions
|
/*!
|
||||||
|
* \brief actionUpdateFastRenderSettingsOff to set fast render settings to false;
|
||||||
|
*/
|
||||||
|
QAction* actionUpdateFastRenderSettingsOff;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionColorPickerFirstColor to set the first color
|
||||||
|
*/
|
||||||
QAction* actionColorPickerFirstColor;
|
QAction* actionColorPickerFirstColor;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionColorPickerSecondColor to set the second color
|
||||||
|
*/
|
||||||
QAction* actionColorPickerSecondColor;
|
QAction* actionColorPickerSecondColor;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionColorSwap to swap first and second color
|
||||||
|
*/
|
||||||
QAction* actionColorSwap;
|
QAction* actionColorSwap;
|
||||||
|
|
||||||
// tool actions
|
/*!
|
||||||
|
* \brief actionCreatePenTool to create a pen tool
|
||||||
|
*/
|
||||||
QAction* actionCreatePenTool;
|
QAction* actionCreatePenTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreatePlainTool to create a plain tool
|
||||||
|
*/
|
||||||
QAction* actionCreatePlainTool;
|
QAction* actionCreatePlainTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateLineTool to create a line tool
|
||||||
|
*/
|
||||||
QAction* actionCreateLineTool;
|
QAction* actionCreateLineTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateRectangleTool to create a rectangle tool
|
||||||
|
*/
|
||||||
QAction* actionCreateRectangleTool;
|
QAction* actionCreateRectangleTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateCircleTool to create a circle tool
|
||||||
|
*/
|
||||||
QAction* actionCreateCircleTool;
|
QAction* actionCreateCircleTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreatePolygonTool to create a polygon tool
|
||||||
|
*/
|
||||||
QAction* actionCreatePolygonTool;
|
QAction* actionCreatePolygonTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateFloodFillTool to create a floodfill tool
|
||||||
|
*/
|
||||||
QAction* actionCreateFloodFillTool;
|
QAction* actionCreateFloodFillTool;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateGradientTool to create a gradient tool
|
||||||
|
*/
|
||||||
QAction* actionCreateGradientTool;
|
QAction* actionCreateGradientTool;
|
||||||
|
|
||||||
// dimension actions
|
/*!
|
||||||
|
* \brief actionChangeDim
|
||||||
|
*/
|
||||||
QAction* actionChangeDim;
|
QAction* actionChangeDim;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionSetWidth to set the width
|
||||||
|
*/
|
||||||
QAction* actionSetWidth;
|
QAction* actionSetWidth;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionSetInnerAlpha to set the inner alha
|
||||||
|
*/
|
||||||
QAction* actionSetInnerAlpha;
|
QAction* actionSetInnerAlpha;
|
||||||
|
|
||||||
// dialog actions
|
/*!
|
||||||
|
* \brief actionAboutDialog to show the
|
||||||
|
*/
|
||||||
QAction* actionAboutDialog;
|
QAction* actionAboutDialog;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionAboutQtDialog to show the qt input dialog
|
||||||
|
*/
|
||||||
QAction* actionAboutQtDialog;
|
QAction* actionAboutQtDialog;
|
||||||
|
|
||||||
// layer change actions
|
/*!
|
||||||
|
* \brief actionCreateNewRasterLayer creates a raster image
|
||||||
|
*/
|
||||||
QAction* actionCreateNewRasterLayer;
|
QAction* actionCreateNewRasterLayer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionCreateNewShapedLayer creates a shaped image
|
||||||
|
*/
|
||||||
QAction* actionCreateNewShapedLayer;
|
QAction* actionCreateNewShapedLayer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionDeleteLayer deletes a layer
|
||||||
|
*/
|
||||||
QAction* actionDeleteLayer;
|
QAction* actionDeleteLayer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionSetActiveLayer sets a layer to active
|
||||||
|
*/
|
||||||
QAction* actionSetActiveLayer;
|
QAction* actionSetActiveLayer;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionSetActiveAlpha sets the alpha of the active layer
|
||||||
|
*/
|
||||||
QAction* actionSetActiveAlpha;
|
QAction* actionSetActiveAlpha;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionSetPolygon sets the polygon data to the image
|
||||||
|
*/
|
||||||
QAction* actionSetPolygon;
|
QAction* actionSetPolygon;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMovePositionUp moves the image up
|
||||||
|
*/
|
||||||
QAction* actionMovePositionUp;
|
QAction* actionMovePositionUp;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMovePositionDown moves the image down
|
||||||
|
*/
|
||||||
QAction* actionMovePositionDown;
|
QAction* actionMovePositionDown;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMovePositionLeft moves the image left
|
||||||
|
*/
|
||||||
QAction* actionMovePositionLeft;
|
QAction* actionMovePositionLeft;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMovePositionRight moves the image right
|
||||||
|
*/
|
||||||
QAction* actionMovePositionRight;
|
QAction* actionMovePositionRight;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMoveLayerUp moves the layer to the front
|
||||||
|
*/
|
||||||
QAction* actionMoveLayerUp;
|
QAction* actionMoveLayerUp;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionMoveLayerDown moves the layer to the back
|
||||||
|
*/
|
||||||
QAction* actionMoveLayerDown;
|
QAction* actionMoveLayerDown;
|
||||||
|
|
||||||
// actions tied to specific file formats
|
/*!
|
||||||
|
* \brief actionSaveAs saves the project as
|
||||||
|
*/
|
||||||
QList<QAction*> actionSaveAs;
|
QList<QAction*> actionSaveAs;
|
||||||
|
|
||||||
|
/*!
|
||||||
// history actions
|
* \brief actionGoBack does a undo action
|
||||||
|
*/
|
||||||
QAction* actionGoBack;
|
QAction* actionGoBack;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief actionGoForward does a redo action
|
||||||
|
*/
|
||||||
QAction* actionGoForward;
|
QAction* actionGoForward;
|
||||||
|
|
||||||
// main GUI elements
|
/*!
|
||||||
|
* \brief centralGuiWidget the main gui widget to place all others on
|
||||||
|
*/
|
||||||
QWidget* centralGuiWidget;
|
QWidget* centralGuiWidget;
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief mainLayout the layout to order all gui elements
|
||||||
|
*/
|
||||||
QGridLayout* mainLayout;
|
QGridLayout* mainLayout;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user