Skip to content

Commit

Permalink
Add xyz lock
Browse files Browse the repository at this point in the history
  • Loading branch information
huxingyi committed Apr 16, 2018
1 parent dd976b7 commit a1107b5
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 19 deletions.
53 changes: 44 additions & 9 deletions src/skeletondocument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ SkeletonDocument::SkeletonDocument() :
originY(0),
originZ(0),
editMode(SkeletonDocumentEditMode::Select),
xlocked(false),
ylocked(false),
zlocked(false),
// private
m_resultMeshIsObsolete(false),
m_meshGenerator(nullptr),
Expand Down Expand Up @@ -434,18 +437,24 @@ void SkeletonDocument::moveNodeBy(QUuid nodeId, float x, float y, float z)
}
if (isPartReadonly(it->second.partId))
return;
it->second.x += x;
it->second.y += y;
it->second.z += z;
if (!xlocked)
it->second.x += x;
if (!ylocked)
it->second.y += y;
if (!zlocked)
it->second.z += z;
emit nodeOriginChanged(nodeId);
emit skeletonChanged();
}

void SkeletonDocument::moveOriginBy(float x, float y, float z)
{
originX += x;
originY += y;
originZ += z;
if (!xlocked)
originX += x;
if (!ylocked)
originY += y;
if (!zlocked)
originZ += z;
emit originChanged();
emit skeletonChanged();
}
Expand All @@ -459,9 +468,12 @@ void SkeletonDocument::setNodeOrigin(QUuid nodeId, float x, float y, float z)
}
if (isPartReadonly(it->second.partId))
return;
it->second.x = x;
it->second.y = y;
it->second.z = z;
if (!xlocked)
it->second.x = x;
if (!ylocked)
it->second.y = y;
if (!zlocked)
it->second.z = z;
emit nodeOriginChanged(nodeId);
emit skeletonChanged();
}
Expand Down Expand Up @@ -995,3 +1007,26 @@ bool SkeletonDocument::isEdgeEditable(QUuid edgeId) const
return !isPartReadonly(edge->partId);
}

void SkeletonDocument::setXlockState(bool locked)
{
if (xlocked == locked)
return;
xlocked = locked;
emit xlockStateChanged();
}

void SkeletonDocument::setYlockState(bool locked)
{
if (ylocked == locked)
return;
ylocked = locked;
emit ylockStateChanged();
}

void SkeletonDocument::setZlockState(bool locked)
{
if (zlocked == locked)
return;
zlocked = locked;
emit zlockStateChanged();
}
9 changes: 9 additions & 0 deletions src/skeletondocument.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,17 @@ class SkeletonDocument : public QObject
void partZmirrorStateChanged(QUuid partId);
void cleanup();
void originChanged();
void xlockStateChanged();
void ylockStateChanged();
void zlockStateChanged();
public: // need initialize
float originX;
float originY;
float originZ;
SkeletonDocumentEditMode editMode;
bool xlocked;
bool ylocked;
bool zlocked;
public:
SkeletonDocument();
~SkeletonDocument();
Expand Down Expand Up @@ -205,6 +211,9 @@ public slots:
void batchChangeEnd();
void reset();
void breakEdge(QUuid edgeId);
void setXlockState(bool locked);
void setYlockState(bool locked);
void setZlockState(bool locked);
private:
void splitPartByNode(std::vector<std::vector<QUuid>> *groups, QUuid nodeId);
void joinNodeAndNeiborsToGroup(std::vector<QUuid> *group, QUuid nodeId, std::set<QUuid> *visitMap, QUuid noUseEdgeId=QUuid());
Expand Down
80 changes: 73 additions & 7 deletions src/skeletondocumentwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,22 +82,34 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() :
toolButtonLayout->setContentsMargins(5, 10, 4, 0);

QPushButton *undoButton = new QPushButton(QChar(fa::undo));
initButton(undoButton);
initAwesomeButton(undoButton);

QPushButton *addButton = new QPushButton(QChar(fa::plus));
initButton(addButton);
initAwesomeButton(addButton);

QPushButton *selectButton = new QPushButton(QChar(fa::mousepointer));
initButton(selectButton);
initAwesomeButton(selectButton);

QPushButton *dragButton = new QPushButton(QChar(fa::handrocko));
initButton(dragButton);
initAwesomeButton(dragButton);

QPushButton *zoomInButton = new QPushButton(QChar(fa::searchplus));
initButton(zoomInButton);
initAwesomeButton(zoomInButton);

QPushButton *zoomOutButton = new QPushButton(QChar(fa::searchminus));
initButton(zoomOutButton);
initAwesomeButton(zoomOutButton);

m_xlockButton = new QPushButton(QChar('X'));
initLockButton(m_xlockButton);
updateXlockButtonState();

m_ylockButton = new QPushButton(QChar('Y'));
initLockButton(m_ylockButton);
updateYlockButtonState();

m_zlockButton = new QPushButton(QChar('Z'));
initLockButton(m_zlockButton);
updateZlockButtonState();

toolButtonLayout->addWidget(undoButton);
toolButtonLayout->addSpacing(10);
Expand All @@ -106,6 +118,10 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() :
toolButtonLayout->addWidget(dragButton);
toolButtonLayout->addWidget(zoomInButton);
toolButtonLayout->addWidget(zoomOutButton);
toolButtonLayout->addSpacing(10);
toolButtonLayout->addWidget(m_xlockButton);
toolButtonLayout->addWidget(m_ylockButton);
toolButtonLayout->addWidget(m_zlockButton);

