Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e6d29cf345 | |||
| f16cf7dac8 | |||
| 2d4f968348 | |||
| 6f669e1074 | |||
| 0b91318749 | |||
| 1ba97c7e92 | |||
| cd09fc0d32 | |||
| 924fe082fb | |||
| ad37b0f9a5 | |||
| fedc1cb092 | |||
| 5f318e09c8 | |||
| 27afeaefe2 | |||
| ab2f933fdf | |||
| 7f718f672f | |||
| 9ec02bc088 |
@@ -0,0 +1 @@
|
|||||||
|
*.qch filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
name: Auto-build doxygen docs
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
doxygen:
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
submodules: 'recursive'
|
||||||
|
show-progress: ''
|
||||||
|
- name: Setup and run doxygen
|
||||||
|
run: sudo apt update && sudo apt install doxygen graphviz qhelpgenerator-qt5 -y
|
||||||
|
- name: Set up Git LFS
|
||||||
|
run: |
|
||||||
|
git lfs install
|
||||||
|
git lfs track "*.qch"
|
||||||
|
- name: Run doxygen
|
||||||
|
run: doxygen Doxyfile
|
||||||
|
- name: Create Pull Request
|
||||||
|
uses: peter-evans/create-pull-request@v8
|
||||||
|
with:
|
||||||
|
token: ${{ secrets.MR_TOKEN }}
|
||||||
|
commit-message: update QCH file
|
||||||
|
committer: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
|
||||||
|
title: Update QCH Help file
|
||||||
|
body: |
|
||||||
|
- Updating QT Help file following commit ${{ github.sha }}.
|
||||||
|
- Auto-generated by [create-pull-request][1]
|
||||||
|
|
||||||
|
[1]: https://github.com/peter-evans/create-pull-request
|
||||||
|
branch: update-qch
|
||||||
|
labels: |
|
||||||
|
qch
|
||||||
|
cicd
|
||||||
|
delete-branch: true
|
||||||
|
add-paths: doc/*.qch
|
||||||
|
- uses: actions/upload-pages-artifact@v3
|
||||||
|
with:
|
||||||
|
path: ${{ github.workspace }}/doc/html/
|
||||||
|
deploy:
|
||||||
|
# Add a dependency to the build job
|
||||||
|
needs: doxygen
|
||||||
|
|
||||||
|
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
|
||||||
|
permissions:
|
||||||
|
pages: write # to deploy to Pages
|
||||||
|
id-token: write # to verify the deployment originates from an appropriate source
|
||||||
|
|
||||||
|
# Deploy to the github-pages environment
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
|
||||||
|
# Specify runner + deployment step
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v4 # or specific "vX.X.X" version tag for this action
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
# Linux build, unit tests, and the IPC open-forwarding regression gate.
|
|
||||||
#
|
|
||||||
# The existing workflows build Windows and generate documentation; nothing
|
|
||||||
# builds QElectroTech on Linux or runs tests/ in CI. This does both.
|
|
||||||
#
|
|
||||||
# It runs inside an ubuntu:26.04 container rather than directly on the runner
|
|
||||||
# because the IPC gate below needs Qt 6.10.2. The ubuntu-latest image ships
|
|
||||||
# Qt 6.4, and whether the crash that gate covers reproduces on 6.4 has never
|
|
||||||
# been checked -- a gate that cannot go red is worse than no gate.
|
|
||||||
name: Linux build and tests
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
pull_request:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
linux:
|
|
||||||
name: Build and test (Qt 6, Debug)
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: ubuntu:26.04
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Install build and test dependencies
|
|
||||||
run: |
|
|
||||||
apt-get update
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
||||||
ca-certificates build-essential cmake ninja-build git pkg-config \
|
|
||||||
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
|
|
||||||
libqt6svg6-dev libqt6sql6-sqlite libcups2-dev libsqlite3-dev \
|
|
||||||
libxkbcommon-x11-0 \
|
|
||||||
xvfb openbox xdotool x11-utils
|
|
||||||
# extra-cmake-modules and the KF6 libraries are installed rather than
|
|
||||||
# left to FetchContent: without them CMake builds extra-cmake-modules
|
|
||||||
# from source, and its Qt Help documentation target then demands
|
|
||||||
# Qt6{Core,Gui,Widgets,DBus}Tools, failing the configure with an error
|
|
||||||
# that appears to be about QElectroTech and is not.
|
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
|
||||||
extra-cmake-modules libkf6coreaddons-dev libkf6widgetsaddons-dev \
|
|
||||||
qt6-svg-plugins
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
submodules: recursive
|
|
||||||
|
|
||||||
- name: Configure
|
|
||||||
# Debug, not Release. Whether a use-after-free faults depends on what
|
|
||||||
# the allocator does with the freed block: the commit before #868
|
|
||||||
# crashes every time built Debug and survives every time built
|
|
||||||
# -O3 -DNDEBUG, so a Release job would never catch a regression here.
|
|
||||||
run: |
|
|
||||||
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
||||||
cmake -B build -G Ninja \
|
|
||||||
-DCMAKE_BUILD_TYPE=Debug \
|
|
||||||
-DQT_VERSION_MAJOR=6 \
|
|
||||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
||||||
-DQET_EXPORT_PROJECT_DB=ON
|
|
||||||
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build --parallel $(nproc)
|
|
||||||
|
|
||||||
- name: Unit tests
|
|
||||||
run: xvfb-run -a ctest --test-dir build --output-on-failure
|
|
||||||
|
|
||||||
- name: IPC open-forwarding regression (#868)
|
|
||||||
# Fails the job only on an actual crash. An inconclusive run means the
|
|
||||||
# crash path was not exercised -- it proves nothing, which is not the
|
|
||||||
# same as a regression, and failing on it would make this job flaky
|
|
||||||
# rather than informative.
|
|
||||||
run: |
|
|
||||||
set +e
|
|
||||||
tests/ipc-regression/run.sh --binary build/qelectrotech
|
|
||||||
status=$?
|
|
||||||
set -e
|
|
||||||
case $status in
|
|
||||||
0) echo "::notice::IPC gate passed" ;;
|
|
||||||
2) echo "::warning::IPC gate inconclusive -- the crash path was not exercised, nothing was proven" ;;
|
|
||||||
*) echo "::error::IPC gate failed -- forwarded files are being opened inside the socket handler again"
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
@@ -2,7 +2,7 @@ name: Windows Build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '0 2 1 * *' #
|
- cron: '0 2 * * 1' # Every Monday at 2:00 UTC
|
||||||
workflow_dispatch: # Manual trigger available at any time
|
workflow_dispatch: # Manual trigger available at any time
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
@@ -11,7 +11,356 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
# Job 1: Windows build (Qt6/KF6 — sole track since the Qt5 track was removed)
|
# Job 1: Qt5 build (stable track)
|
||||||
|
# =============================================================================
|
||||||
|
build-windows:
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v7
|
||||||
|
with:
|
||||||
|
submodules: recursive
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install MSYS2
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: UCRT64
|
||||||
|
update: true
|
||||||
|
cache: true
|
||||||
|
install: >-
|
||||||
|
git
|
||||||
|
mingw-w64-ucrt-x86_64-ccache
|
||||||
|
mingw-w64-ucrt-x86_64-gcc
|
||||||
|
mingw-w64-ucrt-x86_64-cmake
|
||||||
|
mingw-w64-ucrt-x86_64-ninja
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-base
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-svg
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-tools
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-translations
|
||||||
|
mingw-w64-ucrt-x86_64-qt5-pdf
|
||||||
|
mingw-w64-ucrt-x86_64-sqlite3
|
||||||
|
mingw-w64-ucrt-x86_64-pkg-config
|
||||||
|
mingw-w64-ucrt-x86_64-kwidgetsaddons
|
||||||
|
mingw-w64-ucrt-x86_64-kcoreaddons
|
||||||
|
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
||||||
|
mingw-w64-ucrt-x86_64-nsis
|
||||||
|
mingw-w64-ucrt-x86_64-angleproject
|
||||||
|
|
||||||
|
- name: Cache ccache
|
||||||
|
uses: actions/cache@v5
|
||||||
|
with:
|
||||||
|
path: C:\Users\runneradmin\AppData\Local\ccache
|
||||||
|
key: ccache-windows-${{ github.ref_name }}-${{ github.sha }}
|
||||||
|
restore-keys: |
|
||||||
|
ccache-windows-${{ github.ref_name }}-
|
||||||
|
ccache-windows-
|
||||||
|
|
||||||
|
- name: Configure ccache
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
/ucrt64/bin/ccache --set-config=max_size=500M
|
||||||
|
/ucrt64/bin/ccache --set-config=compression=true
|
||||||
|
/ucrt64/bin/ccache -z
|
||||||
|
echo "=== ccache config ==="
|
||||||
|
/ucrt64/bin/ccache -p
|
||||||
|
|
||||||
|
- name: Patch NSIS Welcome page — fix title font size
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
WELCOME_NSH=$(find /ucrt64 -path "*/Modern UI 2/Pages/Welcome.nsh" | head -1)
|
||||||
|
if [ -z "$WELCOME_NSH" ]; then
|
||||||
|
echo "WARNING: Welcome.nsh not found, skipping font patch"
|
||||||
|
else
|
||||||
|
echo "Patching: $WELCOME_NSH"
|
||||||
|
sed -i '/WelcomePage\.Title\.Font/s/"[0-9]\+" "700"/"10" "700"/' "$WELCOME_NSH"
|
||||||
|
grep 'WelcomePage.Title.Font' "$WELCOME_NSH"
|
||||||
|
echo " OK font size patched to 10"
|
||||||
|
fi
|
||||||
|
|
||||||
|
FINISH_NSH=$(find /ucrt64 -path "*/Modern UI 2/Pages/Finish.nsh" | head -1)
|
||||||
|
if [ -z "$FINISH_NSH" ]; then
|
||||||
|
echo "WARNING: Finish.nsh not found, skipping font patch"
|
||||||
|
else
|
||||||
|
echo "Patching: $FINISH_NSH"
|
||||||
|
sed -i '/FinishPage\.Title\.Font/s/"[0-9]\+" "700"/"10" "700"/' "$FINISH_NSH"
|
||||||
|
grep 'FinishPage.Title.Font' "$FINISH_NSH"
|
||||||
|
echo " OK font size patched to 10"
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Force Qt5 — remove Qt6 cmake + tools
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
rm -rf /ucrt64/lib/cmake/Qt6
|
||||||
|
pacman -R --noconfirm mingw-w64-ucrt-x86_64-qt6-tools 2>/dev/null || true
|
||||||
|
echo "=== windeployqt binaries ==="
|
||||||
|
ls /ucrt64/bin/windeployqt* || echo "NO windeployqt found!"
|
||||||
|
|
||||||
|
- name: Build with cmake
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
cd "$GITHUB_WORKSPACE"
|
||||||
|
mkdir build && cd build
|
||||||
|
NPROC=$(nproc)
|
||||||
|
echo "Available CPUs: $NPROC"
|
||||||
|
|
||||||
|
cmake -G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release \
|
||||||
|
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
||||||
|
-DQt5_DIR=/ucrt64/lib/cmake/Qt5 \
|
||||||
|
-DQT_VERSION_MAJOR=5 \
|
||||||
|
-DCMAKE_DISABLE_FIND_PACKAGE_Qt6=ON \
|
||||||
|
-DBUILD_TESTING=OFF \
|
||||||
|
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
||||||
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||||
|
-DCMAKE_CXX_FLAGS="-DQET_EXPORT_PROJECT_DB" \
|
||||||
|
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
|
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
|
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
||||||
|
-DSQLite3_LIBRARY=/ucrt64/lib/libsqlite3.dll.a \
|
||||||
|
..
|
||||||
|
ninja -j"$NPROC"
|
||||||
|
|
||||||
|
- name: Show ccache stats
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
echo "=== ccache statistics ==="
|
||||||
|
/ucrt64/bin/ccache -s
|
||||||
|
|
||||||
|
- name: Verify exe was built
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
EXE=$(find "$GITHUB_WORKSPACE/build" -maxdepth 3 -iname "qelectrotech.exe" | head -1)
|
||||||
|
if [ -z "$EXE" ]; then
|
||||||
|
echo "ERROR: no qelectrotech.exe found in build/"
|
||||||
|
find "$GITHUB_WORKSPACE/build" -maxdepth 3 -name "*.exe" || true
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
SIZE=$(stat -c%s "$EXE")
|
||||||
|
echo "Exe found: $EXE ($SIZE bytes)"
|
||||||
|
[ "$SIZE" -gt 100000 ] || { echo "ERROR: exe too small"; exit 1; }
|
||||||
|
|
||||||
|
- name: Deploy — copy exe + windeployqt + DLLs
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
||||||
|
FILES="$NSIS_ROOT/files"
|
||||||
|
BIN="$FILES/bin"
|
||||||
|
mkdir -p "$BIN"
|
||||||
|
|
||||||
|
EXE=$(find "$GITHUB_WORKSPACE/build" -maxdepth 3 -iname "qelectrotech.exe" | head -1)
|
||||||
|
echo "Copying exe: $EXE -> $BIN/QElectroTech.exe"
|
||||||
|
cp "$EXE" "$BIN/QElectroTech.exe"
|
||||||
|
|
||||||
|
cd "$BIN"
|
||||||
|
/ucrt64/bin/windeployqt-qt5 \
|
||||||
|
--release \
|
||||||
|
--no-translations \
|
||||||
|
--no-compiler-runtime \
|
||||||
|
./QElectroTech.exe || true
|
||||||
|
|
||||||
|
echo "=== 3-pass transitive DLL scan ==="
|
||||||
|
set +e
|
||||||
|
for PASS in 1 2 3; do
|
||||||
|
echo "-- Pass $PASS --"
|
||||||
|
for bin_file in "$BIN"/*.dll "$BIN"/*.exe "$BIN"/sqldrivers/*.dll "$BIN"/platforms/*.dll "$BIN"/imageformats/*.dll; do
|
||||||
|
[ -f "$bin_file" ] || continue
|
||||||
|
while IFS= read -r line; do
|
||||||
|
dll_path=$(echo "$line" | awk '{print $3}')
|
||||||
|
[ -f "$dll_path" ] || continue
|
||||||
|
dll_name=$(basename "$dll_path")
|
||||||
|
dst="$BIN/$dll_name"
|
||||||
|
if [ ! -f "$dst" ]; then
|
||||||
|
cp "$dll_path" "$dst"
|
||||||
|
echo " Copied (pass $PASS): $dll_name"
|
||||||
|
fi
|
||||||
|
done < <(ldd "$bin_file" 2>/dev/null | grep -i '/ucrt64/bin/')
|
||||||
|
done
|
||||||
|
done
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DLL_COUNT=$(find "$BIN" -name "*.dll" | wc -l)
|
||||||
|
echo "=== $DLL_COUNT DLLs present after scan ==="
|
||||||
|
ls -lh "$BIN/QElectroTech.exe" || { echo "ERROR: exe missing from bin/"; exit 1; }
|
||||||
|
[ "$DLL_COUNT" -gt 5 ] || { echo "ERROR: too few DLLs"; exit 1; }
|
||||||
|
cd "$GITHUB_WORKSPACE"
|
||||||
|
|
||||||
|
cp /ucrt64/bin/libgcc_s_seh-1.dll "$BIN/"
|
||||||
|
cp /ucrt64/bin/libstdc++-6.dll "$BIN/"
|
||||||
|
cp /ucrt64/bin/libwinpthread-1.dll "$BIN/"
|
||||||
|
SQLITE=$(find /ucrt64/bin -name "libsqlite3*.dll" | head -1)
|
||||||
|
if [ -n "$SQLITE" ]; then
|
||||||
|
cp "$SQLITE" "$BIN/"
|
||||||
|
echo "SQLite3 copied: $(basename $SQLITE)"
|
||||||
|
else
|
||||||
|
echo "WARNING: libsqlite3 not found in /ucrt64/bin/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp "$GITHUB_WORKSPACE/build-aux/windows/QET64.nsi" "$NSIS_ROOT/"
|
||||||
|
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra.nsh" "$NSIS_ROOT/"
|
||||||
|
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra_fr.nsh" "$NSIS_ROOT/"
|
||||||
|
cp "$GITHUB_WORKSPACE/build-aux/windows/lang_extra_missing.nsh" "$NSIS_ROOT/"
|
||||||
|
cp -r "$GITHUB_WORKSPACE/build-aux/windows/nsis_base/." "$NSIS_ROOT/"
|
||||||
|
|
||||||
|
curl -fsSL \
|
||||||
|
"https://raw.githubusercontent.com/qelectrotech/qelectrotech-source-mirror/refs/heads/master/misc/Lancer%20QET.bat" \
|
||||||
|
-o "$FILES/Lancer QET.bat"
|
||||||
|
cp -r "$GITHUB_WORKSPACE/elements" "$FILES/elements" || true
|
||||||
|
cp -r "$GITHUB_WORKSPACE/titleblocks" "$FILES/titleblocks" || true
|
||||||
|
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
||||||
|
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
||||||
|
|
||||||
|
cp -r "$GITHUB_WORKSPACE/lang" "$FILES/lang" || true
|
||||||
|
find "$GITHUB_WORKSPACE/build" -name "*.qm" -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
||||||
|
echo "=== .qm files in files/lang/ ==="
|
||||||
|
ls "$FILES/lang/"*.qm 2>/dev/null | wc -l || echo "0 .qm files"
|
||||||
|
|
||||||
|
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
||||||
|
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "=== Verification of key files in files/ ==="
|
||||||
|
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE \
|
||||||
|
qet_uninstall_file_associations.reg register_filetypes.bat "Lancer QET.bat"; do
|
||||||
|
[ -f "$FILES/$f" ] \
|
||||||
|
&& echo " OK : $f" \
|
||||||
|
|| echo " MISSING: $f"
|
||||||
|
done
|
||||||
|
for d in ico elements lang titleblocks fonts examples bin; do
|
||||||
|
[ -d "$FILES/$d" ] \
|
||||||
|
&& echo " OK : $d/" \
|
||||||
|
|| echo " MISSING: $d/"
|
||||||
|
done
|
||||||
|
|
||||||
|
- name: Extract version for installer name
|
||||||
|
shell: msys2 {0}
|
||||||
|
id: qet_version
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
GITCOMMIT=$(git -C "$GITHUB_WORKSPACE" rev-parse --short HEAD)
|
||||||
|
|
||||||
|
A=$(git -C "$GITHUB_WORKSPACE" rev-list HEAD --count)
|
||||||
|
HEAD=$(( A + 473 ))
|
||||||
|
|
||||||
|
VERSION=$(grep 'return QVersionNumber{' "$GITHUB_WORKSPACE/sources/qetversion.cpp" \
|
||||||
|
| head -1 \
|
||||||
|
| awk -F '{' '{ print $2 }' \
|
||||||
|
| awk -F '}' '{ print $1 }' \
|
||||||
|
| sed -e 's/,/./g' -e 's/ //g')
|
||||||
|
[ -z "$VERSION" ] && VERSION="dev"
|
||||||
|
|
||||||
|
FULL_VERSION="${VERSION}-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
||||||
|
echo "version=$FULL_VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "base_version=$VERSION" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "gitcommit=$GITCOMMIT" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "head=$HEAD" >> "$GITHUB_OUTPUT"
|
||||||
|
echo "VERSION : $VERSION"
|
||||||
|
echo "GITCOMMIT : $GITCOMMIT"
|
||||||
|
echo "HEAD (rev) : $HEAD"
|
||||||
|
echo "FULL : $FULL_VERSION"
|
||||||
|
|
||||||
|
- name: Patch QET64.nsi — version + exe name + absolute paths
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
VERSION="${{ steps.qet_version.outputs.version }}"
|
||||||
|
NSI="$GITHUB_WORKSPACE/nsis_root/QET64.nsi"
|
||||||
|
FILES_WIN=$(cygpath -w "$GITHUB_WORKSPACE/nsis_root/files")
|
||||||
|
SCRIPT="$GITHUB_WORKSPACE/build-aux/windows/patch_nsi.py"
|
||||||
|
|
||||||
|
python3 "$SCRIPT" "$NSI" "$VERSION" "$FILES_WIN"
|
||||||
|
|
||||||
|
echo "=== Verification ==="
|
||||||
|
grep 'SOFT_VERSION' "$NSI" | head -1
|
||||||
|
grep -m2 'nsis_root' "$NSI" | head -2
|
||||||
|
echo "=== Contents of nsis_root/files/ ==="
|
||||||
|
ls "$GITHUB_WORKSPACE/nsis_root/files/"
|
||||||
|
|
||||||
|
- name: Build NSIS installer
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
||||||
|
cd "$NSIS_ROOT"
|
||||||
|
echo "=== CWD : $(pwd) ==="
|
||||||
|
MSYS2_ARG_CONV_EXCL="*" makensis /V4 QET64.nsi
|
||||||
|
RC=$?
|
||||||
|
echo "=== Contents of nsis_root after makensis ==="
|
||||||
|
ls "$NSIS_ROOT/"
|
||||||
|
[ $RC -eq 0 ] || { echo "ERROR: makensis failed (exit $RC)"; exit 1; }
|
||||||
|
|
||||||
|
- name: Move installer to dist/
|
||||||
|
shell: msys2 {0}
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
mkdir -p "$GITHUB_WORKSPACE/dist"
|
||||||
|
INSTALLER=$(find "$GITHUB_WORKSPACE/nsis_root" -maxdepth 1 -iname "installer_*.exe" | head -1)
|
||||||
|
if [ -z "$INSTALLER" ]; then
|
||||||
|
echo "ERROR: no installer .exe found in nsis_root/"
|
||||||
|
ls "$GITHUB_WORKSPACE/nsis_root/"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Moving: $INSTALLER -> dist/"
|
||||||
|
mv "$INSTALLER" "$GITHUB_WORKSPACE/dist/"
|
||||||
|
|
||||||
|
- name: Upload build logs on failure
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: build-logs
|
||||||
|
path: |
|
||||||
|
build/CMakeFiles/*.log
|
||||||
|
nsis_root/files/bin/
|
||||||
|
if-no-files-found: warn
|
||||||
|
|
||||||
|
- name: Zip portable (readytouse)
|
||||||
|
id: zip_portable
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
$version = "${{ steps.qet_version.outputs.base_version }}"
|
||||||
|
$head = "${{ steps.qet_version.outputs.head }}"
|
||||||
|
$zipName = "qelectrotech-${version}+git${head}-x86-win64-readytouse.zip"
|
||||||
|
$src = "$env:GITHUB_WORKSPACE\nsis_root\files"
|
||||||
|
$dst = "$env:GITHUB_WORKSPACE\dist\$zipName"
|
||||||
|
$7z = "C:\Program Files\7-Zip\7z.exe"
|
||||||
|
|
||||||
|
New-Item -ItemType Directory -Force -Path "$env:GITHUB_WORKSPACE\dist" | Out-Null
|
||||||
|
& $7z a -tzip -mx=5 -mmt=on $dst "$src\*"
|
||||||
|
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
||||||
|
|
||||||
|
$sizeMB = [math]::Round((Get-Item $dst).Length / 1MB, 1)
|
||||||
|
Write-Output "ZIP created: $zipName ($sizeMB MB)"
|
||||||
|
"zip_name=$zipName" | Out-File -FilePath $env:GITHUB_OUTPUT -Encoding utf8 -Append
|
||||||
|
|
||||||
|
- name: Upload portable (files/ without installer)
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
||||||
|
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Upload NSIS installer
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: qelectrotech-windows-installer
|
||||||
|
path: dist/Installer_*.exe
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
- name: Upload portable (nom fixe pour le workflow MSI)
|
||||||
|
uses: actions/upload-artifact@v7
|
||||||
|
with:
|
||||||
|
name: qelectrotech-windows-portable
|
||||||
|
path: nsis_root/files/
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
|
# =============================================================================
|
||||||
|
# Job 2: Qt6 build (EXPERIMENTAL track)
|
||||||
#
|
#
|
||||||
# Version label: the C++ source (sources/qetversion.cpp) intentionally stays
|
# Version label: the C++ source (sources/qetversion.cpp) intentionally stays
|
||||||
# Qt-agnostic — QT_VERSION-based detection inside the binary proved unreliable
|
# Qt-agnostic — QT_VERSION-based detection inside the binary proved unreliable
|
||||||
@@ -19,9 +368,6 @@ jobs:
|
|||||||
# certainty which Qt major version it configured (-DQT_VERSION_MAJOR=6), so it
|
# certainty which Qt major version it configured (-DQT_VERSION_MAJOR=6), so it
|
||||||
# is safe to label the *package* "0.200.1" at this level, without touching
|
# is safe to label the *package* "0.200.1" at this level, without touching
|
||||||
# QetVersion::currentVersion() or making the binary self-detect its Qt build.
|
# QetVersion::currentVersion() or making the binary self-detect its Qt build.
|
||||||
#
|
|
||||||
# Job id kept as "build-windows-qt6" (not renamed to "build-windows") in case
|
|
||||||
# branch protection / required status checks reference this exact job name.
|
|
||||||
# =============================================================================
|
# =============================================================================
|
||||||
build-windows-qt6:
|
build-windows-qt6:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
@@ -51,13 +397,8 @@ jobs:
|
|||||||
mingw-w64-ucrt-x86_64-qt6-pdf
|
mingw-w64-ucrt-x86_64-qt6-pdf
|
||||||
mingw-w64-ucrt-x86_64-sqlite3
|
mingw-w64-ucrt-x86_64-sqlite3
|
||||||
mingw-w64-ucrt-x86_64-pkg-config
|
mingw-w64-ucrt-x86_64-pkg-config
|
||||||
mingw-w64-ucrt-x86_64-kwidgetsaddons
|
|
||||||
mingw-w64-ucrt-x86_64-kcoreaddons
|
|
||||||
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
|
||||||
mingw-w64-ucrt-x86_64-nsis
|
mingw-w64-ucrt-x86_64-nsis
|
||||||
mingw-w64-ucrt-x86_64-angleproject
|
mingw-w64-ucrt-x86_64-angleproject
|
||||||
mingw-w64-ucrt-x86_64-qt6-declarative
|
|
||||||
mingw-w64-ucrt-x86_64-hidapi
|
|
||||||
|
|
||||||
- name: Cache ccache
|
- name: Cache ccache
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v5
|
||||||
@@ -115,14 +456,11 @@ jobs:
|
|||||||
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
-DCMAKE_PREFIX_PATH=/ucrt64 \
|
||||||
-DQt6_DIR=/ucrt64/lib/cmake/Qt6 \
|
-DQt6_DIR=/ucrt64/lib/cmake/Qt6 \
|
||||||
-DQT_VERSION_MAJOR=6 \
|
-DQT_VERSION_MAJOR=6 \
|
||||||
-DBUILD_WITH_KF=ON \
|
-DBUILD_WITH_KF5=OFF \
|
||||||
-DBUILD_KF=OFF \
|
|
||||||
-DPACKAGE_TESTS=OFF \
|
-DPACKAGE_TESTS=OFF \
|
||||||
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
-DCMAKE_POLICY_DEFAULT_CMP0077=NEW \
|
||||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
||||||
-DQET_EXPORT_PROJECT_DB=ON \
|
-DCMAKE_CXX_FLAGS="-DQET_EXPORT_PROJECT_DB" \
|
||||||
-DQET_ENABLE_SPACEMOUSE=ON \
|
|
||||||
-DQET_SPACEMOUSE_BACKEND=hid \
|
|
||||||
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
-DCMAKE_C_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
-DCMAKE_CXX_COMPILER_LAUNCHER=/ucrt64/bin/ccache \
|
||||||
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
||||||
@@ -136,32 +474,6 @@ jobs:
|
|||||||
echo "=== ccache statistics ==="
|
echo "=== ccache statistics ==="
|
||||||
/ucrt64/bin/ccache -s
|
/ucrt64/bin/ccache -s
|
||||||
|
|
||||||
- name: Run the unit tests
|
|
||||||
shell: msys2 {0}
|
|
||||||
env:
|
|
||||||
QT_QPA_PLATFORM: offscreen
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
cd "$GITHUB_WORKSPACE/build"
|
|
||||||
ctest --output-on-failure --timeout 300 && exit 0
|
|
||||||
# ctest shows no output for failed tests in this shell, so run each
|
|
||||||
# failed test again with QtTest writing its log to a file, and print it.
|
|
||||||
set +e
|
|
||||||
while IFS=: read -r _ name; do
|
|
||||||
name=${name%$'\r'}
|
|
||||||
exe=$(find tests -name "$name.exe" | head -1)
|
|
||||||
echo "::group::$name"
|
|
||||||
if [ -n "$exe" ]; then
|
|
||||||
QT_QPA_PLATFORM=offscreen "$exe" -o "$name.txt,txt"
|
|
||||||
echo "exit code $?"
|
|
||||||
cat "$name.txt" 2>/dev/null
|
|
||||||
else
|
|
||||||
echo "no executable for $name"
|
|
||||||
fi
|
|
||||||
echo "::endgroup::"
|
|
||||||
done < Testing/Temporary/LastTestsFailed.log
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
- name: Verify exe was built
|
- name: Verify exe was built
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
@@ -175,11 +487,6 @@ jobs:
|
|||||||
SIZE=$(stat -c%s "$EXE")
|
SIZE=$(stat -c%s "$EXE")
|
||||||
echo "Exe found: $EXE ($SIZE bytes)"
|
echo "Exe found: $EXE ($SIZE bytes)"
|
||||||
[ "$SIZE" -gt 100000 ] || { echo "ERROR: exe too small"; exit 1; }
|
[ "$SIZE" -gt 100000 ] || { echo "ERROR: exe too small"; exit 1; }
|
||||||
# 3D mouse support (discussion #599): CMake only warns when hidapi
|
|
||||||
# is missing, which would ship a package without it -- fail here.
|
|
||||||
ldd "$EXE" | grep -qi 'libhidapi' \
|
|
||||||
|| { echo "ERROR: exe not linked against hidapi -- 3D mouse support missing"; exit 1; }
|
|
||||||
echo "3D mouse support: linked against $(ldd "$EXE" | grep -io 'libhidapi[^ ]*' | head -1)"
|
|
||||||
|
|
||||||
- name: Deploy — copy exe + windeployqt + DLLs
|
- name: Deploy — copy exe + windeployqt + DLLs
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
@@ -225,8 +532,6 @@ jobs:
|
|||||||
echo "=== $DLL_COUNT DLLs present after scan ==="
|
echo "=== $DLL_COUNT DLLs present after scan ==="
|
||||||
ls -lh "$BIN/QElectroTech.exe" || { echo "ERROR: exe missing from bin/"; exit 1; }
|
ls -lh "$BIN/QElectroTech.exe" || { echo "ERROR: exe missing from bin/"; exit 1; }
|
||||||
[ "$DLL_COUNT" -gt 5 ] || { echo "ERROR: too few DLLs"; exit 1; }
|
[ "$DLL_COUNT" -gt 5 ] || { echo "ERROR: too few DLLs"; exit 1; }
|
||||||
# Without it QElectroTech.exe would not start at all.
|
|
||||||
[ -f "$BIN/libhidapi-0.dll" ] || { echo "ERROR: libhidapi-0.dll not deployed"; exit 1; }
|
|
||||||
cd "$GITHUB_WORKSPACE"
|
cd "$GITHUB_WORKSPACE"
|
||||||
|
|
||||||
cp /ucrt64/bin/libgcc_s_seh-1.dll "$BIN/"
|
cp /ucrt64/bin/libgcc_s_seh-1.dll "$BIN/"
|
||||||
@@ -253,89 +558,11 @@ jobs:
|
|||||||
cp -r "$GITHUB_WORKSPACE/titleblocks" "$FILES/titleblocks" || true
|
cp -r "$GITHUB_WORKSPACE/titleblocks" "$FILES/titleblocks" || true
|
||||||
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
cp -r "$GITHUB_WORKSPACE/examples" "$FILES/examples" || true
|
||||||
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
cp -r "$GITHUB_WORKSPACE/fonts" "$FILES/fonts" || true
|
||||||
# The MCP server finds bin/QElectroTech.exe and elements/ from mcp/.
|
|
||||||
mkdir -p "$FILES/mcp"
|
|
||||||
cp "$GITHUB_WORKSPACE/misc/qet-mcp/qet_mcp.py" "$GITHUB_WORKSPACE/misc/qet-mcp/README.md" "$FILES/mcp/"
|
|
||||||
# Python for it, so Windows users need not install one: the official
|
|
||||||
# embeddable package, pinned by version and checksum (python.org's
|
|
||||||
# own sha256 for this file). The installer offers it unticked; the
|
|
||||||
# portable folder and the MSI carry it.
|
|
||||||
PY_EMBED_VERSION=3.14.7
|
|
||||||
PY_EMBED_SHA256=d297e5ff019966817ad8502465176139f2d3d840fa4ed84b13bed399a6ab1f15
|
|
||||||
PY_ZIP="$GITHUB_WORKSPACE/python-embed.zip"
|
|
||||||
curl -fsSL -o "$PY_ZIP" \
|
|
||||||
"https://www.python.org/ftp/python/$PY_EMBED_VERSION/python-$PY_EMBED_VERSION-embed-amd64.zip"
|
|
||||||
echo "$PY_EMBED_SHA256 $PY_ZIP" | sha256sum -c - \
|
|
||||||
|| { echo "ERROR: embeddable Python checksum mismatch"; exit 1; }
|
|
||||||
python3 -m zipfile -e "$PY_ZIP" "$FILES/mcp/python"
|
|
||||||
[ -f "$FILES/mcp/python/python.exe" ] \
|
|
||||||
|| { echo "ERROR: python.exe missing from the embeddable package"; exit 1; }
|
|
||||||
|
|
||||||
# --- Translations ---
|
cp -r "$GITHUB_WORKSPACE/lang" "$FILES/lang" || true
|
||||||
# Since PR #751 the .qm files are no longer tracked in git: lrelease
|
find "$GITHUB_WORKSPACE/build" -name "*.qm" -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
||||||
# generates them in build/lang/ (OUTPUT_LOCATION "lang", relative to
|
echo "=== .qm files in files/lang/ ==="
|
||||||
# the build dir). Expected set = the .ts listed in TS_FILES
|
ls "$FILES/lang/"*.qm 2>/dev/null | wc -l || echo "0 .qm files"
|
||||||
# (cmake/qet_compilation_vars.cmake): a missing .qm fails the job
|
|
||||||
# instead of silently shipping an untranslated build; a .ts present
|
|
||||||
# in lang/ but not listed in TS_FILES only raises a warning.
|
|
||||||
# find/grep only, no shell glob: $GITHUB_WORKSPACE is a Windows path
|
|
||||||
# (D:\a\...) and its backslashes break glob patterns.
|
|
||||||
QM_SRC="$GITHUB_WORKSPACE/build/lang"
|
|
||||||
mkdir -p "$FILES/lang"
|
|
||||||
TS_LISTED=$(grep -o 'lang/qet_[A-Za-z_]*\.ts' "$GITHUB_WORKSPACE/cmake/qet_compilation_vars.cmake" \
|
|
||||||
| sed -e 's#^lang/##' -e 's#\.ts$##' | LC_ALL=C sort -u || true)
|
|
||||||
[ -n "$TS_LISTED" ] || { echo "ERROR: cannot read TS_FILES from cmake/qet_compilation_vars.cmake"; exit 1; }
|
|
||||||
TS_PRESENT=$(find "$GITHUB_WORKSPACE/lang" -maxdepth 1 -name 'qet_*.ts' -exec basename {} .ts \; | LC_ALL=C sort)
|
|
||||||
UNLISTED=$(LC_ALL=C comm -13 <(echo "$TS_LISTED") <(echo "$TS_PRESENT"))
|
|
||||||
if [ -n "$UNLISTED" ]; then
|
|
||||||
echo "::warning::.ts files not in TS_FILES, no .qm built:" $UNLISTED
|
|
||||||
fi
|
|
||||||
find "$QM_SRC" -maxdepth 1 -name 'qet_*.qm' -exec cp {} "$FILES/lang/" \; 2>/dev/null || true
|
|
||||||
QM_PRESENT=$(find "$FILES/lang" -maxdepth 1 -name 'qet_*.qm' -exec basename {} .qm \; | LC_ALL=C sort)
|
|
||||||
MISSING=$(LC_ALL=C comm -23 <(echo "$TS_LISTED") <(echo "$QM_PRESENT"))
|
|
||||||
QM_COUNT=$(printf '%s\n' "$QM_PRESENT" | grep -c . || true)
|
|
||||||
TS_COUNT=$(printf '%s\n' "$TS_LISTED" | grep -c .)
|
|
||||||
echo "=== $QM_COUNT .qm files copied to files/lang/ (expected: $TS_COUNT) ==="
|
|
||||||
if [ -n "$MISSING" ]; then
|
|
||||||
echo "ERROR: missing translations:" $MISSING
|
|
||||||
find "$GITHUB_WORKSPACE/build" -name '*.qm' || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Qt's own translations (OK/Cancel buttons, standard dialogs...):
|
|
||||||
# they come from qtbase_XX.qm, not from QET's .ts, and windeployqt
|
|
||||||
# runs with --no-translations. QETApp::setLanguage() falls back to
|
|
||||||
# lang/qt_XX.qm, so copy each qtbase_XX.qm there under that name
|
|
||||||
# (qtbase_XX.qm is standalone, unlike Qt's qt_XX.qm meta catalogs).
|
|
||||||
QT_TR_DIR=/ucrt64/share/qt6/translations
|
|
||||||
if [ ! -d "$QT_TR_DIR" ]; then
|
|
||||||
QT_TR_DIR=$(cygpath -u "$(/ucrt64/bin/qtpaths6 --query QT_INSTALL_TRANSLATIONS 2>/dev/null)" 2>/dev/null || true)
|
|
||||||
fi
|
|
||||||
find "$QT_TR_DIR" -maxdepth 1 -name 'qtbase_*.qm' 2>/dev/null | while read -r f; do
|
|
||||||
l=$(basename "$f" .qm)
|
|
||||||
cp "$f" "$FILES/lang/qt_${l#qtbase_}.qm"
|
|
||||||
done
|
|
||||||
# QET languages Qt only ships with a region (pt -> pt_PT, zh -> zh_CN):
|
|
||||||
# QTranslator only shortens codes (fr_FR -> fr), it never extends them.
|
|
||||||
for q in $TS_LISTED; do
|
|
||||||
l=${q#qet_}
|
|
||||||
if [ ! -e "$FILES/lang/qt_$l.qm" ]; then
|
|
||||||
if [ -e "$QT_TR_DIR/qtbase_${l}_${l^^}.qm" ]; then
|
|
||||||
alt="$QT_TR_DIR/qtbase_${l}_${l^^}.qm"
|
|
||||||
else
|
|
||||||
alt=$(find "$QT_TR_DIR" -maxdepth 1 -name "qtbase_${l}_*.qm" 2>/dev/null | LC_ALL=C sort | head -1 || true)
|
|
||||||
fi
|
|
||||||
if [ -n "$alt" ]; then
|
|
||||||
cp "$alt" "$FILES/lang/qt_$l.qm"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
QT_QM_COUNT=$(find "$FILES/lang" -maxdepth 1 -name 'qt_*.qm' | wc -l)
|
|
||||||
echo "=== $QT_QM_COUNT Qt translation files (qt_*.qm) copied from $QT_TR_DIR ==="
|
|
||||||
if [ "$QT_QM_COUNT" -eq 0 ]; then
|
|
||||||
echo "ERROR: no qtbase_*.qm found in '$QT_TR_DIR' (mingw-w64-ucrt-x86_64-qt6-translations installed?)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
for f in LICENSE ChangeLog CREDIT README ELEMENTS.LICENSE; do
|
||||||
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
cp "$GITHUB_WORKSPACE/$f" "$FILES/$f" 2>/dev/null || true
|
||||||
@@ -348,7 +575,7 @@ jobs:
|
|||||||
&& echo " OK : $f" \
|
&& echo " OK : $f" \
|
||||||
|| echo " MISSING: $f"
|
|| echo " MISSING: $f"
|
||||||
done
|
done
|
||||||
for d in ico elements lang titleblocks fonts examples bin mcp; do
|
for d in ico elements lang titleblocks fonts examples bin; do
|
||||||
[ -d "$FILES/$d" ] \
|
[ -d "$FILES/$d" ] \
|
||||||
&& echo " OK : $d/" \
|
&& echo " OK : $d/" \
|
||||||
|| echo " MISSING: $d/"
|
|| echo " MISSING: $d/"
|
||||||
@@ -367,8 +594,8 @@ jobs:
|
|||||||
|
|
||||||
# Deliberately NOT parsed from sources/qetversion.cpp: the CI job
|
# Deliberately NOT parsed from sources/qetversion.cpp: the CI job
|
||||||
# already knows for certain it configured Qt6 (-DQT_VERSION_MAJOR=6),
|
# already knows for certain it configured Qt6 (-DQT_VERSION_MAJOR=6),
|
||||||
# so the "0.200.1" version label is set here explicitly rather than
|
# so the "0.200.1" experimental-track label is set here explicitly
|
||||||
# relying on in-binary Qt version detection.
|
# rather than relying on in-binary Qt version detection.
|
||||||
VERSION="0.200.1"
|
VERSION="0.200.1"
|
||||||
|
|
||||||
FULL_VERSION="${VERSION}-qt6-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
FULL_VERSION="${VERSION}-qt6-r${HEAD}-${GITCOMMIT}_x86_64-win64"
|
||||||
@@ -399,15 +626,6 @@ jobs:
|
|||||||
echo "=== Contents of nsis_root/files/ ==="
|
echo "=== Contents of nsis_root/files/ ==="
|
||||||
ls "$GITHUB_WORKSPACE/nsis_root/files/"
|
ls "$GITHUB_WORKSPACE/nsis_root/files/"
|
||||||
|
|
||||||
- name: Diagnose NSIS plugins
|
|
||||||
shell: msys2 {0}
|
|
||||||
run: |
|
|
||||||
pacman -Q mingw-w64-ucrt-x86_64-nsis || true
|
|
||||||
echo "=== nsDialogs.dll ==="
|
|
||||||
find "$MSYSTEM_PREFIX/share/nsis" -iname 'nsDialogs.dll' || true
|
|
||||||
echo "=== Plugins tree ==="
|
|
||||||
find "$MSYSTEM_PREFIX/share/nsis/Plugins" -maxdepth 2 | head -60 || true
|
|
||||||
|
|
||||||
- name: Build NSIS installer
|
- name: Build NSIS installer
|
||||||
shell: msys2 {0}
|
shell: msys2 {0}
|
||||||
run: |
|
run: |
|
||||||
@@ -415,28 +633,8 @@ jobs:
|
|||||||
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
NSIS_ROOT="$GITHUB_WORKSPACE/nsis_root"
|
||||||
cd "$NSIS_ROOT"
|
cd "$NSIS_ROOT"
|
||||||
echo "=== CWD : $(pwd) ==="
|
echo "=== CWD : $(pwd) ==="
|
||||||
echo "=== Unicode/Target directives in QET64.nsi ==="
|
MSYS2_ARG_CONV_EXCL="*" makensis /V4 QET64.nsi
|
||||||
grep -niE '^[[:space:]]*(unicode|target)[[:space:]]' QET64.nsi || echo "(none)"
|
RC=$?
|
||||||
|
|
||||||
# Fallback: if makensis does not register its plugin dir, point it
|
|
||||||
# at the folder that actually contains nsDialogs.dll.
|
|
||||||
EXTRA=()
|
|
||||||
DLL=$(find "$MSYSTEM_PREFIX/share/nsis" -iname 'nsDialogs.dll' | head -1 || true)
|
|
||||||
if [ -n "$DLL" ]; then
|
|
||||||
PLUGDIR_WIN=$(cygpath -w "$(dirname "$DLL")")
|
|
||||||
echo "nsDialogs.dll found in: $PLUGDIR_WIN"
|
|
||||||
# Plugin dirs are per target in NSIS: declare it for all of them so
|
|
||||||
# it applies whatever Unicode/Target directive QET64.nsi uses.
|
|
||||||
EXTRA=(-X"!addplugindir /x86-ansi $PLUGDIR_WIN"
|
|
||||||
-X"!addplugindir /x86-unicode $PLUGDIR_WIN"
|
|
||||||
-X"!addplugindir /amd64-unicode $PLUGDIR_WIN")
|
|
||||||
else
|
|
||||||
echo "::error::nsDialogs.dll not found in the MSYS2 NSIS package"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
RC=0
|
|
||||||
MSYS2_ARG_CONV_EXCL="*" makensis /V4 "${EXTRA[@]}" QET64.nsi || RC=$?
|
|
||||||
echo "=== Contents of nsis_root after makensis ==="
|
echo "=== Contents of nsis_root after makensis ==="
|
||||||
ls "$NSIS_ROOT/"
|
ls "$NSIS_ROOT/"
|
||||||
[ $RC -eq 0 ] || { echo "ERROR: makensis failed (exit $RC)"; exit 1; }
|
[ $RC -eq 0 ] || { echo "ERROR: makensis failed (exit $RC)"; exit 1; }
|
||||||
@@ -462,7 +660,6 @@ jobs:
|
|||||||
name: build-logs-qt6
|
name: build-logs-qt6
|
||||||
path: |
|
path: |
|
||||||
build/CMakeFiles/*.log
|
build/CMakeFiles/*.log
|
||||||
build/Testing/Temporary/LastTest*.log
|
|
||||||
nsis_root/files/bin/
|
nsis_root/files/bin/
|
||||||
if-no-files-found: warn
|
if-no-files-found: warn
|
||||||
|
|
||||||
@@ -490,92 +687,65 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
name: qelectrotech-${{ steps.qet_version.outputs.base_version }}+git${{ steps.qet_version.outputs.head }}-x86-win64-readytouse
|
||||||
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
path: dist/${{ steps.zip_portable.outputs.zip_name }}
|
||||||
retention-days: 40
|
retention-days: 14
|
||||||
|
|
||||||
- name: Upload NSIS installer
|
- name: Upload NSIS installer
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-installer-qt6
|
name: qelectrotech-windows-installer-qt6
|
||||||
path: dist/Installer_*.exe
|
path: dist/Installer_*.exe
|
||||||
retention-days: 40
|
retention-days: 14
|
||||||
|
|
||||||
- name: Upload portable (nom fixe pour le workflow MSI)
|
- name: Upload portable (nom fixe pour le workflow MSI)
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-portable-qt6
|
name: qelectrotech-windows-portable-qt6
|
||||||
path: nsis_root/files/
|
path: nsis_root/files/
|
||||||
retention-days: 40
|
retention-days: 14
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Job 2 : Publie les assets nightly (exe + zip) sur la release
|
# Job 3 : Publie les assets nightly (exe + zip, Qt5 et Qt6) sur la release
|
||||||
# Ne tourne que sur push master (pas sur les PRs)
|
# Ne tourne que sur push master (pas sur les PRs)
|
||||||
#
|
|
||||||
# Release tag: "nightly-qt6" (was "nightly").
|
|
||||||
# The old "nightly" release became IMMUTABLE after it was republished by
|
|
||||||
# this job while GitHub's "Release immutability" repo setting was briefly
|
|
||||||
# enabled (Oct. 2026). Turning the setting off again does not revert a
|
|
||||||
# release that was published while it was on: assets could no longer be
|
|
||||||
# added or deleted there, and its tag can never host a new release, even
|
|
||||||
# after the release itself was deleted. Hence a fresh tag. The old
|
|
||||||
# "nightly" release (with the frozen Qt5 legacy build) was deleted at the
|
|
||||||
# same time; its tag stays locked and must not be reused.
|
|
||||||
#
|
|
||||||
# Do NOT re-enable "Release immutability" while this single, rolling
|
|
||||||
# nightly release model is used: the next republish would lock
|
|
||||||
# "nightly-qt6" the same way. Immutability requires one new release per
|
|
||||||
# build (draft -> upload assets -> publish).
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
publish-nightly-assets:
|
publish-nightly-assets:
|
||||||
needs: [build-windows-qt6]
|
needs: [build-windows, build-windows-qt6]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
env:
|
|
||||||
NIGHTLY_TAG: nightly-qt6
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Download installer artifact
|
- name: Download installer artifacts (Qt5 + Qt6)
|
||||||
uses: actions/download-artifact@v8
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
pattern: qelectrotech-windows-installer*
|
pattern: qelectrotech-windows-installer*
|
||||||
path: downloaded/installer/
|
path: downloaded/installer/
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
- name: Download portable artifact
|
- name: Download portable artifacts (Qt5 + Qt6)
|
||||||
uses: actions/download-artifact@v8
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
pattern: qelectrotech-*-readytouse
|
pattern: qelectrotech-*-readytouse
|
||||||
path: downloaded/portable/
|
path: downloaded/portable/
|
||||||
merge-multiple: true
|
merge-multiple: true
|
||||||
|
|
||||||
# Remove the previous .exe/.zip before uploading the new ones.
|
|
||||||
# On the very first run the release does not exist yet: skip cleanly
|
|
||||||
# (the default bash shell runs with pipefail, so an unguarded
|
|
||||||
# `gh release view` on a missing release would fail the step).
|
|
||||||
- name: Delete old nightly assets (.exe and .zip)
|
- name: Delete old nightly assets (.exe and .zip)
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
REPO: ${{ github.repository }}
|
REPO: ${{ github.repository }}
|
||||||
run: |
|
run: |
|
||||||
if ! gh release view "$NIGHTLY_TAG" --repo "$REPO" > /dev/null 2>&1; then
|
gh release view nightly --repo "$REPO" --json assets \
|
||||||
echo "Release '$NIGHTLY_TAG' does not exist yet — it will be created by the next step."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
gh release view "$NIGHTLY_TAG" --repo "$REPO" --json assets \
|
|
||||||
--jq '.assets[] | select(.name | test("\\.(exe|zip)$")) | .name' \
|
--jq '.assets[] | select(.name | test("\\.(exe|zip)$")) | .name' \
|
||||||
| while read -r name; do
|
| while read -r name; do
|
||||||
echo "Deleting old asset: $name"
|
echo "Deleting old asset: $name"
|
||||||
gh release delete-asset "$NIGHTLY_TAG" "$name" --repo "$REPO" --yes
|
gh release delete-asset nightly "$name" --repo "$REPO" --yes
|
||||||
done
|
done
|
||||||
echo "Old .exe and .zip assets deleted."
|
echo "Old .exe and .zip assets deleted."
|
||||||
|
|
||||||
- name: Update nightly release
|
- name: Update nightly release
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v3
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ env.NIGHTLY_TAG }}
|
tag_name: nightly
|
||||||
# Only used when the tag does not exist yet (first run).
|
|
||||||
target_commitish: ${{ github.sha }}
|
|
||||||
name: "Nightly Build – Windows"
|
name: "Nightly Build – Windows"
|
||||||
body: |
|
body: |
|
||||||
🔧 **Automated nightly build** — may be unstable.
|
🔧 **Automated nightly build** — may be unstable.
|
||||||
@@ -588,6 +758,9 @@ jobs:
|
|||||||
|
|
||||||
> ⚠️ This is a development version; it introduces new features you want, but may cause bugs that have not yet been identified yet.
|
> ⚠️ This is a development version; it introduces new features you want, but may cause bugs that have not yet been identified yet.
|
||||||
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
> For stable releases, see the [Releases page](https://github.com/${{ github.repository }}/releases).
|
||||||
|
|
||||||
|
> 🧪 **Qt6 builds are experimental.** Files tagged `-qt6-` are built against Qt6 and are not yet
|
||||||
|
> as tested as the Qt5 track. Expect rough edges; report issues clearly labelled "Qt6".
|
||||||
prerelease: true
|
prerelease: true
|
||||||
make_latest: false
|
make_latest: false
|
||||||
files: |
|
files: |
|
||||||
@@ -596,4 +769,4 @@ jobs:
|
|||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
# GitHub Pages is generated and deployed by windows-msi.yml
|
# GitHub Pages is generated and deployed by windows-msi.yml
|
||||||
# after the MSI upload, so that all URLs (exe/zip/msi) are known.
|
# after the MSI upload, so that all URLs (exe/zip/msi, Qt5+Qt6) are known.
|
||||||
|
|||||||
@@ -14,13 +14,6 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
default: ""
|
default: ""
|
||||||
|
|
||||||
# Rolling Qt6 nightly release, updated on every build. Replaces the old
|
|
||||||
# "nightly" tag, which became immutable while the "Release immutability"
|
|
||||||
# setting was briefly enabled (Oct. 2026) — see the note on
|
|
||||||
# publish-nightly-assets in windows-build.yml.
|
|
||||||
env:
|
|
||||||
NIGHTLY_TAG: nightly-qt6
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-msi:
|
build-msi:
|
||||||
name: Build MSI with WiX v7 (${{ matrix.flavor }})
|
name: Build MSI with WiX v7 (${{ matrix.flavor }})
|
||||||
@@ -32,27 +25,26 @@ jobs:
|
|||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
# Single-entry matrix kept on purpose (rather than flattening the job):
|
|
||||||
# matrix.flavor is used as part of the MSI ProductCode seed, so changing
|
|
||||||
# it would generate a new ProductCode and break upgrade detection for
|
|
||||||
# existing installs. Keeping "qt6" here preserves continuity.
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
|
- flavor: qt5
|
||||||
|
portable_artifact: qelectrotech-windows-portable
|
||||||
|
version_source: qetversion # parsed from sources/qetversion.cpp
|
||||||
|
label_suffix: ""
|
||||||
|
experimental: false
|
||||||
- flavor: qt6
|
- flavor: qt6
|
||||||
portable_artifact: qelectrotech-windows-portable-qt6
|
portable_artifact: qelectrotech-windows-portable-qt6
|
||||||
version_source: hardcoded # see note in "Extract version" step
|
version_source: hardcoded # see note in "Extract version" step
|
||||||
label_suffix: "-qt6"
|
label_suffix: "-qt6-EXPERIMENTAL"
|
||||||
experimental: false
|
experimental: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pages: write
|
pages: write
|
||||||
id-token: write # Required by SignPath
|
id-token: write # Required by SignPath
|
||||||
|
|
||||||
env:
|
|
||||||
SIGNPATH_API_TOKEN: ${{ secrets.SIGNPATH_API_TOKEN }}
|
|
||||||
|
|
||||||
outputs:
|
outputs:
|
||||||
|
qt5_msi: ${{ steps.export.outputs.msi_name_qt5 }}
|
||||||
qt6_msi: ${{ steps.export.outputs.msi_name_qt6 }}
|
qt6_msi: ${{ steps.export.outputs.msi_name_qt6 }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@@ -66,50 +58,28 @@ jobs:
|
|||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 2. Download the portable artifact for this flavor
|
# 2. Download the portable artifact for this flavor
|
||||||
#
|
|
||||||
# Wrapped in nick-fields/retry: actions/download-artifact@v8 has
|
|
||||||
# shown repeated "Artifact download failed after 5 retries"
|
|
||||||
# failures on this cross-workflow download (via run-id) — not a
|
|
||||||
# real content/digest problem, just flaky Azure blob delivery.
|
|
||||||
# Two separate occurrences observed within days of each other
|
|
||||||
# (different artifact IDs/digests, same failure signature), each
|
|
||||||
# one enough to fail build-msi outright and block the rest of the
|
|
||||||
# pipeline. Retrying the whole download 3x is cheap insurance.
|
|
||||||
# Switched to `gh run download` here because nick-fields/retry
|
|
||||||
# can only retry a shell command, not re-invoke a `uses:` step.
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Download portable artifact
|
- name: Download portable artifact
|
||||||
uses: nick-fields/retry@v3
|
uses: actions/download-artifact@v8
|
||||||
with:
|
with:
|
||||||
timeout_minutes: 10
|
name: ${{ matrix.portable_artifact }}
|
||||||
max_attempts: 3
|
path: artifact\files
|
||||||
retry_wait_seconds: 30
|
# workflow_run => use the triggering run's ID
|
||||||
shell: pwsh
|
# workflow_dispatch => use input run_id if provided, otherwise current run
|
||||||
command: |
|
run-id: ${{ github.event.workflow_run.id || github.event.inputs.run_id || github.run_id }}
|
||||||
if (Test-Path "artifact\files") { Remove-Item -Recurse -Force "artifact\files" }
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
New-Item -ItemType Directory -Force -Path "artifact\files" | Out-Null
|
repository: ${{ github.repository }}
|
||||||
|
|
||||||
$runId = "${{ github.event.workflow_run.id || github.event.inputs.run_id || github.run_id }}"
|
|
||||||
gh run download $runId `
|
|
||||||
--repo "${{ github.repository }}" `
|
|
||||||
--name "${{ matrix.portable_artifact }}" `
|
|
||||||
--dir "artifact\files"
|
|
||||||
|
|
||||||
if ($LASTEXITCODE -ne 0) {
|
|
||||||
Write-Error "gh run download failed (exit $LASTEXITCODE)"
|
|
||||||
exit $LASTEXITCODE
|
|
||||||
}
|
|
||||||
env:
|
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 3. Extract version
|
# 3. Extract version
|
||||||
|
# Qt5: parsed from sources/qetversion.cpp (single source of truth
|
||||||
|
# for the software's own reported version).
|
||||||
# Qt6: hardcoded "0.200.1" here — deliberately NOT parsed from the
|
# Qt6: hardcoded "0.200.1" here — deliberately NOT parsed from the
|
||||||
# binary/source, since Qt-version self-detection inside the
|
# binary/source, since Qt-version self-detection inside the
|
||||||
# compiled code proved unreliable (see commit e1aa65f). The CI
|
# compiled code proved unreliable (see commit e1aa65f). The CI
|
||||||
# matrix entry already knows for certain which flavor it is
|
# matrix entry already knows for certain which flavor it is
|
||||||
# packaging, so the version label is set explicitly at the
|
# packaging, so the experimental-track label is set explicitly
|
||||||
# packaging level instead.
|
# at the packaging level instead.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Extract version
|
- name: Extract version
|
||||||
id: version
|
id: version
|
||||||
@@ -155,9 +125,10 @@ jobs:
|
|||||||
Write-Host "Version MSI : $verMsi"
|
Write-Host "Version MSI : $verMsi"
|
||||||
Write-Host "Version display : $verDisplay"
|
Write-Host "Version display : $verDisplay"
|
||||||
|
|
||||||
# Qt platform argument: kept from the Qt5 era (QTBUG-83161
|
# Qt platform argument: only Qt5 needs the QTBUG-83161 font-rendering
|
||||||
# font-rendering workaround, GDI backend). Qt6 uses DirectWrite by
|
# workaround (GDI backend). Qt6 uses DirectWrite by default and does
|
||||||
# default and does not need it, so this always resolves empty now.
|
# not need it. Computed once here so both the bundled "Lancer QET.bat"
|
||||||
|
# and the MSI shortcuts (wix build -d QtPlatformArgs=...) stay in sync.
|
||||||
if ("${{ matrix.flavor }}" -eq "qt5") {
|
if ("${{ matrix.flavor }}" -eq "qt5") {
|
||||||
$qtArgs = "-platform windows:fontengine=freetype"
|
$qtArgs = "-platform windows:fontengine=freetype"
|
||||||
} else {
|
} else {
|
||||||
@@ -257,10 +228,10 @@ jobs:
|
|||||||
Write-Host "Lancer QET.bat replaced for MSI installation (qtArgs: '$qtArgs')."
|
Write-Host "Lancer QET.bat replaced for MSI installation (qtArgs: '$qtArgs')."
|
||||||
|
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
# 9. Build the MSI (unsigned at this stage — signing happens below)
|
# 9. Build the MSI (unsigned)
|
||||||
# Qt6 keeps its own ProductCode seed (distinct from the retired Qt5
|
# Qt6 (experimental) uses a distinct ProductCode seed so it never
|
||||||
# MSI), so a machine that still has the old Qt5 MSI installed gets a
|
# collides with / upgrades over the Qt5 MSI — they must be able to
|
||||||
# separate, coexisting install rather than an unexpected upgrade.
|
# coexist as clearly separate installs.
|
||||||
# ----------------------------------------------------------------
|
# ----------------------------------------------------------------
|
||||||
- name: Build MSI
|
- name: Build MSI
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
@@ -318,20 +289,12 @@ jobs:
|
|||||||
retention-days: 1
|
retention-days: 1
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
# Qt6 is now signed too (previously excluded while Qt5 was the stable
|
# Qt6 stays on the unsigned/experimental track (no signing request for
|
||||||
# track and Qt6 was experimental-only). The remaining guard is the fork
|
# this flavor), and forks never have the SignPath secrets, so guard on
|
||||||
# check: forks never have the SignPath secrets, and a fork-originated
|
# both: only qt5, and only in the upstream repo.
|
||||||
# PR/run must never attempt a signing request.
|
|
||||||
# (cf. DieterMayerOSS:fix/msi-signing-fork-guard, d3f60c88)
|
# (cf. DieterMayerOSS:fix/msi-signing-fork-guard, d3f60c88)
|
||||||
# continue-on-error: SignPath's certificate is still pending validation
|
|
||||||
# (Sept 2026) — the signing request currently fails with a 500 on the
|
|
||||||
# SignPath side. Kept non-blocking so the nightly MSI still ships
|
|
||||||
# (unsigned) while the certificate is pending. Remove
|
|
||||||
# continue-on-error once the certificate is confirmed active.
|
|
||||||
- name: Sign MSI via SignPath
|
- name: Sign MSI via SignPath
|
||||||
id: sign
|
if: matrix.flavor == 'qt5' && github.repository == 'qelectrotech/qelectrotech-source-mirror'
|
||||||
if: github.repository == 'qelectrotech/qelectrotech-source-mirror' && env.SIGNPATH_API_TOKEN != ''
|
|
||||||
continue-on-error: true
|
|
||||||
uses: signpath/github-action-submit-signing-request@v2
|
uses: signpath/github-action-submit-signing-request@v2
|
||||||
with:
|
with:
|
||||||
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
api-token: ${{ secrets.SIGNPATH_API_TOKEN }}
|
||||||
@@ -343,67 +306,32 @@ jobs:
|
|||||||
wait-for-completion: true
|
wait-for-completion: true
|
||||||
output-artifact-directory: 'dist\'
|
output-artifact-directory: 'dist\'
|
||||||
|
|
||||||
# If signing succeeded, SignPath already overwrote dist\*.msi with the
|
|
||||||
# signed copy (output-artifact-directory above) — nothing to do here.
|
|
||||||
# If it failed/was skipped, dist\*.msi is still the unsigned MSI from
|
|
||||||
# the "Build MSI" step, so the rest of the pipeline just ships that.
|
|
||||||
- name: Report signing status
|
|
||||||
if: always()
|
|
||||||
shell: pwsh
|
|
||||||
run: |
|
|
||||||
if ("${{ steps.sign.outcome }}" -eq "success") {
|
|
||||||
Write-Host "MSI signed successfully via SignPath."
|
|
||||||
} else {
|
|
||||||
Write-Warning "MSI signing skipped or failed (outcome: ${{ steps.sign.outcome }}) — shipping UNSIGNED MSI. Likely cause: SignPath certificate still pending validation."
|
|
||||||
}
|
|
||||||
|
|
||||||
- name: Upload signed MSI artifact
|
- name: Upload signed MSI artifact
|
||||||
if: always()
|
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: qelectrotech-windows-msi-${{ matrix.flavor }}
|
name: qelectrotech-windows-msi-${{ matrix.flavor }}
|
||||||
path: dist\*.msi
|
path: dist\*.msi
|
||||||
retention-days: 40
|
retention-days: 14
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
|
||||||
- name: Delete old nightly .msi asset
|
- name: Delete old nightly .msi asset for this flavor
|
||||||
# Only run if a new MSI actually exists in dist/ — otherwise the old
|
|
||||||
# (still working) nightly .msi would be deleted without anything to
|
|
||||||
# replace it, leaving the nightly release with no MSI at all until
|
|
||||||
# the next successful build (see windows-msi-pipeline notes,
|
|
||||||
# run 35694391567: an upstream artifact-download failure meant
|
|
||||||
# dist\*.msi never existed for that run).
|
|
||||||
if: always() && hashFiles('dist/*.msi') != ''
|
|
||||||
env:
|
env:
|
||||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
REPO: ${{ github.repository }}
|
REPO: ${{ github.repository }}
|
||||||
run: |
|
run: |
|
||||||
# The release may not exist yet (e.g. a manual MSI run before
|
$pattern = if ("${{ matrix.flavor }}" -eq "qt6") { "-qt6-EXPERIMENTAL.*\\.msi$" } else { "\\.msi$" }
|
||||||
# windows-build.yml has published anything on NIGHTLY_TAG):
|
$names = gh release view nightly --repo $env:REPO --json assets --jq ".assets[] | select(.name | test(`"$pattern`")) | .name"
|
||||||
# nothing to delete then.
|
|
||||||
gh release view $env:NIGHTLY_TAG --repo $env:REPO *> $null
|
|
||||||
if ($LASTEXITCODE -ne 0) {
|
|
||||||
Write-Host "Release '$env:NIGHTLY_TAG' does not exist yet — nothing to delete."
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
$pattern = "-qt6.*\\.msi$"
|
|
||||||
$names = gh release view $env:NIGHTLY_TAG --repo $env:REPO --json assets --jq ".assets[] | select(.name | test(`"$pattern`")) | .name"
|
|
||||||
foreach ($name in ($names -split "`n" | Where-Object { $_ })) {
|
foreach ($name in ($names -split "`n" | Where-Object { $_ })) {
|
||||||
|
if ("${{ matrix.flavor }}" -eq "qt5" -and $name -match "-qt6-EXPERIMENTAL") { continue }
|
||||||
Write-Host "Deleting old asset: $name"
|
Write-Host "Deleting old asset: $name"
|
||||||
gh release delete-asset $env:NIGHTLY_TAG $name --repo $env:REPO --yes
|
gh release delete-asset nightly $name --repo $env:REPO --yes
|
||||||
}
|
}
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
# prerelease / make_latest set explicitly: if this step happens to
|
|
||||||
# create the release (it does not exist yet), it must not become the
|
|
||||||
# repository's "Latest" release.
|
|
||||||
- name: Upload MSI to nightly release
|
- name: Upload MSI to nightly release
|
||||||
if: always() && hashFiles('dist/*.msi') != ''
|
|
||||||
uses: softprops/action-gh-release@v3
|
uses: softprops/action-gh-release@v3
|
||||||
with:
|
with:
|
||||||
tag_name: ${{ env.NIGHTLY_TAG }}
|
tag_name: nightly
|
||||||
prerelease: true
|
|
||||||
make_latest: false
|
|
||||||
files: dist/*.msi
|
files: dist/*.msi
|
||||||
fail_on_unmatched_files: true
|
fail_on_unmatched_files: true
|
||||||
env:
|
env:
|
||||||
@@ -414,7 +342,11 @@ jobs:
|
|||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
$name = "$env:MSI_NAME"
|
$name = "$env:MSI_NAME"
|
||||||
echo "msi_name_qt6=$name" >> $env:GITHUB_OUTPUT
|
if ("${{ matrix.flavor }}" -eq "qt6") {
|
||||||
|
echo "msi_name_qt6=$name" >> $env:GITHUB_OUTPUT
|
||||||
|
} else {
|
||||||
|
echo "msi_name_qt5=$name" >> $env:GITHUB_OUTPUT
|
||||||
|
}
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
if: always()
|
if: always()
|
||||||
@@ -422,29 +354,16 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
Write-Host "=== MSI build summary (${{ matrix.flavor }}) ==="
|
Write-Host "=== MSI build summary (${{ matrix.flavor }}) ==="
|
||||||
Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}"
|
Write-Host "Version : ${{ steps.version.outputs.VERSION_DISPLAY }}"
|
||||||
Write-Host "Signed : ${{ steps.sign.outcome == 'success' }}"
|
Write-Host "Experimental : ${{ matrix.experimental }}"
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Job 2 : Génère et déploie la page GitHub Pages une fois le MSI publié,
|
# Job 2 : Génère et déploie la page GitHub Pages une fois les DEUX MSI
|
||||||
# pour que toutes les URLs soient connues.
|
# (Qt5 + Qt6) publiés, pour que toutes les URLs soient connues.
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
deploy-pages:
|
deploy-pages:
|
||||||
needs: build-msi
|
needs: build-msi
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# Regenerate the page whenever the MSI job actually ran (success OR
|
if: always() && needs.build-msi.result == 'success'
|
||||||
# packaging/signing failure) — not only on full success.
|
|
||||||
# The step below queries the published assets on the NIGHTLY_TAG
|
|
||||||
# release itself, so it already handles a missing MSI natively (empty
|
|
||||||
# MSI_NAME -> no MSI button on the page). The page only needs the
|
|
||||||
# exe/zip already published by windows-build.yml, independent of the
|
|
||||||
# MSI's fate.
|
|
||||||
# Only "skipped"/"cancelled" are excluded: if build-msi never ran at
|
|
||||||
# all (e.g. Windows Build itself failed), there is nothing new to
|
|
||||||
# publish and regenerating the page would be pointless.
|
|
||||||
if: >
|
|
||||||
always() &&
|
|
||||||
needs.build-msi.result != 'skipped' &&
|
|
||||||
needs.build-msi.result != 'cancelled'
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: write
|
contents: write
|
||||||
pages: write
|
pages: write
|
||||||
@@ -467,23 +386,29 @@ jobs:
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
REPO="${{ github.repository }}"
|
REPO="${{ github.repository }}"
|
||||||
|
|
||||||
ASSETS=$(gh release view "$NIGHTLY_TAG" --repo "$REPO" --json assets --jq '.assets[].name')
|
ASSETS=$(gh release view nightly --repo "$REPO" --json assets --jq '.assets[].name')
|
||||||
|
|
||||||
EXE_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.exe$' | head -1 || echo "")
|
EXE_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.exe$' | head -1)
|
||||||
ZIP_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.zip$' | head -1 || echo "")
|
ZIP_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.zip$' | head -1)
|
||||||
MSI_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.msi$' | head -1 || echo "")
|
MSI_NAME=$(echo "$ASSETS" | grep -v 'qt6' | grep '\.msi$' | head -1 || echo "")
|
||||||
|
|
||||||
if [ -z "$EXE_NAME" ] || [ -z "$ZIP_NAME" ]; then
|
EXE_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.exe$' | head -1 || echo "")
|
||||||
echo "::error::No Qt6 .exe/.zip found on release '$NIGHTLY_TAG' — refusing to publish a page with dead links."
|
ZIP_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.zip$' | head -1 || echo "")
|
||||||
exit 1
|
MSI_QT6_NAME=$(echo "$ASSETS" | grep 'qt6' | grep '\.msi$' | head -1 || echo "")
|
||||||
fi
|
|
||||||
|
|
||||||
BASE="https://github.com/$REPO/releases/download/$NIGHTLY_TAG"
|
BASE="https://github.com/$REPO/releases/download/nightly"
|
||||||
INSTALLER_URL="$BASE/$EXE_NAME"
|
INSTALLER_URL="$BASE/$EXE_NAME"
|
||||||
PORTABLE_URL="$BASE/$ZIP_NAME"
|
PORTABLE_URL="$BASE/$ZIP_NAME"
|
||||||
MSI_URL=""
|
MSI_URL=""
|
||||||
[ -n "$MSI_NAME" ] && MSI_URL="$BASE/$MSI_NAME"
|
[ -n "$MSI_NAME" ] && MSI_URL="$BASE/$MSI_NAME"
|
||||||
|
|
||||||
|
INSTALLER_QT6_URL=""
|
||||||
|
PORTABLE_QT6_URL=""
|
||||||
|
MSI_QT6_URL=""
|
||||||
|
[ -n "$EXE_QT6_NAME" ] && INSTALLER_QT6_URL="$BASE/$EXE_QT6_NAME"
|
||||||
|
[ -n "$ZIP_QT6_NAME" ] && PORTABLE_QT6_URL="$BASE/$ZIP_QT6_NAME"
|
||||||
|
[ -n "$MSI_QT6_NAME" ] && MSI_QT6_URL="$BASE/$MSI_QT6_NAME"
|
||||||
|
|
||||||
SHA="${{ github.event.workflow_run.head_sha || github.sha }}"
|
SHA="${{ github.event.workflow_run.head_sha || github.sha }}"
|
||||||
SHORT="${SHA:0:7}"
|
SHORT="${SHA:0:7}"
|
||||||
DATE=$(date -u '+%Y-%m-%d %H:%M UTC')
|
DATE=$(date -u '+%Y-%m-%d %H:%M UTC')
|
||||||
@@ -492,7 +417,7 @@ jobs:
|
|||||||
|
|
||||||
export DATE SHORT REPO SHA RUN_URL RUN_NUMBER
|
export DATE SHORT REPO SHA RUN_URL RUN_NUMBER
|
||||||
export INSTALLER_URL PORTABLE_URL MSI_URL
|
export INSTALLER_URL PORTABLE_URL MSI_URL
|
||||||
export NIGHTLY_TAG
|
export INSTALLER_QT6_URL PORTABLE_QT6_URL MSI_QT6_URL
|
||||||
|
|
||||||
python3 source/build-aux/generate-page.py
|
python3 source/build-aux/generate-page.py
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
*.snap
|
*.snap
|
||||||
.flatpak-builder
|
.flatpak-builder
|
||||||
__pycache__/
|
|
||||||
*.pyc
|
|
||||||
# Qt build output
|
# Qt build output
|
||||||
*.user
|
*.user
|
||||||
# doxygen Doxyfile output
|
# doxygen Doxyfile output
|
||||||
@@ -9,4 +7,3 @@ doc/*
|
|||||||
!doc/QElectroTech.qch
|
!doc/QElectroTech.qch
|
||||||
QElectroTech.tag
|
QElectroTech.tag
|
||||||
!doc/doc-utils
|
!doc/doc-utils
|
||||||
ui_*.h
|
|
||||||
|
|||||||
@@ -1,9 +1,3 @@
|
|||||||
[submodule "pugixml"]
|
|
||||||
path = pugixml
|
|
||||||
url = https://github.com/zeux/pugixml.git
|
|
||||||
[submodule "SingleApplication"]
|
|
||||||
path = SingleApplication
|
|
||||||
url = https://github.com/itay-grudev/SingleApplication.git
|
|
||||||
[submodule "elements"]
|
[submodule "elements"]
|
||||||
path = elements
|
path = elements
|
||||||
url = https://github.com/qelectrotech/qelectrotech-elements.git
|
url = https://github.com/qelectrotech/qelectrotech-elements.git
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -14,12 +14,10 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
include(cmake/hoto_update_cmake_message.cmake)
|
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.5...4.2)
|
cmake_minimum_required(VERSION 3.5...4.2)
|
||||||
|
|
||||||
project(qelectrotech
|
project(qelectrotech
|
||||||
VERSION 0.200.1
|
VERSION 0.100.1
|
||||||
DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features."
|
DESCRIPTION "QET is a CAD/CAE editor focusing on schematics drawing features."
|
||||||
HOMEPAGE_URL "https://qelectrotech.org/"
|
HOMEPAGE_URL "https://qelectrotech.org/"
|
||||||
LANGUAGES C CXX)
|
LANGUAGES C CXX)
|
||||||
@@ -27,103 +25,69 @@ project(qelectrotech
|
|||||||
include(cmake/copyright_message.cmake)
|
include(cmake/copyright_message.cmake)
|
||||||
|
|
||||||
set(QET_DIR ${PROJECT_SOURCE_DIR})
|
set(QET_DIR ${PROJECT_SOURCE_DIR})
|
||||||
|
include(cmake/qet_compilation_vars.cmake)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
find_package(Qt6 REQUIRED COMPONENTS ${QET_COMPONENTS})
|
||||||
|
qt_standard_project_setup()
|
||||||
|
|
||||||
|
# QT_VERSION_MAJOR is chosen explicitly by whoever configures the build,
|
||||||
|
# via -DQT_VERSION_MAJOR=5 or -DQT_VERSION_MAJOR=6.
|
||||||
|
# Default to Qt5 (current stable) when not specified, so existing
|
||||||
|
# CI/scripts that don't pass this option keep working unchanged.
|
||||||
|
# This must happen BEFORE add_subdirectory(tests) and the fetch_*.cmake
|
||||||
|
# includes below, so every subdirectory and every FetchContent dependency
|
||||||
|
# sees a consistent, already-defined value.
|
||||||
|
if(NOT DEFINED QT_VERSION_MAJOR)
|
||||||
|
set(QT_VERSION_MAJOR 6)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Some third-party CMake projects we pull in via FetchContent (e.g.
|
||||||
|
# SingleApplication) don't know about QET_VERSION_MAJOR: they follow Qt's
|
||||||
|
# own "QT_DEFAULT_MAJOR_VERSION" convention instead, and silently default
|
||||||
|
# to Qt5 if it isn't set. Propagate our choice so they stay in sync,
|
||||||
|
# otherwise they can end up linked against a different Qt major version
|
||||||
|
# than the rest of QET, which breaks AUTOMOC with an
|
||||||
|
# INTERFACE_QT_MAJOR_VERSION mismatch at generate time.
|
||||||
|
set(QT_DEFAULT_MAJOR_VERSION ${QT_VERSION_MAJOR} CACHE STRING "Qt version to use (5 or 6)" FORCE)
|
||||||
|
|
||||||
|
# Add sub directories
|
||||||
|
option(PACKAGE_TESTS "Build the tests" NO)
|
||||||
|
if(PACKAGE_TESTS)
|
||||||
|
message("Add sub directory tests")
|
||||||
|
add_subdirectory(tests)
|
||||||
|
endif()
|
||||||
|
|
||||||
include(cmake/paths_compilation_installation.cmake)
|
include(cmake/paths_compilation_installation.cmake)
|
||||||
include(cmake/start_options.cmake)
|
include(cmake/start_options.cmake)
|
||||||
include(cmake/developer_options.cmake)
|
include(cmake/developer_options.cmake)
|
||||||
include(cmake/git_update_submodules.cmake)
|
include(cmake/git_update_submodules.cmake)
|
||||||
include(cmake/git_last_commit_sha.cmake)
|
include(cmake/git_last_commit_sha.cmake)
|
||||||
|
include(cmake/fetch_kdeaddons.cmake)
|
||||||
include(cmake/fetch_singleapplication.cmake)
|
include(cmake/fetch_singleapplication.cmake)
|
||||||
include(cmake/fetch_pugixml.cmake)
|
include(cmake/fetch_pugixml.cmake)
|
||||||
include(cmake/find_spacemouse.cmake)
|
|
||||||
include(cmake/qet_compilation_vars.cmake)
|
|
||||||
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
set(CMAKE_AUTOMOC ON)
|
|
||||||
set(CMAKE_AUTORCC ON)
|
set(CMAKE_AUTORCC ON)
|
||||||
set(CMAKE_AUTOUIC ON)
|
set(CMAKE_AUTOUIC ON)
|
||||||
SET(CMAKE_CXX_STANDARD 17)
|
SET(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
find_package(
|
find_package(
|
||||||
Qt6
|
Qt${QT_VERSION_MAJOR}
|
||||||
COMPONENTS
|
COMPONENTS
|
||||||
${QET_COMPONENTS}
|
${QET_COMPONENTS}
|
||||||
REQUIRED)
|
REQUIRED)
|
||||||
|
|
||||||
# <private/qpdf_p.h> (QPdfEngine::drawHyperlink) needs Qt's private GUI module.
|
# Qt6 only creates the Qt::GuiPrivate target (used for QPdfEngine::drawHyperlink)
|
||||||
# Qt >= 6.7 ships it as a proper find_package component, but some distro
|
# when the GuiPrivate component is explicitly requested. Qt5 has no such
|
||||||
# packages (e.g. Ubuntu's qt6-base-private-dev) omit Qt6GuiPrivateConfig.cmake
|
# component package and creates the target implicitly with Gui, so only
|
||||||
# and only provide the implicit Qt6::GuiPrivate target created alongside
|
# request it on Qt6 - requesting it on Qt5 fails the whole configure.
|
||||||
# Qt6::Gui. Try the component quietly, then verify the target below so a
|
if(QT_VERSION_MAJOR GREATER_EQUAL 5)
|
||||||
# missing private-headers package fails here instead of at compile time.
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS GuiPrivate)
|
||||||
find_package(Qt6 QUIET COMPONENTS GuiPrivate)
|
|
||||||
|
|
||||||
if(NOT TARGET Qt6::GuiPrivate)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Qt6::GuiPrivate was not found. It is required for PDF hyperlink "
|
|
||||||
"support (<private/qpdf_p.h>). Install the Qt6 private headers "
|
|
||||||
"(e.g. 'qt6-base-private-dev' on Debian/Ubuntu) or use a Qt build "
|
|
||||||
"that provides the GuiPrivate component.")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# PDF page import (toolbar "Ajouter un PDF") needs the QtPdf module and,
|
|
||||||
# specifically, QPdfDocument::pagePointSize() which only exists since Qt 6.4.
|
|
||||||
# Unlike GuiPrivate above, a missing QtPdf module is NOT fatal here: some
|
|
||||||
# Qt6 distributions (e.g. the Flatpak org.kde.Platform runtime) don't ship
|
|
||||||
# it at all, since it lives in the qtwebengine source tree rather than Qt6
|
|
||||||
# core. When it's missing, or too old, the feature is silently disabled -
|
|
||||||
# see the QT_VERSION_CHECK / QET_HAS_QTPDF guards in diagrameventaddpdf.*
|
|
||||||
# and pdfpagesdialog.*.
|
|
||||||
set(QET_HAS_QTPDF FALSE)
|
|
||||||
find_package(Qt6 QUIET COMPONENTS Pdf)
|
|
||||||
if(TARGET Qt6::Pdf AND NOT Qt6_VERSION VERSION_LESS 6.4.0)
|
|
||||||
set(QET_HAS_QTPDF TRUE)
|
|
||||||
list(APPEND QET_PRIVATE_LIBRARIES Qt6::Pdf)
|
|
||||||
add_compile_definitions(QET_HAS_QTPDF)
|
|
||||||
else()
|
|
||||||
message(STATUS "QtPdf module not available (or Qt < 6.4): PDF page import feature disabled")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# JavaScript scripting (bugtracker #162: `--run script.js`, and later a
|
|
||||||
# "Run Script..." menu action) needs QJSEngine, in the Qml module. As with
|
|
||||||
# QtPdf above, this is not fatal when missing: some minimal Qt6 packagings
|
|
||||||
# may not ship it, and scripting is optional functionality nothing else in
|
|
||||||
# the application depends on. When it's missing the feature is silently
|
|
||||||
# disabled - see the QET_HAS_SCRIPTING guard in qetscripting.*.
|
|
||||||
set(QET_HAS_SCRIPTING FALSE)
|
|
||||||
find_package(Qt6 QUIET COMPONENTS Qml)
|
|
||||||
if(TARGET Qt6::Qml)
|
|
||||||
set(QET_HAS_SCRIPTING TRUE)
|
|
||||||
list(APPEND QET_PRIVATE_LIBRARIES Qt6::Qml)
|
|
||||||
add_compile_definitions(QET_HAS_SCRIPTING)
|
|
||||||
else()
|
|
||||||
message(STATUS "Qt Qml module not available: JavaScript scripting (--run) disabled")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# The zip container of a .qetz project is read and written with the bundled
|
|
||||||
# miniz (sources/container/miniz): in memory only, and without timestamps so
|
|
||||||
# that saving the same project twice gives the same bytes. The names must not
|
|
||||||
# clash with the zlib Qt links. Every target including miniz.h needs the same
|
|
||||||
# three, hence directory-wide.
|
|
||||||
add_compile_definitions(MINIZ_NO_TIME MINIZ_NO_STDIO MINIZ_NO_ZLIB_COMPATIBLE_NAMES)
|
|
||||||
|
|
||||||
# The crash handler writes a backtrace into the dump. Detecting this with
|
|
||||||
# __has_include(<execinfo.h>) is not enough: the header is present on FreeBSD
|
|
||||||
# too, but backtrace() lives in a separate libexecinfo there, so the compile
|
|
||||||
# succeeds and the link fails. FindBacktrace resolves both the header and
|
|
||||||
# whichever library actually provides the symbol, so gate on it instead - see
|
|
||||||
# the QET_CRASH_BACKTRACE guard in sources/logging/crashhandler.cpp.
|
|
||||||
find_package(Backtrace QUIET)
|
|
||||||
if(Backtrace_FOUND)
|
|
||||||
list(APPEND QET_PRIVATE_LIBRARIES ${Backtrace_LIBRARIES})
|
|
||||||
include_directories(${Backtrace_INCLUDE_DIRS})
|
|
||||||
add_compile_definitions(QET_CRASH_BACKTRACE)
|
|
||||||
else()
|
|
||||||
message(STATUS
|
|
||||||
"backtrace() not available: crash dumps will carry the log ring "
|
|
||||||
"without a backtrace")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(SQLite3 REQUIRED)
|
find_package(SQLite3 REQUIRED)
|
||||||
@@ -140,246 +104,94 @@ endif()
|
|||||||
|
|
||||||
set(CMAKE_AUTOUIC_SEARCH_PATHS ${QET_DIR}/sources/ui)
|
set(CMAKE_AUTOUIC_SEARCH_PATHS ${QET_DIR}/sources/ui)
|
||||||
|
|
||||||
include(cmake/fetch_kdeaddons.cmake)
|
|
||||||
|
|
||||||
# Add sub directories
|
|
||||||
option(PACKAGE_TESTS "Build the tests" ON)
|
|
||||||
if(PACKAGE_TESTS)
|
|
||||||
message("Add sub directory tests")
|
|
||||||
enable_testing()
|
|
||||||
add_subdirectory(tests)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# als laatse
|
|
||||||
include(cmake/define_definitions.cmake)
|
|
||||||
|
|
||||||
# The application's code, compiled once, as an object library: the
|
|
||||||
# executable is main.cpp linked with it, and tests that need the real
|
|
||||||
# classes (a folio, its view, the editor window) link it too.
|
|
||||||
set(QET_MAIN_FILE ${QET_DIR}/sources/main.cpp)
|
|
||||||
list(REMOVE_ITEM QET_SRC_FILES ${QET_MAIN_FILE})
|
|
||||||
add_library(
|
|
||||||
${PROJECT_NAME}_objects
|
|
||||||
OBJECT
|
|
||||||
${QET_RES_FILES}
|
|
||||||
${QET_SRC_FILES}
|
|
||||||
${QET_DIR}/qelectrotech.qrc
|
|
||||||
${QET_DIR}/ico/icon-themes.qrc
|
|
||||||
)
|
|
||||||
# The definitions above are set for this whole directory; a test target
|
|
||||||
# lives in tests/ and gets them from here, through the library.
|
|
||||||
get_directory_property(QET_DIRECTORY_DEFINITIONS COMPILE_DEFINITIONS)
|
|
||||||
target_compile_definitions(${PROJECT_NAME}_objects
|
|
||||||
INTERFACE ${QET_DIRECTORY_DEFINITIONS})
|
|
||||||
|
|
||||||
# On Windows, WIN32 sets /SUBSYSTEM:WINDOWS to suppress the console window.
|
|
||||||
# Qt automatically links qtmain.lib which provides the WinMain entry point,
|
|
||||||
# so no source code change is needed.
|
|
||||||
if(WIN32)
|
|
||||||
add_executable(
|
|
||||||
${PROJECT_NAME}
|
|
||||||
WIN32
|
|
||||||
${QET_MAIN_FILE}
|
|
||||||
${QM_FILES}
|
|
||||||
)
|
|
||||||
# Our own manifest (it declares longPathAware). MSVC merges a .manifest
|
|
||||||
# listed as a source; MinGW needs it embedded through a resource file,
|
|
||||||
# and ld then keeps it ahead of the toolchain's default manifest.
|
|
||||||
set(QET_MANIFEST_FILE ${QET_DIR}/build-aux/windows/qelectrotech.exe.manifest)
|
|
||||||
if(MSVC)
|
|
||||||
target_sources(${PROJECT_NAME} PRIVATE ${QET_MANIFEST_FILE})
|
|
||||||
else()
|
|
||||||
configure_file(${QET_DIR}/build-aux/windows/qelectrotech-manifest.rc.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/qelectrotech-manifest.rc @ONLY)
|
|
||||||
target_sources(${PROJECT_NAME} PRIVATE
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/qelectrotech-manifest.rc)
|
|
||||||
endif()
|
|
||||||
else()
|
|
||||||
add_executable(
|
|
||||||
${PROJECT_NAME}
|
|
||||||
${QET_MAIN_FILE}
|
|
||||||
${QM_FILES}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}_objects)
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_BACKEND_SPNAV_ENABLED)
|
|
||||||
list(APPEND QET_SPACEMOUSE_LIBRARIES PkgConfig::SPNAV)
|
|
||||||
endif()
|
|
||||||
if(QET_SPACEMOUSE_BACKEND_HID_ENABLED)
|
|
||||||
list(APPEND QET_SPACEMOUSE_LIBRARIES PkgConfig::HIDAPI)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(APPLE)
|
|
||||||
# CFBundleIdentifier must not be empty. CMake's default Info.plist
|
|
||||||
# template fills it from MACOSX_BUNDLE_GUI_IDENTIFIER; with that unset
|
|
||||||
# the bundle ships an empty identifier, LaunchServices never registers
|
|
||||||
# the .app, and AppKit's open/save panel service (which is keyed on the
|
|
||||||
# client's bundle id) silently presents nothing -- every
|
|
||||||
# QFileDialog::getOpenFileName()/getSaveFileName() call returns an empty
|
|
||||||
# string without a panel ever appearing, so File > Open and File > Save
|
|
||||||
# as do nothing at all.
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
||||||
MACOSX_BUNDLE TRUE
|
|
||||||
MACOSX_BUNDLE_GUI_IDENTIFIER "org.qelectrotech.QElectroTech"
|
|
||||||
MACOSX_BUNDLE_BUNDLE_NAME "QElectroTech"
|
|
||||||
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
|
|
||||||
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION}"
|
|
||||||
MACOSX_BUNDLE_COPYRIGHT "Copyright 2006-2026 The QElectroTech Team"
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# The default build only compiles the tracked .ts files to .qm (lrelease).
|
# The default build only compiles the tracked .ts files to .qm (lrelease).
|
||||||
# Refreshing the .ts from the sources (lupdate) is a developer action behind
|
# Refreshing the .ts from the sources (lupdate) is a developer action behind
|
||||||
# the explicit "update_translations" target below: running lupdate on every
|
# the explicit "update_translations" target below: running lupdate on every
|
||||||
# build rewrote tracked files as a side effect, and under high parallelism
|
# build rewrote tracked files as a side effect, and under high parallelism
|
||||||
# lupdate rewriting a .ts while lrelease read the same file made the build
|
# lupdate rewriting a .ts while lrelease read the same file made the build
|
||||||
# fail with "Premature end of document".
|
# fail with "Premature end of document".
|
||||||
set_source_files_properties(
|
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang")
|
||||||
${TS_FILES}
|
#if(QT_VERSION_MAJOR EQUAL 6)
|
||||||
PROPERTIES OUTPUT_LOCATION "lang"
|
# qt6_add_translation(QM_FILES ${TS_FILES})
|
||||||
|
#else()
|
||||||
|
# qt5_add_translation(QM_FILES ${TS_FILES})
|
||||||
|
#endif()
|
||||||
|
|
||||||
|
add_custom_target(update_translations
|
||||||
|
COMMAND $<TARGET_FILE:Qt${QT_VERSION_MAJOR}::lupdate> ${CMAKE_SOURCE_DIR}/sources -ts ${TS_FILES}
|
||||||
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
|
COMMENT "Updating .ts files from sources/ (lupdate) - developer target, run explicitly"
|
||||||
|
VERBATIM
|
||||||
)
|
)
|
||||||
if(Qt6_VERSION VERSION_LESS "6.2")
|
|
||||||
# Qt 6.0–6.1
|
|
||||||
qt6_add_translation(QM_FILES ${TS_FILES})
|
|
||||||
|
|
||||||
# qt6_add_translation() only creates custom commands. Something must
|
include(cmake/define_definitions.cmake)
|
||||||
# depend on their outputs for them to run during the default build.
|
|
||||||
add_custom_target(${PROJECT_NAME}_lrelease ALL
|
|
||||||
DEPENDS ${QM_FILES}
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target(update_translations
|
qt_add_executable(
|
||||||
COMMAND
|
${PROJECT_NAME}
|
||||||
$<TARGET_FILE:Qt6::lupdate>
|
${QET_RES_FILES}
|
||||||
"${CMAKE_SOURCE_DIR}/sources"
|
${QET_SRC_FILES}
|
||||||
-ts ${TS_FILES}
|
${QM_FILES}
|
||||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
${QET_DIR}/qelectrotech.qrc
|
||||||
COMMENT
|
)
|
||||||
"Updating .ts files from sources/ (lupdate) - developer target"
|
|
||||||
VERBATIM
|
|
||||||
)
|
|
||||||
|
|
||||||
elseif(Qt6_VERSION VERSION_LESS "6.7")
|
|
||||||
# Qt 6.2–6.6: old target-based signature
|
|
||||||
qt_add_lrelease(
|
|
||||||
${PROJECT_NAME}
|
|
||||||
TS_FILES ${TS_FILES}
|
|
||||||
QM_FILES_OUTPUT_VARIABLE QM_FILES
|
|
||||||
)
|
|
||||||
|
|
||||||
# Automatically creates the update_translations umbrella target.
|
|
||||||
qt_add_lupdate(
|
|
||||||
${PROJECT_NAME}_objects
|
|
||||||
TS_FILES ${TS_FILES}
|
|
||||||
)
|
|
||||||
|
|
||||||
|
if(QMFILES_AS_RESOURCE)
|
||||||
|
qt_add_translations(${PROJECT_NAME} TS_FILES ${TS_FILES} RESOURCE_PREFIX "/lang")
|
||||||
else()
|
else()
|
||||||
# Qt 6.7+: new signature
|
qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
|
||||||
qt_add_lrelease(
|
set_source_files_properties(${TS_FILES} PROPERTIES OUTPUT_LOCATION "${QET_DIR}/lang")
|
||||||
TS_FILES ${TS_FILES}
|
qt_add_translation(QM_FILES ${TS_FILES})
|
||||||
LRELEASE_TARGET ${PROJECT_NAME}_lrelease
|
|
||||||
QM_FILES_OUTPUT_VARIABLE QM_FILES
|
|
||||||
)
|
|
||||||
|
|
||||||
qt_add_lupdate(
|
|
||||||
SOURCE_TARGETS ${PROJECT_NAME}_objects
|
|
||||||
TS_FILES ${TS_FILES}
|
|
||||||
LUPDATE_TARGET update_translations
|
|
||||||
NO_GLOBAL_TARGET
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
find_package(SQLite3 REQUIRED)
|
||||||
# Optional precompiled headers -- see QET_ENABLE_PCH in
|
|
||||||
# cmake/developer_options.cmake for what this trades away.
|
|
||||||
#
|
|
||||||
# target_precompile_headers() needs CMake 3.16; the project still declares a
|
|
||||||
# 3.5 minimum, so guard rather than raise it for an opt-in developer feature.
|
|
||||||
#
|
|
||||||
# The generator expressions are load-bearing, not decoration: this target also
|
|
||||||
# compiles the 18 C files of the bundled LZMA decoder
|
|
||||||
# (sources/import/edz/lzma/*.c), and an unguarded list applies to every
|
|
||||||
# language in the target, so the Qt headers would reach the C compiler and fail
|
|
||||||
# with "unknown type name 'namespace'". $<ANGLE-R> is required because a
|
|
||||||
# literal '>' would terminate the generator expression.
|
|
||||||
if(QET_ENABLE_PCH)
|
|
||||||
if(CMAKE_VERSION VERSION_LESS 3.16)
|
|
||||||
message(WARNING
|
|
||||||
"QET_ENABLE_PCH needs CMake 3.16 or newer (found ${CMAKE_VERSION}); "
|
|
||||||
"building without precompiled headers.")
|
|
||||||
else()
|
|
||||||
target_precompile_headers(${PROJECT_NAME}_objects PRIVATE
|
|
||||||
"$<$<COMPILE_LANGUAGE:CXX>:<QtCore/QtCore$<ANGLE-R>>"
|
|
||||||
"$<$<COMPILE_LANGUAGE:CXX>:<QtGui/QtGui$<ANGLE-R>>"
|
|
||||||
"$<$<COMPILE_LANGUAGE:CXX>:<QtWidgets/QtWidgets$<ANGLE-R>>"
|
|
||||||
"$<$<COMPILE_LANGUAGE:CXX>:<QtXml/QtXml$<ANGLE-R>>"
|
|
||||||
)
|
|
||||||
message(STATUS "QET_ENABLE_PCH: precompiled headers enabled")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(
|
target_link_libraries(
|
||||||
${PROJECT_NAME}_objects
|
${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
pugixml::pugixml
|
PRIVATE
|
||||||
SingleApplication::SingleApplication
|
pugixml::pugixml
|
||||||
SQLite3::SQLite3
|
SingleApplication::SingleApplication
|
||||||
${KF_PRIVATE_LIBRARIES}
|
SQLite::SQLite3
|
||||||
${QET_PRIVATE_LIBRARIES}
|
${KF6_PRIVATE_LIBRARIES}
|
||||||
${QET_SPACEMOUSE_LIBRARIES}
|
${QET_PRIVATE_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(
|
target_include_directories(
|
||||||
${PROJECT_NAME}_objects
|
${PROJECT_NAME}
|
||||||
PUBLIC
|
PRIVATE
|
||||||
${QET_DIR}/sources/titleblock
|
${QET_DIR}/sources/titleblock
|
||||||
${QET_DIR}/sources/ui
|
${QET_DIR}/sources/ui
|
||||||
${QET_DIR}/sources/qetgraphicsitem
|
${QET_DIR}/sources/qetgraphicsitem
|
||||||
${QET_DIR}/sources/qetgraphicsitem/ViewItem
|
${QET_DIR}/sources/qetgraphicsitem/ViewItem
|
||||||
${QET_DIR}/sources/qetgraphicsitem/ViewItem/ui
|
${QET_DIR}/sources/qetgraphicsitem/ViewItem/ui
|
||||||
${QET_DIR}/sources/richtext
|
${QET_DIR}/sources/richtext
|
||||||
${QET_DIR}/sources/factory
|
${QET_DIR}/sources/factory
|
||||||
${QET_DIR}/sources/properties
|
${QET_DIR}/sources/properties
|
||||||
${QET_DIR}/sources/dvevent
|
${QET_DIR}/sources/dvevent
|
||||||
${QET_DIR}/sources/editor
|
${QET_DIR}/sources/editor
|
||||||
${QET_DIR}/sources/editor/esevent
|
${QET_DIR}/sources/editor/esevent
|
||||||
${QET_DIR}/sources/editor/graphicspart
|
${QET_DIR}/sources/editor/graphicspart
|
||||||
${QET_DIR}/sources/editor/ui
|
${QET_DIR}/sources/editor/ui
|
||||||
${QET_DIR}/sources/editor/UndoCommand
|
${QET_DIR}/sources/editor/UndoCommand
|
||||||
${QET_DIR}/sources/undocommand
|
${QET_DIR}/sources/undocommand
|
||||||
${QET_DIR}/sources/diagramevent
|
${QET_DIR}/sources/diagramevent
|
||||||
${QET_DIR}/sources/ElementsCollection
|
${QET_DIR}/sources/ElementsCollection
|
||||||
${QET_DIR}/sources/ElementsCollection/ui
|
${QET_DIR}/sources/ElementsCollection/ui
|
||||||
${QET_DIR}/sources/autoNum
|
${QET_DIR}/sources/autoNum
|
||||||
${QET_DIR}/sources/autoNum/ui
|
${QET_DIR}/sources/autoNum/ui
|
||||||
${QET_DIR}/sources/ui/configpage
|
${QET_DIR}/sources/ui/configpage
|
||||||
${QET_DIR}/sources/SearchAndReplace
|
${QET_DIR}/sources/SearchAndReplace
|
||||||
${QET_DIR}/sources/SearchAndReplace/ui
|
${QET_DIR}/sources/SearchAndReplace/ui
|
||||||
${QET_DIR}/sources/NameList
|
${QET_DIR}/sources/NameList
|
||||||
${QET_DIR}/sources/NameList/ui
|
${QET_DIR}/sources/NameList/ui
|
||||||
${QET_DIR}/sources/utils
|
${QET_DIR}/sources/utils
|
||||||
${QET_DIR}/sources/dataBase
|
${QET_DIR}/sources/dataBase
|
||||||
${QET_DIR}/sources/dataBase/ui
|
${QET_DIR}/sources/dataBase/ui
|
||||||
${QET_DIR}/sources/factory/ui
|
${QET_DIR}/sources/factory/ui
|
||||||
${QET_DIR}/sources/print
|
${QET_DIR}/sources/print
|
||||||
${QET_DIR}/sources/svg
|
${QET_DIR}/sources/svg
|
||||||
${QET_DIR}/sources/materiallist
|
)
|
||||||
${QET_DIR}/sources/cablelist
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT BUILD_WITH_KF)
|
|
||||||
target_include_directories(
|
|
||||||
${PROJECT_NAME}_objects
|
|
||||||
PUBLIC
|
|
||||||
${QET_DIR}/sources/ui/nokde
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
install(TARGETS ${PROJECT_NAME}
|
|
||||||
BUNDLE DESTINATION .
|
|
||||||
)
|
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME})
|
||||||
if (NOT MINGW)
|
if (NOT MINGW)
|
||||||
install(DIRECTORY ico/breeze-icons/16x16 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/16x16 DESTINATION ${QET_ICONS_PATH})
|
||||||
install(DIRECTORY ico/breeze-icons/22x22 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/22x22 DESTINATION ${QET_ICONS_PATH})
|
||||||
@@ -388,16 +200,12 @@ if (NOT MINGW)
|
|||||||
install(DIRECTORY ico/breeze-icons/64x64 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/64x64 DESTINATION ${QET_ICONS_PATH})
|
||||||
install(DIRECTORY ico/breeze-icons/128x128 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/128x128 DESTINATION ${QET_ICONS_PATH})
|
||||||
install(DIRECTORY ico/breeze-icons/256x256 DESTINATION ${QET_ICONS_PATH})
|
install(DIRECTORY ico/breeze-icons/256x256 DESTINATION ${QET_ICONS_PATH})
|
||||||
install(DIRECTORY elements DESTINATION ${QET_DATA_PATH})
|
install(DIRECTORY elements DESTINATION share/qelectrotech)
|
||||||
install(DIRECTORY examples DESTINATION ${QET_DATA_PATH})
|
install(DIRECTORY examples DESTINATION share/qelectrotech)
|
||||||
install(DIRECTORY titleblocks DESTINATION ${QET_DATA_PATH})
|
install(DIRECTORY titleblocks DESTINATION share/qelectrotech)
|
||||||
# The MCP server (misc/qet-mcp) finds this QElectroTech and its elements
|
install(FILES LICENSE ELEMENTS.LICENSE CREDIT README ChangeLog DESTINATION share/doc/qelectrotech)
|
||||||
# from here: <prefix>/share/qelectrotech/mcp -> <prefix>/bin.
|
|
||||||
install(PROGRAMS misc/qet-mcp/qet_mcp.py DESTINATION ${QET_DATA_PATH}mcp)
|
|
||||||
install(FILES misc/qet-mcp/README.md DESTINATION ${QET_DATA_PATH}mcp)
|
|
||||||
install(FILES LICENSE ELEMENTS.LICENSE CREDIT README ChangeLog DESTINATION ${QET_LICENSE_PATH})
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
install(FILES misc/org.qelectrotech.qelectrotech.desktop DESTINATION ${QET_DESKTOP_PATH})
|
install(FILES misc/org.qelectrotech.qelectrotech.desktop DESTINATION share/applications)
|
||||||
install(FILES misc/qelectrotech.xml DESTINATION ${QET_MIME_PACKAGE_PATH})
|
install(FILES misc/qelectrotech.xml DESTINATION ${QET_MIME_PACKAGE_PATH})
|
||||||
install(FILES misc/qelectrotech.appdata.xml DESTINATION ${QET_APPDATA_PATH})
|
install(FILES misc/qelectrotech.appdata.xml DESTINATION ${QET_APPDATA_PATH})
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -12,157 +12,6 @@ Here are some important resources:
|
|||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
### Build the tests
|
|
||||||
|
|
||||||
Start with the dependencies and platform-specific setup in
|
|
||||||
[INSTALL.md](INSTALL.md). Tests additionally require the Qt6 Test module.
|
|
||||||
The commands below use CMake/CTest 3.20 or newer (`--test-dir` needs 3.20),
|
|
||||||
a C++17 compiler, and the Qt6 development packages, including GuiPrivate,
|
|
||||||
Svg and LinguistTools. Configuration may download dependencies with
|
|
||||||
FetchContent, including Catch2, so an initial build needs network access.
|
|
||||||
|
|
||||||
Run the following commands from the repository root. Keep build products in
|
|
||||||
a separate directory and use Debug for the regression tests:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git submodule update --init --recursive
|
|
||||||
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DPACKAGE_TESTS=ON
|
|
||||||
cmake --build build --config Debug --parallel
|
|
||||||
```
|
|
||||||
|
|
||||||
`PACKAGE_TESTS` defaults to `ON`; specify it explicitly when reusing a build
|
|
||||||
directory that previously disabled tests. `BUILD_WITH_KF` defaults to `ON`.
|
|
||||||
If KDE Frameworks are unavailable, add `-DBUILD_WITH_KF=OFF` to the configure
|
|
||||||
command, as described in INSTALL.md. Use a separate build directory when
|
|
||||||
changing compiler, Qt kit, or generator.
|
|
||||||
|
|
||||||
### Run the tests with CTest
|
|
||||||
|
|
||||||
After a successful build, list the registered tests, run them, or select a
|
|
||||||
test by name with `-R`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ctest --test-dir build -C Debug -N
|
|
||||||
ctest --test-dir build -C Debug --output-on-failure
|
|
||||||
ctest --test-dir build -C Debug -R '^tst_qetstrings$' --output-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
`-N` only lists tests; it does not execute them. `-C Debug` selects the
|
|
||||||
configuration for multi-configuration generators such as Visual Studio.
|
|
||||||
For single-configuration generators such as Ninja and Unix Makefiles,
|
|
||||||
`CMAKE_BUILD_TYPE=Debug` selects it at configure time. CTest runs the tests
|
|
||||||
registered by CMake; it does not build their executables.
|
|
||||||
|
|
||||||
Some tests create Qt widgets and need a graphical environment. On a Linux
|
|
||||||
machine without a display, use Xvfb as the Linux CI does:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
xvfb-run -a ctest --test-dir build -C Debug --output-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
Tests that depend on optional features may not be registered. In particular,
|
|
||||||
several scripting tests require the Qt6 Qml module at configure time.
|
|
||||||
Review the test list and any skipped tests before reporting what was covered.
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
|
|
||||||
Follow INSTALL.md for SQLite3 and the MSVC or MinGW toolchain. The compiler
|
|
||||||
and Qt kit must match. For MSVC, use a Visual Studio developer PowerShell;
|
|
||||||
the example below assumes Visual Studio 2022 and a 64-bit MSVC Qt kit.
|
|
||||||
Replace the example Qt path with your installation, and supply any SQLite3
|
|
||||||
paths or toolchain file required by your setup:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
$qtPrefix = 'C:/Qt/6.x.x/msvc2022_64'
|
|
||||||
cmake -S . -B build-msvc -G 'Visual Studio 17 2022' -A x64 `
|
|
||||||
"-DCMAKE_PREFIX_PATH=$qtPrefix" -DBUILD_WITH_KF=OFF -DPACKAGE_TESTS=ON
|
|
||||||
cmake --build build-msvc --config Debug --parallel
|
|
||||||
$env:Path = "$qtPrefix/bin;$env:Path"
|
|
||||||
ctest --test-dir build-msvc -C Debug --output-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
Putting the matching Qt `bin` directory on `PATH` lets test executables find
|
|
||||||
Qt DLLs. Other shared dependencies must also be available on `PATH`.
|
|
||||||
For MinGW with Ninja, use the matching MinGW Qt kit and compiler environment,
|
|
||||||
omit `-A x64`, select `-G Ninja`, and set `-DCMAKE_BUILD_TYPE=Debug`.
|
|
||||||
The Linux shell regression scripts below do not run natively on Windows.
|
|
||||||
|
|
||||||
### Tests outside the CTest suite
|
|
||||||
|
|
||||||
The Catch2 executable `C_unittests` is built with `PACKAGE_TESTS=ON`, but is
|
|
||||||
currently not registered with CTest. Run it separately from the repository
|
|
||||||
root after building:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
./build/tests/catch/C_unittests
|
|
||||||
```
|
|
||||||
|
|
||||||
This executable creates a Qt GUI application too. On headless Linux, use:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
xvfb-run -a ./build/tests/catch/C_unittests
|
|
||||||
```
|
|
||||||
|
|
||||||
For the Visual Studio example above, use this PowerShell command after
|
|
||||||
setting up `PATH`:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
& ./build-msvc/tests/catch/Debug/C_unittests.exe
|
|
||||||
```
|
|
||||||
|
|
||||||
The Python MCP suite is also separate from CTest. Its unit and protocol
|
|
||||||
tests can be run without a QElectroTech binary. Some fixtures launch POSIX
|
|
||||||
shell scripts, so use a Unix-like environment for this suite:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
python3 misc/qet-mcp/test_qet_mcp.py
|
|
||||||
```
|
|
||||||
|
|
||||||
Use `python` instead of `python3` if that is your interpreter's command.
|
|
||||||
Integration tests need a built QElectroTech and the environment variables
|
|
||||||
documented in [the MCP testing guide](misc/qet-mcp/README.md#testing),
|
|
||||||
including `QET_ENABLE_SCRIPTING=1` for script-driven tests. Missing integration
|
|
||||||
prerequisites cause tests to be skipped, so a successful unit run alone does
|
|
||||||
not establish integration coverage.
|
|
||||||
|
|
||||||
### Linux regression prerequisites
|
|
||||||
|
|
||||||
In addition to the build dependencies in INSTALL.md, headless widget tests
|
|
||||||
need `xvfb-run`, Xvfb and `xauth`. The existing
|
|
||||||
[Linux workflow](.github/workflows/linux-build.yml) lists the packages used
|
|
||||||
by CI, including the QtSvg development package and SQLite driver for QtSql.
|
|
||||||
Package names vary by distribution.
|
|
||||||
|
|
||||||
The IPC open-forwarding regression requires Bash, Xvfb, Openbox and xdotool.
|
|
||||||
Use a Qt6 Debug build; the documented reproduction used Qt 6.10.2. It uses
|
|
||||||
`examples/industrial.qet` by default and starts its own display, so run it
|
|
||||||
directly rather than wrapping it in `xvfb-run`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
tests/ipc-regression/run.sh --binary build/qelectrotech
|
|
||||||
```
|
|
||||||
|
|
||||||
This test is separate from CTest. Exit code `0` means the scenario survived,
|
|
||||||
`1` means a crash, and `2` means inconclusive or unusable input. An inconclusive
|
|
||||||
run is not a pass. See [the IPC guide](tests/ipc-regression/README.md).
|
|
||||||
|
|
||||||
The quit-during-modal regression needs gdb with Python support and a binary
|
|
||||||
with the symbols used by the test (use an unstripped Debug build). It uses
|
|
||||||
Qt's offscreen platform and needs no X server. It is registered with CTest
|
|
||||||
on Linux and can be selected with:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
ctest --test-dir build -C Debug -R '^modal_quit_regression$' --output-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
Missing gdb, missing Python support in gdb, or a stripped binary can result
|
|
||||||
in exit code `77`, which CTest treats as skipped. See
|
|
||||||
[the modal-quit guide](tests/modal-quit-regression/README.md).
|
|
||||||
|
|
||||||
When submitting changes, state the build configuration, commands actually
|
|
||||||
run, results, and any skipped or unavailable tests. If commands were only
|
|
||||||
checked against the build files or documentation, say so explicitly.
|
|
||||||
|
|
||||||
## Submitting changes
|
## Submitting changes
|
||||||
|
|
||||||
Always write a clear log message for your commits.
|
Always write a clear log message for your commits.
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ Thanks to Mohamed Souabni for his translations into Arabic
|
|||||||
Thanks to Uroš Platiše for his translations into Slovenian
|
Thanks to Uroš Platiše for his translations into Slovenian
|
||||||
Thanks to Antun Marakovic for his translations Croatian
|
Thanks to Antun Marakovic for his translations Croatian
|
||||||
Thanks to Nikos Papadopoylos && Yannis Gyftomitros their Greek translations
|
Thanks to Nikos Papadopoylos && Yannis Gyftomitros their Greek translations
|
||||||
Thanks to Magnus Hellströmer for the Swedish translation (parts of it are AI-generated)
|
|
||||||
Thanks to Markos Chandras for Gentoo packaging
|
Thanks to Markos Chandras for Gentoo packaging
|
||||||
Thanks to David for packaging Slackware
|
Thanks to David for packaging Slackware
|
||||||
Thanks to Chipsterjulien for packaging Archlinux AUR packages
|
Thanks to Chipsterjulien for packaging Archlinux AUR packages
|
||||||
@@ -59,36 +58,6 @@ Thanks to Elbert from the NL for packaging OS/2
|
|||||||
Thanks to zloidemon from for packaging FreeBsd (port GCC)
|
Thanks to zloidemon from for packaging FreeBsd (port GCC)
|
||||||
Thanks to Mrbit for ebuild Gentoo packaging.
|
Thanks to Mrbit for ebuild Gentoo packaging.
|
||||||
|
|
||||||
[de]
|
|
||||||
Dank an Qt Software für die Qt-Bibliothek (http://www.qtsoftware.com/), lizenziert unter der GNU/GPL.
|
|
||||||
Dank an das KDE-Projekt (http://www.kde.org/).
|
|
||||||
Dank an Loic für seine mathematischen Erläuterungen.
|
|
||||||
Dank an Remi Collet für die Fedora-Paketierung.
|
|
||||||
Dank an Laurent Trinques für die Debian-Paketierung.
|
|
||||||
Dank an „trem“ für die Mandriva-Paketierung.
|
|
||||||
Dank an TuxFamily (http://tuxfamily.org/) für das Hosting des Projekts.
|
|
||||||
Dank an „Nishiki“ für seine Elemente und seine Unterstützung.
|
|
||||||
Dank an qtcentre.org für die „SingleApplication“-Klasse.
|
|
||||||
Dank an Alfredo Carreto für seine spanischen Übersetzungen und die Korrektur der spanischen Übersetzungen (http://electronicosmx.net)
|
|
||||||
Dank an „Dr.Slump“ und Sivio für ihre Übersetzungen ins Italienische.
|
|
||||||
Dank an Jose Carlos Martins für seine Übersetzungen ins Portugiesische.
|
|
||||||
Dank an Pavel Fric für seine Übersetzungen ins Tschechische.
|
|
||||||
Dank an Pawel Smiech für seine polnischen Übersetzungen.
|
|
||||||
Dank an Yuriy Litkevich für seine Übersetzungen ins Russische.
|
|
||||||
Dank an Youssef Ouamalkran für seine Übersetzungen ins Katalanische.
|
|
||||||
Dank an Gabi Mandoc für seine Übersetzungen ins Rumänische.
|
|
||||||
Dank an Markus Budde, Jonas Stein und Noah Braden für ihre Übersetzungen ins Deutsche.
|
|
||||||
Dank an Mohamed Souabni für seine Übersetzungen ins Arabische.
|
|
||||||
Dank an Uroš Platiše für seine Übersetzungen ins Slowenische.
|
|
||||||
Dank an Antun Marakovic für seine Übersetzungen ins Kroatische.
|
|
||||||
Dank an Nikos Papadopoylos und Yannis Gyftomitros für ihre griechischen Übersetzungen.
|
|
||||||
Dank an Markos Chandras für die Gentoo-Paketierung.
|
|
||||||
Dank an David für die Paketierung von Slackware.
|
|
||||||
Dank an Chipsterjulien für die Paketierung der Archlinux-AUR-Pakete.
|
|
||||||
Dank an Elbert aus den Niederlanden für die Paketierung von OS/2.
|
|
||||||
Dank an zloidemon für die Paketierung von FreeBSD (GCC-Port).
|
|
||||||
Dank an Mrbit für die ebuild-Paketierung für Gentoo.
|
|
||||||
|
|
||||||
[fr]
|
[fr]
|
||||||
Merci à Qt Software pour la bibliothèque Qt ( http://www.qtsoftware.com/ ), sous licence GNU/GPL.
|
Merci à Qt Software pour la bibliothèque Qt ( http://www.qtsoftware.com/ ), sous licence GNU/GPL.
|
||||||
Merci au projet KDE ( http://www.kde.org/ ).
|
Merci au projet KDE ( http://www.kde.org/ ).
|
||||||
@@ -329,33 +298,3 @@ OS/2 패키지를 제공해 주신 Elbert에게 감사드립니다.
|
|||||||
FreeBSD(GCC 포트) 패키지를 제공해 주신 zloidemon에게 감사드립니다.
|
FreeBSD(GCC 포트) 패키지를 제공해 주신 zloidemon에게 감사드립니다.
|
||||||
Gentoo ebuild 패키지를 제공해 주신 Mrbit에게 감사드립니다.
|
Gentoo ebuild 패키지를 제공해 주신 Mrbit에게 감사드립니다.
|
||||||
|
|
||||||
[sv]
|
|
||||||
Tack till Qt Software för Qt-biblioteket ( http://www.qtsoftware.com/ ), licensierat under GNU/GPL.
|
|
||||||
Tack till KDE-projektet ( http://www.kde.org/ ).
|
|
||||||
Tack till Loic för hans matematiska förklaringar.
|
|
||||||
Tack till Remi Collet för Fedora-paketeringen.
|
|
||||||
Tack till Laurent Trinques för Debian-paketeringen.
|
|
||||||
Tack till `trem' för Mandriva-paketeringen.
|
|
||||||
Tack till TuxFamily ( http://tuxfamily.org/ ) för att de är värd för projektet.
|
|
||||||
Tack till `Nishiki' för hans symboler och hans stöd.
|
|
||||||
Tack till qtcentre.org för deras klass SingleApplication.
|
|
||||||
Tack till Alfredo Carreto för hans spanska översättningar och rättningar av de spanska översättningarna ( http://electronicosmx.net )
|
|
||||||
Tack till 'Dr.Slump' och Silvio för deras italienska översättningar
|
|
||||||
Tack till Jose Carlos Martins för hans portugisiska översättningar
|
|
||||||
Tack till Pavel Fric för hans tjeckiska översättningar
|
|
||||||
Tack till Pawel Smiech för hans polska översättningar
|
|
||||||
Tack till Yuriy Litkevich för hans ryska översättningar
|
|
||||||
Tack till Youssef Ouamalkran för hans katalanska översättningar
|
|
||||||
Tack till Gabi Mandoc för hans rumänska översättningar
|
|
||||||
Tack till Markus Budde, Jonas Stein och Noah Braden för deras tyska översättningar
|
|
||||||
Tack till Mohamed Souabni för hans arabiska översättningar
|
|
||||||
Tack till Uroš Platiše för hans slovenska översättningar
|
|
||||||
Tack till Antun Marakovic för hans kroatiska översättningar
|
|
||||||
Tack till Nikos Papadopoylos och Yannis Gyftomitros för deras grekiska översättningar
|
|
||||||
Tack till Magnus Hellströmer för den svenska översättningen (delar av den är AI-genererade)
|
|
||||||
Tack till Markos Chandras för Gentoo-paketeringen
|
|
||||||
Tack till David för Slackware-paketeringen
|
|
||||||
Tack till Chipsterjulien för Arch Linux AUR-paketen
|
|
||||||
Tack till Elbert från Nederländerna för OS/2-paketeringen
|
|
||||||
Tack till zloidemon för FreeBSD-paketeringen (port GCC)
|
|
||||||
Tack till Mrbit för Gentoo-ebuilden.
|
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ All notable changes to QElectroTech are documented here.
|
|||||||
|
|
||||||
### 🐛 Bug Fixes
|
### 🐛 Bug Fixes
|
||||||
|
|
||||||
- Fix #798: clamp element-editor and diagram-view zoom to prevent view-transform overflow crash on scroll-wheel zoom ([3ca5d4a](../../commit/3ca5d4ab2))
|
|
||||||
- Fix(windows-msi): inject rev into MSI Version Build field ([e19f523](../../commit/e19f5232277efb37435cb65a83563d73333d62ec))
|
- Fix(windows-msi): inject rev into MSI Version Build field ([e19f523](../../commit/e19f5232277efb37435cb65a83563d73333d62ec))
|
||||||
- Fix #391: use wide-char path for pugixml on Windows to handle Unicode paths ([31edf30](../../commit/31edf30c619213368e9b592b51be6ca8190db831))
|
- Fix #391: use wide-char path for pugixml on Windows to handle Unicode paths ([31edf30](../../commit/31edf30c619213368e9b592b51be6ca8190db831))
|
||||||
- Fix(#283): restore center alignment when loading table config ([f55ba56](../../commit/f55ba568f68293e06436899bcc831431e9d27295))
|
- Fix(#283): restore center alignment when loading table config ([f55ba56](../../commit/f55ba568f68293e06436899bcc831431e9d27295))
|
||||||
@@ -48,7 +48,7 @@ PROJECT_NAME = QElectroTech
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = " 0.200.1"
|
PROJECT_NUMBER = " 0.100.0-dev"
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
|||||||
@@ -1,20 +1,3 @@
|
|||||||
[ca]
|
|
||||||
La col·lecció d'elements que s'inclou amb QElectrotech es proporciona tal com és
|
|
||||||
i sense cap garantia que sigui adequada per al vostre ús o que funcioni correctament.
|
|
||||||
L'ús, la modificació i la integració d'aquests elements en esquemes elèctrics
|
|
||||||
estan permesos sense restriccions, independentment de la llicència final que regeixi
|
|
||||||
els esquemes.
|
|
||||||
No es permet utilitzar aquest programari ni cap fitxer associat
|
|
||||||
com a dades de mostra per crear models d'aprenentatge automàtic.
|
|
||||||
|
|
||||||
Si redistribuïu la totalitat o una part de la col·lecció QElectroTech,
|
|
||||||
amb o sense modificacions, fora d'un esquema elèctric, heu de complir
|
|
||||||
les condicions de la llicència CC-BY:
|
|
||||||
Aquesta obra està subjecta a la llicència Reconeixement 3.0,
|
|
||||||
disponible en línia a http://creativecommons.org/licenses/by/3.0/ o bé
|
|
||||||
sol·licitant-la per correu a Creative Commons, 171 Second Street, Suite 300, San Francisco,
|
|
||||||
Califòrnia 94105, EUA.
|
|
||||||
|
|
||||||
[en]
|
[en]
|
||||||
The elements collection provided along with QElectroTech is provided as is and
|
The elements collection provided along with QElectroTech is provided as is and
|
||||||
without any warranty of fitness for your purpose or working.
|
without any warranty of fitness for your purpose or working.
|
||||||
@@ -113,6 +96,19 @@ Para ver una copia de esta licencia, visite
|
|||||||
http://creativecommons.org/licenses/by/3.0/ o envie una carta a Creative
|
http://creativecommons.org/licenses/by/3.0/ o envie una carta a Creative
|
||||||
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
|
Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.
|
||||||
|
|
||||||
|
[ca]
|
||||||
|
La col·lecció de símbols QElectrotech és distribuïda tal qual i sense cap
|
||||||
|
garantia d'idoneïtat d'ús ni de funcionament.
|
||||||
|
Es permet incondicionalment, amb independència de la llicència final, emprar,
|
||||||
|
editar, i incloure aquests símbols en esquemes elèctrics.
|
||||||
|
Si vostè redistribueix una part de la col·lecció de QElectrotech o tota ella,
|
||||||
|
amb condicions o sense, separadament d'un esquema elèctric, haurà de respectar
|
||||||
|
les condicions de la llicència CC-BY:
|
||||||
|
Aquesta obra es troba sota una llicència Reconeixement 3.0 de Creative Commons.
|
||||||
|
Per veure una còpia d'aquesta llicència visiti
|
||||||
|
http://creativecommons.org/licenses/by/3.0/ o enviï una carta a Creative
|
||||||
|
Commons, 171 Second Street, Suite 300, San Francisco, California 94105,
|
||||||
|
|
||||||
[cs]
|
[cs]
|
||||||
Sbírka prvků poskytovaná společně s QElectroTechem je poskytována tak, jak je,
|
Sbírka prvků poskytovaná společně s QElectroTechem je poskytována tak, jak je,
|
||||||
bez záruky nebo vhodnosti pro váš účal nebo práci.
|
bez záruky nebo vhodnosti pro váš účal nebo práci.
|
||||||
|
|||||||
@@ -0,0 +1,179 @@
|
|||||||
|
[Qt6 / CMake]
|
||||||
|
Building the Qt6 line with CMake additionally requires the private
|
||||||
|
development headers of QtGui. On Debian/Ubuntu these live in a separate
|
||||||
|
package that is NOT pulled in by qt6-base-dev:
|
||||||
|
|
||||||
|
apt install qt6-base-private-dev
|
||||||
|
|
||||||
|
(other distributions: install your Qt 6 "private headers" development
|
||||||
|
package, e.g. qt6-qtbase-private-devel on Fedora)
|
||||||
|
|
||||||
|
QET needs the private QtGui API (QPdfEngine) for clickable hyperlinks in
|
||||||
|
the PDF export. Without the package, find_package(Qt6 ... GuiPrivate)
|
||||||
|
succeeds but CMake later fails at generate time with:
|
||||||
|
"Imported target Qt6::GuiPrivate includes non-existent path".
|
||||||
|
|
||||||
|
[ca]
|
||||||
|
Dependències:
|
||||||
|
libQt5 (paquets libqt5*)
|
||||||
|
cupsys-bsd per imprimir
|
||||||
|
|
||||||
|
Com compilar:
|
||||||
|
$ qmake (qmake-qt5 pels sistemes basats en Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[en]
|
||||||
|
Requirements :
|
||||||
|
libQt5 (see packages libqt5*)
|
||||||
|
cupsys-bsd for printing
|
||||||
|
|
||||||
|
Howto compile :
|
||||||
|
$ qmake (qmake-qt5 for Debian-based systems)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[fr]
|
||||||
|
Pré-requis :
|
||||||
|
libQt5 (paquets libqt5*)
|
||||||
|
cupsys-bsd pour l'impression
|
||||||
|
|
||||||
|
Comment compiler :
|
||||||
|
$ qmake (qmake-qt5 pour les systèmes basés sur Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[de]
|
||||||
|
Abhängigkeiten:
|
||||||
|
libQt5 (Pakete libqt5*)
|
||||||
|
cupsys-bsd zum Drucken
|
||||||
|
|
||||||
|
Kompilieren:
|
||||||
|
$ qmake (qmake-qt5 für Debian-basierende Systeme)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[ru]
|
||||||
|
Зависимости:
|
||||||
|
libQt5 (пакет libqt5*)
|
||||||
|
cupsys-bsd для печати
|
||||||
|
|
||||||
|
Как компилировать?:
|
||||||
|
$ qmake (qmake-qt5 для систем основанных на Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[pt]
|
||||||
|
Dependências:
|
||||||
|
libQt5 (ver pacotes libqt5*)
|
||||||
|
cupsys-bsd para impressão
|
||||||
|
|
||||||
|
Como compilar:
|
||||||
|
$ qmake (qmake-qt5 para sistemas baseados em Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[es]
|
||||||
|
Dependencias:
|
||||||
|
libQt5 (paquetes libqt5*)
|
||||||
|
cupsys-bsd para imprimir
|
||||||
|
|
||||||
|
Cómo compilar:
|
||||||
|
$ qmake (qmake-qt5 para los sistemas basados en Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[cs]
|
||||||
|
Požadavky :
|
||||||
|
libQt5 (viz balíček libqt5*)
|
||||||
|
cupsys-bsd kvůli tisku
|
||||||
|
|
||||||
|
Jak program sestavit :
|
||||||
|
$ qmake (qmake-qt5 u systémů založených na Debianu)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[pl]
|
||||||
|
Zależności:
|
||||||
|
libQt5 (pakiety libqt5 *)
|
||||||
|
cupsys-bsd do druku
|
||||||
|
|
||||||
|
Sposób kompilacji:
|
||||||
|
$ qmake (qmake-qt5 dla systemów opartych na Debianie)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[it]
|
||||||
|
Dipendenze:
|
||||||
|
libQt5 (vedi pacchetti libqt5*)
|
||||||
|
cupsys-bsd per la stampa
|
||||||
|
|
||||||
|
Come compilare:
|
||||||
|
$ qmake (qmake-qt5 per sistemi basati su Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[el]
|
||||||
|
Απαιτήσεις:
|
||||||
|
libQt5 (δείτε για πακέτα libqt5*)
|
||||||
|
cupsys-bsd για εκτύπωση
|
||||||
|
|
||||||
|
Πως να το μεταγλωττίσετε:
|
||||||
|
$ qmake (qmake-qt5 για συστήματα βασισμένα σε Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[nl]
|
||||||
|
vereisten:
|
||||||
|
libqt5 (zie pakketten libqt5 *)
|
||||||
|
cupsys-bsd om af te drukken
|
||||||
|
|
||||||
|
Hoe te compileren:
|
||||||
|
$ Qmake (qmake-qt5 voor Debian-gebaseerde systemen)
|
||||||
|
$ make
|
||||||
|
# Umask 0022
|
||||||
|
# Make install
|
||||||
|
|
||||||
|
[be]
|
||||||
|
Vereisten:
|
||||||
|
libQt5 (pakketten libqt5*)
|
||||||
|
cupsys-bsd voor het afdrukken
|
||||||
|
|
||||||
|
Hoe te compileren :
|
||||||
|
$ qmake (qmake-qt5 voor systemen op basis van Debian)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[da]
|
||||||
|
Krav:
|
||||||
|
libQt5 (se pakke libqt5*)
|
||||||
|
cupsys-bsd til udskrivning
|
||||||
|
|
||||||
|
Hvordan man kompilerer:
|
||||||
|
$ qmake (qmake-qt5 for Debian baserede systemer)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
|
|
||||||
|
[ja]
|
||||||
|
必要条件 :
|
||||||
|
libQt5 (パッケージ libqt5* を参照)
|
||||||
|
cupsys-bsd 印刷用
|
||||||
|
|
||||||
|
コンパイルの方法 :
|
||||||
|
$ qmake (Debian ベースのシステムでは qmake-qt5)
|
||||||
|
$ make
|
||||||
|
# umask 0022
|
||||||
|
# make install
|
||||||
@@ -1,400 +0,0 @@
|
|||||||
# Building QElectroTech from source
|
|
||||||
|
|
||||||
QElectroTech is built with **CMake** and requires the **current Qt6 only**; Qt5 and the
|
|
||||||
old `qmake`-based build described in earlier versions of this file have
|
|
||||||
been retired.
|
|
||||||
|
|
||||||
## 1. Getting the source
|
|
||||||
|
|
||||||
QET uses git submodules, so clone recursively:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror.git
|
|
||||||
cd qelectrotech-source-mirror
|
|
||||||
```
|
|
||||||
|
|
||||||
If you already have a non-recursive clone:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git submodule update --init --recursive
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2. Requirements
|
|
||||||
|
|
||||||
| Component | Status | Notes |
|
|
||||||
|---|---|---|
|
|
||||||
| CMake ≥ 3.5 | required | CMake 4.3+ is also fine, see note below |
|
|
||||||
| C++17 compiler | required | GCC or Clang on Unix-like platforms; MSVC or MinGW-w64 g++ on Windows — see [Choosing a compiler](#3-choosing-a-compiler-unix) / [Building on Windows](#6-building-on-windows-msvc--mingw) |
|
|
||||||
| Qt6 base + widgets | required | |
|
|
||||||
| Qt6 **GuiPrivate** headers | required | needed for clickable PDF hyperlinks; **hard build failure** at CMake generate time if missing, see below |
|
|
||||||
| SQLite3 | required | used by the nomenclature/summary database |
|
|
||||||
| Qt Linguist tools (`lrelease`) | required | compiles the tracked `.ts` files into `.qm` as part of every normal build |
|
|
||||||
| pugixml | handled automatically | fetched and built via CMake FetchContent if not already present on the system — see [pugixml](#8-pugixml) below |
|
|
||||||
| Qt Test module | required if building tests | `PACKAGE_TESTS` is `ON` by default; QtTest ships as part of the base Qt6 dev packages listed below on every platform, no extra package needed |
|
|
||||||
| KDE Frameworks (KF6) | optional | see [Building without KDE Frameworks](#9-building-without-kde-frameworks) |
|
|
||||||
| QtPdf module | optional | see [PDF page import](#7-pdf-page-import-qtpdf) |
|
|
||||||
|
|
||||||
A note on CMake versions: the project declares a minimum of 3.5 but is
|
|
||||||
routinely built with much newer releases; if your CMake is older than 4.3 it
|
|
||||||
simply won't have the newer `SQLite3::SQLite3` target name, which the build
|
|
||||||
script compensates for automatically. There is nothing you need to do either
|
|
||||||
way.
|
|
||||||
|
|
||||||
## 3. Building (out-of-source build)
|
|
||||||
|
|
||||||
Always build in a separate directory from the source tree — in-source builds
|
|
||||||
are not supported.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake ..
|
|
||||||
cmake --build . --parallel
|
|
||||||
```
|
|
||||||
|
|
||||||
For a Unix-like platform you'll usually also want an explicit build type,
|
|
||||||
since CMake's default (empty) build type means no optimization and no
|
|
||||||
debug info either:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
|
||||||
```
|
|
||||||
|
|
||||||
To install (default prefix is `/usr/local`; adjust with
|
|
||||||
`-DCMAKE_INSTALL_PREFIX=...` at the configure step if needed):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo cmake --install .
|
|
||||||
```
|
|
||||||
|
|
||||||
Useful configure-time options (pass as `-D<OPTION>=ON/OFF`):
|
|
||||||
|
|
||||||
| Option | Default | Effect |
|
|
||||||
|---|---|---|
|
|
||||||
| `PACKAGE_TESTS` | `ON` | build the test suite (needs the Qt Test module) |
|
|
||||||
| `BUILD_WITH_KF` | distro-dependent | build against KDE Frameworks; see below |
|
|
||||||
| `QET_ENABLE_PCH` | `OFF` | precompiled headers for faster rebuilds (needs CMake ≥ 3.16) |
|
|
||||||
|
|
||||||
## 3.1 Choosing a compiler (Unix)
|
|
||||||
|
|
||||||
Both **GCC** and **Clang** are supported on Unix-like platforms; any
|
|
||||||
reasonably recent release with solid C++17 support works. Neither is
|
|
||||||
hard-coded — CMake picks up whichever `cc`/`c++` (or `CC`/`CXX` environment
|
|
||||||
variables) resolve to by default, and you can force one explicitly at
|
|
||||||
configure time:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
|
|
||||||
# or
|
|
||||||
cmake .. -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
|
|
||||||
```
|
|
||||||
|
|
||||||
or equivalently, by exporting `CC`/`CXX` before calling `cmake`. The
|
|
||||||
per-distro package lists below install GCC by default (via
|
|
||||||
`build-essential`/`gcc-c++`/the base toolchain); see each section for the
|
|
||||||
Clang alternative.
|
|
||||||
|
|
||||||
## 4. Distribution packages
|
|
||||||
|
|
||||||
Exact package names vary by release/branch; if a name below doesn't resolve,
|
|
||||||
search your package manager (`apt search`, `pkg search`, `brew search`) for
|
|
||||||
the closest match.
|
|
||||||
|
|
||||||
### Debian / Ubuntu
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo apt install \
|
|
||||||
build-essential cmake ninja-build git \
|
|
||||||
qt6-base-dev qt6-base-private-dev qt6-tools-dev qt6-tools-dev-tools \
|
|
||||||
libsqlite3-dev \
|
|
||||||
libkf6coreaddons-dev libkf6widgetsaddons-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
`qt6-base-private-dev` is **not** pulled in automatically by `qt6-base-dev`
|
|
||||||
but is mandatory for the build (see
|
|
||||||
[Qt6 private headers](#6-qt6-private-headers-mandatory) below).
|
|
||||||
|
|
||||||
For Clang instead of GCC:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo apt install clang
|
|
||||||
```
|
|
||||||
|
|
||||||
Optional, for PDF page import:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo apt install libqt6pdf6-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Optional, to use a system pugixml instead of letting CMake fetch it:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo apt install libpugixml-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fedora / RHEL
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo dnf install \
|
|
||||||
cmake gcc-c++ git \
|
|
||||||
qt6-qtbase-devel qt6-qtbase-private-devel qt6-qttools-devel \
|
|
||||||
sqlite-devel \
|
|
||||||
kf6-kcoreaddons-devel kf6-kwidgetsaddons-devel
|
|
||||||
```
|
|
||||||
|
|
||||||
For Clang instead of GCC: `sudo dnf install clang`.
|
|
||||||
|
|
||||||
Optional, for PDF page import: `qt6-qtwebengine-devel` provides `QtPdf` on
|
|
||||||
some Fedora releases — check `dnf provides '*/QPdfDocument'` if unsure.
|
|
||||||
|
|
||||||
Optional, for a system pugixml: `sudo dnf install pugixml-devel`.
|
|
||||||
|
|
||||||
### FreeBSD
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pkg install \
|
|
||||||
cmake git \
|
|
||||||
qt6-base qt6-tools \
|
|
||||||
sqlite3 \
|
|
||||||
kf6-kcoreaddons kf6-kwidgetsaddons
|
|
||||||
```
|
|
||||||
|
|
||||||
(from ports: `devel/qt6-base`, `devel/qt6-tools`, `databases/sqlite3`,
|
|
||||||
`devel/kf6-kcoreaddons`, `x11-toolkits/kf6-kwidgetsaddons`.) Qt6's
|
|
||||||
`GuiPrivate` headers ship as part of `qt6-base` on FreeBSD, no separate
|
|
||||||
package is needed. `QtPdf` is not packaged on FreeBSD at the time of writing
|
|
||||||
— PDF page import will simply be disabled (see below).
|
|
||||||
|
|
||||||
Clang is the FreeBSD base system compiler and needs nothing extra; GCC is
|
|
||||||
available via `pkg install gcc` if you'd rather use it.
|
|
||||||
|
|
||||||
Optional, for a system pugixml: `pkg install pugixml` (`devel/pugixml`).
|
|
||||||
|
|
||||||
### macOS
|
|
||||||
|
|
||||||
Using [Homebrew](https://brew.sh):
|
|
||||||
|
|
||||||
```sh
|
|
||||||
brew install cmake qt sqlite ninja
|
|
||||||
```
|
|
||||||
|
|
||||||
Homebrew's `qt` formula is Qt6 and includes the private headers, so no
|
|
||||||
extra package is required there. KDE Frameworks are not practically
|
|
||||||
available via Homebrew, so macOS builds are normally done **without KF**
|
|
||||||
(`-DBUILD_WITH_KF=OFF`) — see the caveat below.
|
|
||||||
|
|
||||||
Apple's Clang (from the Xcode Command Line Tools, `xcode-select --install`)
|
|
||||||
is the default and needs no extra package; GCC is available via
|
|
||||||
`brew install gcc` if you specifically want it instead.
|
|
||||||
|
|
||||||
Optional, for a system pugixml: `brew install pugixml`.
|
|
||||||
|
|
||||||
### Windows
|
|
||||||
|
|
||||||
See [Building on Windows](#6-building-on-windows-msvc--mingw) below — the
|
|
||||||
package sources differ enough from the Unix-like platforms above (no system
|
|
||||||
package manager, SQLite3 and Qt aren't provided the same way) that it gets
|
|
||||||
its own section.
|
|
||||||
|
|
||||||
## 5. pugixml
|
|
||||||
|
|
||||||
QET links against [pugixml](https://pugixml.org) for XML parsing.
|
|
||||||
`cmake/fetch_pugixml.cmake` handles this automatically: if a suitable
|
|
||||||
pugixml isn't already available on the system, CMake fetches and builds it
|
|
||||||
from source via `FetchContent` as part of the normal configure step — you
|
|
||||||
don't need to do anything to get a working build.
|
|
||||||
|
|
||||||
If you'd rather avoid that network fetch and use your distribution's own
|
|
||||||
pugixml package instead, install it before running `cmake ..` (package
|
|
||||||
names are listed per platform in the [Distribution
|
|
||||||
packages](#4-distribution-packages) section above — e.g. `libpugixml-dev`
|
|
||||||
on Debian/Ubuntu, `pugixml-devel` on Fedora).
|
|
||||||
|
|
||||||
## 6. Building on Windows (MSVC / MinGW)
|
|
||||||
|
|
||||||
Both toolchains QET's CMake build targets on Windows are covered here:
|
|
||||||
**MSVC** (Visual Studio 2019/2022) and **MinGW-w64** (gcc). Unlike the
|
|
||||||
Unix-like platforms above, there's no single system package manager, so
|
|
||||||
Qt, SQLite3 and (optionally) KDE Frameworks each need to be sourced
|
|
||||||
separately per toolchain.
|
|
||||||
|
|
||||||
One piece of good news either way: unlike Debian/Fedora, the official Qt
|
|
||||||
Windows kits (both MSVC and MinGW) **already include the GuiPrivate private
|
|
||||||
headers** — there's no separate "private headers" package to remember on
|
|
||||||
Windows (see [Qt6 private headers](#7-qt6-private-headers-mandatory) below
|
|
||||||
for why this matters).
|
|
||||||
|
|
||||||
`QtPdf` is available as an optional component in the Qt Online Installer
|
|
||||||
(look for "Qt PDF" under the Qt 6.4+ node); if you skip it, PDF page import
|
|
||||||
is silently disabled exactly as on the other platforms. KDE Frameworks are
|
|
||||||
prebuilt for Windows only in MSYS2's UCRT64 and CLANG64 environments (the
|
|
||||||
UCRT64 route below, which is also what the official Windows build uses).
|
|
||||||
With MSVC or any other MinGW, use `-DBUILD_WITH_KF=OFF` (see the
|
|
||||||
[autosave caveat](#9-building-without-kde-frameworks)); otherwise the build
|
|
||||||
downloads and compiles KDE Frameworks itself, which is slow.
|
|
||||||
|
|
||||||
### MSVC (Visual Studio 2019 / 2022)
|
|
||||||
|
|
||||||
1. Install Visual Studio with the "Desktop development with C++" workload,
|
|
||||||
and install Qt6 for MSVC (e.g. the `msvc2019_64` or `msvc2022_64` kit)
|
|
||||||
via the [Qt Online Installer](https://www.qt.io/download-qt-installer).
|
|
||||||
2. Get SQLite3 — the simplest route is [vcpkg](https://vcpkg.io):
|
|
||||||
```bat
|
|
||||||
vcpkg install sqlite3:x64-windows
|
|
||||||
```
|
|
||||||
3. Configure and build from an "x64 Native Tools Command Prompt for VS":
|
|
||||||
```bat
|
|
||||||
mkdir build && cd build
|
|
||||||
cmake .. -G "Visual Studio 17 2022" -A x64 ^
|
|
||||||
-DCMAKE_PREFIX_PATH="C:\Qt\6.x.x\msvc2022_64" ^
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE="C:\vcpkg\scripts\buildsystems\vcpkg.cmake" ^
|
|
||||||
-DBUILD_WITH_KF=OFF
|
|
||||||
cmake --build . --config Release --parallel
|
|
||||||
```
|
|
||||||
Ninja works too, in place of the Visual Studio generator, if you prefer
|
|
||||||
(`-G Ninja -DCMAKE_BUILD_TYPE=Release`, run from the same VS developer
|
|
||||||
prompt so `cl.exe` is on `PATH`).
|
|
||||||
|
|
||||||
### MinGW-w64 (gcc)
|
|
||||||
|
|
||||||
Two common ways to get a MinGW toolchain that matches a Qt6 MinGW kit: Qt's
|
|
||||||
own bundled MinGW (installed alongside a `mingw_64` Qt kit via the Qt
|
|
||||||
Online Installer), or [MSYS2](https://www.msys2.org).
|
|
||||||
|
|
||||||
Using MSYS2, from a **UCRT64** shell (the same packages and options as
|
|
||||||
`.github/workflows/windows-build.yml`):
|
|
||||||
```sh
|
|
||||||
pacman -S --needed \
|
|
||||||
mingw-w64-ucrt-x86_64-toolchain \
|
|
||||||
mingw-w64-ucrt-x86_64-qt6-base mingw-w64-ucrt-x86_64-qt6-svg \
|
|
||||||
mingw-w64-ucrt-x86_64-qt6-tools mingw-w64-ucrt-x86_64-qt6-translations \
|
|
||||||
mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja \
|
|
||||||
mingw-w64-ucrt-x86_64-pkg-config mingw-w64-ucrt-x86_64-sqlite3 \
|
|
||||||
mingw-w64-ucrt-x86_64-kcoreaddons mingw-w64-ucrt-x86_64-kwidgetsaddons \
|
|
||||||
mingw-w64-ucrt-x86_64-extra-cmake-modules
|
|
||||||
|
|
||||||
mkdir build && cd build
|
|
||||||
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/ucrt64 \
|
|
||||||
-DBUILD_WITH_KF=ON -DBUILD_KF=OFF \
|
|
||||||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
||||||
-DSQLite3_INCLUDE_DIR=/ucrt64/include \
|
|
||||||
-DSQLite3_LIBRARY=/ucrt64/lib/libsqlite3.dll.a
|
|
||||||
cmake --build .
|
|
||||||
```
|
|
||||||
|
|
||||||
`-DBUILD_KF=OFF` makes the build use the KDE Frameworks packages just
|
|
||||||
installed instead of downloading and compiling its own.
|
|
||||||
|
|
||||||
If `libbacktrace` is installed in your MSYS2 environment, add the following
|
|
||||||
cached CMake variables when configuring. They are only necessary in that
|
|
||||||
case, because `FindBacktrace` needs them to locate the library:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
-DBacktrace_INCLUDE_DIR=/c/msys64/clang64/include \
|
|
||||||
-DBacktrace_LIBRARY=/c/msys64/clang64/lib/libbacktrace.a
|
|
||||||
```
|
|
||||||
|
|
||||||
`Backtrace_INCLUDE_DIR` must point to the directory containing `backtrace.h`,
|
|
||||||
and `Backtrace_LIBRARY` to the `libbacktrace.a` file. The paths above are the
|
|
||||||
usual locations for the MSYS2 `clang64` environment; adjust them if your
|
|
||||||
installation uses a different prefix.
|
|
||||||
|
|
||||||
KF6 is packaged for MSYS2's UCRT64 and CLANG64 environments only. In a
|
|
||||||
**MINGW64** shell (`mingw-w64-x86_64-*` packages) it is not available: install
|
|
||||||
the same packages without the three KDE ones and configure with
|
|
||||||
`-DBUILD_WITH_KF=OFF` instead of `-DBUILD_WITH_KF=ON -DBUILD_KF=OFF`.
|
|
||||||
|
|
||||||
Using the Qt Online Installer's bundled MinGW kit instead: point
|
|
||||||
`CMAKE_PREFIX_PATH` at that kit (e.g. `C:\Qt\6.x.x\mingw_64`) and make sure
|
|
||||||
its bundled `g++.exe` comes first on `PATH`, or pass
|
|
||||||
`-DCMAKE_C_COMPILER`/`-DCMAKE_CXX_COMPILER` explicitly so CMake doesn't pick
|
|
||||||
up a different MinGW installation. SQLite3 still has to come from elsewhere
|
|
||||||
in this path — vcpkg with a `mingw`-flavoured triplet, or MSYS2's package as
|
|
||||||
above.
|
|
||||||
|
|
||||||
## 7. Qt6 private headers (mandatory)
|
|
||||||
|
|
||||||
QET uses the private `QPdfEngine` API (`<private/qpdf_p.h>`) to produce
|
|
||||||
clickable hyperlinks in PDF export. This requires Qt's `GuiPrivate` target,
|
|
||||||
which on several distributions (notably Debian/Ubuntu) is shipped in a
|
|
||||||
separate "private headers" package rather than the normal `-dev` package —
|
|
||||||
e.g. `qt6-base-private-dev` on Debian/Ubuntu, or
|
|
||||||
`qt6-qtbase-private-devel` on Fedora. Without it, CMake's `find_package`
|
|
||||||
step succeeds but configuration later fails at generate time with:
|
|
||||||
|
|
||||||
```
|
|
||||||
Imported target "Qt6::GuiPrivate" includes non-existent path
|
|
||||||
```
|
|
||||||
|
|
||||||
If you hit this, install your distribution's Qt6 private-headers package
|
|
||||||
(on Windows this is a non-issue — see [Building on
|
|
||||||
Windows](#6-building-on-windows-msvc--mingw) above).
|
|
||||||
|
|
||||||
## 8. PDF page import (QtPdf)
|
|
||||||
|
|
||||||
The toolbar's "Add a PDF" feature (`QPdfDocument::pagePointSize()`) needs
|
|
||||||
the separate `QtPdf` Qt module, available since Qt 6.4.
|
|
||||||
|
|
||||||
**This is optional and soft-fails**: if `QtPdf` isn't found, or is present
|
|
||||||
but older than 6.4, CMake prints a status message and simply disables the
|
|
||||||
feature (`QET_HAS_QTPDF` stays `FALSE`) — it does **not** stop the build.
|
|
||||||
Some Qt6 distributions don't ship `QtPdf` at all (it lives outside Qt's
|
|
||||||
core module set, alongside QtWebEngine), so this is expected on several
|
|
||||||
platforms, including FreeBSD as of this writing.
|
|
||||||
|
|
||||||
## 9. Building without KDE Frameworks
|
|
||||||
|
|
||||||
`BUILD_WITH_KF=OFF` builds QET against a bundled fallback UI layer instead
|
|
||||||
of KDE Frameworks (`kcoreaddons`/`kwidgetsaddons`). This is a fully
|
|
||||||
supported configuration and is, in practice, the default on platforms where
|
|
||||||
KF6 isn't readily packaged (macOS, and Windows outside MSYS2's UCRT64 and
|
|
||||||
CLANG64 environments).
|
|
||||||
|
|
||||||
Almost everything works identically either way. The one known caveat:
|
|
||||||
**autosave behavior is not as polished without KF**, since QET relies on
|
|
||||||
KCoreAddons' autosave/backup-file handling when it's available. Expect
|
|
||||||
autosave to work, but less robustly than on a KF-enabled build.
|
|
||||||
|
|
||||||
## 10. Translations (developer operation)
|
|
||||||
|
|
||||||
Everything in this section is a **maintainer/translator task**, not
|
|
||||||
something a normal build or a packager needs to touch.
|
|
||||||
|
|
||||||
The `.qm` files shipped with the application are compiled from the tracked
|
|
||||||
`.ts` files automatically as part of every normal build (via `lrelease`) —
|
|
||||||
regular builds and packages get up-to-date translated UI strings for free,
|
|
||||||
with no developer action needed.
|
|
||||||
|
|
||||||
Refreshing the `.ts` files themselves from the source code (`lupdate`) is
|
|
||||||
the actual developer operation: it's exposed as its own opt-in build
|
|
||||||
target, separate from the normal build:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cmake --build . --target update_translations
|
|
||||||
```
|
|
||||||
|
|
||||||
This is **not** run automatically and should not be added to routine or
|
|
||||||
parallel CI builds: it rewrites the tracked `.ts` files as a side effect,
|
|
||||||
and running it concurrently with the normal `lrelease` compilation step (as
|
|
||||||
would happen under `-j`/parallel builds) can corrupt a `.ts` file mid-write,
|
|
||||||
causing `lrelease` to fail with "Premature end of document". Run it on its
|
|
||||||
own, review the diff, and commit the updated `.ts` files separately.
|
|
||||||
|
|
||||||
The strings in the code are English, so `lang/qet_en.ts` is the source
|
|
||||||
language's own file. After `update_translations`, run
|
|
||||||
|
|
||||||
```sh
|
|
||||||
python3 misc/i18n/mirror_source_language.py lang/qet_en.ts
|
|
||||||
```
|
|
||||||
|
|
||||||
before committing: it copies every new English source string into its own
|
|
||||||
translation, so `qet_en.qm` stays complete and English wording can later be
|
|
||||||
corrected in the `.ts` alone, without changing the key that the other
|
|
||||||
languages are attached to. Forgetting it breaks nothing (an empty entry
|
|
||||||
falls back to the code text); `--check` reports whether a run is needed.
|
|
||||||
The script refuses any other language's file, such as `qet_fr.ts`, where it
|
|
||||||
would copy English into a translation. An English correction typed into
|
|
||||||
`qet_en.ts` is lost like any other translation when the code string is
|
|
||||||
reworded; the vanished entry keeps the old text for recovery. Never add
|
|
||||||
`-removeidentical` to the `lrelease` options: it would strip these entries
|
|
||||||
again.
|
|
||||||
@@ -1,210 +0,0 @@
|
|||||||
# QElectroTech — Release notes: 0.100 → current master (0.200.1-dev)
|
|
||||||
|
|
||||||
*Covers the period 26 January 2026 – 9 October 2026: 2,253 commits and 669 merged pull requests. Numbers in brackets are GitHub PRs (#nnn) or bug tracker entries (bugtracker #nnn).*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Highlights
|
|
||||||
|
|
||||||
- **Qt 6 is now the platform.** The Qt 6 migration is complete, Qt 5 support has been removed, and Windows, macOS, Flatpak and Snap packages are built on Qt 6 / KF6.
|
|
||||||
- **Rewritten auto-numbering.** Renumbering of existing elements, new numbering parts (alphabetic, cyclic/modulo, zero-padded formats), undo/redo for counters, global rules in the settings, and importing rules from another project.
|
|
||||||
- **Many more drawing and editing tools.** Editable resize/rotate/skew handles for shapes and pictures, an Arc tool and a fillet tool, Group/Ungroup, Align and Snap to grid, mirroring symbols, rotating groups, text-box width handles, and dropping pictures onto a sheet.
|
|
||||||
- **Productivity UI.** Command search, Ctrl+G jump to element or cell, an element picker and shortcut bar at the cursor, a context command bar, mouse gestures, repeat-last-command, configurable shortcuts, toolbars and gestures (Customise window), and paste under the cursor.
|
|
||||||
- **Wiring, BOM and PLC.** A from-to wiring list export, a PLC Manager, slave contact groups and a full contact comb, terminal potential grouping, a material list lookup, smart-device BOM metadata, a generic device wizard, and drag and drop onto terminal strips.
|
|
||||||
- **Import and export.** EPLAN Data Portal (.edz) import, PDF page import, and much better DXF export (layers, symbols as blocks with attributes). PDF export gains clickable cross-reference links and can be made reproducible.
|
|
||||||
- **Command line, scripting and AI assistants.** Headless export and verification from the command line, a JavaScript scripting API (off by default), script buttons and a script manager, a macro recorder, and an MCP server (`qet-mcp`) with a "live mode" so an AI assistant can work on an open project.
|
|
||||||
- **Dark themes and icons.** All toolbar and menu icons are now SVG, there are "qet" and "qet-dark" icon themes, an optional dark folio canvas, and many dark-theme fixes.
|
|
||||||
- **English is the source language.** The interface text is now written in English (previously French), "folio" is renamed "sheet" in the English UI, and Korean has been added as a new language.
|
|
||||||
- **Stability.** A large number of crash, use-after-free and memory-leak fixes, rotating crash-recovery snapshots, a hardened crash reporter, diagnostic logging, and reproducible project saving.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## New features
|
|
||||||
|
|
||||||
### Auto-numbering
|
|
||||||
- Renumber elements that are already placed [#704]; a broad overhaul of the formulas for elements, conductors and sheets [#1282]
|
|
||||||
- Alphabetic numbering (a, b … z, aa, ab …) [#594]; wrap-and-carry (cyclic/modulo) numbering [#593]
|
|
||||||
- A display format (zero mask) you can set for each numbering part [#634]
|
|
||||||
- Quick reset buttons [#626]; edit the increment and preview the next number in the dock [#697, bugtracker #331]
|
|
||||||
- Undo/redo now covers auto-numbering counter changes [#645]
|
|
||||||
- Global auto-numbering rules in the application settings, applied to new projects [#924]
|
|
||||||
- Reuse the numbering rules from another project [#851]
|
|
||||||
|
|
||||||
### Drawing, shapes, pictures and text
|
|
||||||
- Editable resize, rotate and skew handles for shapes and pictures, plus picture transparency and faster image handling [#809, #810, #817, #1024]
|
|
||||||
- Arc tool with a handle to pull a half arc in or out [#1202, #1211]; fillet tool to round the corner between two lines [#1212]
|
|
||||||
- Group and Ungroup items on a sheet [#1074]; click a member of a selected group to select it alone [#1110]; rotate a group as one piece [#660, #1111]
|
|
||||||
- Align left/centre/right/top/middle/bottom, with icons [#1087, #1153]; Snap to grid for selected symbols, pictures, texts and shapes [#1073, #1152, #1154]
|
|
||||||
- Mirror symbols horizontally and vertically on a sheet [#1354]; an option to keep the texts of rotated symbols horizontal [#1355]
|
|
||||||
- Free texts can keep a width they wrap to, set in their properties or by dragging a corner handle [#1320, #1321, #1341, #1342]
|
|
||||||
- Drag-to-resize the width of dynamic element texts [#591, #977]; a centre rotation point for dynamic text fields [#694]
|
|
||||||
- Labels on pictures [#1068]; drop picture files onto a sheet to add them [#1416]; the crop, colours and original of a picture undo together [#1310]
|
|
||||||
- Import a PDF page as an image [#772, #811]
|
|
||||||
- Remember the last-used shape and text style for the session [#656]
|
|
||||||
- Custom guides [#509]; a finer snap grid for dragged texts [#1040]
|
|
||||||
- View > Show to hide texts, shapes and pictures [#1268, bugtracker #301]
|
|
||||||
- Sheet background colour picker with adaptive border and title block, remembered between runs [#968, #1011]; a custom application colour picker [#979]
|
|
||||||
- A permanent ID for shapes, texts, pictures and symbol parts [#1065]; lasting UUIDs for projects, sheets, symbols, wires and terminals, including those in older files [#883, #884, #1105, #1107, #1118, #1122]
|
|
||||||
|
|
||||||
### Element (symbol) editor
|
|
||||||
- Live cursor-coordinate readout [#589, #761]
|
|
||||||
- Export a symbol to SVG [#637]
|
|
||||||
- Optional alignment for static texts [#569]; `anchor="alignment"` for static texts in element files [#1404]
|
|
||||||
- Show terminal names [#536]; check terminal names when saving [#1159]
|
|
||||||
- Scale element, keeping terminals on the grid [#1378]
|
|
||||||
- An adjustable background frame [#1164]
|
|
||||||
- Mirror and flip the selection in place instead of across the origin [#813]
|
|
||||||
- The Information tab is available for Slave and Terminal types, and auto_num_locked, potential_isolating and exclude_from_bom can be edited [#721, #765, #767, #1399]
|
|
||||||
- New element type: line definition [#464]
|
|
||||||
|
|
||||||
### Sheets and navigation
|
|
||||||
- Duplicate sheets with all their metadata [#473]; undo/redo for adding, deleting and reordering sheets [#590]; insert a sheet above or below [#658]
|
|
||||||
- Paper sizes A0–A5 [#1362]
|
|
||||||
- Keep the row and column headers visible, and optionally show the cell limits across the drawing [#1038, #1048]
|
|
||||||
- Ctrl+G jumps to an element or to a sheet cell such as B13 [#586, #1036]
|
|
||||||
- Centre on cursor [#1190]; the search view scrolls to the selected hit [#706]
|
|
||||||
- Auto-select the active sheet in the elements panel tree [#443]; a newly added sheet is selected in the project tree [#805]
|
|
||||||
- The main window title shows unsaved changes (macOS modified dot) [#624]
|
|
||||||
- 3D mouse (SpaceMouse/SpacePilot) support on Linux, Windows and macOS, with speed, direction and twist-to-zoom settings [#635, #1022, #1023, #1025, #1026, #1028, #1032]
|
|
||||||
|
|
||||||
### Productivity and customisation
|
|
||||||
- Command search: type part of a command's name and press Enter [#1049]
|
|
||||||
- Element picker at the cursor (Insert) [#1052]; shortcut bar at the cursor (S), customisable in place and with pinned elements [#1053, #1054, #1060]
|
|
||||||
- A command bar beside the selection [#1055]; repeat the last drawing or placing command with Enter [#1056]; right-drag mouse gestures [#1057, #1364]
|
|
||||||
- Place elements by double-clicking in the collection, and repeat with A [#1042]; placement and sheet references in the right-click menu [#1041, #1050]
|
|
||||||
- Configurable shortcuts with a dedicated preferences page (grouped, searchable, icons, menu locations) [#587, #760, #821, #1325, #1326]
|
|
||||||
- Toolbars settings page (icon size, text with icons, lock) and a combined Customise window [#1327, #1365]
|
|
||||||
- Paste under the cursor; Ctrl+Shift+V pastes at the origin [#878, #917, #1208]; Ctrl+D duplicates with a configurable offset [#993]
|
|
||||||
- Tab cycles through the selection; select all conductors or text fields [#874]
|
|
||||||
- Keyboard accessibility: F10 opens the menu bar, the drawing tools are in a menu, and the context-menu key opens the sheet menu [#875, #876, #877]
|
|
||||||
- Save and load the configuration, in full or in part, to a file [#1166, #1410]
|
|
||||||
- Dialog sizes are remembered [#1165]; QColorDialog custom colours are kept across restarts [#918, #1370]
|
|
||||||
- Edit several wires at once in the Selection properties panel [#502, #1205]
|
|
||||||
- One-click conductor colour on the toolbar; F2 remembers the colour for the session; double-click to choose a wire colour [#888, #929, #1172]
|
|
||||||
- Paste element information from one symbol onto others [#1376]
|
|
||||||
- Element information suggests values already used in the project [#1021, bugtracker #217]
|
|
||||||
- A position-lock checkbox for elements [#803]
|
|
||||||
- The Edit menu is split into submenus [#1346]
|
|
||||||
- Settings for the folder prefixes of the user collection [#1168]
|
|
||||||
- A local tracker for the time spent on each project [#583]
|
|
||||||
|
|
||||||
### Conductors and wiring
|
|
||||||
- Auto-break conductors [#639, #700]
|
|
||||||
- Optional hops where wires cross [#1200]
|
|
||||||
- An optional limit on the number of wires per terminal, wiring terminals in a chain rather than a star [#1272, #1273]
|
|
||||||
- Wire routing around symbols (scripting/MCP) [#1245, #1256, #1258]
|
|
||||||
- Linked cross-references inherit the conductor line style [#967]
|
|
||||||
|
|
||||||
### Wiring list, BOM and reports
|
|
||||||
- A from-to wiring list built on new terminal/conductor tables in the project database, with a dialog, export, Cable column, terminal index/UUID and numeric wire order [#447, #462, #628, #629, #630, #835, #1197, #1248]
|
|
||||||
- Exclude specific elements from the BOM [#472]; options to leave junctions and contact blocks out of the parts list [#1318]
|
|
||||||
- Smart device metadata in the BOM export [#830]
|
|
||||||
- A material list (CSV) lookup for the element article fields [#1088, #1119]
|
|
||||||
- Custom SQL reports with read-only enforcement, preview and import/export [#896, #983]
|
|
||||||
|
|
||||||
### Master/slave, PLC and terminals
|
|
||||||
- PLC Manager [#562, #588, #623, #669, #703, #774, #1001]; PLC terminal names and cross-references [#766, #796]; "Hide linked elements" and "Hide full masters" filters [#858, #881]
|
|
||||||
- Slave contact groups (label transfer, terminal assignment) [#545]; a full contact comb that shows every slave defined by the master [#1010]
|
|
||||||
- Contact usage counting (NO/NC/SW breakdown, used vs. declared capacity) and an advisory slave limit [#444, #825, #826, #827, #828, #831]
|
|
||||||
- Terminal names in cross-references, with an option to hide them; terminal names shown in export [#673]
|
|
||||||
- Configurable distance between the label and the slave cross-reference [#771]; an option for stacking cross-references at the sheet bottom [#1311]
|
|
||||||
- Automatic terminal numbering tool, with letter numbering and strip selection [#449, #741]
|
|
||||||
- Terminal potential grouping [#1396]; a potential isolation option for terminals [#471]
|
|
||||||
- Drag and drop free terminals onto a terminal strip [#1199]; natural sort for terminal ordering
|
|
||||||
- Width/height/depth properties for elements [#723]; cabinet thumbnails generated from the manufacturer and reference [#1170]
|
|
||||||
- Generic device wizard: a box symbol with terminals on any side, for devices too rare to draw a symbol for [#1418]
|
|
||||||
|
|
||||||
### Templates (macros)
|
|
||||||
- A User Templates collection with its own tab [#451, #455]
|
|
||||||
|
|
||||||
### Import and export
|
|
||||||
- **EPLAN Data Portal (.edz)** parts import into element collections [#513, #555]
|
|
||||||
- **DXF:** named layers, deterministic entity order, symbols as blocks with attributes and hidden part data, slave/master cross-references, and wrapped text [#740, #750, #1075, #1076, #1079, #1324, #1350, #1351, #1352, #1353]
|
|
||||||
- **PDF:** clickable cross-reference links [#490], component info as invisible annotations [#739], and repeatable output when SOURCE_DATE_EPOCH is set [#1257, #1286, #1317]
|
|
||||||
- Folio properties automatically add a title block's custom variables [#495]
|
|
||||||
|
|
||||||
### Command line, scripting and AI assistants
|
|
||||||
- **Headless CLI:** export to PDF, PNG, SVG, DXF, cable list and wire list; info, BOM, nets, links, check-elements, resave; `--set-titleblock`; `--show-terminals` [#483, #485, #489, #493, #731, #1078]
|
|
||||||
- **JavaScript scripting API:** read, export, edit, draw, cross-reference and query a project, with UUID lookups. It is **off by default** and asks before enabling [#891, #970, #980, #984, #1098, #1106, #1114, #1125, #1219, #1264]
|
|
||||||
- Script buttons, a script manager and a macro recorder [#1220, #1221, #1227]
|
|
||||||
- **`misc/qet-mcp`:** a Model Context Protocol server over QET projects, installed with QElectroTech (and with Python offered by the Windows installer). Help → Connect an AI assistant, and live mode (ask-first, an Assistant panel, and project create/open/print/save), plus a shared house style [#969, #1128, #1136, #1137, #1138, #1222–#1225, #1228, #1265, #1266, #1312–#1316]
|
|
||||||
|
|
||||||
### Diagnostics and robustness features
|
|
||||||
- Diagnostic logging rework with rotation, a ring buffer, crash-time flush and an export UI [#646, #647]; an event-loop watchdog [#665]
|
|
||||||
- Three rotating crash-recovery snapshots [#1167]; a hardened crash reporter that keeps every dump [#905, #1181]
|
|
||||||
- A backup dialog when opening an existing project [#534]
|
|
||||||
- Project load timing in the log [#560]
|
|
||||||
- Reload element drawings to refresh placed elements [#889]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Bug fixes (selection)
|
|
||||||
|
|
||||||
### Crashes and memory safety
|
|
||||||
- Use-after-free and teardown crashes: backup threads [#512], restore of backups [#711, #1031], project/diagram teardown [#789], IPC file forwarding [#868], the terminal strip dock [#1162], closing without saving [#1231], and the template editor [#1407]
|
|
||||||
- Crashes when opening a project without a sheet [#797], with an unlinked contact [#1234], or with invalid corner layout [#670]
|
|
||||||
- Element editor zoom crash [#799]; huge symbol sizes [#1232]; NaN and infinite coordinates rejected on load [#792, #996, #1161, #1194]
|
|
||||||
- Dynamic text colour [#693]; cancelling collection load [#743, #995]; templates tree on Qt 6 [#795]; online-installer Qt SQLite handle [#1046]
|
|
||||||
- Memory leaks found by AddressSanitizer and Valgrind [#515, #518, #519, #1360]; uninitialised members [#1358, #1359, #1387, #1388]
|
|
||||||
- Thread-safety fixes for data paths and the elements panel [#514, #1163]
|
|
||||||
|
|
||||||
### Saving, loading and file format
|
|
||||||
- Saving is now reproducible: deterministic element, conductor, title block and XML ordering, and a second save changes nothing [#779, #814, #844, #846, #1030, #1109]
|
|
||||||
- QDom serialization hardened against invalid data (CVE-2026-15037) [#568]
|
|
||||||
- Font descriptions are written in a version-stable format, and salvaged fonts are reported [#582, #592]
|
|
||||||
- The read-only state is cleared after Save As [#497]; Save As on Snap adds the .qet extension [#716]
|
|
||||||
- Older parts lists keep their rows [#1077]; legacy sequential attributes are read correctly [#1385, #1386]
|
|
||||||
- Wires no longer move to another symbol after saving an older project [#1417]; replacing a symbol keeps its wires [#1116]
|
|
||||||
- Text position stays stable after a font-size change [#501]; wire text rotation is preserved [#707]
|
|
||||||
|
|
||||||
### Editing and the diagram editor
|
|
||||||
- Several copy/paste fixes: broken conductors, alignment, PLC data, master/slave links and underscore labels [#746, #770, #899, #909, #910, #911, #982, #997, #1188]
|
|
||||||
- Undo stack fixes [#925, #1039, #1192]; group rotation [#921]; the first click in the element editor no longer moves elements [#520]
|
|
||||||
- Junction dots on wide conductors and on shared lines [#862, #1299]; straight wires drawn diagonally [#1127]; unnecessary bridge routing [#890]
|
|
||||||
- Duplicating sheets renews UUIDs and keeps text positions [#477, #544, #856, #895]
|
|
||||||
- Multi-line symbol text alignment [#1155, #1160, #1176, #1302, #1357]
|
|
||||||
- Cross-reference overlap and positioning fixes [#712, #1263, #1287]
|
|
||||||
|
|
||||||
### Title blocks, reports and BOM
|
|
||||||
- Title block variables: empty page-level overrides, bare %name variables, unset variables, names with a slash, and file names cut at the first dot [#572, #717, #719, #725, #989, #1121, #1140]
|
|
||||||
- The summary table is ordered by sheet [#864]; custom summary SQL is kept [#887]; queries return all their rows [#1066] and are capped [#985]
|
|
||||||
- Terminal and contact blocks appear in the parts list [#849]; the wire-name export no longer double-counts [#724]
|
|
||||||
- Sheet dates are correct in the project database [#1134]; the database is rebuilt only once per load [#840]
|
|
||||||
|
|
||||||
### UI, theming and platform
|
|
||||||
- Dark theme: element icons [#620, #695, #744, #1092], slave cross-references [#718], the search field, and imported image colours [#1349]
|
|
||||||
- Locale and translation loading: regional locales, the lang/ path, double-click on Windows, and an English fallback [#496, #498, #559]
|
|
||||||
- Windows: Unicode and long paths in collections [#524, #1243, #1244], file association without admin rights [#1149], and MS Shell Dlg fonts in PDF [#1012, #1029]
|
|
||||||
- macOS: bundle identifier and file dialogs [#829], Fusion dark palette [#894], properties dialog placement [#715], file-open events, arm64 bundle on Sequoia, and the black screen after PDF export
|
|
||||||
- Snap: libxcb-cursor crash on Ubuntu 24.04 [#517]
|
|
||||||
- Recent files menu updates during the session [#863]; cancelling the potential selector [#584]; dock layout restored on Qt 6 [#769]
|
|
||||||
|
|
||||||
### Performance
|
|
||||||
- Fixed the Qt 6 load-time regression in XmlElementCollection [#570]; removed the pugixml pass from ElementFactory [#567]
|
|
||||||
- Faster saving of projects with pictures [#1067]; the element style regex is compiled once [#841]; picture cache fixes [#842]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Translations
|
|
||||||
- **New language: Korean** [#419–#431]
|
|
||||||
- **English is now the source language** of the interface [#1390]; "folio" is renamed "sheet" in the English UI [#1216]; hundreds of untranslated or broken English strings are fixed [#1124, #1261, #1389]
|
|
||||||
- Updated: German, Polish, French (with real plural forms), Brazilian Portuguese, Spanish (complete), Russian, Chinese (zh-CN), Czech, Turkish, Hungarian, Dutch (Belgium) and Catalan
|
|
||||||
- Translation suggestions for 29 phrase books [#1006]; singular/plural fixes [#938, #971]
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Build, packaging and infrastructure
|
|
||||||
- **Qt 6 migration completed and Qt 5 removed** [#540, #541, #546, #547, #698, #705, #709, #880]; C++20 [#1123]
|
|
||||||
- qmake `.pro`/`.pri` files removed; CMake only [#1374]
|
|
||||||
- Optional precompiled headers (`QET_ENABLE_PCH`) [#680]; builds without KF5/KF6 [#533, #557, #1086]; Qt < 6.5 [#1085]; QtPdf optional
|
|
||||||
- SQLite kept for the project database; the export can be enabled via a CMake option
|
|
||||||
- FetchContent dependencies pinned [#958]; PugiXML and GoogleTest are no longer installed [#838]; SingleApplication updated to v3.5.6
|
|
||||||
- **CI:** Linux build and unit tests [#872]; Windows build and tests [#1361, #1425]; Windows MSI with WiX and signing (SignPath); monthly nightly builds
|
|
||||||
- **Packaging:** Flatpak and Snap moved to Qt 6/KF6 (Flatpak runtime 6.11, Snap core24); the macOS arm64 bundle uses CMake; the NSIS installer is on 3.x with fonts and more installer languages; `publiccode.yml` added
|
|
||||||
- New example project: Shelly single-phase and three-phase designs
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Contributors
|
|
||||||
|
|
||||||
Thanks to everyone who contributed to this release, including: ispyisail, Laurent Trinques (scorpio810), Kellermorph, Andre Rummler, Beat Hangartner, Shane Ringrose, Jeff Patterson, jp2images, plc-user, Dieter Mayer, Levi Jetzer (IBSYSLevi), Magnus Hellströmer (elevatormind), ChuckNr11, Gerhard Schwanzer, saschbe, enesgursoy6110, philippeagray, Kyle-Code-CA and jkh (정광호), zi-mozhuang, jindongjie, neitri, Alfmat01, cezlom, Vinícius Santos, zakb120, pafri, geri1701, achim and joshua, and to the translators Gábor (hu), Ronny (nl-BE), Pawel (pl) and Antoni (ca).
|
|
||||||
@@ -1,60 +1,60 @@
|
|||||||
[ca]
|
[ca]
|
||||||
QElectroTech és una aplicació Qt6 per crear esquemes elèctrics.
|
QElectroTech és una aplicació Qt5 per crear esquemes elèctrics.
|
||||||
QET utilitza el format XML per als seus elements i esquemes i inclou un editor d'esquemes, un editor d'elements i un editor de caixetins.
|
QET utilitza el format XML per als seus elements i esquemes i inclou un editor d'esquemes, un editor d'elements i un editor de caixetins.
|
||||||
|
|
||||||
[en]
|
[en]
|
||||||
QElectroTech is a Qt6 application to design electric diagrams.
|
QElectroTech is a Qt5 application to design electric diagrams.
|
||||||
It uses XML files for elements and diagrams, and includes both a diagram editor, a element editor, and an titleblock editor.
|
It uses XML files for elements and diagrams, and includes both a diagram editor, a element editor, and an titleblock editor.
|
||||||
|
|
||||||
[fr]
|
[fr]
|
||||||
QElectroTech est une application Qt6 pour réaliser des schémas électriques.
|
QElectroTech est une application Qt5 pour réaliser des schémas électriques.
|
||||||
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
QET utilise le format XML pour ses éléments et ses schémas et inclut un éditeur de schémas, un éditeur d'élément, ainsi qu'un editeur de cartouche.
|
||||||
|
|
||||||
[de]
|
[de]
|
||||||
QElectroTech ist eine Qt6 Software, um Schaltpläne zu erstellen.
|
QElectroTech ist eine Qt5 Software, um Schaltpläne zu erstellen.
|
||||||
QET benutzt das XML Format für seine Bauteile und seine Projekte, und beinhaltet einen Schaltplaneditor, einen Bauteileditor sowie einen Schriftfeldeditor.
|
QET benutzt das XML Format für seine Bauteile und seine Projekte, und beinhaltet einen Schaltplaneditor, einen Bauteileditor sowie einen Schriftfeldeditor.
|
||||||
|
|
||||||
|
|
||||||
[ru]
|
[ru]
|
||||||
QElectroTech - приложение написанное на Qt6 и предназначенное для разработки электрических схем.
|
QElectroTech - приложение написанное на Qt5 и предназначенное для разработки электрических схем.
|
||||||
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
Оно использует XML-файлы для элементов и схем, и включает, как редактор схем, так и редактор элементов.
|
||||||
|
|
||||||
[pt]
|
[pt]
|
||||||
QElectroTech é uma aplicação baseada em Qt6 para desenhar esquemas eléctricos.
|
QElectroTech é uma aplicação baseada em Qt5 para desenhar esquemas eléctricos.
|
||||||
QET utiliza ficheiros XML para os elementos e para os esquemas e inclui um editor de esquemas e um editor de elementos.
|
QET utiliza ficheiros XML para os elementos e para os esquemas e inclui um editor de esquemas e um editor de elementos.
|
||||||
|
|
||||||
[es]
|
[es]
|
||||||
QElectroTech es una aplicación Qt6 para diseñar esquemas eléctricos.
|
QElectroTech es una aplicación Qt5 para diseñar esquemas eléctricos.
|
||||||
Utiliza archivos XML para los elementos y esquemas, e incluye un editor de esquemas y un editor de elementos.
|
Utiliza archivos XML para los elementos y esquemas, e incluye un editor de esquemas y un editor de elementos.
|
||||||
|
|
||||||
[cs]
|
[cs]
|
||||||
QElectroTech je aplikací Qt6 určenou pro návrh nákresů elektrických obvodů.
|
QElectroTech je aplikací Qt5 určenou pro návrh nákresů elektrických obvodů.
|
||||||
Pro prvky a nákresy používá soubory XML, a zahrnuje v sobě jak editor nákresů, tak editor prvků.
|
Pro prvky a nákresy používá soubory XML, a zahrnuje v sobě jak editor nákresů, tak editor prvků.
|
||||||
|
|
||||||
[pl]
|
[pl]
|
||||||
QElectroTech to aplikacja napisana w Qt6, przeznaczona do tworzenia schematów elektrycznych.
|
QElectroTech to aplikacja napisana w Qt5, przeznaczona do tworzenia schematów elektrycznych.
|
||||||
Wykorzystuje XML do zapisywania plików elementów i projektów. Posiada edytor schematów i elementów.
|
Wykorzystuje XML do zapisywania plików elementów i projektów. Posiada edytor schematów i elementów.
|
||||||
|
|
||||||
[it]
|
[it]
|
||||||
QElectroTech è una applicazione fatta in Qt6 per disegnare schemi elettrici.
|
QElectroTech è una applicazione fatta in Qt5 per disegnare schemi elettrici.
|
||||||
QET usa il formato XML per i suoi elementi e schemi, includendo anche un editor per gli stessi.
|
QET usa il formato XML per i suoi elementi e schemi, includendo anche un editor per gli stessi.
|
||||||
|
|
||||||
[el]
|
[el]
|
||||||
Το QElectroTech είναι μια εφαρμογή Qt6 για σχεδίαση ηλεκτρικών διαγραμμάτων.
|
Το QElectroTech είναι μια εφαρμογή Qt5 για σχεδίαση ηλεκτρικών διαγραμμάτων.
|
||||||
Χρησιμοποιεί αρχεία XML για στοιχεία και διαγράμματα, και περιλαμβάνει επεξεργαστή διαγραμμάτων καθώς και επεξεργαστή στοιχείων.
|
Χρησιμοποιεί αρχεία XML για στοιχεία και διαγράμματα, και περιλαμβάνει επεξεργαστή διαγραμμάτων καθώς και επεξεργαστή στοιχείων.
|
||||||
|
|
||||||
[nl]
|
[nl]
|
||||||
QElectroTech is een Qt6 applicatie om elektrische schema's te ontwerpen.
|
QElectroTech is een Qt5 applicatie om elektrische schema's te ontwerpen.
|
||||||
Het maakt gebruik van XML-bestanden voor elementen en diagrammen, en omvat zowel een diagram bewerker, een element bewerker, en een bloksjabloon bewerker.
|
Het maakt gebruik van XML-bestanden voor elementen en diagrammen, en omvat zowel een diagram bewerker, een element bewerker, en een bloksjabloon bewerker.
|
||||||
|
|
||||||
[be]
|
[be]
|
||||||
QElectroTech is een Qt6 toepassing voor het maken en beheren van elektrische schema's.
|
QElectroTech is een Qt5 toepassing voor het maken en beheren van elektrische schema's.
|
||||||
QET gebruikt XML voor de elementen en schema's en omvat een schematische editor, itemeditor, en een titel sjabloon editor.
|
QET gebruikt XML voor de elementen en schema's en omvat een schematische editor, itemeditor, en een titel sjabloon editor.
|
||||||
|
|
||||||
[da]
|
[da]
|
||||||
QElectroTech er et Qt6 program til at redigere elektriske diagrammer.
|
QElectroTech er et Qt5 program til at redigere elektriske diagrammer.
|
||||||
Det bruger XML filer for symboler og diagrammer og inkluderer diagram, symbol og titelblok redigering.
|
Det bruger XML filer for symboler og diagrammer og inkluderer diagram, symbol og titelblok redigering.
|
||||||
|
|
||||||
[ja]
|
[ja]
|
||||||
QElectroTech は電気回路図を作成する Qt6 アプリケーションです。
|
QElectroTech は電気回路図を作成する Qt5 アプリケーションです。
|
||||||
QET は要素と回路図に XML 形式を利用し、回路図エディタ、要素エディタ、表題欄エディタを含みます。
|
QET は要素と回路図に XML 形式を利用し、回路図エディタ、要素エディタ、表題欄エディタを含みます。
|
||||||
|
|||||||
@@ -40,16 +40,16 @@ git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror
|
|||||||
Here are the technical choices made for the software development:
|
Here are the technical choices made for the software development:
|
||||||
|
|
||||||
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
||||||
* Libraries: Qt 6.x
|
* Libraries: Qt 5.x
|
||||||
* [KF6 Framework](https://github.com/KDE)
|
* [KF5 Framework](https://github.com/KDE)
|
||||||
[Cmake](https://cmake.org/install/)
|
[Cmake](https://cmake.org/install/)
|
||||||
[kcoreaddons](https://invent.kde.org/frameworks/kcoreaddons)
|
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
||||||
[kwidgetsaddons](https://invent.kde.org/frameworks/kwidgetsaddons).
|
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
||||||
* Coding language: [C++](https://en.wikipedia.org/wiki/C%2B%2B)
|
* Coding language: [C++](https://en.wikipedia.org/wiki/C%2B%2B)
|
||||||
* GUI translations: [Qt Linguist](http://doc.qt.io/qt-6/qtlinguist-index.html)
|
* GUI translations: [Qt Linguist](http://doc.qt.io/qt-5/qtlinguist-index.html)
|
||||||
* Version control: [GIT](https://github.com/qelectrotech/qelectrotech-source-mirror.git)
|
* Version control: [GIT](https://github.com/qelectrotech/qelectrotech-source-mirror.git)
|
||||||
* Doxygen documentation :[Doxygen](https://download.qelectrotech.org/qet/doxygen/html/)
|
* Doxygen documentation :[Doxygen](https://qelectrotech.github.io/qelectrotech-source-mirror/)
|
||||||
* QtCreator qch doxygen :[QElectroTech.qch](https://download.qelectrotech.org/qet/doxygen/QElectroTech.qch)
|
* QtCreator qch doxygen :[QElectroTech.qch](https://github.com/qelectrotech/qelectrotech-source-mirror/blob/master/doc/QElectroTech.qch)
|
||||||
* File format for projects, elements and titleblocks: [XML](http://www.w3schools.com/xml/xml_whatis.asp)
|
* File format for projects, elements and titleblocks: [XML](http://www.w3schools.com/xml/xml_whatis.asp)
|
||||||
* Main development platform: [GNU/Linux](http://getgnulinux.org/en/linux/)
|
* Main development platform: [GNU/Linux](http://getgnulinux.org/en/linux/)
|
||||||
* Targeted platforms: Windows, GNU/Linux, Mac OS X, BSDs
|
* Targeted platforms: Windows, GNU/Linux, Mac OS X, BSDs
|
||||||
@@ -59,6 +59,9 @@ Here are the technical choices made for the software development:
|
|||||||
|
|
||||||
If you wish to be informed of the latest developments, browse the [archive](https://listengine.tuxfamily.org/lists.tuxfamily.org/qet/) of the project mailing list where all commits (changes) are registered. This archive is publicly available, you don't need any account to access it.
|
If you wish to be informed of the latest developments, browse the [archive](https://listengine.tuxfamily.org/lists.tuxfamily.org/qet/) of the project mailing list where all commits (changes) are registered. This archive is publicly available, you don't need any account to access it.
|
||||||
|
|
||||||
|
### Build QElectroTech under Windows
|
||||||
|
To build QElectroTech under microsoft Windows, please follow [these instructions (french)](md/fr/fr_window_build_summary.md)
|
||||||
|
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
{
|
{
|
||||||
"id": "org.qelectrotech.QElectroTech",
|
"id": "org.qelectrotech.QElectroTech",
|
||||||
"runtime": "org.kde.Platform",
|
"runtime": "org.kde.Platform",
|
||||||
"runtime-version": "6.11",
|
"runtime-version": "5.15-25.08",
|
||||||
"sdk": "org.kde.Sdk",
|
"sdk": "org.kde.Sdk",
|
||||||
"base": "io.qt.qtwebengine.BaseApp",
|
|
||||||
"base-version": "6.11",
|
|
||||||
"command": "qelectrotech",
|
"command": "qelectrotech",
|
||||||
"rename-desktop-file": "org.qelectrotech.qelectrotech.desktop",
|
"rename-desktop-file": "org.qelectrotech.qelectrotech.desktop",
|
||||||
"rename-appdata-file": "qelectrotech.appdata.xml",
|
"rename-appdata-file": "qelectrotech.appdata.xml",
|
||||||
@@ -13,7 +11,7 @@
|
|||||||
"finish-args": [
|
"finish-args": [
|
||||||
"--socket=wayland",
|
"--socket=wayland",
|
||||||
"--socket=fallback-x11",
|
"--socket=fallback-x11",
|
||||||
"--device=all",
|
"--device=dri",
|
||||||
"--share=ipc",
|
"--share=ipc",
|
||||||
"--share=network",
|
"--share=network",
|
||||||
"--socket=cups",
|
"--socket=cups",
|
||||||
@@ -27,45 +25,12 @@
|
|||||||
"*.la",
|
"*.la",
|
||||||
"*.a"
|
"*.a"
|
||||||
],
|
],
|
||||||
"cleanup-commands": [
|
|
||||||
"/app/cleanup-BaseApp.sh"
|
|
||||||
],
|
|
||||||
"modules": [
|
"modules": [
|
||||||
"tkinter.json",
|
"tkinter.json",
|
||||||
"pypi-dependencies.json",
|
"pypi-dependencies.json",
|
||||||
{
|
|
||||||
"name": "hidapi",
|
|
||||||
"buildsystem": "cmake-ninja",
|
|
||||||
"config-opts": [
|
|
||||||
"-DCMAKE_INSTALL_PREFIX=/app",
|
|
||||||
"-DCMAKE_BUILD_TYPE=Release",
|
|
||||||
"-DHIDAPI_BUILD_HIDTEST=OFF",
|
|
||||||
"-DHIDAPI_WITH_TESTS=OFF"
|
|
||||||
],
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/libusb/hidapi.git",
|
|
||||||
"tag": "hidapi-0.15.0"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "qelectrotech",
|
"name": "qelectrotech",
|
||||||
"buildsystem": "cmake",
|
"buildsystem": "qmake",
|
||||||
"config-opts": [
|
|
||||||
"-DCMAKE_INSTALL_PREFIX=/app",
|
|
||||||
"-DQT_VERSION_MAJOR=6",
|
|
||||||
"-DBUILD_WITH_KF=ON",
|
|
||||||
"-DBUILD_KF=OFF",
|
|
||||||
"-DPACKAGE_TESTS=OFF",
|
|
||||||
"-DBUILD_PUGIXML=ON",
|
|
||||||
"-DFETCHCONTENT_FULLY_DISCONNECTED=ON",
|
|
||||||
"-DFETCHCONTENT_SOURCE_DIR_PUGIXML=/run/build/qelectrotech/pugixml",
|
|
||||||
"-DQET_EXPORT_PROJECT_DB=ON",
|
|
||||||
"-DQET_ENABLE_SPACEMOUSE=ON",
|
|
||||||
"-DQET_SPACEMOUSE_BACKEND=hid"
|
|
||||||
],
|
|
||||||
"post-install": [
|
"post-install": [
|
||||||
"mv ${FLATPAK_DEST}/share/mime/packages/qelectrotech.xml ${FLATPAK_DEST}/share/mime/packages/org.qelectrotech.QElectroTech.xml"
|
"mv ${FLATPAK_DEST}/share/mime/packages/qelectrotech.xml ${FLATPAK_DEST}/share/mime/packages/org.qelectrotech.QElectroTech.xml"
|
||||||
],
|
],
|
||||||
@@ -73,6 +38,12 @@
|
|||||||
{
|
{
|
||||||
"type": "dir",
|
"type": "dir",
|
||||||
"path": "../.."
|
"path": "../.."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patch",
|
||||||
|
"paths": [
|
||||||
|
"patches/fix-the-installation-paths.patch"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,30 +2,27 @@
|
|||||||
"""
|
"""
|
||||||
generate-page.py — Generates gh-pages/index.html for QElectroTech nightly builds.
|
generate-page.py — Generates gh-pages/index.html for QElectroTech nightly builds.
|
||||||
Called from windows-msi.yml deploy-pages job.
|
Called from windows-msi.yml deploy-pages job.
|
||||||
|
|
||||||
Environment variables required:
|
Environment variables required:
|
||||||
DATE, SHORT, REPO, SHA, RUN_URL, RUN_NUMBER,
|
DATE, SHORT, REPO, SHA, RUN_URL, RUN_NUMBER,
|
||||||
INSTALLER_URL, PORTABLE_URL, MSI_URL (optional)
|
INSTALLER_URL, PORTABLE_URL, MSI_URL (optional)
|
||||||
|
Optional (Qt6 experimental track — omitted entirely if empty):
|
||||||
Optional:
|
INSTALLER_QT6_URL, PORTABLE_QT6_URL, MSI_QT6_URL
|
||||||
NIGHTLY_TAG tag of the rolling nightly release (default: "nightly-qt6")
|
|
||||||
|
|
||||||
NOTE: Qt6 is the sole Windows track. The frozen Qt5 legacy build and the
|
|
||||||
old "nightly" release that held it were removed in Oct. 2026, after that
|
|
||||||
release became immutable (see windows-build.yml, publish-nightly-assets).
|
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
date = os.environ.get("DATE", "")
|
date = os.environ.get("DATE", "")
|
||||||
short = os.environ.get("SHORT", "")
|
short = os.environ.get("SHORT", "")
|
||||||
repo = os.environ.get("REPO", "")
|
repo = os.environ.get("REPO", "")
|
||||||
sha = os.environ.get("SHA", "")
|
sha = os.environ.get("SHA", "")
|
||||||
run_url = os.environ.get("RUN_URL", "")
|
run_url = os.environ.get("RUN_URL", "")
|
||||||
run_number = os.environ.get("RUN_NUMBER", "")
|
run_number = os.environ.get("RUN_NUMBER", "")
|
||||||
installer_url = os.environ.get("INSTALLER_URL", "")
|
installer_url = os.environ.get("INSTALLER_URL", "")
|
||||||
portable_url = os.environ.get("PORTABLE_URL", "")
|
portable_url = os.environ.get("PORTABLE_URL", "")
|
||||||
msi_url = os.environ.get("MSI_URL", "")
|
msi_url = os.environ.get("MSI_URL", "")
|
||||||
nightly_tag = os.environ.get("NIGHTLY_TAG", "") or "nightly-qt6"
|
|
||||||
|
installer_qt6_url = os.environ.get("INSTALLER_QT6_URL", "")
|
||||||
|
portable_qt6_url = os.environ.get("PORTABLE_QT6_URL", "")
|
||||||
|
msi_qt6_url = os.environ.get("MSI_QT6_URL", "")
|
||||||
|
|
||||||
msi_block = ""
|
msi_block = ""
|
||||||
if msi_url:
|
if msi_url:
|
||||||
@@ -35,6 +32,46 @@ if msi_url:
|
|||||||
<span class="btn-text">Windows Installer .msi<small>.msi — for enterprise / GPO deployment</small></span>
|
<span class="btn-text">Windows Installer .msi<small>.msi — for enterprise / GPO deployment</small></span>
|
||||||
</a>"""
|
</a>"""
|
||||||
|
|
||||||
|
# Qt6 experimental section — only rendered if at least one Qt6 asset exists.
|
||||||
|
qt6_block = ""
|
||||||
|
if installer_qt6_url or portable_qt6_url or msi_qt6_url:
|
||||||
|
qt6_msi_btn = ""
|
||||||
|
if msi_qt6_url:
|
||||||
|
qt6_msi_btn = f"""
|
||||||
|
<a class="btn btn-msi" href="{msi_qt6_url}">
|
||||||
|
<span class="btn-icon">⬇</span>
|
||||||
|
<span class="btn-text">Windows Installer .msi (Qt6)<small>.msi — experimental, for enterprise / GPO deployment</small></span>
|
||||||
|
</a>"""
|
||||||
|
qt6_installer_btn = ""
|
||||||
|
if installer_qt6_url:
|
||||||
|
qt6_installer_btn = f"""
|
||||||
|
<a class="btn btn-primary" href="{installer_qt6_url}">
|
||||||
|
<span class="btn-icon">⬇</span>
|
||||||
|
<span class="btn-text">Windows Installer (Qt6)<small>.exe — experimental, includes all dependencies</small></span>
|
||||||
|
</a>"""
|
||||||
|
qt6_portable_btn = ""
|
||||||
|
if portable_qt6_url:
|
||||||
|
qt6_portable_btn = f"""
|
||||||
|
<a class="btn btn-secondary" href="{portable_qt6_url}">
|
||||||
|
<span class="btn-icon">📦</span>
|
||||||
|
<span class="btn-text">Windows Portable (Qt6)<small>.zip — experimental, no installation required</small></span>
|
||||||
|
</a>"""
|
||||||
|
|
||||||
|
qt6_block = f"""
|
||||||
|
<div class="card">
|
||||||
|
<h2>🧪 Windows — x86_64 — Qt6 track</h2>
|
||||||
|
<div class="warning">
|
||||||
|
⚠️ <strong>Experimental.</strong> These Qt6-based installer, portable and MSI
|
||||||
|
builds are new and not as thoroughly tested as the Qt5 track above. Expect rough
|
||||||
|
edges; please report issues and mention "Qt6" explicitly.
|
||||||
|
</div>
|
||||||
|
<div class="downloads">
|
||||||
|
{qt6_installer_btn}
|
||||||
|
{qt6_msi_btn}
|
||||||
|
{qt6_portable_btn}
|
||||||
|
</div>
|
||||||
|
</div>"""
|
||||||
|
|
||||||
html = f"""<!DOCTYPE html>
|
html = f"""<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
@@ -89,7 +126,7 @@ For production use, download a <a href="https://github.com/{repo}/releases">stab
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<h2>🏹 Windows — x86_64</h2>
|
<h2>🏹 Windows — x86_64 — Qt5 track</h2>
|
||||||
<div class="downloads">
|
<div class="downloads">
|
||||||
<a class="btn btn-primary" href="{installer_url}">
|
<a class="btn btn-primary" href="{installer_url}">
|
||||||
<span class="btn-icon">⬇</span>
|
<span class="btn-icon">⬇</span>
|
||||||
@@ -100,12 +137,13 @@ For production use, download a <a href="https://github.com/{repo}/releases">stab
|
|||||||
<span class="btn-icon">📦</span>
|
<span class="btn-icon">📦</span>
|
||||||
<span class="btn-text">Windows Portable<small>.zip — no installation required, extract and run "Lancer QET.bat"</small></span>
|
<span class="btn-text">Windows Portable<small>.zip — no installation required, extract and run "Lancer QET.bat"</small></span>
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-secondary" href="https://github.com/{repo}/releases/tag/{nightly_tag}">
|
<a class="btn btn-secondary" href="https://github.com/{repo}/releases/tag/nightly">
|
||||||
<span class="btn-icon">📦</span>
|
<span class="btn-icon">📦</span>
|
||||||
<span class="btn-text">All nightly files on GitHub<small>Release page with checksums</small></span>
|
<span class="btn-text">All nightly files on GitHub<small>Release page with checksums</small></span>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{qt6_block}
|
||||||
</main>
|
</main>
|
||||||
<footer>
|
<footer>
|
||||||
Auto-generated by GitHub Actions ·
|
Auto-generated by GitHub Actions ·
|
||||||
|
|||||||
@@ -1,43 +1,48 @@
|
|||||||
name: qelectrotech
|
name: qelectrotech
|
||||||
title: QElectroTech
|
title: QElectroTech
|
||||||
base: core24
|
base: core22
|
||||||
adopt-info: qelectrotech
|
adopt-info: qelectrotech
|
||||||
license: GPL-2.0
|
license: GPL-2.0
|
||||||
summary: Electrical diagram editor
|
summary: Electrical diagram editor
|
||||||
description: |
|
description: |
|
||||||
QElectroTech, or QET in short, is a libre and open source desktop application
|
QElectroTech, or QET in short, is a libre and open source desktop application
|
||||||
to create diagrams and schematics.
|
to create diagrams and schematics.
|
||||||
|
|
||||||
grade: stable
|
grade: stable
|
||||||
confinement: strict
|
confinement: strict
|
||||||
compression: lzo
|
compression: lzo
|
||||||
|
|
||||||
platforms:
|
architectures:
|
||||||
amd64:
|
- build-on: amd64
|
||||||
arm64:
|
build-for: amd64
|
||||||
|
- build-on: arm64
|
||||||
|
build-for: arm64
|
||||||
|
|
||||||
layout:
|
layout:
|
||||||
/usr/share/qelectrotech:
|
/usr/local/share/qelectrotech:
|
||||||
symlink: $SNAP/usr/share/qelectrotech
|
symlink: $SNAP/usr/local/share/qelectrotech
|
||||||
|
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
qelectrotech:
|
qelectrotech:
|
||||||
command: usr/bin/qelectrotech
|
command: usr/local/bin/qelectrotech
|
||||||
common-id: qelectrotech.desktop
|
common-id: qelectrotech.desktop
|
||||||
extensions:
|
extensions:
|
||||||
- kde-neon-6
|
- kde-neon
|
||||||
plugs: &plugs [opengl, unity7, home, removable-media, gsettings, network, cups-control, wayland, x11]
|
plugs: &plugs [opengl, unity7, home, removable-media, gsettings, network, cups-control, wayland, x11]
|
||||||
environment: &env
|
environment: &env
|
||||||
TCL_LIBRARY: $SNAP/usr/share/tcltk/tcl8.6
|
TCL_LIBRARY: $SNAP/usr/share/tcltk/tcl8.6
|
||||||
HOME: $SNAP_USER_COMMON
|
HOME: $SNAP_USER_COMMON
|
||||||
PYTHONPATH: $SNAP:$SNAP/lib/python3.12/site-packages:$SNAP/usr/lib/python3.12:$SNAP/usr/lib/python3.12/lib-dynload
|
PYTHONPATH: $SNAP:$SNAP/lib/python3.10/site-packages:$SNAP/usr/lib/python3.10:$SNAP/usr/lib/python3.10/lib-dynload
|
||||||
|
|
||||||
qet-tb-generator:
|
qet-tb-generator:
|
||||||
command: bin/qet_tb_generator
|
command: bin/qet_tb_generator
|
||||||
extensions:
|
extensions:
|
||||||
- kde-neon-6
|
- kde-neon
|
||||||
plugs: *plugs
|
plugs: *plugs
|
||||||
environment: *env
|
environment: *env
|
||||||
|
|
||||||
|
|
||||||
parts:
|
parts:
|
||||||
launchers:
|
launchers:
|
||||||
plugin: dump
|
plugin: dump
|
||||||
@@ -54,21 +59,19 @@ parts:
|
|||||||
- python3-lxml
|
- python3-lxml
|
||||||
- python3-tk
|
- python3-tk
|
||||||
- libtk8.6
|
- libtk8.6
|
||||||
- libspnav0
|
|
||||||
|
|
||||||
kde-sdk-setup:
|
kde-sdk-setup:
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps:
|
build-snaps:
|
||||||
- kf6-core24-sdk
|
- kf5-5-110-qt-5-15-11-core22-sdk
|
||||||
- kde-qt6-core24-sdk
|
|
||||||
build-packages:
|
build-packages:
|
||||||
- g++
|
- g++
|
||||||
- mesa-common-dev
|
- mesa-common-dev
|
||||||
- libglvnd-dev
|
- libglvnd-dev
|
||||||
- rsync
|
- rsync
|
||||||
override-build: |
|
override-build: |
|
||||||
rsync -a --ignore-existing /snap/kf6-core24-sdk/current/ /
|
rsync -a --ignore-existing /snap/kf5-5-110-qt-5-15-11-core22-sdk/current/ /
|
||||||
rsync -a --ignore-existing /snap/kde-qt6-core24-sdk/current/ /
|
|
||||||
|
|
||||||
qelectrotech:
|
qelectrotech:
|
||||||
after: [kde-sdk-setup]
|
after: [kde-sdk-setup]
|
||||||
@@ -78,57 +81,37 @@ parts:
|
|||||||
- git
|
- git
|
||||||
- sqlite3
|
- sqlite3
|
||||||
- xdg-user-dirs
|
- xdg-user-dirs
|
||||||
- libqt6qml6
|
# libxcb-cursor0 was added as a hard dependency of the Qt5 xcb platform
|
||||||
# libxcb-cursor0 workaround was needed against the Qt5/KF5 core22 content
|
# plugin in Qt 5.15.x. The kf5-5-110-qt-5-15-11-core22 content snap does
|
||||||
# snap (issue #373). Not yet re-verified against kf6-core24 — remove this
|
# not bundle it, so dlopen() of libqxcb.so fails on Ubuntu 24.04 hosts
|
||||||
# if the Qt6 xcb platform plugin loads cleanly without it.
|
# with "found but could not load" (issue #373). Staging the 22.04 build
|
||||||
|
# of this library satisfies the dep without changing base or Qt version.
|
||||||
- libxcb-cursor0
|
- libxcb-cursor0
|
||||||
build-packages:
|
build-packages:
|
||||||
- git
|
- git
|
||||||
- cmake
|
|
||||||
- ninja-build
|
|
||||||
- libsqlite3-dev
|
- libsqlite3-dev
|
||||||
- qt6-tools-dev
|
|
||||||
- qt6-base-private-dev
|
|
||||||
- qt6-declarative-dev
|
|
||||||
- pkgconf
|
|
||||||
# Qt6 PrintSupport records Cups::Cups as a third-party dependency
|
|
||||||
# (qprint_p.h includes <cups/ppd.h>), so find_package(Qt6 PrintSupport)
|
|
||||||
# runs FindCups at configure time and fails without the CUPS headers.
|
|
||||||
# Build-time only: nothing from it is staged into the snap.
|
|
||||||
- libcups2-dev
|
|
||||||
- libspnav-dev
|
|
||||||
override-build: |
|
override-build: |
|
||||||
displayed_version=$(cat sources/qetversion.cpp | grep "return QVersionNumber{"| head -n 1| awk -F "{" '{ print $2 }' | awk -F "}" '{ print $1 }' | sed -e 's/,/./g' -e 's/ //g')
|
displayed_version=$(cat sources/qetversion.cpp | grep "return QVersionNumber{"| head -n 1| awk -F "{" '{ print $2 }' | awk -F "}" '{ print $1 }' | sed -e 's/,/./g' -e 's/ //g')
|
||||||
snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)"
|
snap_version="${displayed_version}-g$(git rev-parse --short=8 HEAD)"
|
||||||
modified_displayed_version="${snap_version}.snap"
|
modified_displayed_version="${snap_version}.snap"
|
||||||
sed -i -E "s|const QString displayedVersion =.*|const QString displayedVersion =\"$modified_displayed_version\";|" sources/qet.h
|
sed -i -E "s|const QString displayedVersion =.*|const QString displayedVersion =\"$modified_displayed_version\";|" sources/qet.h
|
||||||
craftctl set version="$snap_version"
|
craftctl set version="$snap_version"
|
||||||
cmake -G Ninja -B build -S "$CRAFT_PART_SRC" \
|
qmake "$CRAFT_PART_SRC/qelectrotech.pro"
|
||||||
-DCMAKE_INSTALL_PREFIX=/usr \
|
make -j${CRAFT_PARALLEL_BUILD_COUNT}
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
make install INSTALL_ROOT="$CRAFT_PART_INSTALL"
|
||||||
-DQT_VERSION_MAJOR=6 \
|
|
||||||
-DBUILD_WITH_KF=ON \
|
|
||||||
-DBUILD_KF=OFF \
|
|
||||||
-DPACKAGE_TESTS=OFF \
|
|
||||||
-DBUILD_PUGIXML=ON \
|
|
||||||
-DQET_EXPORT_PROJECT_DB=ON \
|
|
||||||
-DQET_ENABLE_SPACEMOUSE=ON
|
|
||||||
ninja -C build -j${CRAFT_PARALLEL_BUILD_COUNT}
|
|
||||||
DESTDIR="$CRAFT_PART_INSTALL" ninja -C build install
|
|
||||||
override-stage: |
|
override-stage: |
|
||||||
craftctl default
|
craftctl default
|
||||||
# patch desktop file with correct icon path
|
# patch desktop file with correct icon path
|
||||||
SED_CMD="sed -i -E s|^Icon=(.*)|Icon=\${SNAP}/usr/share/icons/hicolor/128x128/apps/\1.png|g"
|
SED_CMD="sed -i -E s|^Icon=(.*)|Icon=\${SNAP}/usr/local/share/icons/hicolor/128x128/apps/\1.png|g"
|
||||||
$SED_CMD usr/share/applications/org.qelectrotech.qelectrotech.desktop
|
$SED_CMD usr/local/share/applications/org.qelectrotech.qelectrotech.desktop
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
after: [qelectrotech, qet-tb-generator]
|
after: [qelectrotech, qet-tb-generator]
|
||||||
plugin: nil
|
plugin: nil
|
||||||
build-snaps: [kf6-core24]
|
build-snaps: [kf5-5-110-qt-5-15-11-core22]
|
||||||
override-prime: |
|
override-prime: |
|
||||||
set -eux
|
set -eux
|
||||||
for snap in "kf6-core24"; do # List all content-snaps you're using here
|
for snap in "kf5-5-110-qt-5-15-11-core22"; do # List all content-snaps you're using here
|
||||||
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$CRAFT_PRIME/{}" "$CRAFT_PRIME/usr/{}" \;
|
cd "/snap/$snap/current" && find . -type f,l -exec rm -f "$CRAFT_PRIME/{}" "$CRAFT_PRIME/usr/{}" \;
|
||||||
done
|
done
|
||||||
for cruft in bug lintian man; do
|
for cruft in bug lintian man; do
|
||||||
|
|||||||
@@ -10,5 +10,5 @@ rem "C:/Users/<USER>/AppData/Local/QElectroTech/QElectroTech"
|
|||||||
rem Sans l'option --data-dir, les données utilisateur (elements, titleblocks,
|
rem Sans l'option --data-dir, les données utilisateur (elements, titleblocks,
|
||||||
rem log, ...) de QElectroTech sont stockées dans
|
rem log, ...) de QElectroTech sont stockées dans
|
||||||
rem "C:/Users/<USER>/AppData/Roaming/QElectroTech/QElectroTech"
|
rem "C:/Users/<USER>/AppData/Roaming/QElectroTech/QElectroTech"
|
||||||
set command=bin\qelectrotech.exe --common-elements-dir=elements/ --common-tbt-dir=titleblocks/ --lang-dir=lang/ %*
|
set command=bin\qelectrotech.exe --common-elements-dir=elements/ --common-tbt-dir=titleblocks/ --lang-dir=lang/ -platform windows:fontengine=freetype %*
|
||||||
@start %command%
|
@start %command%
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; this file is part of installer for QElectroTech
|
; this file is part of installer for QElectroTech
|
||||||
; Copyright (C)2015 QElectroTech Team <scorpio@qelectrotech.org>
|
; Copyright (C)2015 QElectroTech Team <scorpio@qelectrotech.org>
|
||||||
;
|
;
|
||||||
; This program is free software; you can redistribute it and/or
|
; This program is free software; you can redistribute it and/or
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
;--------------------------------
|
;--------------------------------
|
||||||
; NSIS 3 requires SetCompressor BEFORE any Section or Function
|
; NSIS 3 requires SetCompressor BEFORE any Section or Function
|
||||||
SetCompressor /FINAL /SOLID lzma
|
SetCompressor /FINAL /SOLID lzma
|
||||||
Unicode true
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; Includes
|
; Includes
|
||||||
!include x64.nsh
|
!include x64.nsh
|
||||||
@@ -274,21 +274,6 @@ Section "$(Fonts)" SEC05
|
|||||||
File /nonfatal /r "./files/fonts"
|
File /nonfatal /r "./files/fonts"
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
; The MCP server lets an AI assistant open, check and edit drawings. It does
|
|
||||||
; nothing until a user sets up an assistant to start it.
|
|
||||||
Section "$(Mcp)" SEC06
|
|
||||||
SetOutPath "$INSTDIR\mcp"
|
|
||||||
File /nonfatal "./files/mcp/*"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
; Python for the MCP server, from python.org (about 12 MB). Unticked by
|
|
||||||
; default: only someone setting up an AI assistant needs it, and then only
|
|
||||||
; without a Python of their own. Uninstall removes it with $INSTDIR.
|
|
||||||
Section /o "$(McpPython)" SEC07
|
|
||||||
SetOutPath "$INSTDIR\mcp\python"
|
|
||||||
File /nonfatal /r "./files/mcp/python/*"
|
|
||||||
SectionEnd
|
|
||||||
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
; Component descriptions
|
; Component descriptions
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||||||
@@ -297,8 +282,6 @@ SectionEnd
|
|||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(var3)
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} $(var3)
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(var4)
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC04} $(var4)
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $(var5)
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC05} $(var5)
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC06} $(var6)
|
|
||||||
!insertmacro MUI_DESCRIPTION_TEXT ${SEC07} $(var7)
|
|
||||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||||
|
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
@@ -338,9 +321,6 @@ Section ""
|
|||||||
WriteRegStr HKEY_CLASSES_ROOT "qet_diagram_file\DefaultIcon" "" "$final_project_ico"
|
WriteRegStr HKEY_CLASSES_ROOT "qet_diagram_file\DefaultIcon" "" "$final_project_ico"
|
||||||
WriteRegStr HKEY_CLASSES_ROOT "qet_diagram_file\shell\open\command" "" '"$final_qet_exe" "%1"'
|
WriteRegStr HKEY_CLASSES_ROOT "qet_diagram_file\shell\open\command" "" '"$final_qet_exe" "%1"'
|
||||||
|
|
||||||
; File associations - .qetz, the zipped project: the same file type
|
|
||||||
WriteRegStr HKEY_CLASSES_ROOT ".qetz" "" "qet_diagram_file"
|
|
||||||
|
|
||||||
; File associations - .elmt
|
; File associations - .elmt
|
||||||
WriteRegStr HKEY_CLASSES_ROOT ".elmt" "" "qet_element_file"
|
WriteRegStr HKEY_CLASSES_ROOT ".elmt" "" "qet_element_file"
|
||||||
WriteRegStr HKEY_CLASSES_ROOT "qet_element_file" "" "Element QET"
|
WriteRegStr HKEY_CLASSES_ROOT "qet_element_file" "" "Element QET"
|
||||||
@@ -489,7 +469,6 @@ Section "Uninstall"
|
|||||||
; Remove file associations registry keys
|
; Remove file associations registry keys
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT "Applications\qelectrotech.exe"
|
DeleteRegKey HKEY_CLASSES_ROOT "Applications\qelectrotech.exe"
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT ".qet"
|
DeleteRegKey HKEY_CLASSES_ROOT ".qet"
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT ".qetz"
|
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT "qet_diagram_file"
|
DeleteRegKey HKEY_CLASSES_ROOT "qet_diagram_file"
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT ".elmt"
|
DeleteRegKey HKEY_CLASSES_ROOT ".elmt"
|
||||||
DeleteRegKey HKEY_CLASSES_ROOT "qet_element_file"
|
DeleteRegKey HKEY_CLASSES_ROOT "qet_element_file"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
LangString installed ${LANG_ENGLISH} "${SOFT_NAME} is already installed. $\n$\nClick `OK` to remove the previous version or `Cancel` to cancel this upgrade."
|
LangString installed ${LANG_ENGLISH} "${SOFT_NAME} is already installed. $\n$\nClick `OK` to remove the previous version or `Cancel` to cancel this upgrade."
|
||||||
LangString wrongArch ${LANG_ENGLISH} "This distribution is for 64 bits computers only."
|
LangString wrongArch ${LANG_ENGLISH} "This distribution is for 64 bits computers only."
|
||||||
LangString Elements ${LANG_ENGLISH} "Elements"
|
LangString Elements ${LANG_ENGLISH} "Elements"
|
||||||
LangString Electric ${LANG_ENGLISH} "Electric"
|
LangString Electric ${LANG_ENGLISH} "Electric"
|
||||||
@@ -19,10 +19,6 @@
|
|||||||
LangString var3 ${LANG_ENGLISH} "Examples of cartridges"
|
LangString var3 ${LANG_ENGLISH} "Examples of cartridges"
|
||||||
LangString var4 ${LANG_ENGLISH} "Examples of diagrams"
|
LangString var4 ${LANG_ENGLISH} "Examples of diagrams"
|
||||||
LangString var5 ${LANG_ENGLISH} "Fonts"
|
LangString var5 ${LANG_ENGLISH} "Fonts"
|
||||||
LangString Mcp ${LANG_ENGLISH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_ENGLISH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_ENGLISH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_ENGLISH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_ENGLISH} "Uninstallation of the previous version failed.$\nPlease uninstall ${SOFT_NAME} manually before continuing."
|
LangString uninstFailed ${LANG_ENGLISH} "Uninstallation of the previous version failed.$\nPlease uninstall ${SOFT_NAME} manually before continuing."
|
||||||
|
|
||||||
|
|
||||||
@@ -47,10 +43,6 @@
|
|||||||
LangString var3 ${LANG_KOREAN} "표제란 예제"
|
LangString var3 ${LANG_KOREAN} "표제란 예제"
|
||||||
LangString var4 ${LANG_KOREAN} "도면 예제"
|
LangString var4 ${LANG_KOREAN} "도면 예제"
|
||||||
LangString var5 ${LANG_KOREAN} "글꼴"
|
LangString var5 ${LANG_KOREAN} "글꼴"
|
||||||
LangString Mcp ${LANG_KOREAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_KOREAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_KOREAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_KOREAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_KOREAN} "이전 버전을 제거하지 못했습니다.$\n계속하기 전에 ${SOFT_NAME}을(를) 수동으로 제거해 주세요."
|
LangString uninstFailed ${LANG_KOREAN} "이전 버전을 제거하지 못했습니다.$\n계속하기 전에 ${SOFT_NAME}을(를) 수동으로 제거해 주세요."
|
||||||
|
|
||||||
|
|
||||||
@@ -75,10 +67,6 @@
|
|||||||
LangString var3 ${LANG_POLISH} "Przykłady tabliczek rysunkowych"
|
LangString var3 ${LANG_POLISH} "Przykłady tabliczek rysunkowych"
|
||||||
LangString var4 ${LANG_POLISH} "Przykłady schematów"
|
LangString var4 ${LANG_POLISH} "Przykłady schematów"
|
||||||
LangString var5 ${LANG_POLISH} "Czcionki"
|
LangString var5 ${LANG_POLISH} "Czcionki"
|
||||||
LangString Mcp ${LANG_POLISH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_POLISH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_POLISH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_POLISH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_POLISH} "Odinstalowanie poprzedniej wersji nie powiodło się.$\nPrzed kontynuowaniem odinstaluj ręcznie program ${SOFT_NAME}."
|
LangString uninstFailed ${LANG_POLISH} "Odinstalowanie poprzedniej wersji nie powiodło się.$\nPrzed kontynuowaniem odinstaluj ręcznie program ${SOFT_NAME}."
|
||||||
|
|
||||||
|
|
||||||
@@ -103,10 +91,6 @@
|
|||||||
LangString var3 ${LANG_GREEK} "Παραδείγματα πινακίδων"
|
LangString var3 ${LANG_GREEK} "Παραδείγματα πινακίδων"
|
||||||
LangString var4 ${LANG_GREEK} "Παραδείγματα διαγραμμάτων"
|
LangString var4 ${LANG_GREEK} "Παραδείγματα διαγραμμάτων"
|
||||||
LangString var5 ${LANG_GREEK} "Γραμματοσειρές"
|
LangString var5 ${LANG_GREEK} "Γραμματοσειρές"
|
||||||
LangString Mcp ${LANG_GREEK} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_GREEK} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_GREEK} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_GREEK} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_GREEK} "Η απεγκατάσταση της προηγούμενης έκδοσης απέτυχε.$\nΠαρακαλώ απεγκαταστήστε χειροκίνητα το ${SOFT_NAME} πριν συνεχίσετε."
|
LangString uninstFailed ${LANG_GREEK} "Η απεγκατάσταση της προηγούμενης έκδοσης απέτυχε.$\nΠαρακαλώ απεγκαταστήστε χειροκίνητα το ${SOFT_NAME} πριν συνεχίσετε."
|
||||||
|
|
||||||
|
|
||||||
@@ -131,10 +115,6 @@
|
|||||||
LangString var3 ${LANG_CZECH} "Příklady popisových polí"
|
LangString var3 ${LANG_CZECH} "Příklady popisových polí"
|
||||||
LangString var4 ${LANG_CZECH} "Příklady schémat"
|
LangString var4 ${LANG_CZECH} "Příklady schémat"
|
||||||
LangString var5 ${LANG_CZECH} "Písma"
|
LangString var5 ${LANG_CZECH} "Písma"
|
||||||
LangString Mcp ${LANG_CZECH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_CZECH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_CZECH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_CZECH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_CZECH} "Odinstalování předchozí verze se nezdařilo.$\nPřed pokračováním prosím odinstalujte ${SOFT_NAME} ručně."
|
LangString uninstFailed ${LANG_CZECH} "Odinstalování předchozí verze se nezdařilo.$\nPřed pokračováním prosím odinstalujte ${SOFT_NAME} ručně."
|
||||||
|
|
||||||
|
|
||||||
@@ -159,10 +139,6 @@
|
|||||||
LangString var3 ${LANG_SPANISH} "Ejemplos de cartelas"
|
LangString var3 ${LANG_SPANISH} "Ejemplos de cartelas"
|
||||||
LangString var4 ${LANG_SPANISH} "Ejemplos de esquemas"
|
LangString var4 ${LANG_SPANISH} "Ejemplos de esquemas"
|
||||||
LangString var5 ${LANG_SPANISH} "Fuentes"
|
LangString var5 ${LANG_SPANISH} "Fuentes"
|
||||||
LangString Mcp ${LANG_SPANISH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_SPANISH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_SPANISH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_SPANISH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SPANISH} "La desinstalación de la versión anterior ha fallado.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
LangString uninstFailed ${LANG_SPANISH} "La desinstalación de la versión anterior ha fallado.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
||||||
|
|
||||||
|
|
||||||
@@ -187,10 +163,6 @@
|
|||||||
LangString var3 ${LANG_GERMAN} "Schriftfeld-Beispiele"
|
LangString var3 ${LANG_GERMAN} "Schriftfeld-Beispiele"
|
||||||
LangString var4 ${LANG_GERMAN} "Schaltplan-Beispiele"
|
LangString var4 ${LANG_GERMAN} "Schaltplan-Beispiele"
|
||||||
LangString var5 ${LANG_GERMAN} "Schriften"
|
LangString var5 ${LANG_GERMAN} "Schriften"
|
||||||
LangString Mcp ${LANG_GERMAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_GERMAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_GERMAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_GERMAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_GERMAN} "Die Deinstallation der vorherigen Version ist fehlgeschlagen.$\nBitte deinstallieren Sie ${SOFT_NAME} manuell, bevor Sie fortfahren."
|
LangString uninstFailed ${LANG_GERMAN} "Die Deinstallation der vorherigen Version ist fehlgeschlagen.$\nBitte deinstallieren Sie ${SOFT_NAME} manuell, bevor Sie fortfahren."
|
||||||
|
|
||||||
|
|
||||||
@@ -215,10 +187,6 @@
|
|||||||
LangString var3 ${LANG_RUSSIAN} "Примеры штампов"
|
LangString var3 ${LANG_RUSSIAN} "Примеры штампов"
|
||||||
LangString var4 ${LANG_RUSSIAN} "Примеры схем"
|
LangString var4 ${LANG_RUSSIAN} "Примеры схем"
|
||||||
LangString var5 ${LANG_RUSSIAN} "Шрифты"
|
LangString var5 ${LANG_RUSSIAN} "Шрифты"
|
||||||
LangString Mcp ${LANG_RUSSIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_RUSSIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_RUSSIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_RUSSIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_RUSSIAN} "Удаление предыдущей версии завершилось с ошибкой.$\nПожалуйста, удалите ${SOFT_NAME} вручную перед продолжением."
|
LangString uninstFailed ${LANG_RUSSIAN} "Удаление предыдущей версии завершилось с ошибкой.$\nПожалуйста, удалите ${SOFT_NAME} вручную перед продолжением."
|
||||||
|
|
||||||
|
|
||||||
@@ -243,10 +211,6 @@
|
|||||||
LangString var3 ${LANG_ARABIC} "أمثلة على كتل العنوان"
|
LangString var3 ${LANG_ARABIC} "أمثلة على كتل العنوان"
|
||||||
LangString var4 ${LANG_ARABIC} "أمثلة على المخططات"
|
LangString var4 ${LANG_ARABIC} "أمثلة على المخططات"
|
||||||
LangString var5 ${LANG_ARABIC} "الخطوط"
|
LangString var5 ${LANG_ARABIC} "الخطوط"
|
||||||
LangString Mcp ${LANG_ARABIC} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_ARABIC} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_ARABIC} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_ARABIC} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_ARABIC} "فشل إلغاء تثبيت الإصدار السابق. يرجى إلغاء تثبيت ${SOFT_NAME} يدويًا قبل المتابعة."
|
LangString uninstFailed ${LANG_ARABIC} "فشل إلغاء تثبيت الإصدار السابق. يرجى إلغاء تثبيت ${SOFT_NAME} يدويًا قبل المتابعة."
|
||||||
|
|
||||||
|
|
||||||
@@ -271,10 +235,6 @@
|
|||||||
LangString var3 ${LANG_CATALAN} "Exemples de cartutxos"
|
LangString var3 ${LANG_CATALAN} "Exemples de cartutxos"
|
||||||
LangString var4 ${LANG_CATALAN} "Exemples d'esquemes"
|
LangString var4 ${LANG_CATALAN} "Exemples d'esquemes"
|
||||||
LangString var5 ${LANG_CATALAN} "Tipus de lletra"
|
LangString var5 ${LANG_CATALAN} "Tipus de lletra"
|
||||||
LangString Mcp ${LANG_CATALAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_CATALAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_CATALAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_CATALAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_CATALAN} "La desinstal·lació de la versió anterior ha fallat.$\nSi us plau, desinstal·leu ${SOFT_NAME} manualment abans de continuar."
|
LangString uninstFailed ${LANG_CATALAN} "La desinstal·lació de la versió anterior ha fallat.$\nSi us plau, desinstal·leu ${SOFT_NAME} manualment abans de continuar."
|
||||||
|
|
||||||
|
|
||||||
@@ -299,10 +259,6 @@
|
|||||||
LangString var3 ${LANG_ITALIAN} "Cartigli di esempio"
|
LangString var3 ${LANG_ITALIAN} "Cartigli di esempio"
|
||||||
LangString var4 ${LANG_ITALIAN} "Schemi di esempio"
|
LangString var4 ${LANG_ITALIAN} "Schemi di esempio"
|
||||||
LangString var5 ${LANG_ITALIAN} "Caratteri"
|
LangString var5 ${LANG_ITALIAN} "Caratteri"
|
||||||
LangString Mcp ${LANG_ITALIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_ITALIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_ITALIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_ITALIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_ITALIAN} "La disinstallazione della versione precedente non è riuscita.$\nSi prega di disinstallare ${SOFT_NAME} manualmente prima di continuare."
|
LangString uninstFailed ${LANG_ITALIAN} "La disinstallazione della versione precedente non è riuscita.$\nSi prega di disinstallare ${SOFT_NAME} manualmente prima di continuare."
|
||||||
|
|
||||||
|
|
||||||
@@ -327,10 +283,6 @@
|
|||||||
LangString var3 ${LANG_PORTUGUESE} "Exemplos de legendas"
|
LangString var3 ${LANG_PORTUGUESE} "Exemplos de legendas"
|
||||||
LangString var4 ${LANG_PORTUGUESE} "Exemplos de esquemas"
|
LangString var4 ${LANG_PORTUGUESE} "Exemplos de esquemas"
|
||||||
LangString var5 ${LANG_PORTUGUESE} "Fontes"
|
LangString var5 ${LANG_PORTUGUESE} "Fontes"
|
||||||
LangString Mcp ${LANG_PORTUGUESE} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_PORTUGUESE} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_PORTUGUESE} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_PORTUGUESE} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_PORTUGUESE} "A desinstalação da versão anterior falhou.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
LangString uninstFailed ${LANG_PORTUGUESE} "A desinstalação da versão anterior falhou.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
||||||
|
|
||||||
|
|
||||||
@@ -355,10 +307,6 @@
|
|||||||
LangString var3 ${LANG_ROMANIAN} "Exemple de cartușe"
|
LangString var3 ${LANG_ROMANIAN} "Exemple de cartușe"
|
||||||
LangString var4 ${LANG_ROMANIAN} "Exemple de scheme"
|
LangString var4 ${LANG_ROMANIAN} "Exemple de scheme"
|
||||||
LangString var5 ${LANG_ROMANIAN} "Fonturi"
|
LangString var5 ${LANG_ROMANIAN} "Fonturi"
|
||||||
LangString Mcp ${LANG_ROMANIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_ROMANIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_ROMANIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_ROMANIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_ROMANIAN} "Dezinstalarea versiunii anterioare a eșuat.$\nVă rugăm să dezinstalați ${SOFT_NAME} manual înainte de a continua."
|
LangString uninstFailed ${LANG_ROMANIAN} "Dezinstalarea versiunii anterioare a eșuat.$\nVă rugăm să dezinstalați ${SOFT_NAME} manual înainte de a continua."
|
||||||
|
|
||||||
|
|
||||||
@@ -383,10 +331,6 @@
|
|||||||
LangString var3 ${LANG_CROATIAN} "Primjeri zaglavlja"
|
LangString var3 ${LANG_CROATIAN} "Primjeri zaglavlja"
|
||||||
LangString var4 ${LANG_CROATIAN} "Primjeri shema"
|
LangString var4 ${LANG_CROATIAN} "Primjeri shema"
|
||||||
LangString var5 ${LANG_CROATIAN} "Fontovi"
|
LangString var5 ${LANG_CROATIAN} "Fontovi"
|
||||||
LangString Mcp ${LANG_CROATIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_CROATIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_CROATIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_CROATIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_CROATIAN} "Deinstalacija prethodne verzije nije uspjela.$\nMolimo deinstalirajte ${SOFT_NAME} ručno prije nastavka."
|
LangString uninstFailed ${LANG_CROATIAN} "Deinstalacija prethodne verzije nije uspjela.$\nMolimo deinstalirajte ${SOFT_NAME} ručno prije nastavka."
|
||||||
|
|
||||||
|
|
||||||
@@ -411,10 +355,6 @@
|
|||||||
LangString var3 ${LANG_DUTCH} "Voorbeelden van titelblokken"
|
LangString var3 ${LANG_DUTCH} "Voorbeelden van titelblokken"
|
||||||
LangString var4 ${LANG_DUTCH} "Voorbeelden van schema's"
|
LangString var4 ${LANG_DUTCH} "Voorbeelden van schema's"
|
||||||
LangString var5 ${LANG_DUTCH} "Lettertypen"
|
LangString var5 ${LANG_DUTCH} "Lettertypen"
|
||||||
LangString Mcp ${LANG_DUTCH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_DUTCH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_DUTCH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_DUTCH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_DUTCH} "Het verwijderen van de vorige versie is mislukt.$\nVerwijder ${SOFT_NAME} handmatig voordat u verdergaat."
|
LangString uninstFailed ${LANG_DUTCH} "Het verwijderen van de vorige versie is mislukt.$\nVerwijder ${SOFT_NAME} handmatig voordat u verdergaat."
|
||||||
|
|
||||||
|
|
||||||
@@ -439,10 +379,6 @@
|
|||||||
LangString var3 ${LANG_DANISH} "Titel blokke eksempler"
|
LangString var3 ${LANG_DANISH} "Titel blokke eksempler"
|
||||||
LangString var4 ${LANG_DANISH} "Diagram eksempler"
|
LangString var4 ${LANG_DANISH} "Diagram eksempler"
|
||||||
LangString var5 ${LANG_DANISH} "Skrifttyper"
|
LangString var5 ${LANG_DANISH} "Skrifttyper"
|
||||||
LangString Mcp ${LANG_DANISH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_DANISH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_DANISH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_DANISH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_DANISH} "Afinstallation af den tidligere version mislykkedes.$\nAfinstaller venligst ${SOFT_NAME} manuelt, inden du fortsætter."
|
LangString uninstFailed ${LANG_DANISH} "Afinstallation af den tidligere version mislykkedes.$\nAfinstaller venligst ${SOFT_NAME} manuelt, inden du fortsætter."
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
LangString wrongArch ${LANG_FRENCH} "Ce programme est pour Windows 64 bits seulement."
|
LangString wrongArch ${LANG_FRENCH} "Ce programme est pour Windows 64 bits seulement."
|
||||||
LangString installed ${LANG_FRENCH} "${SOFT_NAME} est déja installé. $\n$\nCliquer sur `OK` pour désinstaller l'ancienne version `Annuler` pour annuler cet upgrade."
|
LangString installed ${LANG_FRENCH} "${SOFT_NAME} est déja installé. $\n$\nCliquer sur `OK` pour désinstaller l'ancienne version `Annuler` pour annuler cet upgrade."
|
||||||
LangString Elements ${LANG_FRENCH} "Eléments"
|
LangString Elements ${LANG_FRENCH} "Eléments"
|
||||||
LangString Electric ${LANG_FRENCH} "Electrique"
|
LangString Electric ${LANG_FRENCH} "Electrique"
|
||||||
@@ -19,8 +19,4 @@
|
|||||||
LangString var3 ${LANG_FRENCH} "Exemples de cartouches"
|
LangString var3 ${LANG_FRENCH} "Exemples de cartouches"
|
||||||
LangString var4 ${LANG_FRENCH} "Exemples de schémas"
|
LangString var4 ${LANG_FRENCH} "Exemples de schémas"
|
||||||
LangString var5 ${LANG_FRENCH} "Polices"
|
LangString var5 ${LANG_FRENCH} "Polices"
|
||||||
LangString Mcp ${LANG_FRENCH} "Assistant IA (MCP)"
|
|
||||||
LangString var6 ${LANG_FRENCH} "Permet à un assistant IA d'ouvrir, vérifier et modifier vos schémas. Nécessite Python : le vôtre, ou celui proposé ci-dessous"
|
|
||||||
LangString McpPython ${LANG_FRENCH} "Python pour l'assistant IA"
|
|
||||||
LangString var7 ${LANG_FRENCH} "Python de python.org, utilisé uniquement par le composant Assistant IA. Inutile si Python est déjà installé (environ 12 Mo)"
|
|
||||||
LangString uninstFailed ${LANG_FRENCH} "La désinstallation de la version précédente a échoué.$\nVeuillez désinstaller ${SOFT_NAME} manuellement avant de continuer."
|
LangString uninstFailed ${LANG_FRENCH} "La désinstallation de la version précédente a échoué.$\nVeuillez désinstaller ${SOFT_NAME} manuellement avant de continuer."
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
; Missing language translations for QElectroTech installer
|
; Missing language translations for QElectroTech installer
|
||||||
; Languages added: hu, ja, mn, nb, nl_BE, nl_NL, pt_BR, rs/sr, sk, sl, sv, tr, uk, zh
|
; Languages added: hu, ja, mn, nb, nl_BE, nl_NL, pt_BR, rs/sr, sk, sl, sv, tr, uk, zh
|
||||||
|
|
||||||
; ----------------------------------------------------------------
|
; ----------------------------------------------------------------
|
||||||
@@ -25,10 +25,6 @@
|
|||||||
LangString var3 ${LANG_HUNGARIAN} "Rajzfejléc-példák"
|
LangString var3 ${LANG_HUNGARIAN} "Rajzfejléc-példák"
|
||||||
LangString var4 ${LANG_HUNGARIAN} "Kapcsolási rajz példák"
|
LangString var4 ${LANG_HUNGARIAN} "Kapcsolási rajz példák"
|
||||||
LangString var5 ${LANG_HUNGARIAN} "Betűtípusok"
|
LangString var5 ${LANG_HUNGARIAN} "Betűtípusok"
|
||||||
LangString Mcp ${LANG_HUNGARIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_HUNGARIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_HUNGARIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_HUNGARIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_HUNGARIAN} "Az előző verzió eltávolítása nem sikerült.$\nKérjük, távolítsa el manuálisan a ${SOFT_NAME} programot, mielőtt folytatná."
|
LangString uninstFailed ${LANG_HUNGARIAN} "Az előző verzió eltávolítása nem sikerült.$\nKérjük, távolítsa el manuálisan a ${SOFT_NAME} programot, mielőtt folytatná."
|
||||||
|
|
||||||
|
|
||||||
@@ -56,10 +52,6 @@
|
|||||||
LangString var3 ${LANG_JAPANESE} "表題欄の例"
|
LangString var3 ${LANG_JAPANESE} "表題欄の例"
|
||||||
LangString var4 ${LANG_JAPANESE} "回路図の例"
|
LangString var4 ${LANG_JAPANESE} "回路図の例"
|
||||||
LangString var5 ${LANG_JAPANESE} "フォント"
|
LangString var5 ${LANG_JAPANESE} "フォント"
|
||||||
LangString Mcp ${LANG_JAPANESE} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_JAPANESE} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_JAPANESE} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_JAPANESE} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_JAPANESE} "前のバージョンのアンインストールに失敗しました。$\n続行する前に、${SOFT_NAME} を手動でアンインストールしてください。"
|
LangString uninstFailed ${LANG_JAPANESE} "前のバージョンのアンインストールに失敗しました。$\n続行する前に、${SOFT_NAME} を手動でアンインストールしてください。"
|
||||||
|
|
||||||
|
|
||||||
@@ -87,10 +79,6 @@
|
|||||||
LangString var3 ${LANG_MONGOLIAN} "Гарчгийн блокын жишээнүүд"
|
LangString var3 ${LANG_MONGOLIAN} "Гарчгийн блокын жишээнүүд"
|
||||||
LangString var4 ${LANG_MONGOLIAN} "Схемийн жишээнүүд"
|
LangString var4 ${LANG_MONGOLIAN} "Схемийн жишээнүүд"
|
||||||
LangString var5 ${LANG_MONGOLIAN} "Фонт"
|
LangString var5 ${LANG_MONGOLIAN} "Фонт"
|
||||||
LangString Mcp ${LANG_MONGOLIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_MONGOLIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_MONGOLIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_MONGOLIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_MONGOLIAN} "Өмнөх хувилбарыг устгаж чадсангүй.$\nҮргэлжлүүлэхийн өмнө ${SOFT_NAME}-г гараар устгана уу."
|
LangString uninstFailed ${LANG_MONGOLIAN} "Өмнөх хувилбарыг устгаж чадсангүй.$\nҮргэлжлүүлэхийн өмнө ${SOFT_NAME}-г гараар устгана уу."
|
||||||
|
|
||||||
|
|
||||||
@@ -118,10 +106,6 @@
|
|||||||
LangString var3 ${LANG_NORWEGIAN} "Eksempler på titelblokker"
|
LangString var3 ${LANG_NORWEGIAN} "Eksempler på titelblokker"
|
||||||
LangString var4 ${LANG_NORWEGIAN} "Eksempler på skjemaer"
|
LangString var4 ${LANG_NORWEGIAN} "Eksempler på skjemaer"
|
||||||
LangString var5 ${LANG_NORWEGIAN} "Skrifttyper"
|
LangString var5 ${LANG_NORWEGIAN} "Skrifttyper"
|
||||||
LangString Mcp ${LANG_NORWEGIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_NORWEGIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_NORWEGIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_NORWEGIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_NORWEGIAN} "Avinstallasjon av forrige versjon mislyktes.$\nVennligst avinstaller ${SOFT_NAME} manuelt før du fortsetter."
|
LangString uninstFailed ${LANG_NORWEGIAN} "Avinstallasjon av forrige versjon mislyktes.$\nVennligst avinstaller ${SOFT_NAME} manuelt før du fortsetter."
|
||||||
|
|
||||||
|
|
||||||
@@ -159,10 +143,6 @@
|
|||||||
LangString var3 ${LANG_PORTUGUESEBR} "Exemplos de legendas"
|
LangString var3 ${LANG_PORTUGUESEBR} "Exemplos de legendas"
|
||||||
LangString var4 ${LANG_PORTUGUESEBR} "Exemplos de esquemas"
|
LangString var4 ${LANG_PORTUGUESEBR} "Exemplos de esquemas"
|
||||||
LangString var5 ${LANG_PORTUGUESEBR} "Fontes"
|
LangString var5 ${LANG_PORTUGUESEBR} "Fontes"
|
||||||
LangString Mcp ${LANG_PORTUGUESEBR} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_PORTUGUESEBR} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_PORTUGUESEBR} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_PORTUGUESEBR} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_PORTUGUESEBR} "A desinstalação da versão anterior falhou.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
LangString uninstFailed ${LANG_PORTUGUESEBR} "A desinstalação da versão anterior falhou.$\nPor favor, desinstale ${SOFT_NAME} manualmente antes de continuar."
|
||||||
|
|
||||||
|
|
||||||
@@ -190,10 +170,6 @@
|
|||||||
LangString var3 ${LANG_SERBIAN} "Примери заглавља"
|
LangString var3 ${LANG_SERBIAN} "Примери заглавља"
|
||||||
LangString var4 ${LANG_SERBIAN} "Примери шема"
|
LangString var4 ${LANG_SERBIAN} "Примери шема"
|
||||||
LangString var5 ${LANG_SERBIAN} "Фонтови"
|
LangString var5 ${LANG_SERBIAN} "Фонтови"
|
||||||
LangString Mcp ${LANG_SERBIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_SERBIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_SERBIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_SERBIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SERBIAN} "Деинсталација претходне верзије није успела.$\nМолимо деинсталирајте ${SOFT_NAME} ручно пре наставка."
|
LangString uninstFailed ${LANG_SERBIAN} "Деинсталација претходне верзије није успела.$\nМолимо деинсталирајте ${SOFT_NAME} ручно пре наставка."
|
||||||
|
|
||||||
|
|
||||||
@@ -221,10 +197,6 @@
|
|||||||
LangString var3 ${LANG_SLOVAK} "Príklady popisových polí"
|
LangString var3 ${LANG_SLOVAK} "Príklady popisových polí"
|
||||||
LangString var4 ${LANG_SLOVAK} "Príklady schém"
|
LangString var4 ${LANG_SLOVAK} "Príklady schém"
|
||||||
LangString var5 ${LANG_SLOVAK} "Písma"
|
LangString var5 ${LANG_SLOVAK} "Písma"
|
||||||
LangString Mcp ${LANG_SLOVAK} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_SLOVAK} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_SLOVAK} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_SLOVAK} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SLOVAK} "Odinštalovanie predchádzajúcej verzie zlyhalo.$\nPred pokračovaním odinštalujte ${SOFT_NAME} ručne."
|
LangString uninstFailed ${LANG_SLOVAK} "Odinštalovanie predchádzajúcej verzie zlyhalo.$\nPred pokračovaním odinštalujte ${SOFT_NAME} ručne."
|
||||||
|
|
||||||
|
|
||||||
@@ -252,19 +224,15 @@
|
|||||||
LangString var3 ${LANG_SLOVENIAN} "Primeri glav risb"
|
LangString var3 ${LANG_SLOVENIAN} "Primeri glav risb"
|
||||||
LangString var4 ${LANG_SLOVENIAN} "Primeri shem"
|
LangString var4 ${LANG_SLOVENIAN} "Primeri shem"
|
||||||
LangString var5 ${LANG_SLOVENIAN} "Pisave"
|
LangString var5 ${LANG_SLOVENIAN} "Pisave"
|
||||||
LangString Mcp ${LANG_SLOVENIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_SLOVENIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_SLOVENIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_SLOVENIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SLOVENIAN} "Odstranitev prejšnje različice ni uspela.$\nPred nadaljevanjem ročno odstranite ${SOFT_NAME}."
|
LangString uninstFailed ${LANG_SLOVENIAN} "Odstranitev prejšnje različice ni uspela.$\nPred nadaljevanjem ročno odstranite ${SOFT_NAME}."
|
||||||
|
|
||||||
|
|
||||||
; ----------------------------------------------------------------
|
; ----------------------------------------------------------------
|
||||||
; Swedish (LANG_SWEDISH)
|
; Swedish (LANG_SWEDISH)
|
||||||
; ----------------------------------------------------------------
|
; ----------------------------------------------------------------
|
||||||
LangString installed ${LANG_SWEDISH} "${SOFT_NAME} är redan installerat. $\n$\nKlicka på `OK` för att avinstallera den tidigare versionen eller `Avbryt` för att avbryta uppgraderingen."
|
LangString installed ${LANG_SWEDISH} "${SOFT_NAME} är redan installerat. $\n$\nKlicka på `OK` för att ta bort den tidigare versionen eller `Avbryt` för att avbryta uppgraderingen."
|
||||||
LangString wrongArch ${LANG_SWEDISH} "Den här distributionen är endast för 64-bitars datorer."
|
LangString wrongArch ${LANG_SWEDISH} "Den här distributionen är endast för 64-bitars datorer."
|
||||||
LangString Elements ${LANG_SWEDISH} "Symboler"
|
LangString Elements ${LANG_SWEDISH} "Element"
|
||||||
LangString Electric ${LANG_SWEDISH} "Elektrisk"
|
LangString Electric ${LANG_SWEDISH} "Elektrisk"
|
||||||
LangString Logic ${LANG_SWEDISH} "Logik"
|
LangString Logic ${LANG_SWEDISH} "Logik"
|
||||||
LangString Hydraulic ${LANG_SWEDISH} "Hydraulik"
|
LangString Hydraulic ${LANG_SWEDISH} "Hydraulik"
|
||||||
@@ -272,21 +240,17 @@
|
|||||||
LangString Energy ${LANG_SWEDISH} "Energi"
|
LangString Energy ${LANG_SWEDISH} "Energi"
|
||||||
LangString water ${LANG_SWEDISH} "Vatten"
|
LangString water ${LANG_SWEDISH} "Vatten"
|
||||||
LangString Refrigeration ${LANG_SWEDISH} "Kylning"
|
LangString Refrigeration ${LANG_SWEDISH} "Kylning"
|
||||||
LangString Solar_thermal ${LANG_SWEDISH} "Solvärme"
|
LangString Solar_thermal ${LANG_SWEDISH} "Solvarme"
|
||||||
LangString Lang ${LANG_SWEDISH} "Språk"
|
LangString Lang ${LANG_SWEDISH} "Språk"
|
||||||
LangString Fonts ${LANG_SWEDISH} "Teckensnitt"
|
LangString Fonts ${LANG_SWEDISH} "Teckensnitt"
|
||||||
LangString Titleblocks ${LANG_SWEDISH} "Ritningshuvuden"
|
LangString Titleblocks ${LANG_SWEDISH} "Ritningshuvuden"
|
||||||
LangString Examples ${LANG_SWEDISH} "Exempel"
|
LangString Examples ${LANG_SWEDISH} "Exempel"
|
||||||
LangString Check ${LANG_SWEDISH} "Markera för att starta ${SOFT_NAME}"
|
LangString Check ${LANG_SWEDISH} "Markera för att starta ${SOFT_NAME}"
|
||||||
LangString var1 ${LANG_SWEDISH} "Symboler från det officiella biblioteket"
|
LangString var1 ${LANG_SWEDISH} "Element från den officiella samlingen"
|
||||||
LangString var2 ${LANG_SWEDISH} "Språkfiler"
|
LangString var2 ${LANG_SWEDISH} "Språkfiler"
|
||||||
LangString var3 ${LANG_SWEDISH} "Exempel på ritningshuvuden"
|
LangString var3 ${LANG_SWEDISH} "Exempel på ritningshuvuden"
|
||||||
LangString var4 ${LANG_SWEDISH} "Exempel på scheman"
|
LangString var4 ${LANG_SWEDISH} "Exempel på scheman"
|
||||||
LangString var5 ${LANG_SWEDISH} "Teckensnitt"
|
LangString var5 ${LANG_SWEDISH} "Teckensnitt"
|
||||||
LangString Mcp ${LANG_SWEDISH} "AI-assistent (MCP)"
|
|
||||||
LangString var6 ${LANG_SWEDISH} "Låter en AI-assistent öppna, kontrollera och ändra dina ritningar. Kräver Python: ditt eget, eller det som erbjuds nedan"
|
|
||||||
LangString McpPython ${LANG_SWEDISH} "Python för AI-assistenten"
|
|
||||||
LangString var7 ${LANG_SWEDISH} "Python från python.org, används endast av komponenten AI-assistent. Behövs inte om Python redan är installerat (cirka 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SWEDISH} "Avinstallationen av den föregående versionen misslyckades.$\nAvinstallera ${SOFT_NAME} manuellt innan du fortsätter."
|
LangString uninstFailed ${LANG_SWEDISH} "Avinstallationen av den föregående versionen misslyckades.$\nAvinstallera ${SOFT_NAME} manuellt innan du fortsätter."
|
||||||
|
|
||||||
|
|
||||||
@@ -314,10 +278,6 @@
|
|||||||
LangString var3 ${LANG_TURKISH} "Başlık bloğu örnekleri"
|
LangString var3 ${LANG_TURKISH} "Başlık bloğu örnekleri"
|
||||||
LangString var4 ${LANG_TURKISH} "Şema örnekleri"
|
LangString var4 ${LANG_TURKISH} "Şema örnekleri"
|
||||||
LangString var5 ${LANG_TURKISH} "Yazı Tipleri"
|
LangString var5 ${LANG_TURKISH} "Yazı Tipleri"
|
||||||
LangString Mcp ${LANG_TURKISH} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_TURKISH} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_TURKISH} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_TURKISH} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_TURKISH} "Önceki sürümün kaldırılması başarısız oldu.$\nDevam etmeden önce lütfen ${SOFT_NAME}'i manuel olarak kaldırın."
|
LangString uninstFailed ${LANG_TURKISH} "Önceki sürümün kaldırılması başarısız oldu.$\nDevam etmeden önce lütfen ${SOFT_NAME}'i manuel olarak kaldırın."
|
||||||
|
|
||||||
|
|
||||||
@@ -345,10 +305,6 @@
|
|||||||
LangString var3 ${LANG_UKRAINIAN} "Приклади штампів"
|
LangString var3 ${LANG_UKRAINIAN} "Приклади штампів"
|
||||||
LangString var4 ${LANG_UKRAINIAN} "Приклади схем"
|
LangString var4 ${LANG_UKRAINIAN} "Приклади схем"
|
||||||
LangString var5 ${LANG_UKRAINIAN} "Шрифти"
|
LangString var5 ${LANG_UKRAINIAN} "Шрифти"
|
||||||
LangString Mcp ${LANG_UKRAINIAN} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_UKRAINIAN} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_UKRAINIAN} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_UKRAINIAN} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_UKRAINIAN} "Видалення попередньої версії завершилося помилкою.$\nБудь ласка, видаліть ${SOFT_NAME} вручну перед продовженням."
|
LangString uninstFailed ${LANG_UKRAINIAN} "Видалення попередньої версії завершилося помилкою.$\nБудь ласка, видаліть ${SOFT_NAME} вручну перед продовженням."
|
||||||
|
|
||||||
|
|
||||||
@@ -376,8 +332,4 @@
|
|||||||
LangString var3 ${LANG_SIMPCHINESE} "标题栏示例"
|
LangString var3 ${LANG_SIMPCHINESE} "标题栏示例"
|
||||||
LangString var4 ${LANG_SIMPCHINESE} "图纸示例"
|
LangString var4 ${LANG_SIMPCHINESE} "图纸示例"
|
||||||
LangString var5 ${LANG_SIMPCHINESE} "字体"
|
LangString var5 ${LANG_SIMPCHINESE} "字体"
|
||||||
LangString Mcp ${LANG_SIMPCHINESE} "AI assistant (MCP)"
|
|
||||||
LangString var6 ${LANG_SIMPCHINESE} "Lets an AI assistant open, check and edit your drawings. Needs Python: your own, or the one offered below"
|
|
||||||
LangString McpPython ${LANG_SIMPCHINESE} "Python for the AI assistant"
|
|
||||||
LangString var7 ${LANG_SIMPCHINESE} "Python from python.org, used only by the AI assistant component. Not needed if Python is already installed (about 12 MB)"
|
|
||||||
LangString uninstFailed ${LANG_SIMPCHINESE} "卸载旧版本失败。$\n请在继续之前手动卸载 ${SOFT_NAME}。"
|
LangString uninstFailed ${LANG_SIMPCHINESE} "卸载旧版本失败。$\n请在继续之前手动卸载 ${SOFT_NAME}。"
|
||||||
|
|||||||
@@ -7,5 +7,5 @@ cd /d %current_dir%
|
|||||||
rem lance QElectroTech
|
rem lance QElectroTech
|
||||||
rem Sans option --config-dir, la configuration de QElectroTech ainsi que la
|
rem Sans option --config-dir, la configuration de QElectroTech ainsi que la
|
||||||
rem collection d'elements perso seront dans "%APPDATA%\qet"
|
rem collection d'elements perso seront dans "%APPDATA%\qet"
|
||||||
set command=bin\qelectrotech.exe --common-elements-dir=elements/ --common-tbt-dir=titleblocks/ --lang-dir=lang/ %*
|
set command=bin\qelectrotech.exe -platform windows:fontengine=freetype --common-elements-dir=elements/ --common-tbt-dir=titleblocks/ --lang-dir=lang/ %*
|
||||||
@start %command%
|
@start %command%
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ git clone --recursive https://github.com/qelectrotech/qelectrotech-source-mirror
|
|||||||
Here are the technical choices made for the software development:
|
Here are the technical choices made for the software development:
|
||||||
|
|
||||||
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
* Integrated development environment: [Qt Framework](https://www.qt.io/ide/)
|
||||||
* Libraries: Qt 5.x / Qt 6.x
|
* Libraries: Qt 5.x
|
||||||
* [KF5/6 Framework](https://github.com/KDE)
|
* [KF5 Framework](https://github.com/KDE)
|
||||||
[Cmake](https://cmake.org/install/)
|
[Cmake](https://cmake.org/install/)
|
||||||
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
[kcoreaddons](https://github.com/KDE/kcoreaddons/tree/kf5)
|
||||||
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
[kwidgetsaddons](https://github.com/KDE/kwidgetsaddons/tree/kf5).
|
||||||
|
|||||||
@@ -1,12 +1,5 @@
|
|||||||
Windows Registry Editor Version 5.00
|
Windows Registry Editor Version 5.00
|
||||||
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\.qet]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\qet_diagram_file]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\.elmt]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\qet_element_file]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\.titleblock]
|
|
||||||
[-HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file]
|
|
||||||
[-HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command]
|
[-HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command]
|
||||||
[-HKEY_CLASSES_ROOT\.qet]
|
[-HKEY_CLASSES_ROOT\.qet]
|
||||||
[-HKEY_CLASSES_ROOT\qet_diagram_file]
|
[-HKEY_CLASSES_ROOT\qet_diagram_file]
|
||||||
|
|||||||
@@ -5,9 +5,7 @@ rem detecte le dossier courant et suppose que celui-ci contient bin\qelectrotech
|
|||||||
set current_dir=%~dp0
|
set current_dir=%~dp0
|
||||||
cd /d %current_dir%
|
cd /d %current_dir%
|
||||||
|
|
||||||
rem l'archive portable fournit "Lancer QET_qt6.bat", l'installeur "Lancer QET.bat"
|
set expected_qet_exe=%current_dir%Lancer QET.bat
|
||||||
set expected_qet_exe=%current_dir%Lancer QET_qt6.bat
|
|
||||||
if not exist "%expected_qet_exe%" set expected_qet_exe=%current_dir%Lancer QET.bat
|
|
||||||
set expected_project_ico=%current_dir%ico\application-x-qet-project.ico
|
set expected_project_ico=%current_dir%ico\application-x-qet-project.ico
|
||||||
set expected_element_ico=%current_dir%ico\application-x-qet-element.ico
|
set expected_element_ico=%current_dir%ico\application-x-qet-element.ico
|
||||||
set expected_titleblock_ico=%current_dir%ico\application-x-qet-titleblock.ico
|
set expected_titleblock_ico=%current_dir%ico\application-x-qet-titleblock.ico
|
||||||
@@ -47,54 +45,49 @@ set final_element_ico=%expected_element_ico:\=\\%
|
|||||||
set final_titleblock_ico=%expected_titleblock_ico:\=\\%
|
set final_titleblock_ico=%expected_titleblock_ico:\=\\%
|
||||||
|
|
||||||
rem genere le fichier .reg pour enregistrer les associations de fichiers
|
rem genere le fichier .reg pour enregistrer les associations de fichiers
|
||||||
rem HKEY_CURRENT_USER : ne demande pas les droits administrateur
|
|
||||||
set reg_file=qet_install_file_associations.reg
|
set reg_file=qet_install_file_associations.reg
|
||||||
(
|
(
|
||||||
echo Windows Registry Editor Version 5.00
|
echo Windows Registry Editor Version 5.00
|
||||||
echo.
|
echo.
|
||||||
|
|
||||||
rem Declaration de l'application
|
rem Declaration de l'application
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\Applications\qelectrotech.exe\shell\open\command]
|
echo [HKEY_CLASSES_ROOT\Applications\qelectrotech.exe\shell\open\command]
|
||||||
echo @="\"%final_qet_exe%\" \"%%1\""
|
echo @="\"%final_qet_exe%\" \"%%1\""
|
||||||
|
|
||||||
rem association de fichier *.qet
|
rem association de fichier *.qet
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\.qet]
|
echo [HKEY_CLASSES_ROOT\.qet]
|
||||||
echo @="qet_diagram_file"
|
echo @="qet_diagram_file"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file]
|
echo [HKEY_CLASSES_ROOT\qet_diagram_file]
|
||||||
echo @="QET diagram"
|
echo @="QET diagram"
|
||||||
echo "EditFlags"=dword:00000000
|
echo "EditFlags"=dword:00000000
|
||||||
echo "BrowserFlags"=dword:00000008
|
echo "BrowserFlags"=dword:00000008
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\DefaultIcon]
|
echo [HKEY_CLASSES_ROOT\qet_diagram_file\DefaultIcon]
|
||||||
echo @="%final_project_ico%,0"
|
echo @="%final_project_ico%,0"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_diagram_file\shell\open\command]
|
echo [HKEY_CLASSES_ROOT\qet_diagram_file\shell\open\command]
|
||||||
echo @="\"%final_qet_exe%\" \"%%1\""
|
echo @="\"%final_qet_exe%\" \"%%1\""
|
||||||
|
|
||||||
rem *.qetz (zipped project): the same file type as *.qet
|
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\.qetz]
|
|
||||||
echo @="qet_diagram_file"
|
|
||||||
|
|
||||||
rem association de fichier *.elmt
|
rem association de fichier *.elmt
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\.elmt]
|
echo [HKEY_CLASSES_ROOT\.elmt]
|
||||||
echo @="qet_element_file"
|
echo @="qet_element_file"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file]
|
echo [HKEY_CLASSES_ROOT\qet_element_file]
|
||||||
echo @="QET element"
|
echo @="QET element"
|
||||||
echo "EditFlags"=dword:00000000
|
echo "EditFlags"=dword:00000000
|
||||||
echo "BrowserFlags"=dword:00000008
|
echo "BrowserFlags"=dword:00000008
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\DefaultIcon]
|
echo [HKEY_CLASSES_ROOT\qet_element_file\DefaultIcon]
|
||||||
echo @="%final_element_ico%,0"
|
echo @="%final_element_ico%,0"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_element_file\shell\open\command]
|
echo [HKEY_CLASSES_ROOT\qet_element_file\shell\open\command]
|
||||||
echo @="\"%final_qet_exe%\" \"%%1\""
|
echo @="\"%final_qet_exe%\" \"%%1\""
|
||||||
|
|
||||||
rem association de fichier *.titleblock
|
rem association de fichier *.titleblock
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\.titleblock]
|
echo [HKEY_CLASSES_ROOT\.titleblock]
|
||||||
echo @="qet_titleblock_file"
|
echo @="qet_titleblock_file"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file]
|
echo [HKEY_CLASSES_ROOT\qet_titleblock_file]
|
||||||
echo @="QET title block template"
|
echo @="QET title block template"
|
||||||
echo "EditFlags"=dword:00000000
|
echo "EditFlags"=dword:00000000
|
||||||
echo "BrowserFlags"=dword:00000008
|
echo "BrowserFlags"=dword:00000008
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\DefaultIcon]
|
echo [HKEY_CLASSES_ROOT\qet_titleblock_file\DefaultIcon]
|
||||||
echo @="%final_titleblock_ico%,0"
|
echo @="%final_titleblock_ico%,0"
|
||||||
echo [HKEY_CURRENT_USER\Software\Classes\qet_titleblock_file\shell\open\command]
|
echo [HKEY_CLASSES_ROOT\qet_titleblock_file\shell\open\command]
|
||||||
echo @="\"%final_qet_exe%\" \"%%1\""
|
echo @="\"%final_qet_exe%\" \"%%1\""
|
||||||
) > %reg_file%
|
) > %reg_file%
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
// Embeds qelectrotech.exe.manifest as the program's manifest
|
|
||||||
// (resource id 1 = CREATEPROCESS_MANIFEST_RESOURCE_ID, type 24 = RT_MANIFEST).
|
|
||||||
1 24 "@QET_MANIFEST_FILE@"
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<!-- SPDX-License-Identifier: GPL-2.0-or-later -->
|
|
||||||
<!--
|
|
||||||
Application manifest for QElectroTech.exe, embedded by CMake on Windows.
|
|
||||||
It replaces the toolchain's default manifest, so it repeats what that one
|
|
||||||
declares (supported Windows versions, run as the invoking user) and adds
|
|
||||||
longPathAware: with LongPathsEnabled set in the registry, Windows then
|
|
||||||
lets the program open files whose full path is 260 characters or more.
|
|
||||||
-->
|
|
||||||
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
|
|
||||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
||||||
<security>
|
|
||||||
<requestedPrivileges>
|
|
||||||
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
|
|
||||||
</requestedPrivileges>
|
|
||||||
</security>
|
|
||||||
</trustInfo>
|
|
||||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
|
||||||
<application>
|
|
||||||
<!-- Windows 10 and 11 -->
|
|
||||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
|
|
||||||
<!-- Windows 8.1 -->
|
|
||||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
|
|
||||||
<!-- Windows 8 -->
|
|
||||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
|
|
||||||
<!-- Windows 7 -->
|
|
||||||
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
|
|
||||||
</application>
|
|
||||||
</compatibility>
|
|
||||||
<application xmlns="urn:schemas-microsoft-com:asm.v3">
|
|
||||||
<windowsSettings>
|
|
||||||
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
|
|
||||||
</windowsSettings>
|
|
||||||
</application>
|
|
||||||
</assembly>
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
message(
|
message(
|
||||||
"_____________________________________________________________________"
|
"_____________________________________________________________________"
|
||||||
"\nCopyright 2006-2026 The QElectroTech Team"
|
"\nCopyright 2006 The QElectroTech Team"
|
||||||
"\nThis file is part of QElectroTech."
|
"\nThis file is part of QElectroTech."
|
||||||
|
|
||||||
"\n\nQElectroTech is free software: you can redistribute it and/or modify"
|
"\n\nQElectroTech is free software: you can redistribute it and/or modify"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -25,30 +25,24 @@ message("INSTALL_PREFIX " ${INSTALL_PREFIX})
|
|||||||
message("QET_BINARY_PATH " ${QET_BINARY_PATH})
|
message("QET_BINARY_PATH " ${QET_BINARY_PATH})
|
||||||
|
|
||||||
if(${QET_COMMON_COLLECTION_PATH} STRGREATER "")
|
if(${QET_COMMON_COLLECTION_PATH} STRGREATER "")
|
||||||
message("QET_COMMON_COLLECTION_PATH " ${COMPIL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
message("QET_COMMON_COLLECTION_PATH " ${INSTALL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
||||||
add_definitions(-DQET_COMMON_COLLECTION_PATH=${COMPIL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
add_definitions(-DQET_COMMON_COLLECTION_PATH=${INSTALL_PREFIX}${QET_COMMON_COLLECTION_PATH})
|
||||||
endif()
|
|
||||||
if(${QET_COMMON_COLLECTION_PATH_RELATIVE_TO_BINARY_PATH})
|
|
||||||
add_definitions(-DQET_COMMON_COLLECTION_PATH_RELATIVE_TO_BINARY_PATH)
|
|
||||||
endif()
|
endif()
|
||||||
if(${QET_COMMON_TBT_PATH} STRGREATER "")
|
if(${QET_COMMON_TBT_PATH} STRGREATER "")
|
||||||
message("QET_COMMON_TBT_PATH " ${COMPIL_PREFIX}${QET_COMMON_TBT_PATH})
|
message("QET_COMMON_TBT_PATH " ${INSTALL_PREFIX}${QET_COMMON_TBT_PATH})
|
||||||
add_definitions(-DQET_COMMON_TBT_PATH=${COMPIL_PREFIX}${QET_COMMON_TBT_PATH})
|
add_definitions(-DQET_COMMON_TBT_PATH=${INSTALL_PREFIX}${QET_COMMON_TBT_PATH})
|
||||||
endif()
|
|
||||||
if(${QET_COMMON_TBT_PATH_RELATIVE_TO_BINARY_PATH})
|
|
||||||
add_definitions(-DQET_COMMON_TBT_PATH_RELATIVE_TO_BINARY_PATH)
|
|
||||||
endif()
|
endif()
|
||||||
if(${QET_LANG_PATH_RELATIVE_TO_BINARY_PATH})
|
if(${QET_LANG_PATH_RELATIVE_TO_BINARY_PATH})
|
||||||
add_definitions(-DQET_LANG_PATH_RELATIVE_TO_BINARY_PATH)
|
add_definitions(-DQET_LANG_PATH_RELATIVE_TO_BINARY_PATH)
|
||||||
endif()
|
endif()
|
||||||
if(${QET_LANG_PATH} STRGREATER "")
|
if(${QET_LANG_PATH} STRGREATER "")
|
||||||
message("QET_LANG_PATH " ${COMPIL_PREFIX}${QET_LANG_PATH})
|
message("QET_LANG_PATH " ${INSTALL_PREFIX}${QET_LANG_PATH})
|
||||||
add_definitions(-DQET_LANG_PATH=${COMPIL_PREFIX}${QET_LANG_PATH})
|
add_definitions(-DQET_LANG_PATH=${INSTALL_PREFIX}${QET_LANG_PATH})
|
||||||
endif()
|
endif()
|
||||||
if (NOT MINGW)
|
if (NOT MINGW)
|
||||||
if(${QET_EXAMPLES_PATH} STRGREATER "")
|
if(${QET_EXAMPLES_PATH} STRGREATER "")
|
||||||
message("QET_EXAMPLES_PATH " ${COMPIL_PREFIX}${QET_EXAMPLES_PATH})
|
message("QET_EXAMPLES_PATH " ${INSTALL_PREFIX}${QET_EXAMPLES_PATH})
|
||||||
add_definitions(-DQET_EXAMPLES_PATH=${COMPIL_PREFIX}${QET_EXAMPLES_PATH})
|
add_definitions(-DQET_EXAMPLES_PATH=${INSTALL_PREFIX}${QET_EXAMPLES_PATH})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -68,9 +62,15 @@ message("PROJECT_SOURCE_DIR :" ${PROJECT_SOURCE_DIR})
|
|||||||
message("QET_DIR :" ${QET_DIR})
|
message("QET_DIR :" ${QET_DIR})
|
||||||
message("GIT_COMMIT_SHA :" ${GIT_COMMIT_SHA})
|
message("GIT_COMMIT_SHA :" ${GIT_COMMIT_SHA})
|
||||||
|
|
||||||
if(BUILD_WITH_KF)
|
if(BUILD_WITH_KF6 AND BUILD_KF6)
|
||||||
message("KF_GIT_TAG :" ${KF_GIT_TAG})
|
message("KF6_GIT_TAG :" ${KF6_GIT_TAG})
|
||||||
else()
|
endif()
|
||||||
add_definitions(-DBUILD_WITHOUT_KF)
|
if(NOT BUILD_WITH_KF6)
|
||||||
|
add_definitions(-DBUILD_WITHOUT_KF6)
|
||||||
endif()
|
endif()
|
||||||
message("QET_COMPONENTS :" ${QET_COMPONENTS})
|
message("QET_COMPONENTS :" ${QET_COMPONENTS})
|
||||||
|
message("Qt version :" ${Qt6_VERSION})
|
||||||
|
|
||||||
|
if(QMFILES_AS_RESOURCE)
|
||||||
|
add_definitions(-DQMFILES_AS_RESOURCE)
|
||||||
|
endif()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -31,24 +31,8 @@ add_definitions(-DQT_MESSAGELOGCONTEXT)
|
|||||||
# In order to do so, uncomment the following line.
|
# In order to do so, uncomment the following line.
|
||||||
#add_definitions(-DTODO_LIST)
|
#add_definitions(-DTODO_LIST)
|
||||||
|
|
||||||
# Build with KDE Frameworks.
|
# Build with KF6
|
||||||
option(BUILD_WITH_KF "Build with KDE Frameworks" ON)
|
option(BUILD_WITH_KF6 "Build with KF6" ON)
|
||||||
|
|
||||||
# Precompiled headers for the Qt umbrella headers.
|
# Use translations as a Qt resource
|
||||||
#
|
option(QMFILES_AS_RESOURCE "Use .qm files as Qt resource" ON)
|
||||||
# Off by default and intended for local development only. Building QET is
|
|
||||||
# dominated by re-parsing Qt's headers: a 214-line .cpp expands to ~198,000
|
|
||||||
# preprocessed lines, and compiling one translation unit costs ~4.1 s of which
|
|
||||||
# only ~0.35 s is optimisation (-O0 instead of -O3 saves 8%). A PCH caches the
|
|
||||||
# parsed header state and takes that ~4.1 s down to ~1.2 s.
|
|
||||||
#
|
|
||||||
# It is deliberately NOT on by default: a PCH satisfies includes that a source
|
|
||||||
# file forgot to make itself, so code written with it enabled can fail to
|
|
||||||
# compile for everyone else. Leaving it off keeps CI and contributors on the
|
|
||||||
# strict behaviour, and only developers who opt in trade that for the speed.
|
|
||||||
option(QET_ENABLE_PCH "Use precompiled headers (developer build speed; may mask missing #includes)" OFF)
|
|
||||||
|
|
||||||
# Discussion #599: 3Dconnexion SpaceMouse/SpacePilot pan/zoom support. Off by
|
|
||||||
# default -- see cmake/find_spacemouse.cmake for the backends and what happens
|
|
||||||
# when it is on but no library is found.
|
|
||||||
option(QET_ENABLE_SPACEMOUSE "Build with 3D mouse (3Dconnexion SpaceMouse) support for pan/zoom; needs libspnav or hidapi, see QET_SPACEMOUSE_BACKEND" OFF)
|
|
||||||
|
|||||||
@@ -14,91 +14,42 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
message(" - fetch_kdeaddons")
|
option(BUILD_KF6 "Build KF6 libraries, use system ones otherwise" OFF)
|
||||||
|
if(BUILD_KF6)
|
||||||
|
block(PROPAGATE KF6_GIT_TAG)
|
||||||
|
message(STATUS " - fetch_kdeaddons")
|
||||||
|
set(KDE_SKIP_TEST_SETTINGS ON)
|
||||||
|
set(KCOREADDONS_USE_QML OFF)
|
||||||
|
set(KWIDGETSADDONS_USE_QML OFF)
|
||||||
|
set(BUILD_TESTING OFF)
|
||||||
|
set(BUILD_DESIGNERPLUGIN OFF)
|
||||||
|
set(BUILD_QCH OFF)
|
||||||
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
|
|
||||||
if(BUILD_WITH_KF)
|
Include(FetchContent)
|
||||||
Include(FetchContent)
|
|
||||||
|
|
||||||
option(BUILD_KF "Build KF libraries, use system ones otherwise" YES)
|
if(NOT DEFINED KF6_GIT_TAG)
|
||||||
|
set(KF6_GIT_TAG v6.22.0)
|
||||||
if(BUILD_KF)
|
|
||||||
|
|
||||||
# v6.10.0 is a more or less random version, taken as an conservative
|
|
||||||
# approach. Pinned to the commits v6.10.0 points at, not to the tags
|
|
||||||
# themselves; see the note in fetch_pugixml.cmake. Each module lives in its
|
|
||||||
# own repository, so the same v6.10.0 release is a different commit in
|
|
||||||
# each.
|
|
||||||
#
|
|
||||||
# KDE uses annotated tags, so "git ls-remote <repo> 'refs/tags/v6.10.0*'"
|
|
||||||
# prints two hashes per module: refs/tags/v6.10.0 is the tag object (the
|
|
||||||
# tagger, the date and the tag message) and refs/tags/v6.10.0^{} is the
|
|
||||||
# commit that object points at. The hashes below are the "^{}" ones, i.e.
|
|
||||||
# the commits. Lightweight tags, such as pugixml's v1.15 and
|
|
||||||
# SingleApplication's v3.2.0, have no tag object and print only the
|
|
||||||
# commit line.
|
|
||||||
set(KF_ECM_GIT_COMMIT 7dd28cc56c339c3f8fb356f7c53c0e8f61433d81) # v6.10.0
|
|
||||||
set(KF_KCOREADDONS_GIT_COMMIT c569f974dab24b4784ad186a3db4b76b2fa36612) # v6.10.0
|
|
||||||
set(KF_KWIDGETSADDONS_GIT_COMMIT 1abbed8a280d6626c59fb197f2c4667d2b1e7445) # v6.10.0
|
|
||||||
|
|
||||||
if(DEFINED KF_GIT_TAG)
|
|
||||||
# Explicit override: -DKF_GIT_TAG=<ref> selects one ref for all three
|
|
||||||
# modules, unpinned, exactly as it did before.
|
|
||||||
set(KF_ECM_GIT_COMMIT ${KF_GIT_TAG})
|
|
||||||
set(KF_KCOREADDONS_GIT_COMMIT ${KF_GIT_TAG})
|
|
||||||
set(KF_KWIDGETSADDONS_GIT_COMMIT ${KF_GIT_TAG})
|
|
||||||
else()
|
|
||||||
# Keep KF_GIT_TAG defined: define_definitions.cmake reports it.
|
|
||||||
set(KF_GIT_TAG v6.10.0)
|
|
||||||
endif()
|
endif()
|
||||||
# using a function in order to limit the scope of the variables
|
|
||||||
# with CMake >=3.25 we could use a block()
|
|
||||||
function(qet_make_kf_available)
|
|
||||||
# Fix stop the run autotests of kcoreaddons
|
|
||||||
# see
|
|
||||||
# https://invent.kde.org/frameworks/kcoreaddons/-/blob/master/CMakeLists.txt#L98
|
|
||||||
# issue:
|
|
||||||
# CMake Error at /usr/share/ECM/modules/ECMAddTests.cmake:89 (add_executable):
|
|
||||||
# Cannot find source file:
|
|
||||||
# see
|
|
||||||
# https://qelectrotech.org/forum/viewtopic.php?pid=13929#p13929
|
|
||||||
set(KDE_SKIP_TEST_SETTINGS ON)
|
|
||||||
set(BUILD_TESTING OFF)
|
|
||||||
|
|
||||||
# QElectroTech is a plain QtWidgets application with no QML anywhere in
|
FetchContent_Declare(
|
||||||
# it; these disable optional features of the fetched KF modules that
|
kcoreaddons
|
||||||
# would otherwise pull in extra Qt6 components (e.g. Qt6Qml) we don't
|
GIT_REPOSITORY https://invent.kde.org/frameworks/kcoreaddons.git
|
||||||
# have and don't need.
|
GIT_TAG ${KF6_GIT_TAG})
|
||||||
set(BUILD_DESIGNERPLUGIN OFF)
|
FetchContent_MakeAvailable(kcoreaddons)
|
||||||
set(KCOREADDONS_USE_QML OFF)
|
|
||||||
set(BUILD_QCH OFF)
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
|
||||||
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
ecm
|
kwidgetsaddons
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/extra-cmake-modules.git
|
GIT_REPOSITORY https://invent.kde.org/frameworks/kwidgetsaddons.git
|
||||||
GIT_TAG ${KF_ECM_GIT_COMMIT})
|
GIT_TAG ${KF6_GIT_TAG})
|
||||||
FetchContent_MakeAvailable(ecm)
|
FetchContent_MakeAvailable(kwidgetsaddons)
|
||||||
|
endblock()
|
||||||
FetchContent_Declare(
|
else()
|
||||||
kcoreaddons
|
find_package(KF6CoreAddons REQUIRED)
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/kcoreaddons.git
|
find_package(KF6WidgetsAddons REQUIRED)
|
||||||
GIT_TAG ${KF_KCOREADDONS_GIT_COMMIT})
|
|
||||||
FetchContent_MakeAvailable(kcoreaddons)
|
|
||||||
|
|
||||||
FetchContent_Declare(
|
|
||||||
kwidgetsaddons
|
|
||||||
GIT_REPOSITORY https://invent.kde.org/frameworks/kwidgetsaddons.git
|
|
||||||
GIT_TAG ${KF_KWIDGETSADDONS_GIT_COMMIT})
|
|
||||||
FetchContent_MakeAvailable(kwidgetsaddons)
|
|
||||||
endfunction()
|
|
||||||
qet_make_kf_available()
|
|
||||||
else()
|
|
||||||
find_package(KF6CoreAddons REQUIRED)
|
|
||||||
find_package(KF6WidgetsAddons REQUIRED)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(KF_PRIVATE_LIBRARIES
|
|
||||||
KF6::WidgetsAddons
|
|
||||||
KF6::CoreAddons
|
|
||||||
)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(KF6_PRIVATE_LIBRARIES
|
||||||
|
KF6::CoreAddons
|
||||||
|
KF6::WidgetsAddons
|
||||||
|
)
|
||||||
|
|||||||
@@ -14,60 +14,15 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
message(" - fetch_pugixml")
|
option(BUILD_PUGIXML "Build pugixml library, use system one otherwise" OFF)
|
||||||
|
|
||||||
Include(FetchContent)
|
|
||||||
|
|
||||||
option(BUILD_PUGIXML "Build pugixml library, use system one otherwise" YES)
|
|
||||||
|
|
||||||
if(BUILD_PUGIXML)
|
if(BUILD_PUGIXML)
|
||||||
|
Include(FetchContent)
|
||||||
# Pinned to the commit v1.15 points at, not to the tag itself.
|
message(" - fetch pugixml")
|
||||||
#
|
|
||||||
# A git tag is only a named pointer to a commit, and anyone with push access
|
|
||||||
# to the upstream repository can move it (git push --force) to any other
|
|
||||||
# commit. FetchContent fetches whatever the tag points at when the build
|
|
||||||
# runs, so if a maintainer account or CI token is compromised, the attacker
|
|
||||||
# can retarget a well-known release tag to malicious code: every fresh build
|
|
||||||
# of QElectroTech then compiles it, while nothing changes in this repository
|
|
||||||
# and the tag name still looks correct. A commit hash cannot be moved, because
|
|
||||||
# it is derived from the content: different code always has a different hash.
|
|
||||||
#
|
|
||||||
# This attack has been used in the wild:
|
|
||||||
# - March 2025, tj-actions/changed-files (CVE-2025-30066): tags v1 through
|
|
||||||
# v45.0.7 were retargeted to a commit that dumped CI secrets into build
|
|
||||||
# logs, affecting more than 23,000 repositories.
|
|
||||||
# - March 2026, aquasecurity/trivy-action (CVE-2026-33634): 76 of 77
|
|
||||||
# version tags were force-pushed to a credential stealer and stayed
|
|
||||||
# malicious for about 12 hours.
|
|
||||||
# Both were GitHub Actions rather than CMake dependencies, but the mechanism
|
|
||||||
# is the same one FetchContent relies on here: resolving a git tag at build
|
|
||||||
# time.
|
|
||||||
#
|
|
||||||
# To upgrade, look up the commit the new tag points at with
|
|
||||||
# git ls-remote <repo> 'refs/tags/<tag>*', check that it is the release you
|
|
||||||
# expect, and update both the hash and the trailing tag comment.
|
|
||||||
#
|
|
||||||
# How many lines that prints depends on which of the two kinds of tag
|
|
||||||
# upstream created:
|
|
||||||
# - A lightweight tag is nothing but a ref pointing straight at the commit,
|
|
||||||
# so ls-remote prints a single line, "refs/tags/<tag>", and its hash is
|
|
||||||
# the commit to pin. pugixml tags this way, which is why the v1.15 hash
|
|
||||||
# below is what "git ls-remote ... refs/tags/v1.15" reports directly;
|
|
||||||
# SingleApplication (v3.2.0) does the same.
|
|
||||||
# - An annotated tag is a git object in its own right, carrying a tagger,
|
|
||||||
# a date, a message and optionally a GPG signature, and pointing at the
|
|
||||||
# commit. ls-remote then prints two lines: "refs/tags/<tag>" is the tag
|
|
||||||
# object and "refs/tags/<tag>^{}" is that object dereferenced, i.e. the
|
|
||||||
# commit. The KDE Frameworks modules tag this way, so for them it is the
|
|
||||||
# "^{}" hash that belongs in the pin; the other hash identifies the tag
|
|
||||||
# object itself, which is not the source revision and changes whenever
|
|
||||||
# upstream re-creates the tag, even over the very same commit.
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
pugixml
|
pugixml
|
||||||
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
GIT_REPOSITORY https://github.com/zeux/pugixml.git
|
||||||
GIT_TAG ee86beb30e4973f5feffe3ce63bfa4fbadf72f38) # v1.15
|
GIT_TAG v1.15)
|
||||||
set(PUGIXML_INSTALL OFF CACHE INTERNAL "")
|
|
||||||
FetchContent_MakeAvailable(pugixml)
|
FetchContent_MakeAvailable(pugixml)
|
||||||
else()
|
else()
|
||||||
find_package(pugixml REQUIRED)
|
find_package(pugixml REQUIRED)
|
||||||
|
|||||||
@@ -16,30 +16,13 @@
|
|||||||
|
|
||||||
message(" - fetch_singleapplication")
|
message(" - fetch_singleapplication")
|
||||||
|
|
||||||
# https://github.com/itay-grudev/SingleApplication/issues/18
|
|
||||||
#qmake
|
|
||||||
#DEFINES += QAPPLICATION_CLASS=QGuiApplication
|
|
||||||
set(QAPPLICATION_CLASS QApplication)
|
set(QAPPLICATION_CLASS QApplication)
|
||||||
|
|
||||||
Include(FetchContent)
|
Include(FetchContent)
|
||||||
|
|
||||||
if(EXISTS "${CMAKE_SOURCE_DIR}/SingleApplication/CMakeLists.txt")
|
|
||||||
# Submodule deja present dans l'arbre source (clone --recursive, tarball
|
|
||||||
# de distro deja peuple via "git submodule update", etc.) : on l'utilise
|
|
||||||
# tel quel, sans acces reseau. Necessaire pour les builds hors-ligne
|
|
||||||
# (pbuilder/sbuild avec FETCHCONTENT_FULLY_DISCONNECTED=ON, Launchpad PPA...).
|
|
||||||
set(FETCHCONTENT_SOURCE_DIR_SINGLEAPPLICATION "${CMAKE_SOURCE_DIR}/SingleApplication")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Pinned to the commit v3.2.0 points at, not to the tag itself; see the note in
|
|
||||||
# fetch_pugixml.cmake. v3.2.0 is a lightweight tag, a ref pointing straight at
|
|
||||||
# the commit, so "git ls-remote <repo> refs/tags/v3.2.0" prints that commit and
|
|
||||||
# nothing else. An annotated tag, as KDE uses in fetch_kdeaddons.cmake, would
|
|
||||||
# print the tag object under refs/tags/v3.2.0 as well, with the commit on the
|
|
||||||
# refs/tags/v3.2.0^{} line.
|
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
SingleApplication
|
SingleApplication
|
||||||
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git
|
GIT_REPOSITORY https://github.com/itay-grudev/SingleApplication.git
|
||||||
GIT_TAG aede311d28d20179216c5419b581087be2a8409f) # v3.2.0
|
GIT_TAG v3.5.4)
|
||||||
set(QT_DEFAULT_MAJOR_VERSION 6)
|
|
||||||
FetchContent_MakeAvailable(SingleApplication)
|
FetchContent_MakeAvailable(SingleApplication)
|
||||||
|
|||||||
@@ -1,95 +0,0 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
|
||||||
# This file is part of QElectroTech.
|
|
||||||
#
|
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
message(" - find_spacemouse")
|
|
||||||
|
|
||||||
# QET_ENABLE_SPACEMOUSE (cmake/developer_options.cmake) is off by default,
|
|
||||||
# so none of this runs, and the default build is entirely unaffected: no new
|
|
||||||
# dependency, no new source files, no new symbols.
|
|
||||||
#
|
|
||||||
# When it is on, QET_SPACEMOUSE_BACKEND picks how the device is read -- see
|
|
||||||
# sources/spacemouse/spacemousebackend.h for what a backend is:
|
|
||||||
# spnav Linux, through the spacenavd daemon (libspnav)
|
|
||||||
# hid any platform, directly over USB (hidapi), no 3Dconnexion driver
|
|
||||||
# auto spnav on Linux when libspnav is found, hid otherwise
|
|
||||||
# On macOS the 3DxWare backend is added to whichever of these is chosen.
|
|
||||||
# A backend whose library is not found downgrades the option to off with a
|
|
||||||
# warning, rather than failing configure for an opt-in feature.
|
|
||||||
set(QET_SPACEMOUSE_BACKEND "auto" CACHE STRING "3D mouse backend: auto, spnav or hid")
|
|
||||||
set_property(CACHE QET_SPACEMOUSE_BACKEND PROPERTY STRINGS auto spnav hid)
|
|
||||||
|
|
||||||
set(QET_SPACEMOUSE_ENABLED FALSE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_SPNAV_ENABLED FALSE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_HID_ENABLED FALSE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_CONNEXION_ENABLED FALSE)
|
|
||||||
|
|
||||||
if(QET_ENABLE_SPACEMOUSE)
|
|
||||||
find_package(PkgConfig)
|
|
||||||
|
|
||||||
set(_qet_spacemouse_try_spnav FALSE)
|
|
||||||
set(_qet_spacemouse_try_hid FALSE)
|
|
||||||
if(QET_SPACEMOUSE_BACKEND STREQUAL "spnav")
|
|
||||||
set(_qet_spacemouse_try_spnav TRUE)
|
|
||||||
elseif(QET_SPACEMOUSE_BACKEND STREQUAL "hid")
|
|
||||||
set(_qet_spacemouse_try_hid TRUE)
|
|
||||||
else()
|
|
||||||
if(UNIX AND NOT APPLE)
|
|
||||||
set(_qet_spacemouse_try_spnav TRUE)
|
|
||||||
endif()
|
|
||||||
set(_qet_spacemouse_try_hid TRUE)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# libspnav: Debian/Ubuntu's libspnav-dev ships spnav.pc.
|
|
||||||
if(_qet_spacemouse_try_spnav AND PkgConfig_FOUND)
|
|
||||||
pkg_check_modules(SPNAV IMPORTED_TARGET spnav)
|
|
||||||
if(SPNAV_FOUND)
|
|
||||||
set(QET_SPACEMOUSE_ENABLED TRUE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_SPNAV_ENABLED TRUE)
|
|
||||||
add_definitions(-DQET_SPACEMOUSE_BACKEND_SPNAV)
|
|
||||||
message("QET_ENABLE_SPACEMOUSE ON (backend: libspnav ${SPNAV_VERSION})")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# hidapi: hidapi-hidraw.pc on Linux (libhidapi-dev), hidapi.pc from
|
|
||||||
# MSYS2 (mingw-w64-ucrt-x86_64-hidapi) and Homebrew (hidapi).
|
|
||||||
if(NOT QET_SPACEMOUSE_ENABLED AND _qet_spacemouse_try_hid AND PkgConfig_FOUND)
|
|
||||||
pkg_search_module(HIDAPI IMPORTED_TARGET hidapi-hidraw hidapi)
|
|
||||||
if(HIDAPI_FOUND)
|
|
||||||
set(QET_SPACEMOUSE_ENABLED TRUE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_HID_ENABLED TRUE)
|
|
||||||
add_definitions(-DQET_SPACEMOUSE_BACKEND_HID)
|
|
||||||
message("QET_ENABLE_SPACEMOUSE ON (backend: hidapi ${HIDAPI_VERSION})")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# macOS: with 3DxWare installed the device can only be read through
|
|
||||||
# 3DxWare, so its backend comes too, whichever backend was asked for.
|
|
||||||
# It loads 3DxWare's library at run time and needs nothing to build.
|
|
||||||
if(APPLE)
|
|
||||||
set(QET_SPACEMOUSE_ENABLED TRUE)
|
|
||||||
set(QET_SPACEMOUSE_BACKEND_CONNEXION_ENABLED TRUE)
|
|
||||||
add_definitions(-DQET_SPACEMOUSE_BACKEND_CONNEXION)
|
|
||||||
message("QET_ENABLE_SPACEMOUSE ON (backend: 3DxWare when installed)")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_ENABLED)
|
|
||||||
add_definitions(-DQET_SPACEMOUSE_SUPPORT)
|
|
||||||
else()
|
|
||||||
message(WARNING "QET_ENABLE_SPACEMOUSE is ON but no library was found for the "
|
|
||||||
"'${QET_SPACEMOUSE_BACKEND}' backend (libspnav-dev for spnav, "
|
|
||||||
"hidapi for hid, via pkg-config) -- building WITHOUT 3D mouse support.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
|
||||||
# This file is part of QElectroTech.
|
|
||||||
#
|
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# QElectroTech is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
if(${CMAKE_VERSION} VERSION_LESS 3.14)
|
|
||||||
message(
|
|
||||||
"_____________________________________________________________________")
|
|
||||||
message("to update Cmake on linux:")
|
|
||||||
message("https://github.com/Kitware/CMake/")
|
|
||||||
message("linux => cmake-3.19.1-Linux-x86_64.sh")
|
|
||||||
message(" sudo ./cmake.sh --prefix=/usr/local/ --exclude-subdir")
|
|
||||||
message("windows good luck :)")
|
|
||||||
endif()
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -18,32 +18,21 @@
|
|||||||
|
|
||||||
message(" - paths_compilation_installation")
|
message(" - paths_compilation_installation")
|
||||||
|
|
||||||
include(GNUInstallDirs)
|
|
||||||
|
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
# for Linux, BSD, Solaris, Minix
|
# for Linux, BSD, Solaris, Minix
|
||||||
# The paths below are relative to the install prefix: COMPIL_PREFIX is
|
set(COMPIL_PREFIX "/usr/local/")
|
||||||
# put in front of them for the paths compiled into QET. An absolute
|
set(INSTALL_PREFIX "/usr/local/")
|
||||||
# CMAKE_INSTALL_<dir> is accepted too, made relative to the prefix here.
|
set(QET_BINARY_PATH "bin/")
|
||||||
file(RELATIVE_PATH QET_BINDIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_FULL_BINDIR}")
|
set(QET_COMMON_COLLECTION_PATH "share/qelectrotech/elements/")
|
||||||
file(RELATIVE_PATH QET_DATADIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_FULL_DATADIR}")
|
set(QET_COMMON_TBT_PATH "share/qelectrotech/titleblocks/")
|
||||||
file(RELATIVE_PATH QET_DATAROOTDIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_FULL_DATAROOTDIR}")
|
set(QET_LANG_PATH "share/qelectrotech/lang/")
|
||||||
file(RELATIVE_PATH QET_DOCDIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_FULL_DOCDIR}")
|
set(QET_EXAMPLES_PATH "share/qelectrotech/examples/")
|
||||||
file(RELATIVE_PATH QET_MANDIR "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_FULL_MANDIR}")
|
set(QET_LICENSE_PATH "doc/qelectrotech/")
|
||||||
set(COMPIL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
|
set(QET_MIME_PACKAGE_PATH "../share/mime/packages/")
|
||||||
set(INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/")
|
set(QET_DESKTOP_PATH "share/applications/")
|
||||||
set(QET_BINARY_PATH "${QET_BINDIR}/")
|
set(QET_ICONS_PATH "share/icons/hicolor/")
|
||||||
set(QET_DATA_PATH "${QET_DATADIR}/qelectrotech/")
|
set(QET_MAN_PATH "man/")
|
||||||
set(QET_COMMON_COLLECTION_PATH "${QET_DATA_PATH}elements/")
|
set(QET_APPDATA_PATH "share/appdata")
|
||||||
set(QET_COMMON_TBT_PATH "${QET_DATA_PATH}titleblocks/")
|
|
||||||
set(QET_LANG_PATH "${QET_DATA_PATH}lang/")
|
|
||||||
set(QET_EXAMPLES_PATH "${QET_DATA_PATH}examples/")
|
|
||||||
set(QET_LICENSE_PATH "${QET_DOCDIR}/")
|
|
||||||
set(QET_MIME_PACKAGE_PATH "${QET_DATAROOTDIR}/mime/packages/")
|
|
||||||
set(QET_DESKTOP_PATH "${QET_DATAROOTDIR}/applications/")
|
|
||||||
set(QET_ICONS_PATH "${QET_DATAROOTDIR}/icons/hicolor/")
|
|
||||||
set(QET_MAN_PATH "${QET_MANDIR}/")
|
|
||||||
set(QET_APPDATA_PATH "${QET_DATAROOTDIR}/appdata")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
@@ -54,9 +43,8 @@ if(APPLE)
|
|||||||
set(QET_COMMON_COLLECTION_PATH "../Resources/elements/")
|
set(QET_COMMON_COLLECTION_PATH "../Resources/elements/")
|
||||||
set(QET_COMMON_TBT_PATH "../Resources/titleblocks/")
|
set(QET_COMMON_TBT_PATH "../Resources/titleblocks/")
|
||||||
set(QET_LANG_PATH "../Resources/lang/")
|
set(QET_LANG_PATH "../Resources/lang/")
|
||||||
set(QET_DATA_PATH "share/qelectrotech/")
|
|
||||||
set(QET_EXAMPLES_PATH "share/qelectrotech/examples/")
|
set(QET_EXAMPLES_PATH "share/qelectrotech/examples/")
|
||||||
set(QET_LICENSE_PATH "share/doc/qelectrotech/")
|
set(QET_LICENSE_PATH "doc/qelectrotech/")
|
||||||
set(QET_DESKTOP_PATH "share/applications/")
|
set(QET_DESKTOP_PATH "share/applications/")
|
||||||
set(QET_ICONS_PATH "share/icons/hicolor/")
|
set(QET_ICONS_PATH "share/icons/hicolor/")
|
||||||
set(QET_MAN_PATH "man/")
|
set(QET_MAN_PATH "man/")
|
||||||
@@ -74,12 +62,7 @@ if(WIN32)
|
|||||||
# puts the .qm files (see build-aux/windows/QElectroTech.wxs and the
|
# puts the .qm files (see build-aux/windows/QElectroTech.wxs and the
|
||||||
# windows-build workflow), and what the shortcuts pass as --lang-dir.
|
# windows-build workflow), and what the shortcuts pass as --lang-dir.
|
||||||
set(QET_LANG_PATH "lang/")
|
set(QET_LANG_PATH "lang/")
|
||||||
set(QET_EXAMPLES_PATH "examples/")
|
set(QET_LICENSE_PATH "./")
|
||||||
# Where an MSVC "cmake --install" puts the data and the documents; the
|
|
||||||
# Windows packagings do not use it, they lay the files out themselves.
|
|
||||||
set(QET_DATA_PATH "share/qelectrotech/")
|
|
||||||
set(QET_LICENSE_PATH "share/doc/qelectrotech/")
|
|
||||||
set(QET_ICONS_PATH "icons/hicolor/")
|
|
||||||
# Liste des ressources Windows
|
# Liste des ressources Windows
|
||||||
#RC_FILE = qelectrotech.rc
|
#RC_FILE = qelectrotech.rc
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -16,13 +16,16 @@
|
|||||||
|
|
||||||
message(" - qet_compilation_vars")
|
message(" - qet_compilation_vars")
|
||||||
|
|
||||||
# Note: GuiPrivate is intentionally NOT in this list.
|
# Note: GuiPrivate is intentionally NOT in this list. Qt6's CMake config only
|
||||||
# Qt >= 6.7 ships it as a proper find_package component, but some distro
|
# creates the Qt::GuiPrivate target when "GuiPrivate" is explicitly requested
|
||||||
# packages (e.g. Ubuntu's qt6-base-private-dev) omit Qt6GuiPrivateConfig.cmake
|
# as a component, but Qt5 has no Qt5GuiPrivate package at all (the target is
|
||||||
# and only provide the implicit Qt6::GuiPrivate target created alongside
|
# created implicitly with Gui), so requesting it as a component breaks the
|
||||||
# Qt6::Gui. Checks are done in the main CMakeLists.txt
|
# whole Qt5 configure. It is requested separately, guarded by
|
||||||
|
# QT_VERSION_MAJOR, after the main find_package.
|
||||||
# (Needed for QPdfEngine::drawHyperlink, the PDF internal links.)
|
# (Needed for QPdfEngine::drawHyperlink, the PDF internal links.)
|
||||||
set(QET_COMPONENTS
|
set(QET_COMPONENTS
|
||||||
|
Core
|
||||||
|
Gui
|
||||||
LinguistTools
|
LinguistTools
|
||||||
PrintSupport
|
PrintSupport
|
||||||
Xml
|
Xml
|
||||||
@@ -32,13 +35,6 @@ set(QET_COMPONENTS
|
|||||||
Widgets
|
Widgets
|
||||||
Concurrent)
|
Concurrent)
|
||||||
|
|
||||||
# Note: Pdf is intentionally NOT in this list. Some Qt6 distributions
|
|
||||||
# (notably the Flatpak org.kde.Platform runtime) don't ship the QtPdf
|
|
||||||
# module at all - it lives in the qtwebengine source tree, not Qt6 core.
|
|
||||||
# Requesting it here as a REQUIRED component would fail the whole
|
|
||||||
# configure on those setups. It is probed separately, QUIET and
|
|
||||||
# non-fatal, right after the main find_package() call below.
|
|
||||||
|
|
||||||
set(QET_PRIVATE_LIBRARIES
|
set(QET_PRIVATE_LIBRARIES
|
||||||
Qt::PrintSupport
|
Qt::PrintSupport
|
||||||
Qt::Gui
|
Qt::Gui
|
||||||
@@ -51,9 +47,6 @@ set(QET_PRIVATE_LIBRARIES
|
|||||||
Qt::Concurrent
|
Qt::Concurrent
|
||||||
)
|
)
|
||||||
|
|
||||||
# Qt::Pdf is appended conditionally in CMakeLists.txt, once we know
|
|
||||||
# whether the module was actually found (see QET_HAS_QTPDF).
|
|
||||||
|
|
||||||
set(QET_RES_FILES
|
set(QET_RES_FILES
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.ui
|
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.ui
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.ui
|
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.ui
|
||||||
@@ -73,7 +66,6 @@ set(QET_RES_FILES
|
|||||||
${QET_DIR}/sources/editor/ui/terminaleditor.ui
|
${QET_DIR}/sources/editor/ui/terminaleditor.ui
|
||||||
${QET_DIR}/sources/ElementsCollection/ui/renamedialog.ui
|
${QET_DIR}/sources/ElementsCollection/ui/renamedialog.ui
|
||||||
${QET_DIR}/sources/factory/ui/addtabledialog.ui
|
${QET_DIR}/sources/factory/ui/addtabledialog.ui
|
||||||
${QET_DIR}/sources/materiallist/materialselectiondialog.ui
|
|
||||||
${QET_DIR}/sources/NameList/ui/namelistdialog.ui
|
${QET_DIR}/sources/NameList/ui/namelistdialog.ui
|
||||||
${QET_DIR}/sources/NameList/ui/namelistwidget.ui
|
${QET_DIR}/sources/NameList/ui/namelistwidget.ui
|
||||||
${QET_DIR}/sources/print/projectprintwindow.ui
|
${QET_DIR}/sources/print/projectprintwindow.ui
|
||||||
@@ -101,6 +93,7 @@ set(QET_RES_FILES
|
|||||||
${QET_DIR}/sources/ui/configsaveloaderwidget.ui
|
${QET_DIR}/sources/ui/configsaveloaderwidget.ui
|
||||||
${QET_DIR}/sources/ui/diagramcontextwidget.ui
|
${QET_DIR}/sources/ui/diagramcontextwidget.ui
|
||||||
${QET_DIR}/sources/ui/diagrameditorhandlersizewidget.ui
|
${QET_DIR}/sources/ui/diagrameditorhandlersizewidget.ui
|
||||||
|
${QET_DIR}/sources/ui/diagramselection.ui
|
||||||
${QET_DIR}/sources/ui/dialogwaiting.ui
|
${QET_DIR}/sources/ui/dialogwaiting.ui
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.ui
|
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.ui
|
||||||
${QET_DIR}/sources/ui/elementinfopartwidget.ui
|
${QET_DIR}/sources/ui/elementinfopartwidget.ui
|
||||||
@@ -125,16 +118,6 @@ set(QET_RES_FILES
|
|||||||
set(QET_SRC_FILES
|
set(QET_SRC_FILES
|
||||||
${QET_DIR}/sources/cli_export.cpp
|
${QET_DIR}/sources/cli_export.cpp
|
||||||
${QET_DIR}/sources/cli_export.h
|
${QET_DIR}/sources/cli_export.h
|
||||||
${QET_DIR}/sources/logging/crashhandler.cpp
|
|
||||||
${QET_DIR}/sources/logging/crashhandler.h
|
|
||||||
${QET_DIR}/sources/logging/eventloopwatchdog.cpp
|
|
||||||
${QET_DIR}/sources/logging/eventloopwatchdog.h
|
|
||||||
${QET_DIR}/sources/logging/logring.cpp
|
|
||||||
${QET_DIR}/sources/logging/logring.h
|
|
||||||
${QET_DIR}/sources/logging/qetlogger.cpp
|
|
||||||
${QET_DIR}/sources/logging/qetlogger.h
|
|
||||||
${QET_DIR}/sources/logging/ui/diagnosticsreportdialog.cpp
|
|
||||||
${QET_DIR}/sources/logging/ui/diagnosticsreportdialog.h
|
|
||||||
${QET_DIR}/sources/pdf_links.cpp
|
${QET_DIR}/sources/pdf_links.cpp
|
||||||
${QET_DIR}/sources/pdf_links.h
|
${QET_DIR}/sources/pdf_links.h
|
||||||
${QET_DIR}/sources/import/edz/edzarchive.cpp
|
${QET_DIR}/sources/import/edz/edzarchive.cpp
|
||||||
@@ -165,46 +148,26 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/import/edz/lzma/LzmaDec.c
|
${QET_DIR}/sources/import/edz/lzma/LzmaDec.c
|
||||||
${QET_DIR}/sources/import/edz/lzma/Ppmd7.c
|
${QET_DIR}/sources/import/edz/lzma/Ppmd7.c
|
||||||
${QET_DIR}/sources/import/edz/lzma/Ppmd7Dec.c
|
${QET_DIR}/sources/import/edz/lzma/Ppmd7Dec.c
|
||||||
${QET_DIR}/sources/container/miniz/miniz.c
|
|
||||||
${QET_DIR}/sources/container/miniz/miniz.h
|
|
||||||
${QET_DIR}/sources/container/qetcontainer.cpp
|
|
||||||
${QET_DIR}/sources/container/qetcontainerdb.cpp
|
|
||||||
${QET_DIR}/sources/container/qetcontainerdb.h
|
|
||||||
${QET_DIR}/sources/container/qetcontainer.h
|
|
||||||
${QET_DIR}/sources/container/qetzip.cpp
|
|
||||||
${QET_DIR}/sources/container/qetzip.h
|
|
||||||
${QET_DIR}/sources/container/qetzreader.cpp
|
|
||||||
${QET_DIR}/sources/container/qetzreader.h
|
|
||||||
${QET_DIR}/sources/container/qetzwriter.cpp
|
|
||||||
${QET_DIR}/sources/container/qetzwriter.h
|
|
||||||
${QET_DIR}/sources/borderproperties.cpp
|
${QET_DIR}/sources/borderproperties.cpp
|
||||||
${QET_DIR}/sources/borderproperties.h
|
${QET_DIR}/sources/borderproperties.h
|
||||||
${QET_DIR}/sources/bordertitleblock.cpp
|
${QET_DIR}/sources/bordertitleblock.cpp
|
||||||
${QET_DIR}/sources/bordertitleblock.h
|
${QET_DIR}/sources/bordertitleblock.h
|
||||||
${QET_DIR}/sources/bordercelllabels.h
|
# ${QET_DIR}/sources/colorbutton.cpp
|
||||||
${QET_DIR}/sources/cellruler.cpp
|
# ${QET_DIR}/sources/colorbutton.h
|
||||||
${QET_DIR}/sources/cellruler.h
|
# ${QET_DIR}/sources/colorcombobox.cpp
|
||||||
|
# ${QET_DIR}/sources/colorcombobox.h
|
||||||
|
# ${QET_DIR}/sources/colorcomboboxdelegate.cpp
|
||||||
|
# ${QET_DIR}/sources/colorcomboboxdelegate.h
|
||||||
${QET_DIR}/sources/conductorautonumerotation.cpp
|
${QET_DIR}/sources/conductorautonumerotation.cpp
|
||||||
${QET_DIR}/sources/conductorautonumerotation.h
|
${QET_DIR}/sources/conductorautonumerotation.h
|
||||||
${QET_DIR}/sources/conductornumexport.cpp
|
${QET_DIR}/sources/conductornumexport.cpp
|
||||||
${QET_DIR}/sources/wiringlistexport.h
|
${QET_DIR}/sources/wiringlistexport.h
|
||||||
${QET_DIR}/sources/wiringlistexport.cpp
|
${QET_DIR}/sources/wiringlistexport.cpp
|
||||||
${QET_DIR}/sources/wirehops.h
|
|
||||||
${QET_DIR}/sources/wirehops.cpp
|
|
||||||
${QET_DIR}/sources/wiringrules.h
|
|
||||||
${QET_DIR}/sources/wiringrules.cpp
|
|
||||||
${QET_DIR}/sources/conductorrouter.h
|
|
||||||
${QET_DIR}/sources/conductorrouter.cpp
|
|
||||||
${QET_DIR}/sources/ui/wiringlistdialog.h
|
|
||||||
${QET_DIR}/sources/ui/wiringlistdialog.cpp
|
|
||||||
${QET_DIR}/sources/conductornumexport.h
|
${QET_DIR}/sources/conductornumexport.h
|
||||||
${QET_DIR}/sources/bomexport.cpp
|
|
||||||
${QET_DIR}/sources/bomexport.h
|
|
||||||
${QET_DIR}/sources/conductorprofile.cpp
|
${QET_DIR}/sources/conductorprofile.cpp
|
||||||
${QET_DIR}/sources/conductorprofile.h
|
${QET_DIR}/sources/conductorprofile.h
|
||||||
${QET_DIR}/sources/conductorproperties.cpp
|
${QET_DIR}/sources/conductorproperties.cpp
|
||||||
${QET_DIR}/sources/conductorproperties.h
|
${QET_DIR}/sources/conductorproperties.h
|
||||||
${QET_DIR}/sources/conductormultiedit.h
|
|
||||||
${QET_DIR}/sources/conductorsegment.cpp
|
${QET_DIR}/sources/conductorsegment.cpp
|
||||||
${QET_DIR}/sources/conductorsegment.h
|
${QET_DIR}/sources/conductorsegment.h
|
||||||
${QET_DIR}/sources/conductorsegmentprofile.h
|
${QET_DIR}/sources/conductorsegmentprofile.h
|
||||||
@@ -212,10 +175,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/configdialog.h
|
${QET_DIR}/sources/configdialog.h
|
||||||
${QET_DIR}/sources/createdxf.cpp
|
${QET_DIR}/sources/createdxf.cpp
|
||||||
${QET_DIR}/sources/createdxf.h
|
${QET_DIR}/sources/createdxf.h
|
||||||
${QET_DIR}/sources/dxfexport.cpp
|
|
||||||
${QET_DIR}/sources/dxfexport.h
|
|
||||||
${QET_DIR}/sources/dxfpaintdevice.cpp
|
|
||||||
${QET_DIR}/sources/dxfpaintdevice.h
|
|
||||||
${QET_DIR}/sources/diagramcommands.cpp
|
${QET_DIR}/sources/diagramcommands.cpp
|
||||||
${QET_DIR}/sources/diagramcommands.h
|
${QET_DIR}/sources/diagramcommands.h
|
||||||
${QET_DIR}/sources/diagramcontent.cpp
|
${QET_DIR}/sources/diagramcontent.cpp
|
||||||
@@ -228,8 +187,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/diagramposition.h
|
${QET_DIR}/sources/diagramposition.h
|
||||||
${QET_DIR}/sources/diagramview.cpp
|
${QET_DIR}/sources/diagramview.cpp
|
||||||
${QET_DIR}/sources/diagramview.h
|
${QET_DIR}/sources/diagramview.h
|
||||||
${QET_DIR}/sources/imagedrop.cpp
|
|
||||||
${QET_DIR}/sources/imagedrop.h
|
|
||||||
${QET_DIR}/sources/elementdialog.cpp
|
${QET_DIR}/sources/elementdialog.cpp
|
||||||
${QET_DIR}/sources/elementdialog.h
|
${QET_DIR}/sources/elementdialog.h
|
||||||
${QET_DIR}/sources/elementprovider.cpp
|
${QET_DIR}/sources/elementprovider.cpp
|
||||||
@@ -256,16 +213,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/exportpropertieswidget.h
|
${QET_DIR}/sources/exportpropertieswidget.h
|
||||||
${QET_DIR}/sources/genericpanel.cpp
|
${QET_DIR}/sources/genericpanel.cpp
|
||||||
${QET_DIR}/sources/genericpanel.h
|
${QET_DIR}/sources/genericpanel.h
|
||||||
${QET_DIR}/sources/genericdevice/genericdevice.cpp
|
|
||||||
${QET_DIR}/sources/genericdevice/genericdevice.h
|
|
||||||
${QET_DIR}/sources/genericdevice/genericdevicewizard.cpp
|
|
||||||
${QET_DIR}/sources/genericdevice/genericdevicewizard.h
|
|
||||||
${QET_DIR}/sources/itemgroups.cpp
|
|
||||||
${QET_DIR}/sources/itemgroups.h
|
|
||||||
${QET_DIR}/sources/shownkinds.cpp
|
|
||||||
${QET_DIR}/sources/shownkinds.h
|
|
||||||
${QET_DIR}/sources/lastusedstyle.cpp
|
|
||||||
${QET_DIR}/sources/lastusedstyle.h
|
|
||||||
${QET_DIR}/sources/machine_info.cpp
|
${QET_DIR}/sources/machine_info.cpp
|
||||||
${QET_DIR}/sources/machine_info.h
|
${QET_DIR}/sources/machine_info.h
|
||||||
${QET_DIR}/sources/main.cpp
|
${QET_DIR}/sources/main.cpp
|
||||||
@@ -283,20 +230,12 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qet.h
|
${QET_DIR}/sources/qet.h
|
||||||
${QET_DIR}/sources/qeticons.cpp
|
${QET_DIR}/sources/qeticons.cpp
|
||||||
${QET_DIR}/sources/qeticons.h
|
${QET_DIR}/sources/qeticons.h
|
||||||
${QET_DIR}/sources/palettegraphicsview.cpp
|
|
||||||
${QET_DIR}/sources/palettegraphicsview.h
|
|
||||||
${QET_DIR}/sources/qetpalette.cpp
|
|
||||||
${QET_DIR}/sources/qetpalette.h
|
|
||||||
${QET_DIR}/sources/qetstyle.cpp
|
|
||||||
${QET_DIR}/sources/qetstyle.h
|
|
||||||
${QET_DIR}/sources/qetinformation.cpp
|
${QET_DIR}/sources/qetinformation.cpp
|
||||||
${QET_DIR}/sources/qetinformation.h
|
${QET_DIR}/sources/qetinformation.h
|
||||||
${QET_DIR}/sources/qetmainwindow.cpp
|
${QET_DIR}/sources/qetmainwindow.cpp
|
||||||
${QET_DIR}/sources/qetmainwindow.h
|
${QET_DIR}/sources/qetmainwindow.h
|
||||||
${QET_DIR}/sources/qetmessagebox.cpp
|
${QET_DIR}/sources/qetmessagebox.cpp
|
||||||
${QET_DIR}/sources/qetmessagebox.h
|
${QET_DIR}/sources/qetmessagebox.h
|
||||||
${QET_DIR}/sources/projectlock.cpp
|
|
||||||
${QET_DIR}/sources/projectlock.h
|
|
||||||
${QET_DIR}/sources/qetproject.cpp
|
${QET_DIR}/sources/qetproject.cpp
|
||||||
${QET_DIR}/sources/qetproject.h
|
${QET_DIR}/sources/qetproject.h
|
||||||
${QET_DIR}/sources/qetregexpvalidator.cpp
|
${QET_DIR}/sources/qetregexpvalidator.cpp
|
||||||
@@ -317,22 +256,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qtextorientationwidget.h
|
${QET_DIR}/sources/qtextorientationwidget.h
|
||||||
${QET_DIR}/sources/recentfiles.cpp
|
${QET_DIR}/sources/recentfiles.cpp
|
||||||
${QET_DIR}/sources/recentfiles.h
|
${QET_DIR}/sources/recentfiles.h
|
||||||
${QET_DIR}/sources/shortcutmanager.cpp
|
|
||||||
${QET_DIR}/sources/shortcutmanager.h
|
|
||||||
${QET_DIR}/sources/shortcutbarsettings.cpp
|
|
||||||
${QET_DIR}/sources/shortcutbarsettings.h
|
|
||||||
${QET_DIR}/sources/diagramtoolbarsettings.cpp
|
|
||||||
${QET_DIR}/sources/diagramtoolbarsettings.h
|
|
||||||
${QET_DIR}/sources/toolbarsettings.cpp
|
|
||||||
${QET_DIR}/sources/toolbarsettings.h
|
|
||||||
${QET_DIR}/sources/diagramcontexttoolbar.cpp
|
|
||||||
${QET_DIR}/sources/diagramcontexttoolbar.h
|
|
||||||
${QET_DIR}/sources/diagramgestureoverlay.cpp
|
|
||||||
${QET_DIR}/sources/diagramgestureoverlay.h
|
|
||||||
${QET_DIR}/sources/gesturesettings.cpp
|
|
||||||
${QET_DIR}/sources/gesturesettings.h
|
|
||||||
${QET_DIR}/sources/commandsearchpopup.cpp
|
|
||||||
${QET_DIR}/sources/commandsearchpopup.h
|
|
||||||
${QET_DIR}/sources/titleblockcell.cpp
|
${QET_DIR}/sources/titleblockcell.cpp
|
||||||
${QET_DIR}/sources/titleblockcell.h
|
${QET_DIR}/sources/titleblockcell.h
|
||||||
${QET_DIR}/sources/titleblockproperties.cpp
|
${QET_DIR}/sources/titleblockproperties.cpp
|
||||||
@@ -348,20 +271,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/autoNum/numerotationcontextcommands.h
|
${QET_DIR}/sources/autoNum/numerotationcontextcommands.h
|
||||||
${QET_DIR}/sources/autoNum/numerotationcontext.cpp
|
${QET_DIR}/sources/autoNum/numerotationcontext.cpp
|
||||||
${QET_DIR}/sources/autoNum/numerotationcontext.h
|
${QET_DIR}/sources/autoNum/numerotationcontext.h
|
||||||
${QET_DIR}/sources/autoNum/renumberelementscommand.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/renumberelementscommand.h
|
|
||||||
${QET_DIR}/sources/autoNum/autonumschemecommand.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/autonumschemecommand.h
|
|
||||||
${QET_DIR}/sources/autoNum/elementautonumschemecommand.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/elementautonumschemecommand.h
|
|
||||||
${QET_DIR}/sources/autoNum/ui/counterwarning.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/ui/counterwarning.h
|
|
||||||
${QET_DIR}/sources/autoNum/ui/pastenumberingimport.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/ui/pastenumberingimport.h
|
|
||||||
${QET_DIR}/sources/autoNum/ui/renumberpreviewdialog.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/ui/renumberpreviewdialog.h
|
|
||||||
${QET_DIR}/sources/undocommand/freezeelementlabelcommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/freezeelementlabelcommand.h
|
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.cpp
|
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.cpp
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.h
|
${QET_DIR}/sources/autoNum/ui/autonumberingdockwidget.h
|
||||||
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.cpp
|
${QET_DIR}/sources/autoNum/ui/autonumberingmanagementw.cpp
|
||||||
@@ -372,47 +281,29 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/autoNum/ui/formulaautonumberingw.h
|
${QET_DIR}/sources/autoNum/ui/formulaautonumberingw.h
|
||||||
${QET_DIR}/sources/autoNum/ui/numparteditorw.cpp
|
${QET_DIR}/sources/autoNum/ui/numparteditorw.cpp
|
||||||
${QET_DIR}/sources/autoNum/ui/numparteditorw.h
|
${QET_DIR}/sources/autoNum/ui/numparteditorw.h
|
||||||
${QET_DIR}/sources/autoNum/ui/renumberelementsdialog.cpp
|
|
||||||
${QET_DIR}/sources/autoNum/ui/renumberelementsdialog.h
|
|
||||||
${QET_DIR}/sources/autoNum/ui/selectautonumw.cpp
|
${QET_DIR}/sources/autoNum/ui/selectautonumw.cpp
|
||||||
${QET_DIR}/sources/autoNum/ui/selectautonumw.h
|
${QET_DIR}/sources/autoNum/ui/selectautonumw.h
|
||||||
|
|
||||||
${QET_DIR}/sources/dataBase/legacyelementtypes.h
|
|
||||||
${QET_DIR}/sources/dataBase/projectdatabase.cpp
|
${QET_DIR}/sources/dataBase/projectdatabase.cpp
|
||||||
${QET_DIR}/sources/dataBase/projectdatabase.h
|
${QET_DIR}/sources/dataBase/projectdatabase.h
|
||||||
${QET_DIR}/sources/dataBase/sqlreadonly.cpp
|
|
||||||
${QET_DIR}/sources/dataBase/sqlreadonly.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/dataBase/ui/elementquerywidget.cpp
|
${QET_DIR}/sources/dataBase/ui/elementquerywidget.cpp
|
||||||
${QET_DIR}/sources/dataBase/ui/elementquerywidget.h
|
${QET_DIR}/sources/dataBase/ui/elementquerywidget.h
|
||||||
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.cpp
|
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.cpp
|
||||||
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.h
|
${QET_DIR}/sources/dataBase/ui/summaryquerywidget.h
|
||||||
|
|
||||||
${QET_DIR}/sources/autobreakconductor.cpp
|
|
||||||
${QET_DIR}/sources/autobreakconductor.h
|
|
||||||
${QET_DIR}/sources/symboltextplacement.cpp
|
|
||||||
${QET_DIR}/sources/symboltextplacement.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddelement.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddelement.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddelement.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddelement.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddimage.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddimage.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddimage.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddimage.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddshape.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddshape.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddshape.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddshape.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventfillet.cpp
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventfillet.h
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpath.cpp
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpath.h
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddcable.cpp
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddcable.h
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddtext.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddtext.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddtext.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddtext.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventinterface.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventinterface.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventinterface.h
|
${QET_DIR}/sources/diagramevent/diagrameventinterface.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.cpp
|
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.cpp
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.h
|
${QET_DIR}/sources/diagramevent/diagrameventaddmacro.h
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpaste.cpp
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpaste.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/dvevent/dveventinterface.cpp
|
${QET_DIR}/sources/dvevent/dveventinterface.cpp
|
||||||
${QET_DIR}/sources/dvevent/dveventinterface.h
|
${QET_DIR}/sources/dvevent/dveventinterface.h
|
||||||
@@ -494,8 +385,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/editor/ui/polygoneditor.h
|
${QET_DIR}/sources/editor/ui/polygoneditor.h
|
||||||
${QET_DIR}/sources/editor/ui/rectangleeditor.cpp
|
${QET_DIR}/sources/editor/ui/rectangleeditor.cpp
|
||||||
${QET_DIR}/sources/editor/ui/rectangleeditor.h
|
${QET_DIR}/sources/editor/ui/rectangleeditor.h
|
||||||
${QET_DIR}/sources/editor/ui/scaleelementdialog.cpp
|
|
||||||
${QET_DIR}/sources/editor/ui/scaleelementdialog.h
|
|
||||||
${QET_DIR}/sources/editor/ui/terminaleditor.cpp
|
${QET_DIR}/sources/editor/ui/terminaleditor.cpp
|
||||||
${QET_DIR}/sources/editor/ui/terminaleditor.h
|
${QET_DIR}/sources/editor/ui/terminaleditor.h
|
||||||
${QET_DIR}/sources/editor/ui/texteditor.cpp
|
${QET_DIR}/sources/editor/ui/texteditor.cpp
|
||||||
@@ -516,12 +405,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionhandler.h
|
${QET_DIR}/sources/ElementsCollection/elementcollectionhandler.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.cpp
|
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.h
|
${QET_DIR}/sources/ElementsCollection/elementcollectionitem.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementpreviewdelegate.cpp
|
|
||||||
${QET_DIR}/sources/ElementsCollection/elementpreviewdelegate.h
|
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.cpp
|
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.h
|
${QET_DIR}/sources/ElementsCollection/elementscollectionmodel.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementpickerpopup.cpp
|
|
||||||
${QET_DIR}/sources/ElementsCollection/elementpickerpopup.h
|
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.cpp
|
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.h
|
${QET_DIR}/sources/ElementsCollection/elementscollectionwidget.h
|
||||||
${QET_DIR}/sources/ElementsCollection/elementslocation.cpp
|
${QET_DIR}/sources/ElementsCollection/elementslocation.cpp
|
||||||
@@ -530,10 +415,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ElementsCollection/elementstreeview.h
|
${QET_DIR}/sources/ElementsCollection/elementstreeview.h
|
||||||
${QET_DIR}/sources/ElementsCollection/fileelementcollectionitem.cpp
|
${QET_DIR}/sources/ElementsCollection/fileelementcollectionitem.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/fileelementcollectionitem.h
|
${QET_DIR}/sources/ElementsCollection/fileelementcollectionitem.h
|
||||||
${QET_DIR}/sources/ElementsCollection/qetlabelsfile.cpp
|
|
||||||
${QET_DIR}/sources/ElementsCollection/qetlabelsfile.h
|
|
||||||
${QET_DIR}/sources/ElementsCollection/terminaluuids.cpp
|
|
||||||
${QET_DIR}/sources/ElementsCollection/terminaluuids.h
|
|
||||||
${QET_DIR}/sources/ElementsCollection/xmlelementcollection.cpp
|
${QET_DIR}/sources/ElementsCollection/xmlelementcollection.cpp
|
||||||
${QET_DIR}/sources/ElementsCollection/xmlelementcollection.h
|
${QET_DIR}/sources/ElementsCollection/xmlelementcollection.h
|
||||||
${QET_DIR}/sources/ElementsCollection/xmlprojectelementcollectionitem.cpp
|
${QET_DIR}/sources/ElementsCollection/xmlprojectelementcollectionitem.cpp
|
||||||
@@ -570,8 +451,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/project/projectusagetracker.cpp
|
${QET_DIR}/sources/project/projectusagetracker.cpp
|
||||||
${QET_DIR}/sources/project/projectusagetracker.h
|
${QET_DIR}/sources/project/projectusagetracker.h
|
||||||
|
|
||||||
${QET_DIR}/sources/properties/deviceinformation.cpp
|
|
||||||
${QET_DIR}/sources/properties/deviceinformation.h
|
|
||||||
${QET_DIR}/sources/properties/elementdata.cpp
|
${QET_DIR}/sources/properties/elementdata.cpp
|
||||||
${QET_DIR}/sources/properties/elementdata.h
|
${QET_DIR}/sources/properties/elementdata.h
|
||||||
${QET_DIR}/sources/properties/propertiesinterface.cpp
|
${QET_DIR}/sources/properties/propertiesinterface.cpp
|
||||||
@@ -599,7 +478,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qetgraphicsitem/crossrefitem.h
|
${QET_DIR}/sources/qetgraphicsitem/crossrefitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/diagramimageitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/diagramimageitem.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/diagramimageitem.h
|
${QET_DIR}/sources/qetgraphicsitem/diagramimageitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/cropgeometry.h
|
|
||||||
${QET_DIR}/sources/qetgraphicsitem/diagramtextitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/diagramtextitem.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/diagramtextitem.h
|
${QET_DIR}/sources/qetgraphicsitem/diagramtextitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/dynamicelementtextitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/dynamicelementtextitem.cpp
|
||||||
@@ -616,8 +494,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/qetgraphicsitem/qetgraphicsitem.h
|
${QET_DIR}/sources/qetgraphicsitem/qetgraphicsitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.cpp
|
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.h
|
${QET_DIR}/sources/qetgraphicsitem/qetshapeitem.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/shapetransform.cpp
|
|
||||||
${QET_DIR}/sources/qetgraphicsitem/shapetransform.h
|
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.cpp
|
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.cpp
|
||||||
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.h
|
${QET_DIR}/sources/qetgraphicsitem/qgraphicsitemutility.h
|
||||||
${QET_DIR}/sources/qetgraphicsitem/reportelement.cpp
|
${QET_DIR}/sources/qetgraphicsitem/reportelement.cpp
|
||||||
@@ -647,8 +523,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h
|
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandleritem.h
|
||||||
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandlerutility.cpp
|
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandlerutility.cpp
|
||||||
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandlerutility.h
|
${QET_DIR}/sources/QetGraphicsItemModeler/qetgraphicshandlerutility.h
|
||||||
${QET_DIR}/sources/QetGraphicsItemModeler/textresizehandles.cpp
|
|
||||||
${QET_DIR}/sources/QetGraphicsItemModeler/textresizehandles.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/QPropertyUndoCommand/qpropertyundocommand.cpp
|
${QET_DIR}/sources/QPropertyUndoCommand/qpropertyundocommand.cpp
|
||||||
${QET_DIR}/sources/QPropertyUndoCommand/qpropertyundocommand.h
|
${QET_DIR}/sources/QPropertyUndoCommand/qpropertyundocommand.h
|
||||||
@@ -658,6 +532,7 @@ set(QET_SRC_FILES
|
|||||||
|
|
||||||
${QET_DIR}/sources/richtext/richtexteditor.cpp
|
${QET_DIR}/sources/richtext/richtexteditor.cpp
|
||||||
${QET_DIR}/sources/richtext/richtexteditor_p.h
|
${QET_DIR}/sources/richtext/richtexteditor_p.h
|
||||||
|
${QET_DIR}/sources/richtext/ui_addlinkdialog.h
|
||||||
|
|
||||||
${QET_DIR}/sources/SearchAndReplace/searchandreplaceworker.cpp
|
${QET_DIR}/sources/SearchAndReplace/searchandreplaceworker.cpp
|
||||||
${QET_DIR}/sources/SearchAndReplace/searchandreplaceworker.h
|
${QET_DIR}/sources/SearchAndReplace/searchandreplaceworker.h
|
||||||
@@ -675,6 +550,9 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/svg/qetsvg.cpp
|
${QET_DIR}/sources/svg/qetsvg.cpp
|
||||||
${QET_DIR}/sources/svg/qetsvg.h
|
${QET_DIR}/sources/svg/qetsvg.h
|
||||||
|
|
||||||
|
${QET_DIR}/sources/svg/qetsvg.cpp
|
||||||
|
${QET_DIR}/sources/svg/qetsvg.h
|
||||||
|
|
||||||
${QET_DIR}/sources/titleblock/dimension.cpp
|
${QET_DIR}/sources/titleblock/dimension.cpp
|
||||||
${QET_DIR}/sources/titleblock/dimension.h
|
${QET_DIR}/sources/titleblock/dimension.h
|
||||||
${QET_DIR}/sources/titleblock/dimensionwidget.cpp
|
${QET_DIR}/sources/titleblock/dimensionwidget.cpp
|
||||||
@@ -717,13 +595,10 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/TerminalStrip/physicalterminal.h
|
${QET_DIR}/sources/TerminalStrip/physicalterminal.h
|
||||||
${QET_DIR}/sources/TerminalStrip/realterminal.cpp
|
${QET_DIR}/sources/TerminalStrip/realterminal.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/realterminal.h
|
${QET_DIR}/sources/TerminalStrip/realterminal.h
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalcatalog.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripbridge.cpp
|
${QET_DIR}/sources/TerminalStrip/terminalstripbridge.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripbridge.h
|
${QET_DIR}/sources/TerminalStrip/terminalstripbridge.h
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstrip.cpp
|
${QET_DIR}/sources/TerminalStrip/terminalstrip.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstrip.h
|
${QET_DIR}/sources/TerminalStrip/terminalstrip.h
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripautoimport.cpp
|
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripautoimport.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripdata.cpp
|
${QET_DIR}/sources/TerminalStrip/terminalstripdata.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/terminalstripdata.h
|
${QET_DIR}/sources/TerminalStrip/terminalstripdata.h
|
||||||
${QET_DIR}/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp
|
${QET_DIR}/sources/TerminalStrip/ui/addterminalstripitemdialog.cpp
|
||||||
@@ -768,12 +643,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripitem.h
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripitem.h
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/trueterminalstrip.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/trueterminalstrip.h
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/realisticterminalstripdrawer.cpp
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/realisticterminalstripdrawer.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawerhelpers.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/realisticterminalstripdrawer.cpp
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/realisticterminalstripdrawer.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawerhelpers.h
|
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.cpp
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/terminalstripdrawer.h
|
||||||
${QET_DIR}/sources/TerminalStrip/GraphicsItem/properties/terminalstriplayoutpattern.cpp
|
${QET_DIR}/sources/TerminalStrip/GraphicsItem/properties/terminalstriplayoutpattern.cpp
|
||||||
@@ -783,10 +652,6 @@ set(QET_SRC_FILES
|
|||||||
|
|
||||||
${QET_DIR}/sources/ui/aboutqetdialog.cpp
|
${QET_DIR}/sources/ui/aboutqetdialog.cpp
|
||||||
${QET_DIR}/sources/ui/aboutqetdialog.h
|
${QET_DIR}/sources/ui/aboutqetdialog.h
|
||||||
${QET_DIR}/sources/ui/aiassistantdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/aiassistantdialog.h
|
|
||||||
${QET_DIR}/sources/ui/aiassistantsetup.cpp
|
|
||||||
${QET_DIR}/sources/ui/aiassistantsetup.h
|
|
||||||
${QET_DIR}/sources/ui/abstractelementpropertieseditorwidget.cpp
|
${QET_DIR}/sources/ui/abstractelementpropertieseditorwidget.cpp
|
||||||
${QET_DIR}/sources/ui/abstractelementpropertieseditorwidget.h
|
${QET_DIR}/sources/ui/abstractelementpropertieseditorwidget.h
|
||||||
${QET_DIR}/sources/ui/alignmenttextdialog.cpp
|
${QET_DIR}/sources/ui/alignmenttextdialog.cpp
|
||||||
@@ -797,16 +662,10 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/borderpropertieswidget.h
|
${QET_DIR}/sources/ui/borderpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/compositetexteditdialog.cpp
|
${QET_DIR}/sources/ui/compositetexteditdialog.cpp
|
||||||
${QET_DIR}/sources/ui/compositetexteditdialog.h
|
${QET_DIR}/sources/ui/compositetexteditdialog.h
|
||||||
${QET_DIR}/sources/ui/conductorpropertieseditorwidget.cpp
|
|
||||||
${QET_DIR}/sources/ui/conductorpropertieseditorwidget.h
|
|
||||||
${QET_DIR}/sources/ui/contactgroupselectiondialog.cpp
|
${QET_DIR}/sources/ui/contactgroupselectiondialog.cpp
|
||||||
${QET_DIR}/sources/ui/contactgroupselectiondialog.h
|
${QET_DIR}/sources/ui/contactgroupselectiondialog.h
|
||||||
${QET_DIR}/sources/ui/conductorpropertiesdialog.cpp
|
${QET_DIR}/sources/ui/conductorpropertiesdialog.cpp
|
||||||
${QET_DIR}/sources/ui/conductorpropertiesdialog.h
|
${QET_DIR}/sources/ui/conductorpropertiesdialog.h
|
||||||
${QET_DIR}/sources/ui/conductorcolortoolbutton.cpp
|
|
||||||
${QET_DIR}/sources/ui/conductorcolortoolbutton.h
|
|
||||||
${QET_DIR}/sources/ui/diagrambgcolorbutton.cpp
|
|
||||||
${QET_DIR}/sources/ui/diagrambgcolorbutton.h
|
|
||||||
${QET_DIR}/sources/ui/conductorpropertieswidget.cpp
|
${QET_DIR}/sources/ui/conductorpropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/conductorpropertieswidget.h
|
${QET_DIR}/sources/ui/conductorpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/configsaveloaderwidget.cpp
|
${QET_DIR}/sources/ui/configsaveloaderwidget.cpp
|
||||||
@@ -819,48 +678,32 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/diagrampropertiesdialog.h
|
${QET_DIR}/sources/ui/diagrampropertiesdialog.h
|
||||||
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.cpp
|
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.cpp
|
||||||
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.h
|
${QET_DIR}/sources/ui/diagrampropertieseditordockwidget.h
|
||||||
|
${QET_DIR}/sources/ui/diagramselection.cpp
|
||||||
|
${QET_DIR}/sources/ui/diagramselection.h
|
||||||
${QET_DIR}/sources/ui/backupdialog.cpp
|
${QET_DIR}/sources/ui/backupdialog.cpp
|
||||||
${QET_DIR}/sources/ui/backupdialog.h
|
${QET_DIR}/sources/ui/backupdialog.h
|
||||||
${QET_DIR}/sources/ui/backuprestoredialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/backuprestoredialog.h
|
|
||||||
${QET_DIR}/sources/ui/dialogwaiting.cpp
|
${QET_DIR}/sources/ui/dialogwaiting.cpp
|
||||||
${QET_DIR}/sources/ui/dialogwaiting.h
|
${QET_DIR}/sources/ui/dialogwaiting.h
|
||||||
${QET_DIR}/sources/ui/duplicateoffsetdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/duplicateoffsetdialog.h
|
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.cpp
|
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.cpp
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.h
|
${QET_DIR}/sources/ui/dynamicelementtextitemeditor.h
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextmodel.cpp
|
${QET_DIR}/sources/ui/dynamicelementtextmodel.cpp
|
||||||
${QET_DIR}/sources/ui/dynamicelementtextmodel.h
|
${QET_DIR}/sources/ui/dynamicelementtextmodel.h
|
||||||
${QET_DIR}/sources/ui/customelementinfopartwidget.cpp
|
|
||||||
${QET_DIR}/sources/ui/customelementinfopartwidget.h
|
|
||||||
${QET_DIR}/sources/ui/elementinfopartwidget.cpp
|
${QET_DIR}/sources/ui/elementinfopartwidget.cpp
|
||||||
${QET_DIR}/sources/ui/elementinfopartwidget.h
|
${QET_DIR}/sources/ui/elementinfopartwidget.h
|
||||||
${QET_DIR}/sources/ui/elementinfowidget.cpp
|
${QET_DIR}/sources/ui/elementinfowidget.cpp
|
||||||
${QET_DIR}/sources/ui/elementinfowidget.h
|
${QET_DIR}/sources/ui/elementinfowidget.h
|
||||||
${QET_DIR}/sources/ui/multielementinfowidget.cpp
|
|
||||||
${QET_DIR}/sources/ui/multielementinfowidget.h
|
|
||||||
${QET_DIR}/sources/ui/terminalnumberingdialog.cpp
|
${QET_DIR}/sources/ui/terminalnumberingdialog.cpp
|
||||||
${QET_DIR}/sources/ui/terminalnumberingdialog.h
|
${QET_DIR}/sources/ui/terminalnumberingdialog.h
|
||||||
${QET_DIR}/sources/ui/cablenumberingdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/cablenumberingdialog.h
|
|
||||||
${QET_DIR}/sources/ui/elementpropertieswidget.cpp
|
${QET_DIR}/sources/ui/elementpropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/elementpropertieswidget.h
|
${QET_DIR}/sources/ui/elementpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/formulaassistantdialog.cpp
|
${QET_DIR}/sources/ui/formulaassistantdialog.cpp
|
||||||
${QET_DIR}/sources/ui/formulaassistantdialog.h
|
${QET_DIR}/sources/ui/formulaassistantdialog.h
|
||||||
${QET_DIR}/sources/ui/imagecropdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/imagecropdialog.h
|
|
||||||
${QET_DIR}/sources/ui/imagepropertieswidget.cpp
|
${QET_DIR}/sources/ui/imagepropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/imagepropertieswidget.h
|
${QET_DIR}/sources/ui/imagepropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/imagetransparentcolordialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/imagetransparentcolordialog.h
|
|
||||||
${QET_DIR}/sources/ui/importelementdialog.cpp
|
${QET_DIR}/sources/ui/importelementdialog.cpp
|
||||||
${QET_DIR}/sources/ui/importelementdialog.h
|
${QET_DIR}/sources/ui/importelementdialog.h
|
||||||
${QET_DIR}/sources/ui/importelementtextpatterndialog.cpp
|
${QET_DIR}/sources/ui/importelementtextpatterndialog.cpp
|
||||||
${QET_DIR}/sources/ui/importelementtextpatterndialog.h
|
${QET_DIR}/sources/ui/importelementtextpatterndialog.h
|
||||||
${QET_DIR}/sources/ui/jumptoelementdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/jumptoelementdialog.h
|
|
||||||
${QET_DIR}/sources/ui/wiringruleswarning.cpp
|
|
||||||
${QET_DIR}/sources/ui/wiringruleswarning.h
|
|
||||||
${QET_DIR}/sources/ui/inditextpropertieswidget.cpp
|
${QET_DIR}/sources/ui/inditextpropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/inditextpropertieswidget.h
|
${QET_DIR}/sources/ui/inditextpropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/linksingleelementwidget.cpp
|
${QET_DIR}/sources/ui/linksingleelementwidget.cpp
|
||||||
@@ -875,8 +718,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/multipastedialog.h
|
${QET_DIR}/sources/ui/multipastedialog.h
|
||||||
${QET_DIR}/sources/ui/potentialselectordialog.cpp
|
${QET_DIR}/sources/ui/potentialselectordialog.cpp
|
||||||
${QET_DIR}/sources/ui/potentialselectordialog.h
|
${QET_DIR}/sources/ui/potentialselectordialog.h
|
||||||
${QET_DIR}/sources/ui/prefixconfigurationdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/prefixconfigurationdialog.h
|
|
||||||
${QET_DIR}/sources/ui/projectpropertiesdialog.cpp
|
${QET_DIR}/sources/ui/projectpropertiesdialog.cpp
|
||||||
${QET_DIR}/sources/ui/projectpropertiesdialog.h
|
${QET_DIR}/sources/ui/projectpropertiesdialog.h
|
||||||
${QET_DIR}/sources/ui/reportpropertiewidget.cpp
|
${QET_DIR}/sources/ui/reportpropertiewidget.cpp
|
||||||
@@ -898,23 +739,9 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/ui/configpage/projectconfigpages.h
|
${QET_DIR}/sources/ui/configpage/projectconfigpages.h
|
||||||
${QET_DIR}/sources/ui/configpage/guidespropertieswidget.cpp
|
${QET_DIR}/sources/ui/configpage/guidespropertieswidget.cpp
|
||||||
${QET_DIR}/sources/ui/configpage/guidespropertieswidget.h
|
${QET_DIR}/sources/ui/configpage/guidespropertieswidget.h
|
||||||
${QET_DIR}/sources/ui/configpage/shortcutsconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/shortcutsconfigpage.h
|
|
||||||
${QET_DIR}/sources/ui/configpage/shortcutbarconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/shortcutbarconfigpage.h
|
|
||||||
${QET_DIR}/sources/ui/customizedialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/customizedialog.h
|
|
||||||
${QET_DIR}/sources/ui/configpage/toolbarcommandsconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/toolbarcommandsconfigpage.h
|
|
||||||
${QET_DIR}/sources/ui/configpage/toolbarsconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/toolbarsconfigpage.h
|
|
||||||
${QET_DIR}/sources/ui/configpage/gesturesconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/gesturesconfigpage.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/undocommand/addelementtextcommand.cpp
|
${QET_DIR}/sources/undocommand/addelementtextcommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/addelementtextcommand.h
|
${QET_DIR}/sources/undocommand/addelementtextcommand.h
|
||||||
${QET_DIR}/sources/undocommand/adddiagramcommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/adddiagramcommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/addgraphicsobjectcommand.cpp
|
${QET_DIR}/sources/undocommand/addgraphicsobjectcommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/addgraphicsobjectcommand.h
|
${QET_DIR}/sources/undocommand/addgraphicsobjectcommand.h
|
||||||
${QET_DIR}/sources/undocommand/changeelementdatacommand.cpp
|
${QET_DIR}/sources/undocommand/changeelementdatacommand.cpp
|
||||||
@@ -929,22 +756,8 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/undocommand/itemmodelcommand.h
|
${QET_DIR}/sources/undocommand/itemmodelcommand.h
|
||||||
${QET_DIR}/sources/undocommand/linkelementcommand.cpp
|
${QET_DIR}/sources/undocommand/linkelementcommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/linkelementcommand.h
|
${QET_DIR}/sources/undocommand/linkelementcommand.h
|
||||||
${QET_DIR}/sources/undocommand/movediagramcommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/movediagramcommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/removediagramcommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/removediagramcommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/setautonumcontextcommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/setautonumcontextcommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/groupitemscommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/groupitemscommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/alignselectioncommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/alignselectioncommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/mirrorselectioncommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/mirrorselectioncommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/rotateselectioncommand.cpp
|
${QET_DIR}/sources/undocommand/rotateselectioncommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/rotateselectioncommand.h
|
${QET_DIR}/sources/undocommand/rotateselectioncommand.h
|
||||||
${QET_DIR}/sources/undocommand/promoteshapecommand.cpp
|
|
||||||
${QET_DIR}/sources/undocommand/promoteshapecommand.h
|
|
||||||
${QET_DIR}/sources/undocommand/rotatetextscommand.cpp
|
${QET_DIR}/sources/undocommand/rotatetextscommand.cpp
|
||||||
${QET_DIR}/sources/undocommand/rotatetextscommand.h
|
${QET_DIR}/sources/undocommand/rotatetextscommand.h
|
||||||
${QET_DIR}/sources/undocommand/movegraphicsitemcommand.cpp
|
${QET_DIR}/sources/undocommand/movegraphicsitemcommand.cpp
|
||||||
@@ -952,62 +765,12 @@ set(QET_SRC_FILES
|
|||||||
|
|
||||||
${QET_DIR}/sources/utils/conductorcreator.cpp
|
${QET_DIR}/sources/utils/conductorcreator.cpp
|
||||||
${QET_DIR}/sources/utils/conductorcreator.h
|
${QET_DIR}/sources/utils/conductorcreator.h
|
||||||
${QET_DIR}/sources/utils/colordialogdoubleclick.cpp
|
|
||||||
${QET_DIR}/sources/utils/colordialogdoubleclick.h
|
|
||||||
${QET_DIR}/sources/utils/macosxopenevent.cpp
|
${QET_DIR}/sources/utils/macosxopenevent.cpp
|
||||||
${QET_DIR}/sources/utils/macosxopenevent.h
|
${QET_DIR}/sources/utils/macosxopenevent.h
|
||||||
${QET_DIR}/sources/utils/qetsettings.cpp
|
${QET_DIR}/sources/utils/qetsettings.cpp
|
||||||
${QET_DIR}/sources/utils/qetsettings.h
|
${QET_DIR}/sources/utils/qetsettings.h
|
||||||
${QET_DIR}/sources/utils/qetutils.cpp
|
${QET_DIR}/sources/utils/qetutils.cpp
|
||||||
${QET_DIR}/sources/utils/previousversions.cpp
|
|
||||||
${QET_DIR}/sources/utils/previousversions.h
|
|
||||||
${QET_DIR}/sources/utils/qetutils.h
|
${QET_DIR}/sources/utils/qetutils.h
|
||||||
${QET_DIR}/sources/utils/syncfolder.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/materiallist/materialentrydialog.cpp
|
|
||||||
${QET_DIR}/sources/materiallist/materialentrydialog.h
|
|
||||||
${QET_DIR}/sources/materiallist/materiallist.cpp
|
|
||||||
${QET_DIR}/sources/materiallist/materiallist.h
|
|
||||||
${QET_DIR}/sources/materiallist/materialselectiondialog.cpp
|
|
||||||
${QET_DIR}/sources/materiallist/materialselectiondialog.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/cablelist/cabletypelist.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cabletypelist.h
|
|
||||||
${QET_DIR}/sources/cablelist/cableexportdialog.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cableexportdialog.h
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistmodel.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistmodel.h
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistmodelpropertieswidget.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistmodelpropertieswidget.h
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistrows.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cablelistrows.h
|
|
||||||
${QET_DIR}/sources/cablelist/cablequerywidget.cpp
|
|
||||||
${QET_DIR}/sources/cablelist/cablequerywidget.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/cable/addcablecommand.cpp
|
|
||||||
${QET_DIR}/sources/cable/addcablecommand.h
|
|
||||||
${QET_DIR}/sources/cable/cable.cpp
|
|
||||||
${QET_DIR}/sources/cable/cable.h
|
|
||||||
${QET_DIR}/sources/cable/cablecopy.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablecopy.h
|
|
||||||
${QET_DIR}/sources/cable/cablecreatedialog.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablecreatedialog.h
|
|
||||||
${QET_DIR}/sources/cable/cablemanager.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablemanager.h
|
|
||||||
${QET_DIR}/sources/cable/cablepart.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablepart.h
|
|
||||||
${QET_DIR}/sources/cable/cablepropertiesdialog.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablepropertiesdialog.h
|
|
||||||
${QET_DIR}/sources/cable/cablepropertieseditorwidget.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablepropertieseditorwidget.h
|
|
||||||
${QET_DIR}/sources/cable/cablepropertieswidget.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablepropertieswidget.h
|
|
||||||
${QET_DIR}/sources/cable/cablerenumber.cpp
|
|
||||||
${QET_DIR}/sources/cable/cablerenumber.h
|
|
||||||
${QET_DIR}/sources/cable/cabletextformatdialog.cpp
|
|
||||||
${QET_DIR}/sources/cable/cabletextformatdialog.h
|
|
||||||
${QET_DIR}/sources/cable/editcablecommand.cpp
|
|
||||||
${QET_DIR}/sources/cable/editcablecommand.h
|
|
||||||
|
|
||||||
${QET_DIR}/sources/xml/terminalstripitemxml.cpp
|
${QET_DIR}/sources/xml/terminalstripitemxml.cpp
|
||||||
${QET_DIR}/sources/xml/terminalstripitemxml.h
|
${QET_DIR}/sources/xml/terminalstripitemxml.h
|
||||||
@@ -1015,86 +778,6 @@ set(QET_SRC_FILES
|
|||||||
${QET_DIR}/sources/xml/terminalstriplayoutpatternxml.h
|
${QET_DIR}/sources/xml/terminalstriplayoutpatternxml.h
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILD_WITH_KF)
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/ui/nokde/kautosavefile.cpp
|
|
||||||
${QET_DIR}/sources/ui/nokde/kautosavefile.h
|
|
||||||
${QET_DIR}/sources/ui/nokde/kcolorbutton.cpp
|
|
||||||
${QET_DIR}/sources/ui/nokde/kcolorbutton.h
|
|
||||||
${QET_DIR}/sources/ui/nokde/kcolorcombo.cpp
|
|
||||||
${QET_DIR}/sources/ui/nokde/kcolorcombo.h
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpdf.cpp
|
|
||||||
${QET_DIR}/sources/diagramevent/diagrameventaddpdf.h
|
|
||||||
${QET_DIR}/sources/ui/pdfpagesdialog.cpp
|
|
||||||
${QET_DIR}/sources/ui/pdfpagesdialog.h
|
|
||||||
)
|
|
||||||
|
|
||||||
# JavaScript scripting (bugtracker #162). Unconditionally in the source
|
|
||||||
# list, like the QtPdf files above: this file is included before the
|
|
||||||
# QET_HAS_SCRIPTING probe runs in the top-level CMakeLists.txt, so the
|
|
||||||
# variable isn't set yet here. Same pattern as QtPdf: always compiled, the
|
|
||||||
# actual Qt::Qml dependent code is behind #ifdef QET_HAS_SCRIPTING inside
|
|
||||||
# qetscripting.cpp/qetscriptapi.cpp themselves, compiling to a harmless
|
|
||||||
# stub when the module wasn't found.
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/scripting/qetscriptapi.cpp
|
|
||||||
${QET_DIR}/sources/scripting/qetscriptapi.h
|
|
||||||
${QET_DIR}/sources/scripting/qetscripting.cpp
|
|
||||||
${QET_DIR}/sources/scripting/qetscripting.h
|
|
||||||
${QET_DIR}/sources/scripting/scriptheader.h
|
|
||||||
${QET_DIR}/sources/scripting/scriptlibrary.cpp
|
|
||||||
${QET_DIR}/sources/scripting/scriptlibrary.h
|
|
||||||
${QET_DIR}/sources/scripting/scriptmanagerdialog.cpp
|
|
||||||
${QET_DIR}/sources/scripting/scriptmanagerdialog.h
|
|
||||||
${QET_DIR}/sources/scripting/liveserver.cpp
|
|
||||||
${QET_DIR}/sources/scripting/liveserver.h
|
|
||||||
${QET_DIR}/sources/scripting/macrorecorder.cpp
|
|
||||||
${QET_DIR}/sources/scripting/macrorecorder.h
|
|
||||||
${QET_DIR}/sources/scripting/assistantinfo.cpp
|
|
||||||
${QET_DIR}/sources/scripting/assistantinfo.h
|
|
||||||
)
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_ENABLED)
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousebackend.h
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousebuttonmap.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousebuttonmap.h
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemouselistener.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemouselistener.h
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousemotion.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousemotion.h
|
|
||||||
${QET_DIR}/sources/ui/configpage/spacemouseconfigpage.cpp
|
|
||||||
${QET_DIR}/sources/ui/configpage/spacemouseconfigpage.h
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_BACKEND_SPNAV_ENABLED)
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/spacemouse/spnavbackend.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/spnavbackend.h
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_BACKEND_HID_ENABLED)
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/spacemouse/hidbackend.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/hidbackend.h
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousehid.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/spacemousehid.h
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(QET_SPACEMOUSE_BACKEND_CONNEXION_ENABLED)
|
|
||||||
list(APPEND QET_SRC_FILES
|
|
||||||
${QET_DIR}/sources/spacemouse/connexionbackend.cpp
|
|
||||||
${QET_DIR}/sources/spacemouse/connexionbackend.h
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set(TS_FILES
|
set(TS_FILES
|
||||||
${QET_DIR}/lang/qet_ar.ts
|
${QET_DIR}/lang/qet_ar.ts
|
||||||
${QET_DIR}/lang/qet_ca.ts
|
${QET_DIR}/lang/qet_ca.ts
|
||||||
@@ -1110,7 +793,6 @@ set(TS_FILES
|
|||||||
${QET_DIR}/lang/qet_hu.ts
|
${QET_DIR}/lang/qet_hu.ts
|
||||||
${QET_DIR}/lang/qet_it.ts
|
${QET_DIR}/lang/qet_it.ts
|
||||||
${QET_DIR}/lang/qet_ja.ts
|
${QET_DIR}/lang/qet_ja.ts
|
||||||
${QET_DIR}/lang/qet_ko.ts
|
|
||||||
${QET_DIR}/lang/qet_mn.ts
|
${QET_DIR}/lang/qet_mn.ts
|
||||||
${QET_DIR}/lang/qet_nb.ts
|
${QET_DIR}/lang/qet_nb.ts
|
||||||
${QET_DIR}/lang/qet_nl.ts
|
${QET_DIR}/lang/qet_nl.ts
|
||||||
@@ -1120,14 +802,11 @@ set(TS_FILES
|
|||||||
${QET_DIR}/lang/qet_pt.ts
|
${QET_DIR}/lang/qet_pt.ts
|
||||||
${QET_DIR}/lang/qet_pt_BR.ts
|
${QET_DIR}/lang/qet_pt_BR.ts
|
||||||
${QET_DIR}/lang/qet_ro.ts
|
${QET_DIR}/lang/qet_ro.ts
|
||||||
${QET_DIR}/lang/qet_rs.ts
|
|
||||||
${QET_DIR}/lang/qet_ru.ts
|
${QET_DIR}/lang/qet_ru.ts
|
||||||
${QET_DIR}/lang/qet_sk.ts
|
${QET_DIR}/lang/qet_sk.ts
|
||||||
${QET_DIR}/lang/qet_sl.ts
|
${QET_DIR}/lang/qet_sl.ts
|
||||||
${QET_DIR}/lang/qet_sr.ts
|
${QET_DIR}/lang/qet_sr.ts
|
||||||
${QET_DIR}/lang/qet_sv.ts
|
${QET_DIR}/lang/qet_sv.ts
|
||||||
${QET_DIR}/lang/qet_tr.ts
|
${QET_DIR}/lang/qet_tr.ts
|
||||||
${QET_DIR}/lang/qet_uk.ts
|
|
||||||
${QET_DIR}/lang/qet_zh.ts
|
${QET_DIR}/lang/qet_zh.ts
|
||||||
${QET_DIR}/lang/qet_zh_TW.ts
|
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Copyright 2006-2026 The QElectroTech Team
|
# Copyright 2006 The QElectroTech Team
|
||||||
# This file is part of QElectroTech.
|
# This file is part of QElectroTech.
|
||||||
#
|
#
|
||||||
# QElectroTech is free software: you can redistribute it and/or modify
|
# QElectroTech is free software: you can redistribute it and/or modify
|
||||||
@@ -28,9 +28,5 @@ add_definitions(-DQET_ALLOW_OVERRIDE_CD_OPTION)
|
|||||||
# Comment the line below to deactivate the --data-dir option
|
# Comment the line below to deactivate the --data-dir option
|
||||||
add_definitions(-DQET_ALLOW_OVERRIDE_DD_OPTION)
|
add_definitions(-DQET_ALLOW_OVERRIDE_DD_OPTION)
|
||||||
|
|
||||||
# Enable project database export when requested by the build system.
|
#comment the line below to disable the project database export
|
||||||
option(QET_EXPORT_PROJECT_DB "Enable project database export" OFF)
|
#add_definitions(-DQET_EXPORT_PROJECT_DB) #error Todo
|
||||||
|
|
||||||
if(QET_EXPORT_PROJECT_DB)
|
|
||||||
add_compile_definitions(QET_EXPORT_PROJECT_DB)
|
|
||||||
endif()
|
|
||||||
|
|||||||
@@ -1,101 +0,0 @@
|
|||||||
# Smart Device Information and BOM CSV
|
|
||||||
|
|
||||||
## Architecture
|
|
||||||
|
|
||||||
- A `.qet` project is XML. Placed component properties are held in
|
|
||||||
`ElementData::m_informations`, a `DiagramContext`, and are serialized by the
|
|
||||||
existing `Element::fromXml()` and `Element::toXml()` path.
|
|
||||||
- `DeviceInformation` is a typed view over that existing context. It does not
|
|
||||||
introduce a second data store. Updates made by the properties editor continue
|
|
||||||
to use `ChangeElementInformationCommand`, including undo/redo and dirty state.
|
|
||||||
- The project database copies element contexts into `element_info` and exposes
|
|
||||||
reporting fields through `element_nomenclature_view`.
|
|
||||||
- GUI and CLI BOM exports both use `BomExport::defaultQuery()` against that
|
|
||||||
view. The existing `BOMExportDialog` remains the only GUI export entry point;
|
|
||||||
users can still customize columns, filters, and grouped/ungrouped output.
|
|
||||||
|
|
||||||
## Device Properties
|
|
||||||
|
|
||||||
| Device field | XML/context key | Default BOM |
|
|
||||||
| --- | --- | --- |
|
|
||||||
| Device tag | `label` | Yes |
|
|
||||||
| Manufacturer | `manufacturer` | Yes |
|
|
||||||
| Part number | `manufacturer_reference` | Yes |
|
|
||||||
| Model | `model` | Yes |
|
|
||||||
| Description | `description` | Yes |
|
|
||||||
| Category | `category` | Yes |
|
|
||||||
| Quantity | `quantity` | Yes |
|
|
||||||
| Voltage rating | `voltage_rating` | Yes |
|
|
||||||
| Current rating | `current_rating` | Yes |
|
|
||||||
| Page | `folio` from the diagram | Yes |
|
|
||||||
| Notes | `notes` | Yes |
|
|
||||||
|
|
||||||
The five new context keys are `model`, `category`, `voltage_rating`,
|
|
||||||
`current_rating`, and `notes`. They are available in the existing information
|
|
||||||
editor for Simple and Master elements, in symbol definitions, in the SQL
|
|
||||||
nomenclature view, and in the export column picker.
|
|
||||||
|
|
||||||
No XML version bump or migration is required. Missing keys read as empty
|
|
||||||
strings, empty properties are omitted by the existing writer, and unknown
|
|
||||||
context keys remain preserved. Quantity and ratings stay free text so existing
|
|
||||||
unit conventions and decimal quantities are not changed implicitly.
|
|
||||||
|
|
||||||
## BOM Policy
|
|
||||||
|
|
||||||
The default BOM query exports one row per Simple, Master, Slave or Terminal
|
|
||||||
element: an auxiliary contact block and a terminal block are parts of their
|
|
||||||
own (discussion #847). Reports, thumbnails and conductor definitions are
|
|
||||||
excluded. A Master device is counted once and PLC I/O entries are not
|
|
||||||
expanded.
|
|
||||||
|
|
||||||
Two options leave rows out (#1178). Contact blocks: uncheck **Contacts
|
|
||||||
esclaves** in the dialog, or pass `--no-slaves`. Junctions, the
|
|
||||||
terminal-type symbols drawn where wires branch (`114_connections`), which
|
|
||||||
have no label, designation, manufacturer or manufacturer reference: check
|
|
||||||
**Laisser de côté les jonctions**, or pass `--no-junctions`. A terminal block
|
|
||||||
with a label or a part number is kept. The existing `exclude_from_bom` property is honored by the
|
|
||||||
SQL view, including common true representations (`true`, `1`, `yes`, `on`).
|
|
||||||
|
|
||||||
The default columns are:
|
|
||||||
|
|
||||||
`Device tag, Designation, Manufacturer, Part number, Model, Description,
|
|
||||||
Category, Quantity, Voltage rating, Current rating, Page, Notes`.
|
|
||||||
|
|
||||||
The existing **Format as bill of materials** checkbox provides grouped output;
|
|
||||||
it is off by default so the initial export remains ungrouped. Users may change
|
|
||||||
the query and column order through the existing dialog. The command-line
|
|
||||||
`--export-bom` operation uses the same default query and column order.
|
|
||||||
|
|
||||||
CSV output is UTF-8 with a BOM, semicolon-delimited, and quotes every field.
|
|
||||||
Embedded quotes are doubled and embedded newlines are retained. `QSaveFile`
|
|
||||||
provides atomic replacement; query, open, write, and commit failures are
|
|
||||||
reported without deleting an existing destination first.
|
|
||||||
|
|
||||||
## Verification
|
|
||||||
|
|
||||||
The smart-device test is registered explicitly in
|
|
||||||
`tests/qttest/CMakeLists.txt` and uses only Qt Test and Qt SQL. It is therefore
|
|
||||||
part of the normal cross-platform CMake/CTest flow:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cmake -S . -B build -DPACKAGE_TESTS=ON
|
|
||||||
cmake --build build
|
|
||||||
ctest --test-dir build --output-on-failure
|
|
||||||
```
|
|
||||||
|
|
||||||
`tst_smart_device` checks the metadata column contract, Simple/Master filtering,
|
|
||||||
stable page ordering, UTF-8 with Latin and non-Latin samples, CSV escaping, and
|
|
||||||
atomic write success/failure. Existing project XML save/load tests cover the
|
|
||||||
generic `DiagramContext` persistence path used by the new keys.
|
|
||||||
|
|
||||||
Manual checks:
|
|
||||||
|
|
||||||
1. Open an existing project and edit a Simple or Master element's information.
|
|
||||||
2. Set all device fields, apply, undo, redo, save, close, and reopen.
|
|
||||||
3. Open Project > Export as CSV and verify the device columns are preselected.
|
|
||||||
4. Export with grouping both disabled and enabled.
|
|
||||||
5. Verify leading-zero part numbers, non-Latin text, quotes, and newlines in a
|
|
||||||
UTF-8 CSV reader.
|
|
||||||
|
|
||||||
Cable management, terminal-strip planning, automatic wire numbering, PLC I/O
|
|
||||||
expansion, panel layout, and manufacturer catalog integration are out of scope.
|
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 6.4 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 199 B |
|
After Width: | Height: | Size: 340 B |
|
After Width: | Height: | Size: 362 B |
|
After Width: | Height: | Size: 338 B |
|
After Width: | Height: | Size: 368 B |
|
After Width: | Height: | Size: 425 B |
|
After Width: | Height: | Size: 309 B |
|
After Width: | Height: | Size: 393 B |
|
After Width: | Height: | Size: 197 B |
|
After Width: | Height: | Size: 212 B |
|
After Width: | Height: | Size: 296 B |
|
After Width: | Height: | Size: 198 B |
|
After Width: | Height: | Size: 447 B |
|
After Width: | Height: | Size: 375 B |
|
After Width: | Height: | Size: 296 B |
|
After Width: | Height: | Size: 274 B |
|
After Width: | Height: | Size: 277 B |
|
After Width: | Height: | Size: 207 B |
|
After Width: | Height: | Size: 365 B |
|
After Width: | Height: | Size: 243 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 219 B |
|
After Width: | Height: | Size: 299 B |
|
After Width: | Height: | Size: 358 B |
|
After Width: | Height: | Size: 275 B |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 316 B |
|
After Width: | Height: | Size: 325 B |
|
After Width: | Height: | Size: 373 B |
|
After Width: | Height: | Size: 227 B |
|
After Width: | Height: | Size: 410 B |
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 201 B |
|
After Width: | Height: | Size: 397 B |
|
After Width: | Height: | Size: 401 B |
|
After Width: | Height: | Size: 210 B |
|
After Width: | Height: | Size: 336 B |
|
After Width: | Height: | Size: 328 B |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 300 B |
|
After Width: | Height: | Size: 320 B |
|
After Width: | Height: | Size: 268 B |
|
After Width: | Height: | Size: 314 B |