Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
8183d23
Initial prototype (#5997)
RensDofferhoff Aug 27, 2025
e7fb772
Update remote-bundles.json
RensDofferhoff Aug 27, 2025
d90fb13
Update remote-bundles.json
RensDofferhoff Aug 27, 2025
07ceecc
Download to tmp dir (#5998)
RensDofferhoff Aug 27, 2025
ed614d6
WIP:Run ubuntu ci workflow locally with act
sverhoeven Sep 2, 2025
3813c9a
Created a dev container
sverhoeven Sep 2, 2025
7440ac8
Resize on black window
sverhoeven Sep 9, 2025
9acfcb7
Trying to call a webchannel info function that returns
sverhoeven Sep 12, 2025
4ffaaad
Add note for debugging web
sverhoeven Sep 12, 2025
d051090
Use Qt6_DIR env var + mention qt creator in devcontainer
sverhoeven Sep 30, 2025
cafe987
Less confusing names
sverhoeven Sep 30, 2025
ebff449
Install qt extensions
sverhoeven Sep 30, 2025
bed4cf0
Create ModuleLibrary class to group calls multiple other objects
sverhoeven Sep 30, 2025
c46a985
Able use webchannel on react app when copied to Desktop/html/catalog
sverhoeven Oct 9, 2025
d0ff378
Put in product url and development instructions
sverhoeven Oct 10, 2025
097a1d8
Merge remote-tracking branch 'origin/development' into webchannel-test
sverhoeven Oct 10, 2025
940db5c
Add catalog url param when using ngrok for development
sverhoeven Oct 10, 2025
c058877
No need for ngrok, use `pnpm dev --host 0.0.0.0` directly
sverhoeven Oct 10, 2025
50f1ed3
Remove module-store.html, was needed for debugging webchannels
sverhoeven Oct 10, 2025
3786ab9
Implement uninstall + send signal when installed modules changes (add…
sverhoeven Oct 13, 2025
a04cc1a
Send signal to webchannel when installed modules change or preference…
sverhoeven Oct 13, 2025
1424add
Use lambdas instead of slots for dynamic module signals
sverhoeven Oct 13, 2025
1ffbf88
Hardcode to Windows_x86-64 for now
sverhoeven Oct 13, 2025
c9e7833
Send BCP-47 format language code to module library web app
sverhoeven Oct 20, 2025
bdff710
Add chinese fonts so text is not rendered as boxes
sverhoeven Oct 20, 2025
4035166
Make module library changeable in preferences
sverhoeven Oct 31, 2025
f8e7450
Add translations for "Module library URL", generated by GPT-5-Codex llm
sverhoeven Oct 31, 2025
7a032df
Merge remote-tracking branch 'origin/development' into webchannel-test
sverhoeven Nov 3, 2025
147d0b8
Enable all platforms
sverhoeven Nov 4, 2025
c7353c7
Merge remote-tracking branch 'origin/development' into webchannel-test
sverhoeven Nov 4, 2025
7ce43a2
Still need use-after-free suppression in ubuntu readstat build
sverhoeven Nov 4, 2025
f1403a2
moduleStoreUrl has been replaced with moduleLibraryURL in preferences.
sverhoeven Nov 4, 2025
cf9a074
Give user feedback about download and installation progress
sverhoeven Nov 4, 2025
dd9af1f
Initial prototype (#5997)
RensDofferhoff Aug 27, 2025
c00b0f2
Update remote-bundles.json
RensDofferhoff Aug 27, 2025
70e5fda
Update remote-bundles.json
RensDofferhoff Aug 27, 2025
4db4676
Download to tmp dir (#5998)
RensDofferhoff Aug 27, 2025
0c44536
WIP:Run ubuntu ci workflow locally with act
sverhoeven Sep 2, 2025
7467a19
Created a dev container
sverhoeven Sep 2, 2025
31a039f
Resize on black window
sverhoeven Sep 9, 2025
394e1f8
Trying to call a webchannel info function that returns
sverhoeven Sep 12, 2025
162a18c
Add note for debugging web
sverhoeven Sep 12, 2025
35df85a
Use Qt6_DIR env var + mention qt creator in devcontainer
sverhoeven Sep 30, 2025
d864cf8
Less confusing names
sverhoeven Sep 30, 2025
56504ba
Install qt extensions
sverhoeven Sep 30, 2025
dd1f27b
Create ModuleLibrary class to group calls multiple other objects
sverhoeven Sep 30, 2025
1f8ca06
Able use webchannel on react app when copied to Desktop/html/catalog
sverhoeven Oct 9, 2025
21f027e
Put in product url and development instructions
sverhoeven Oct 10, 2025
2e111b8
Add catalog url param when using ngrok for development
sverhoeven Oct 10, 2025
8390b65
No need for ngrok, use `pnpm dev --host 0.0.0.0` directly
sverhoeven Oct 10, 2025
63d1ba0
Remove module-store.html, was needed for debugging webchannels
sverhoeven Oct 10, 2025
6308ee6
Implement uninstall + send signal when installed modules changes (add…
sverhoeven Oct 13, 2025
0645e57
Send signal to webchannel when installed modules change or preference…
sverhoeven Oct 13, 2025
c29b4c9
Use lambdas instead of slots for dynamic module signals
sverhoeven Oct 13, 2025
e0f216a
Hardcode to Windows_x86-64 for now
sverhoeven Oct 13, 2025
9799e9d
Send BCP-47 format language code to module library web app
sverhoeven Oct 20, 2025
e74e81f
Add chinese fonts so text is not rendered as boxes
sverhoeven Oct 20, 2025
05327c4
Make module library changeable in preferences
sverhoeven Oct 31, 2025
f3e34a1
Add translations for "Module library URL", generated by GPT-5-Codex llm
sverhoeven Oct 31, 2025
a0458d9
Enable all platforms
sverhoeven Nov 4, 2025
3162bf9
Still need use-after-free suppression in ubuntu readstat build
sverhoeven Nov 4, 2025
675878c
moduleStoreUrl has been replaced with moduleLibraryURL in preferences.
sverhoeven Nov 4, 2025
ead8990
Give user feedback about download and installation progress
sverhoeven Nov 4, 2025
3d6ac68
move webengine out of flickable
JorisGoosen Nov 5, 2025
aaa10cf
Merge branch 'webchannel-test' of github.com:jasp-escience/jasp-deskt…
sverhoeven Nov 6, 2025
c64a719
Only show module library URL input text when developer mode is turned on
sverhoeven Nov 14, 2025
68ec69c
Mention Module Library URL in help
sverhoeven Nov 14, 2025
a310878
Merge remote-tracking branch 'origin/development' into webchannel-test
sverhoeven Nov 14, 2025
c6ae82b
Add deps for default Jasp modules + use ninja
sverhoeven Nov 14, 2025
13ce4e6
If preferencesModel.checkUpdates is false then show message instead o…
sverhoeven Nov 18, 2025
9115496
Adding translations for module library offline texts
sverhoeven Nov 18, 2025
d9f45fc
Make module library offline heading wrap
sverhoeven Nov 18, 2025
58ceebe
Ignore jasp-build/
sverhoeven Nov 18, 2025
0254a36
To module library env add list of modules that can be uninstalled
sverhoeven Nov 18, 2025
8951804
Merge remote-tracking branch 'origin/development' into webchannel-test
sverhoeven Nov 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
FROM mcr.microsoft.com/devcontainers/cpp:ubuntu-24.04

ARG DEBIAN_FRONTEND=noninteractive
ARG QT_VERSION=6.8.3
ARG QT_MODULES="qtpositioning qtwebchannel qtwebengine qtwebsockets qtwebview debug_info qt5compat qtshadertools qtwaylandcompositor"

# 1) Base OS packages per Docs/development/jasp-build-guide-linux.md
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl git gnupg software-properties-common \
build-essential cmake ninja-build \
autoconf bison flex \
g++ gfortran \
zlib1g zlib1g-dev \
libssl-dev \
libgl1-mesa-dev \
libsqlite3-dev \
libarchive13 libarchive-dev \
libxkbcommon-dev libxkbcommon-x11-dev libxcb-xkb-dev libxcb-xinerama0 libxcb-cursor0 \
libglpk-dev \
libminizip-dev \
libfreexl-dev \
libboost-dev libboost-filesystem-dev libboost-system-dev libboost-date-time-dev libboost-timer-dev libboost-chrono-dev \
librdata-dev jags \
libnss3-dev libnspr4-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxi-dev libasound2-dev libxkbfile-dev libxcb-icccm4-dev libxcb-shape0-dev libxcb-keysyms1-dev \
libjsoncpp25 libjsoncpp-dev libxcb-xkb1 \
r-base \
libfontconfig1-dev libharfbuzz-dev libfribidi-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev libwebp-dev \
libcairo2-dev libgsl-dev \
fonts-noto-cjk fonts-arphic-ukai fonts-arphic-uming fonts-wqy-zenhei fonts-wqy-microhei \
patchelf \
pkg-config \
&& rm -rf /var/lib/apt/lists/*

# 2) Install R from CRAN Ubuntu repo for a recent R (or use distro one if sufficient)
RUN set -eux; \
. /etc/os-release; \
echo "deb https://cloud.r-project.org/bin/linux/ubuntu ${UBUNTU_CODENAME}-cran40/" | tee /etc/apt/sources.list.d/cran-r.list; \
curl -fsSL https://cloud.r-project.org/bin/linux/ubuntu/marutter_pubkey.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/cran.gpg; \
apt-get update && apt-get install -y --no-install-recommends r-base r-base-dev && rm -rf /var/lib/apt/lists/*

# 3) JAGS (use distro for convenience; can be replaced by source build later)
RUN apt-get update && apt-get install -y --no-install-recommends jags \
&& rm -rf /var/lib/apt/lists/*

# 4) Python + pip tooling for aqtinstall (Qt online installer alternative)
RUN apt-get update && apt-get install -y --no-install-recommends python3 python3-pip python3-venv && rm -rf /var/lib/apt/lists/*

# 5) Create venv for aqtinstall and install aqtinstall there
RUN python3 -m venv /opt/aqt-venv \
&& /opt/aqt-venv/bin/pip install --no-cache-dir aqtinstall

# 6) Install Qt 6.7.x with required modules via aqt from venv
RUN set -eux; \
/opt/aqt-venv/bin/aqt install-qt -O /opt/Qt linux desktop ${QT_VERSION} linux_gcc_64 -m ${QT_MODULES}; \
ln -s /opt/Qt/${QT_VERSION}/linux_gcc_64/bin/qmake /usr/local/bin/qmake || true

# 7) Install Qt Creator and other tools
RUN /opt/aqt-venv/bin/aqt install-tool -O /opt/Qt linux desktop tools_qtcreator qt.tools.qtcreator && \
/opt/aqt-venv/bin/aqt install-tool -O /opt/Qt linux desktop tools_cmake && \
/opt/aqt-venv/bin/aqt install-tool -O /opt/Qt linux desktop tools_ninja

# 8) Install readstat
RUN wget https://github.com/WizardMac/ReadStat/releases/download/v1.1.9/readstat-1.1.9.tar.gz && \
tar -xzf readstat-*.tar.gz && cd readstat-*/ && \
./configure && make CFLAGS='-Wno-error=use-after-free' CXXFLAGS='-Wno-error=use-after-free' && make install
16 changes: 16 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "JASP Desktop Dev",
"build": {
"dockerfile": "Dockerfile"
},
"runArgs": [
"--shm-size=2g"
],
"customizations": {
"vscode": {
"extensions": [
"TheQtCompany.qt-cpp-pack"
]
}
}
}
39 changes: 27 additions & 12 deletions .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ on:
workflow_dispatch:

jobs:

# to run locally install https://github.com/nektos/act and run `act --reuse -j build-jasp --env DISPLAY=$DISPLAY `
# docker commit 484f3a622a13 my-jasp-image:latest
# run desktop with
# xhost +local:docker
# docker exec -it -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix --entrypoint bash my-jasp-image:latest
# ./jasp-build/Desktop/JASP
build-jasp:

runs-on: ubuntu-latest
Expand All @@ -33,22 +38,31 @@ jobs:
cache: 'true'
modules: 'qtpositioning qtwebchannel qtwebengine qtwebsockets qtwebview debug_info qt5compat qtshadertools qtwaylandcompositor'
tools: 'tools_qtcreator,qt.tools.qtcreator tools_cmake tools_ninja'
# act can not use ../ (the default) as dir, so be explicit
dir: '${{ github.workspace }}/qtinstall'

- name: Install dependencies of build system
run: |
sudo apt install libboost-dev libjsoncpp25 libjsoncpp-dev libarchive13 libarchive-dev
sudo apt install libxcb-xkb-dev libxcb-xkb1 libxcb-xinerama0 libxkbcommon-dev libxkbcommon-x11-dev autoconf zlib1g zlib1g-dev cmake
sudo apt install gfortran build-essential flex libssl-dev libgl1-mesa-dev libsqlite3-dev
sudo apt install libharfbuzz-dev libfribidi-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev #required by some r packgaes
sudo apt install libglpk-dev libcurl4-openssl-dev libmpfr-dev libfontconfig1-dev libcairo2-dev netcdf-bin #required by some r packages
sudo apt install jags
sudo apt install libminizip-dev # required by freexl
sudo apt install librdata-dev
run: |
# act -j build-jasp was stuck on typing y to continue
sudo apt install -y libboost-dev libjsoncpp25 libjsoncpp-dev libarchive13 libarchive-dev
sudo apt install -y libxcb-xkb-dev libxcb-xkb1 libxcb-xinerama0 libxkbcommon-dev libxkbcommon-x11-dev autoconf zlib1g zlib1g-dev cmake
sudo apt install -y gfortran build-essential flex libssl-dev libgl1-mesa-dev libsqlite3-dev
sudo apt install -y libharfbuzz-dev libfribidi-dev libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev #required by some r packgaes
sudo apt install -y libglpk-dev libcurl4-openssl-dev libmpfr-dev libfontconfig1-dev libcairo2-dev netcdf-bin #required by some r packages
sudo apt install -y jags
sudo apt install -y libminizip-dev # required by freexl
sudo apt install -y librdata-dev
# to solve qt missing so files.
sudo apt install -y libnss3-dev libnspr4-dev
sudo apt install -y libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxi-dev
sudo apt install -y libasound2-dev libxkbfile-dev
git clone https://github.com/jasp-stats/freexl.git
cd freexl && ./configure && make && sudo make install
env:
DEBIAN_FRONTEND: noninteractive

- name: Install boost
uses: MarkusJx/install-boost@v2.4.4
uses: MarkusJx/install-boost@v2
id: install-boost
with:
# REQUIRED: Specify the required boost version
Expand Down Expand Up @@ -77,4 +91,5 @@ jobs:

- name: Build JASP desktop
run: |
cmake --build jasp-build --target all
# speed up build with -j
cmake --build jasp-build --target all -j6
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ build*/
bundle/
bundle*/
CMakeLists.txt.user
jasp-build

# CLion Stuff
cmake-build-*
Expand All @@ -89,4 +90,4 @@ Tools/ModuleBundleBuildDir
Modules/local

# User configurations
.qmlls.ini
.qmlls.ini
4 changes: 2 additions & 2 deletions Common/enginedefinitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
/// Using enumutilities templates to make sure we can easily and quickly go from enum -> string -> enum for json communication
///

DECLARE_ENUM(engineState, initializing, idle, analysis, filter, filterByName, rCode, computeColumn, moduleInstallRequest, moduleLoadRequest, pauseRequested, paused, resuming, stopRequested, stopped, logCfg, settings, killed, reloadData);
DECLARE_ENUM(engineState, initializing, idle, analysis, filter, filterByName, rCode, computeColumn, moduleInstallRequest, moduleUninstallRequest, moduleLoadRequest, pauseRequested, paused, resuming, stopRequested, stopped, logCfg, settings, killed, reloadData);
DECLARE_ENUM(performType, run, abort, saveImg, editImg, rewriteImgs);
DECLARE_ENUM(analysisResultStatus, validationError, fatalError, imageSaved, imageEdited, imagesRewritten, complete, running, changed, waiting);
DECLARE_ENUM(moduleStatus, initializing, installNeeded, loading, readyForUse, error);
DECLARE_ENUM(moduleStatus, initializing, installNeeded, uninstallNeeded, loading, readyForUse, error);
DECLARE_ENUM(engineAnalysisStatus, empty, toRun, running, changed, complete, error, exception, aborted, stopped, saveImg, editImg, rewriteImgs, synchingData);
DECLARE_ENUM(enginesListRoles, channel = 257, module, engineState, analysisStatus, runsWhat, running, idle, idleSoon); //hardcoded Qt::UserRole + 1, sue me.

Expand Down
43 changes: 41 additions & 2 deletions Desktop/components/JASP/Widgets/FileMenu/PrefsAdvanced.qml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ PrefsScrollView
}
}


CheckBox
{
id: githubPatDefault
Expand Down Expand Up @@ -152,10 +151,50 @@ PrefsScrollView
onCheckedChanged: preferencesModel.generateMarkdown = checked
visible: preferencesModel.developerMode
enabled: preferencesModel.developerMode
KeyNavigation.tab: cleanModulesFolder
KeyNavigation.tab: moduleLibraryUrl

}

Item
{
id: moduleLibraryUrlItem
width: parent.width
height: moduleLibraryUrl.height
visible: preferencesModel.developerMode
enabled: preferencesModel.developerMode

Label
{
id: moduleLibraryUrlLabel
text: qsTr("Module library URL: ")

anchors
{
left: parent.left
verticalCenter: parent.verticalCenter
margins: jaspTheme.generalAnchorMargin
}
}

PrefsTextInput
{
id: moduleLibraryUrl

text: preferencesModel.moduleLibraryURL
onEditingFinished: preferencesModel.moduleLibraryURL = text
nextEl: cleanModulesFolder

height: browseDeveloperFolderButton.height
anchors
{
left: moduleLibraryUrlLabel.right
right: parent.right
margins: jaspTheme.generalAnchorMargin
}

KeyNavigation.tab: cleanModulesFolder
}
}

RoundedButton
{
Expand Down
Loading
Loading