From f38a6f364743cdac4d330556403b4c6e853959e7 Mon Sep 17 00:00:00 2001 From: swurl Date: Mon, 30 Dec 2024 17:52:11 -0500 Subject: [PATCH 1/6] fix android focus Signed-off-by: swurl --- screen/MainScreen.qml | 1 + screen/NavButton.qml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/screen/MainScreen.qml b/screen/MainScreen.qml index 0df59ee..b1e41bd 100644 --- a/screen/MainScreen.qml +++ b/screen/MainScreen.qml @@ -18,6 +18,7 @@ Rectangle { } SwipeView { + onCurrentIndexChanged: forceActiveFocus() id: swipe currentIndex: 0 diff --git a/screen/NavButton.qml b/screen/NavButton.qml index 29d4144..c31aa98 100644 --- a/screen/NavButton.qml +++ b/screen/NavButton.qml @@ -21,5 +21,5 @@ Button { Universal.foreground: Constants.buttonText // if this isn't done, then the previously selected textbox will never lose focus - onClicked: focus = true + onClicked: forceActiveFocus() } From 9e221766ad0628d1495c8eb964755a96f7469222 Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 2 Jan 2025 16:44:50 -0500 Subject: [PATCH 2/6] maybe? Signed-off-by: swurl --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7dbbd31..d369c15 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,7 +35,7 @@ jobs: - os: ubuntu-20.04 qt_host: linux - qt_version: '6.6.0' + qt_version: '6.6.3' qt_arch: wasm_singlethread emsdk_version: 3.1.37 From 7d1e9df372738be10cb4bafa1e212cfaad6a1460 Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 2 Jan 2025 17:09:33 -0500 Subject: [PATCH 3/6] add back uniformCellSizes, fix wasm for real use Kidev's forks Signed-off-by: swurl --- .github/workflows/build.yml | 40 ++++++++++++++++++------------------- items/LabeledSpinBox.qml | 2 ++ items/MatchSpinBox.qml | 3 ++- items/ScaleItem.qml | 1 + pages/PhasePage.qml | 2 ++ pages/ScalesPage.qml | 2 ++ 6 files changed, 28 insertions(+), 22 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d369c15..ca3b28a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,20 +24,22 @@ jobs: - os: ubuntu-20.04 qt_host: linux + qt_target: desktop qt_version: '6.8.1' qt_arch: gcc_64 - os: ubuntu-20.04 qt_host: linux qt_target: android - qt_arch: android_arm64_v8a qt_version: '6.8.1' + qt_arch: android_arm64_v8a - os: ubuntu-20.04 - qt_host: linux - qt_version: '6.6.3' + qt_host: all_os + qt_target: wasm + qt_version: '6.8.1' qt_arch: wasm_singlethread - emsdk_version: 3.1.37 + emsdk_version: 3.1.56 - os: windows-2022 qt_host: windows @@ -82,29 +84,25 @@ jobs: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '21' - - name: Install Qt ${{ matrix.qt_version }} - uses: jurplel/install-qt-action@v4 + - name: Install Qt ${{ matrix.qt_version }} (Windows, macOS) + if: runner.os != 'Linux' + uses: Kidev/install-qt-action@v4.2.0 with: cache: on version: ${{ matrix.qt_version }} - - name: Install Qt ${{ matrix.qt_version }} (WASM) - if: matrix.qt_arch == 'wasm_singlethread' - uses: jurplel/install-qt-action@v4 + - name: Install Qt ${{ matrix.qt_version }} (Linux) + if: runner.os == 'Linux' + uses: Kidev/install-qt-action@v4.2.0 with: cache: on host: ${{ matrix.qt_host }} - version: ${{ matrix.qt_version }} - arch: ${{ matrix.qt_arch }} - - - name: Install Qt ${{ matrix.qt_version }} (Android) - if: matrix.qt_target == 'android' - uses: jurplel/install-qt-action@v4 - with: - cache: on - version: ${{ matrix.qt_version }} target: ${{ matrix.qt_target }} + version: ${{ matrix.qt_version }} arch: ${{ matrix.qt_arch }} + set-env: true + aqtsource: 'git+https://github.com/Kidev/aqtinstall.git@wasm' + extra: '--autodesktop' - name: Install Build Dependencies (macOS) if: runner.os == 'macOS' @@ -133,7 +131,7 @@ jobs: git submodule update --init declare QTPATH="${{ github.workspace }}/../Qt/${{ matrix.qt_version }}" - cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DCMAKE_TOOLCHAIN_FILE=$QTPATH/${{ matrix.qt_arch }}/lib/cmake/Qt6/qt.toolchain.cmake -DQT_HOST_PATH=$QTPATH/gcc_64 -DQT_HOST_PATH_CMAKE_DIR=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DCMAKE_PREFIX_PATH=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DTBA_AUTH_KEY=${{ secrets.TBA_AUTH_KEY }} + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DCMAKE_TOOLCHAIN_FILE=$QTPATH/${{ matrix.qt_arch }}/lib/cmake/Qt6/qt.toolchain.cmake -DQT_HOST_PATH=$QTPATH/${{ matrix.qt_arch }} -DQT_HOST_PATH_CMAKE_DIR=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DCMAKE_PREFIX_PATH=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DTBA_AUTH_KEY=${{ secrets.TBA_AUTH_KEY }} - name: Configure (Windows, macOS) if: runner.os != 'Linux' @@ -181,13 +179,13 @@ jobs: cmake --install ${{ env.BUILD_DIR }} --prefix ${{ env.INSTALL_APPIMAGE_DIR }}/usr export OUTPUT="QFRCScouter-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage" - export QML_SOURCES_PATHS="${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/gcc_64/qml:${{ github.workspace }}" + export QML_SOURCES_PATHS="${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/${{ matrix.qt_arch }}/qml:${{ github.workspace }}" chmod +x linuxdeploy-*.AppImage mkdir -p ${{ env.INSTALL_APPIMAGE_DIR }}/usr/plugins/iconengines - cp -r ${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/gcc_64/plugins/ ${{ env.INSTALL_APPIMAGE_DIR }}/usr/ + cp -r ${{ runner.workspace }}/Qt/${{ matrix.qt_version }}/${{ matrix.qt_arch }}/plugins/ ${{ env.INSTALL_APPIMAGE_DIR }}/usr/ cp /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 ${{ env.INSTALL_APPIMAGE_DIR }}/usr/lib/ cp /usr/lib/x86_64-linux-gnu/libssl.so.1.1 ${{ env.INSTALL_APPIMAGE_DIR }}/usr/lib/ diff --git a/items/LabeledSpinBox.qml b/items/LabeledSpinBox.qml index 5a1ceda..32a825d 100644 --- a/items/LabeledSpinBox.qml +++ b/items/LabeledSpinBox.qml @@ -33,6 +33,8 @@ SpinBox { horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter + readOnly: !spin.editable + width: parent.width / 3 inputMethodHints: Qt.ImhFormattedNumbersOnly diff --git a/items/MatchSpinBox.qml b/items/MatchSpinBox.qml index 6351d71..121354e 100644 --- a/items/MatchSpinBox.qml +++ b/items/MatchSpinBox.qml @@ -26,7 +26,7 @@ SpinBox { from: min to: max - editable: true + editable: false value: 0 onValueModified: { @@ -42,6 +42,7 @@ SpinBox { verticalAlignment: Qt.AlignVCenter width: parent.width / 3 + readOnly: !spin.editable inputMethodHints: Qt.ImhFormattedNumbersOnly diff --git a/items/ScaleItem.qml b/items/ScaleItem.qml index 4ddd5ee..a785152 100644 --- a/items/ScaleItem.qml +++ b/items/ScaleItem.qml @@ -38,6 +38,7 @@ ColumnLayout { RowLayout { Layout.fillWidth: true + uniformCellSizes: true spacing: 2 Repeater { diff --git a/pages/PhasePage.qml b/pages/PhasePage.qml index d1c6bf4..1bd37d1 100644 --- a/pages/PhasePage.qml +++ b/pages/PhasePage.qml @@ -37,6 +37,8 @@ Rectangle { right: parent.right } + uniformCellWidths: true + columns: 2 Repeater { diff --git a/pages/ScalesPage.qml b/pages/ScalesPage.qml index d16b2b5..e5c739b 100644 --- a/pages/ScalesPage.qml +++ b/pages/ScalesPage.qml @@ -21,6 +21,8 @@ Rectangle { property list values ColumnLayout { + uniformCellSizes: true + anchors { top: banner.bottom bottom: parent.bottom From 1679b3c584174af74a5644b5b2593a5a68ed53f5 Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 2 Jan 2025 17:22:01 -0500 Subject: [PATCH 4/6] add csv and fix linux Signed-off-by: swurl --- .github/workflows/build.yml | 8 +++---- include/Config.h | 4 ++++ src/Config.cpp | 45 ++++++++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca3b28a..094750f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -84,15 +84,14 @@ jobs: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '21' - - name: Install Qt ${{ matrix.qt_version }} (Windows, macOS) - if: runner.os != 'Linux' + - name: Install Qt ${{ matrix.qt_version }} (Host) uses: Kidev/install-qt-action@v4.2.0 with: cache: on version: ${{ matrix.qt_version }} - - name: Install Qt ${{ matrix.qt_version }} (Linux) - if: runner.os == 'Linux' + - name: Install Qt ${{ matrix.qt_version }} (Wasm/Android) + if: runner.os == 'Linux' && matrix.qt_arch != 'gcc_64' uses: Kidev/install-qt-action@v4.2.0 with: cache: on @@ -102,7 +101,6 @@ jobs: arch: ${{ matrix.qt_arch }} set-env: true aqtsource: 'git+https://github.com/Kidev/aqtinstall.git@wasm' - extra: '--autodesktop' - name: Install Build Dependencies (macOS) if: runner.os == 'macOS' diff --git a/include/Config.h b/include/Config.h index 5f04eb1..d9d9fba 100644 --- a/include/Config.h +++ b/include/Config.h @@ -18,6 +18,10 @@ class ScouterConfig : public QObject QJsonObject object() const; void setObject(const QJsonObject &newObject); +#if !defined(Q_OS_WASM) && !defined(Q_OS_ANDROID) + void saveCsv() const; +#endif + PhaseDataModel *autoModel() const; PhaseDataModel *teleModel() const; diff --git a/src/Config.cpp b/src/Config.cpp index 2eceacf..6957dde 100644 --- a/src/Config.cpp +++ b/src/Config.cpp @@ -1,5 +1,6 @@ #include "Config.h" +#include #include #include @@ -23,8 +24,12 @@ ScouterConfig::ScouterConfig(QObject *parent) m_autoModel = new PhaseDataModel(pages.value("auto").toArray(), this); m_teleModel = new PhaseDataModel(pages.value("tele").toArray(), this); - m_endModel = new PhaseDataModel(pages.value("end").toArray(), this); + m_endModel = new PhaseDataModel(pages.value("end").toArray(), this); // unused for now m_scalesModel = new ScalesModel(pages.value("scales").toArray(), this); + +#if !defined(Q_OS_WASM) && !defined(Q_OS_ANDROID) + saveCsv(); +#endif } QJsonObject ScouterConfig::object() const @@ -40,6 +45,44 @@ void ScouterConfig::setObject(const QJsonObject &newObject) emit objectChanged(); } +#if !defined(Q_OS_WASM) && !defined(Q_OS_ANDROID) +void ScouterConfig::saveCsv() const +{ + QStringList csv; + csv << "Scouter Initials" + << "Match Number" + << "Team Number"; + + QJsonObject pages = m_object.value("pages").toObject(); + QJsonArray autoPage = pages.value("auto").toArray(); + QJsonArray telePage = pages.value("tele").toArray(); + QJsonArray scalesPage = pages.value("scales").toArray(); + + for (QJsonValueConstRef ref : autoPage) { + csv << ("Auto " + ref.toObject().value("text").toString()); + } + + for (QJsonValueConstRef ref : telePage) { + csv << ("Teleop " + ref.toObject().value("text").toString()); + } + + for (QJsonValueConstRef ref : scalesPage) { + csv << ref.toObject().value("title").toString(); + } + + // save to home directory for easy access + QDir home = QDir::home(); + QFile file(home.absoluteFilePath("data.csv")); + + if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qCritical() << "Failed to write CSV."; + } else { + file.write(csv.join(",").toUtf8()); + file.close(); + } +} +#endif + PhaseDataModel *ScouterConfig::autoModel() const { return m_autoModel; From 85021670918747a646b17c72899b4862942f208e Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 2 Jan 2025 17:28:08 -0500 Subject: [PATCH 5/6] ensure qt quick is installed Signed-off-by: swurl --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 094750f..d8a0de4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -90,7 +90,7 @@ jobs: cache: on version: ${{ matrix.qt_version }} - - name: Install Qt ${{ matrix.qt_version }} (Wasm/Android) + - name: Install Qt ${{ matrix.qt_version }} (WASM/Android) if: runner.os == 'Linux' && matrix.qt_arch != 'gcc_64' uses: Kidev/install-qt-action@v4.2.0 with: @@ -100,6 +100,7 @@ jobs: version: ${{ matrix.qt_version }} arch: ${{ matrix.qt_arch }} set-env: true + modules: 'qtquick3d' aqtsource: 'git+https://github.com/Kidev/aqtinstall.git@wasm' - name: Install Build Dependencies (macOS) From bb439fc500cd25c1efee706d78140ea0fa47f6aa Mon Sep 17 00:00:00 2001 From: swurl Date: Thu, 2 Jan 2025 17:43:05 -0500 Subject: [PATCH 6/6] fix host path Signed-off-by: swurl --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8a0de4..c020bde 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -128,9 +128,9 @@ jobs: if: runner.os == 'Linux' run: | git submodule update --init - declare QTPATH="${{ github.workspace }}/../Qt/${{ matrix.qt_version }}" + declare QTPATH="${{ runner.workspace }}/Qt/${{ matrix.qt_version }}" - cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DCMAKE_TOOLCHAIN_FILE=$QTPATH/${{ matrix.qt_arch }}/lib/cmake/Qt6/qt.toolchain.cmake -DQT_HOST_PATH=$QTPATH/${{ matrix.qt_arch }} -DQT_HOST_PATH_CMAKE_DIR=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DCMAKE_PREFIX_PATH=$QTPATH/${{ matrix.qt_arch }}/lib/cmake -DTBA_AUTH_KEY=${{ secrets.TBA_AUTH_KEY }} + cmake -S . -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} -DCMAKE_TOOLCHAIN_FILE=$QTPATH/${{ matrix.qt_arch }}/lib/cmake/Qt6/qt.toolchain.cmake -DQT_HOST_PATH=$QTPATH/gcc_64 -DQT_HOST_PATH_CMAKE_DIR=$QTPATH/gcc_64/lib/cmake -DCMAKE_PREFIX_PATH=$QTPATH/${{ matrix.qt_arch }} -DTBA_AUTH_KEY=${{ secrets.TBA_AUTH_KEY }} - name: Configure (Windows, macOS) if: runner.os != 'Linux'