Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Created basic layer movement functionality (up, down) #2108

Merged
merged 10 commits into from
Jan 29, 2022
4 changes: 4 additions & 0 deletions data/graphics.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -90,5 +90,9 @@
<file>img/material/white/square.svg</file>
<file>img/material/white/text.svg</file>
<file>img/material/white/undo-variant.svg</file>
<file>img/material/black/move_down.svg</file>
<file>img/material/black/move_up.svg</file>
<file>img/material/white/move_down.svg</file>
<file>img/material/white/move_up.svg</file>
</qresource>
</RCC>
4 changes: 4 additions & 0 deletions data/img/material/black/move_down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions data/img/material/black/move_up.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions data/img/material/white/move_down.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions data/img/material/white/move_up.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
11 changes: 11 additions & 0 deletions src/widgets/capture/capturetoolobjects.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,17 @@ void CaptureToolObjects::append(const QPointer<CaptureTool>& captureTool)
}
}

void CaptureToolObjects::insert(int index,
const QPointer<CaptureTool>& captureTool)
{
if (!captureTool.isNull() && index >= 0 &&
index <= m_captureToolObjects.size()) {
m_captureToolObjects.insert(index,
captureTool->copy(captureTool->parent()));
m_imageCache.clear();
}
}

QPointer<CaptureTool> CaptureToolObjects::at(int index)
{
if (index >= 0 && index < m_captureToolObjects.size()) {
Expand Down
1 change: 1 addition & 0 deletions src/widgets/capture/capturetoolobjects.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ class CaptureToolObjects : public QObject
explicit CaptureToolObjects(QObject* parent = nullptr);
QList<QPointer<CaptureTool>> captureToolObjects();
void append(const QPointer<CaptureTool>& captureTool);
void insert(int index, const QPointer<CaptureTool>& captureTool);
void removeAt(int index);
void clear();
int size();
Expand Down
28 changes: 28 additions & 0 deletions src/widgets/capture/capturewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -972,6 +972,14 @@ void CaptureWidget::initPanel()
&UtilityPanel::layerChanged,
this,
&CaptureWidget::updateActiveLayer);
connect(m_panel,
&UtilityPanel::moveUpClicked,
this,
&CaptureWidget::onMoveCaptureToolUp);
connect(m_panel,
&UtilityPanel::moveDownClicked,
this,
&CaptureWidget::onMoveCaptureToolDown);

m_sidePanel = new SidePanelWidget(&m_context.screenshot, this);
connect(m_sidePanel,
Expand Down Expand Up @@ -1271,6 +1279,26 @@ void CaptureWidget::updateActiveLayer(int layer)
updateSelectionState();
}

void CaptureWidget::onMoveCaptureToolUp(int captureToolIndex)
{
m_captureToolObjectsBackup = m_captureToolObjects;
pushObjectsStateToUndoStack();
auto tool = m_captureToolObjects.at(captureToolIndex);
m_captureToolObjects.removeAt(captureToolIndex);
m_captureToolObjects.insert(captureToolIndex - 1, tool);
updateLayersPanel();
}

void CaptureWidget::onMoveCaptureToolDown(int captureToolIndex)
{
m_captureToolObjectsBackup = m_captureToolObjects;
pushObjectsStateToUndoStack();
auto tool = m_captureToolObjects.at(captureToolIndex);
m_captureToolObjects.removeAt(captureToolIndex);
m_captureToolObjects.insert(captureToolIndex + 1, tool);
updateLayersPanel();
}

void CaptureWidget::selectAll()
{
m_selection->show();
Expand Down
2 changes: 2 additions & 0 deletions src/widgets/capture/capturewidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ private slots:
void onToolSizeChanged(int size);
void onToolSizeSettled(int size);
void updateActiveLayer(int layer);
void onMoveCaptureToolUp(int captureToolIndex);
void onMoveCaptureToolDown(int captureToolIndex);
void selectAll();

public:
Expand Down
53 changes: 47 additions & 6 deletions src/widgets/panel/utilitypanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ UtilityPanel::UtilityPanel(CaptureWidget* captureWidget)
, m_layersLayout(nullptr)
, m_captureTools(nullptr)
, m_buttonDelete(nullptr)
, m_buttonMoveUp(nullptr)
, m_buttonMoveDown(nullptr)
{
initInternalPanel();
setAttribute(Qt::WA_TransparentForMouseEvents);
Expand Down Expand Up @@ -146,14 +148,35 @@ void UtilityPanel::initInternalPanel()
m_buttonDelete = new QPushButton(this);
m_buttonDelete->setIcon(QIcon(":/img/material/black/delete.svg"));
m_buttonDelete->setDisabled(true);

m_buttonMoveUp = new QPushButton(this);
m_buttonMoveUp->setIcon(QIcon(":/img/material/black/move_up.svg"));
m_buttonMoveUp->setDisabled(true);

m_buttonMoveDown = new QPushButton(this);
m_buttonMoveDown->setIcon(QIcon(":/img/material/black/move_down.svg"));
m_buttonMoveDown->setDisabled(true);

layersButtons->addWidget(m_buttonDelete);
layersButtons->addWidget(m_buttonMoveUp);
layersButtons->addWidget(m_buttonMoveDown);
layersButtons->addStretch();

connect(m_buttonDelete,
SIGNAL(clicked(bool)),
this,
SLOT(slotButtonDelete(bool)));

connect(m_buttonMoveUp,
&QPushButton::clicked,
this,
&UtilityPanel::slotUpClicked);

connect(m_buttonMoveDown,
&QPushButton::clicked,
this,
&UtilityPanel::slotDownClicked);

// Bottom
QPushButton* closeButton = new QPushButton(this);
closeButton->setText(tr("Close"));
Expand Down Expand Up @@ -192,14 +215,32 @@ int UtilityPanel::activeLayerIndex()

void UtilityPanel::onCurrentRowChanged(int currentRow)
{
if (currentRow > 0) {
m_buttonDelete->setDisabled(false);
} else {
m_buttonDelete->setDisabled(true);
}
m_buttonDelete->setDisabled(currentRow <= 0);
m_buttonMoveDown->setDisabled(currentRow == 0 ||
currentRow + 1 == m_captureTools->count());
m_buttonMoveUp->setDisabled(currentRow <= 1);

emit layerChanged(activeLayerIndex());
}

void UtilityPanel::slotUpClicked(bool clicked)
{
Q_UNUSED(clicked);
// subtract 1 because there's <empty> in m_captureTools as [0] element
int toolRow = m_captureTools->currentRow() - 1;
m_captureTools->setCurrentRow(toolRow);
emit moveUpClicked(toolRow);
}

void UtilityPanel::slotDownClicked(bool clicked)
{
Q_UNUSED(clicked);
// subtract 1 because there's <empty> in m_captureTools as [0] element
int toolRow = m_captureTools->currentRow() - 1;
m_captureTools->setCurrentRow(toolRow + 2);
emit moveDownClicked(toolRow);
}

void UtilityPanel::slotButtonDelete(bool clicked)
{
Q_UNUSED(clicked)
Expand All @@ -218,4 +259,4 @@ void UtilityPanel::slotButtonDelete(bool clicked)
bool UtilityPanel::isVisible() const
{
return !m_internalPanel->isHidden();
}
}
8 changes: 8 additions & 0 deletions src/widgets/panel/utilitypanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,18 @@ class UtilityPanel : public QWidget

signals:
void layerChanged(int layer);
void moveUpClicked(int currentRow);
void moveDownClicked(int currentRow);

public slots:
void toggle();
void slotButtonDelete(bool clicked);
void onCurrentRowChanged(int currentRow);

private slots:
void slotUpClicked(bool clicked);
void slotDownClicked(bool clicked);

private:
void initInternalPanel();

Expand All @@ -55,5 +61,7 @@ public slots:
QVBoxLayout* m_layersLayout;
QListWidget* m_captureTools;
QPushButton* m_buttonDelete;
QPushButton* m_buttonMoveUp;
QPushButton* m_buttonMoveDown;
CaptureWidget* m_captureWidget;
};