添加ALT+↑↓切换Layer顺序的快捷功能

dev-wuyize
karlis 2023-03-21 22:58:42 +08:00
parent 88dc039fe8
commit d1aeb28b97
3 changed files with 77 additions and 3 deletions

View File

@ -309,9 +309,8 @@ void FolderLayerWrapper::paint(QPainter* painter, QTransform transform, bool for
return; return;
LayerWrapper::paint(painter, transform, force); LayerWrapper::paint(painter, transform, force);
transform = property.transform * transform; transform = property.transform * transform;
//qDebug() << transform; for (auto it = children.rbegin(); it != children.rend(); ++it)
for (auto& child : children) (*it)->paint(painter, transform, force);
child->paint(painter, transform, force);
} }
void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool force) void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool force)

View File

@ -3,6 +3,7 @@
#include <QMenu> #include <QMenu>
#include "./EditorWidgetComponent/LayerCreateWidget.h" #include "./EditorWidgetComponent/LayerCreateWidget.h"
#include <QTimer> #include <QTimer>
#include <QKeyEvent>
LayerTreeWidget::LayerTreeWidget(QWidget *parent) LayerTreeWidget::LayerTreeWidget(QWidget *parent)
{ {
@ -132,3 +133,74 @@ void LayerTreeWidget::onRenameEvent()
void LayerTreeWidget::refresh() { void LayerTreeWidget::refresh() {
this->root->refreshTreeItem(); this->root->refreshTreeItem();
} }
void LayerTreeWidget::keyPressEvent(QKeyEvent* event)
{
if (QApplication::keyboardModifiers() == Qt::ALT)
{
if (event->key() == Qt::Key_Up)
{
pushUpLayer();
}
else if (event->key() == Qt::Key_Down)
{
pushDownLayer();
}
}
}
void LayerTreeWidget::pushUpLayer()
{
if (this->selectedItem == nullptr)
return;
auto layer = this->selectedItem->data(0, Qt::UserRole).value<LayerWrapper*>();
if (layer == nullptr)
return;
auto parent = layer->getParent();
int index = -1;
for (int i = 0; i < parent->children.size(); i++)
{
if (parent->children[i].get() == layer)
{
index = i;
break;
}
}
if (index == -1 || index == 0)
return;
auto temp = parent->children[index - 1];
parent->children[index - 1] = parent->children[index];
parent->children[index] = temp;
layer->qTreeWidgetItem->parent()->removeChild(layer->qTreeWidgetItem);
parent->qTreeWidgetItem->insertChild(index - 1, layer->qTreeWidgetItem);
this->setCurrentItem(layer->qTreeWidgetItem);
emit triggerCentralRefresh();
}
void LayerTreeWidget::pushDownLayer()
{
if (this->selectedItem == nullptr)
return;
auto layer = this->selectedItem->data(0, Qt::UserRole).value<LayerWrapper*>();
if (layer == nullptr)
return;
auto parent = layer->getParent();
int index = -1;
for (int i = 0; i < parent->children.size(); i++)
{
if (parent->children[i].get() == layer)
{
index = i;
break;
}
}
if (index == -1 || index == parent->children.size() - 1)
return;
auto temp = parent->children[index + 1];
parent->children[index + 1] = parent->children[index];
parent->children[index] = temp;
layer->qTreeWidgetItem->parent()->removeChild(layer->qTreeWidgetItem);
parent->qTreeWidgetItem->insertChild(index + 1, layer->qTreeWidgetItem);
this->setCurrentItem(layer->qTreeWidgetItem);
emit triggerCentralRefresh();
}

View File

@ -9,6 +9,8 @@ class LayerTreeWidget : public QTreeWidget
private: private:
QTreeWidgetItem *selectedItem; QTreeWidgetItem *selectedItem;
LayerWrapper *copiedItem; LayerWrapper *copiedItem;
void pushUpLayer();
void pushDownLayer();
public: public:
ElementManager* elementManager; ElementManager* elementManager;
@ -17,6 +19,7 @@ class LayerTreeWidget : public QTreeWidget
void onRenameEvent(); void onRenameEvent();
void popMenu(const QPoint &pos); void popMenu(const QPoint &pos);
void refresh(); void refresh();
void keyPressEvent(QKeyEvent* event) override;
// void mouseDoubleClickEvent(QMouseEvent *event) override; // void mouseDoubleClickEvent(QMouseEvent *event) override;
// void onItemDoubleClicked(QTreeWidgetItem *item, int column = 0); // void onItemDoubleClicked(QTreeWidgetItem *item, int column = 0);