Skip to content
Merged
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ cmake_minimum_required(VERSION 3.24.0)
cmake_policy(SET CMP0005 NEW)
cmake_policy(SET CMP0048 NEW) # manages project version

project(QtMeshEditor VERSION 3.3.1 LANGUAGES C CXX)
project(QtMeshEditor VERSION 3.4.0 LANGUAGES C CXX)
message(STATUS "Building QtMeshEditor version ${PROJECT_VERSION}")

set(QTMESHEDITOR_VERSION_STRING "\"${PROJECT_VERSION}\"")
Expand Down
24 changes: 12 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Available on the [GitHub Actions Marketplace](https://github.com/marketplace/act
**Versioning**

- **Always follow the latest GitHub release** — use the Marketplace floating tag `fernandotonon/QtMeshEditor@v1` (same pattern as the [Marketplace example](https://github.com/marketplace/actions/qtmesheditor)). The composite action defaults to `image-tag: latest`, so the Docker CLI tracks the newest published `ghcr.io/fernandotonon/qtmesh` image.
- **Reproducible builds** — pin the action and the container to the same semver as this repository’s `project(QtMeshEditor VERSION …)` in `CMakeLists.txt` (currently **3.1.0**). After bumping the version in CMake, run `./scripts/sync-doc-versions-from-cmake.sh` to refresh the pinned refs in `README.md` and the docs site fallback; CI enforces the match with `./scripts/sync-doc-versions-from-cmake.sh --check`.
- **Reproducible builds** — pin the action and the container to the same semver as this repository’s `project(QtMeshEditor VERSION …)` in `CMakeLists.txt` (currently **3.4.0**). After bumping the version in CMake, run `./scripts/sync-doc-versions-from-cmake.sh` to refresh the pinned refs in `README.md` and the docs site fallback; CI enforces the match with `./scripts/sync-doc-versions-from-cmake.sh --check`.

Pinned workflow template (action + `ghcr.io` image aligned):

Expand All @@ -51,10 +51,10 @@ jobs:
- uses: actions/checkout@v4

- name: Run QtMesh scan
uses: fernandotonon/QtMeshEditor@3.3.1
uses: fernandotonon/QtMeshEditor@3.4.0
with:
command: scan
image-tag: "3.3.1"
image-tag: "3.4.0"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
env:
QTMESH_CLOUD_TOKEN: ${{ secrets.QTMESH_CLOUD_TOKEN }}
```
Expand All @@ -79,39 +79,39 @@ Release tags are listed on the [releases page](https://github.com/fernandotonon/

```yaml
# Validate a specific mesh
- uses: fernandotonon/QtMeshEditor@3.3.1
- uses: fernandotonon/QtMeshEditor@3.4.0
with:
command: validate
input-file: ./models/character.fbx
image-tag: "3.3.1"
image-tag: "3.4.0"

# Convert FBX → glTF
- uses: fernandotonon/QtMeshEditor@3.3.1
- uses: fernandotonon/QtMeshEditor@3.4.0
with:
command: convert
input-file: ./models/character.fbx
output-file: ./output/character.gltf2
image-tag: "3.3.1"
image-tag: "3.4.0"

# Resample Mixamo animations (200+ keyframes → 30)
- uses: fernandotonon/QtMeshEditor@3.3.1
- uses: fernandotonon/QtMeshEditor@3.4.0
with:
command: anim
input-file: ./animations/dance.fbx
output-file: ./output/dance_optimized.fbx
options: --resample 30
image-tag: "3.3.1"
image-tag: "3.4.0"

# Get mesh info as JSON
- uses: fernandotonon/QtMeshEditor@3.3.1
- uses: fernandotonon/QtMeshEditor@3.4.0
id: info
with:
command: info
input-file: ./models/character.fbx
options: --json
image-tag: "3.3.1"
image-tag: "3.4.0"

# Docker (alternative — :latest tracks newest image; pin :3.1.0 to match semver action ref)
# Docker (alternative — :latest tracks newest image; pin :3.4.0 to match semver action ref)
docker run --rm -v $(pwd):/workspace ghcr.io/fernandotonon/qtmesh:latest scan ./assets --fail-on error
```

Expand Down
31 changes: 26 additions & 5 deletions src/CloudAccountMenuButton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

#include "AppSettingsKeys.h"
#include "CloudCredentialStore.h"
#include "SentryReporter.h"

#include <QAction>
#include <QHBoxLayout>
Expand Down Expand Up @@ -177,7 +178,11 @@ CloudAccountMenuButton::CloudAccountMenuButton(QWidget* parent)
m_button->setMenu(m_menu);
layout->addWidget(m_button);

connect(m_menu, &QMenu::aboutToShow, this, &CloudAccountMenuButton::refresh);
connect(m_menu, &QMenu::aboutToShow, this, [this]() {
SentryReporter::addBreadcrumb(QStringLiteral("ui.action"),
QStringLiteral("Cloud toolbar menu opened"));
refresh();
});

refresh();
}
Expand Down Expand Up @@ -237,21 +242,37 @@ void CloudAccountMenuButton::buildMenu()

m_openProjectsAction = m_menu->addAction(tr("Open My Projects"));
m_openProjectsAction->setObjectName(QStringLiteral("actionQtMeshCloudOpenProjects"));
connect(m_openProjectsAction, &QAction::triggered, this, &CloudAccountMenuButton::openProjectsRequested);
connect(m_openProjectsAction, &QAction::triggered, this, [this]() {
SentryReporter::addBreadcrumb(QStringLiteral("ui.action"),
QStringLiteral("Cloud toolbar: Open My Projects"));
emit openProjectsRequested();
});

m_uploadAction = m_menu->addAction(tr("Upload Files..."));
m_uploadAction->setObjectName(QStringLiteral("actionQtMeshCloudUploadFiles"));
connect(m_uploadAction, &QAction::triggered, this, &CloudAccountMenuButton::uploadFilesRequested);
connect(m_uploadAction, &QAction::triggered, this, [this]() {
SentryReporter::addBreadcrumb(QStringLiteral("ui.action"),
QStringLiteral("Cloud toolbar: Upload Files"));
emit uploadFilesRequested();
});

m_mainSeparator = m_menu->addSeparator();

m_signOutAction = m_menu->addAction(tr("Sign out"));
m_signOutAction->setObjectName(QStringLiteral("actionQtMeshCloudSignOut"));
connect(m_signOutAction, &QAction::triggered, this, &CloudAccountMenuButton::signOutRequested);
connect(m_signOutAction, &QAction::triggered, this, [this]() {
SentryReporter::addBreadcrumb(QStringLiteral("ui.action"),
QStringLiteral("Cloud toolbar: Sign out"));
emit signOutRequested();
});

m_signInAction = m_menu->addAction(tr("Sign in to QtMesh Cloud"));
m_signInAction->setObjectName(QStringLiteral("actionQtMeshCloudSignIn"));
connect(m_signInAction, &QAction::triggered, this, &CloudAccountMenuButton::signInRequested);
connect(m_signInAction, &QAction::triggered, this, [this]() {
SentryReporter::addBreadcrumb(QStringLiteral("ui.action"),
QStringLiteral("Cloud toolbar: Sign in"));
emit signInRequested();
});
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

void CloudAccountMenuButton::updateHeader(const QString& displayName, bool signedIn)
Expand Down
Loading
Loading