QLabel *verticalLogoLabel = new QLabel;
QImage verticalLogoImage;
Expand Down Expand Up @@ -355,6 +371,16 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() :
m_document->setEditMode(SkeletonDocumentEditMode::ZoomOut);
});

connect(m_xlockButton, &QPushButton::clicked, [=]() {
m_document->setXlockState(!m_document->xlocked);
});
connect(m_ylockButton, &QPushButton::clicked, [=]() {
m_document->setYlockState(!m_document->ylocked);
});
connect(m_zlockButton, &QPushButton::clicked, [=]() {
m_document->setZlockState(!m_document->zlocked);
});

connect(m_document, &SkeletonDocument::editModeChanged, graphicsWidget, &SkeletonGraphicsWidget::editModeChanged);

connect(graphicsWidget, &SkeletonGraphicsWidget::addNode, m_document, &SkeletonDocument::addNode);
Expand Down Expand Up @@ -416,6 +442,10 @@ SkeletonDocumentWindow::SkeletonDocumentWindow() :
graphicsWidget->showContextMenu(graphicsWidget->mapFromGlobal(m_modelWidget->mapToGlobal(pos)));
});

connect(m_document, &SkeletonDocument::xlockStateChanged, this, &SkeletonDocumentWindow::updateXlockButtonState);
connect(m_document, &SkeletonDocument::ylockStateChanged, this, &SkeletonDocumentWindow::updateYlockButtonState);
connect(m_document, &SkeletonDocument::zlockStateChanged, this, &SkeletonDocumentWindow::updateZlockButtonState);

connect(this, &SkeletonDocumentWindow::initialized, m_document, &SkeletonDocument::uiReady);
}

Expand Down Expand Up @@ -525,14 +555,27 @@ void SkeletonDocumentWindow::seeAcknowlegements()
SkeletonDocumentWindow::showAcknowlegements();
}

void SkeletonDocumentWindow::initButton(QPushButton *button)
void SkeletonDocumentWindow::initAwesomeButton(QPushButton *button)
{
button->setFont(Theme::awesome()->font(Theme::toolIconFontSize));
button->setFixedSize(Theme::toolIconSize, Theme::toolIconSize);
button->setStyleSheet("QPushButton {color: #f7d9c8}");
button->setFocusPolicy(Qt::NoFocus);
}

void SkeletonDocumentWindow::initLockButton(QPushButton *button)
{
QFont font;
font.setWeight(QFont::Light);
font.setPixelSize(Theme::toolIconFontSize);
font.setBold(false);

button->setFont(font);
button->setFixedSize(Theme::toolIconSize, Theme::toolIconSize);
button->setStyleSheet("QPushButton {color: #f7d9c8}");
button->setFocusPolicy(Qt::NoFocus);
}

SkeletonDocumentWindow::~SkeletonDocumentWindow()
{
g_documentWindows.erase(this);
Expand Down Expand Up @@ -665,3 +708,26 @@ void SkeletonDocumentWindow::exportResult()
QApplication::restoreOverrideCursor();
}

void SkeletonDocumentWindow::updateXlockButtonState()
{
if (m_document->xlocked)
m_xlockButton->setStyleSheet("QPushButton {color: #252525}");
else
m_xlockButton->setStyleSheet("QPushButton {color: #fc6621}");
}

void SkeletonDocumentWindow::updateYlockButtonState()
{
if (m_document->ylocked)
m_ylockButton->setStyleSheet("QPushButton {color: #252525}");
else
m_ylockButton->setStyleSheet("QPushButton {color: #2a5aac}");
}

void SkeletonDocumentWindow::updateZlockButtonState()
{
if (m_document->zlocked)
m_zlockButton->setStyleSheet("QPushButton {color: #252525}");
else
m_zlockButton->setStyleSheet("QPushButton {color: #aaebc4}");
}
16 changes: 13 additions & 3 deletions src/skeletondocumentwindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,23 @@ public slots:
void reportIssues();
void seeAcknowlegements();
void documentChanged();
void updateXlockButtonState();
void updateYlockButtonState();
void updateZlockButtonState();
private:
void initButton(QPushButton *button);
void initAwesomeButton(QPushButton *button);
void initLockButton(QPushButton *button);
void setCurrentFilename(const QString &filename);
void updateTitle();
private:
SkeletonDocument *m_document;
bool m_firstShow;
bool m_documentSaved;
private:
QString m_currentFilename;

ModelWidget *m_modelWidget;
SkeletonGraphicsWidget *m_graphicsWidget;
QString m_currentFilename;
bool m_documentSaved;

QMenu *m_fileMenu;
QAction *m_newWindowAction;
Expand Down Expand Up @@ -91,6 +97,10 @@ public slots:
QAction *m_aboutAction;
QAction *m_reportIssuesAction;
QAction *m_seeAcknowlegementsAction;

QPushButton *m_xlockButton;
QPushButton *m_ylockButton;
QPushButton *m_zlockButton;
};

#endif
Expand Down

0 comments on commit a1107b5

Please sign in to comment.