Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
c738357
Add feature filtering prototype with date range support
tomasMizera Feb 10, 2026
3ebfbe6
Use filled filter icon when filters are active
tomasMizera Feb 10, 2026
b6f0fbd
Add dropdown filters for ValueMap and ValueRelation fields
tomasMizera Feb 16, 2026
12458c5
Merge branch 'master' into filtering-prototype
Withalion Mar 11, 2026
c614afb
Merge branch 'master' into filtering-prototype
Withalion Mar 20, 2026
345a9be
Merge branch 'filtering-prototype' into dev/filtering
Withalion Mar 23, 2026
cd676e1
Refactor filtering demo (#4430)
Withalion Mar 31, 2026
3ce1d14
Removed filter controller from main (#4436)
gabriel-bolbotina Mar 31, 2026
f3b25d7
Add segment control component (#4434)
gabriel-bolbotina Apr 6, 2026
90c9a09
Filter floating chip (#4427)
gabriel-bolbotina Apr 6, 2026
ea0867d
Adding filter banner component and filtering activated message (#4426)
gabriel-bolbotina Apr 6, 2026
ef901d8
Deleted filter layer section (#4437)
gabriel-bolbotina Apr 8, 2026
e089b44
Add unique values cpp model (#4440)
tomasMizera Apr 8, 2026
85e21e1
Added support for custom values for filtering checkboxes (#4442)
gabriel-bolbotina Apr 9, 2026
97c87f9
Update filtering logic in controller (#4444)
Withalion Apr 9, 2026
7f9ca4b
Integrate some things for filtering (#4446)
Withalion Apr 9, 2026
93a8f37
Added initial value map model (#4445)
gabriel-bolbotina Apr 9, 2026
66ee587
Added value map dropdown + search capabilities + preselection (#4447)
tomasMizera Apr 10, 2026
7f1efe3
Filtering integration 2 (#4448)
Withalion Apr 10, 2026
7846669
Integrate boolean filter input and update props we send to widgets (#…
tomasMizera Apr 14, 2026
3c47b41
Feature filtering integration 3 (#4449)
Withalion Apr 14, 2026
cd5ad06
Fix Date & Number filter inputs after merge
Withalion Apr 14, 2026
d4d31db
Fix value templates replacing to new plugin version
Withalion Apr 14, 2026
abec114
Modify seconds & miliseconds when applying datetime filters
Withalion Apr 14, 2026
4a7480f
Fix filtering info banners visibility logic
Withalion Apr 14, 2026
02c7170
Fix persistent enabled filters button
Withalion Apr 14, 2026
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
16 changes: 16 additions & 0 deletions .github/workflows/android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,14 @@ jobs:
echo "$FASTLANE_OUTPUT"
SHARE_URL=$(echo "$FASTLANE_OUTPUT" | awk '/APP_SHARE_URL:/ {print $NF}')
echo "Google play store APK link: $SHARE_URL" >> $GITHUB_STEP_SUMMARY

# Write the Play Store link into this job's check run output
curl -s -X PATCH \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2026-03-10" \
"https://api.github.com/repos/${{ github.repository }}/check-runs/${{ job.check_run_id }}" \
-d "{\"output\":{\"title\":\"Android ${{ matrix.ANDROID_ABI }}\",\"summary\":\"$SHARE_URL\"}}"

- name: Build AAB
if: ${{ github.ref_name == 'master' || github.ref_type == 'tag' }}
Expand Down Expand Up @@ -309,3 +317,11 @@ jobs:
echo "$FASTLANE_OUTPUT"
SHARE_URL=$(echo "$FASTLANE_OUTPUT" | awk '/APP_SHARE_URL:/ {print $NF}')
echo "Google play store AAB link: $SHARE_URL" >> $GITHUB_STEP_SUMMARY

# Write the Play Store link into this job's check run output
curl -s -X PATCH \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2026-03-10" \
"https://api.github.com/repos/${{ github.repository }}/check-runs/${{ job.check_run_id }}" \
-d "{\"output\":{\"title\":\"Android ${{ matrix.ANDROID_ABI }}\",\"summary\":\"$SHARE_URL\"}}"
7 changes: 5 additions & 2 deletions .github/workflows/code_style.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,12 @@ jobs:
uses: actions/checkout@v6

- name: Install Requirements
#workaround for the current false positive bug in cppcheck 2.20 (latest version)
run: |
brew update
brew install cppcheck
curl -L https://github.com/danmar/cppcheck/archive/refs/tags/2.19.1.tar.gz | tar xz
cmake -S cppcheck-2.19.1 -B cppcheck-build -DCMAKE_BUILD_TYPE=Release
cmake --build cppcheck-build -j$(sysctl -n hw.logicalcpu)
cmake --install cppcheck-build

- name: Run cppcheck test
run: ./scripts/cppcheck.bash
4 changes: 2 additions & 2 deletions .zenodo.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"description": "<p>Mergin Maps mobile app is a QGIS powered app for Android and iOS devices.</p>",
"license": "GPLv3",
"title": "Mergin Maps mobile app",
"version": "2026.1.2",
"version": "2026.2.0",
"upload_type": "software",
"publication_date": "2022-02-24",
"creators": [
Expand Down Expand Up @@ -39,7 +39,7 @@
"related_identifiers": [
{
"scheme": "url",
"identifier": "https://github.com/MerginMaps/mobile/tree/2026.1.2",
"identifier": "https://github.com/MerginMaps/mobile/tree/2026.2.0",
"relation": "isSupplementTo"
},
{
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cff-version: 2026.1.2
cff-version: 2026.2.0
message: "If you use this software, please cite it as below."
authors:
- family-names: "Martin"
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ cmake_minimum_required(VERSION 3.22)

# Note: To update version use script/update_all_versions.bash
set(MM_VERSION_MAJOR "2026")
set(MM_VERSION_MINOR "1")
set(MM_VERSION_PATCH "2")
set(MM_VERSION_MINOR "2")
set(MM_VERSION_PATCH "0")

if (VCPKG_TARGET_TRIPLET MATCHES ".*ios.*")
set(IOS TRUE)
Expand Down
92 changes: 50 additions & 42 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,27 @@
# Table of Contents
# Table of Contents <a name="table-of-contents"></a>
<!-- Table of contents generated with https://freelance-tech-writer.github.io/table-of-contents-generator/index.html -->

- [Table of Contents](#table-of-contents)
- [1. Introduction](#1-introduction)
- [2. Overview](#2-overview)
- [2.1 Secrets](#21-secrets)
- [2.2 Code formatting](#22-code-formatting)
- [3. Building GNU/Linux](#3-building-gnulinux)
- [4. Building Android (on Linux/macOS/Windows)](#4-building-android-on-linuxmacoswindows)
- [4.1. Android on Ubuntu](#41-android-on-ubuntu)
- [4.2. Android on macOS](#42-android-on-macos)
- [4.3. Android on Windows](#43-android-on-windows)
- [5. Building iOS](#5-building-ios)
- [6. Building macOS](#6-building-macos)
- [7. Building Windows](#7-building-windows)
- [8. FAQ](#8-faq)
- [9. Auto Testing](#9-auto-testing)

# 1. Introduction
- [1. Introduction](#introduction)
- [2. Overview](#overview)
- [2.1 Secrets](#secrets)
- [2.2 Code formatting](#code-formatting)
- [2.3 Qt packages](#qt-packages)
- [2.4 Vcpkg](#vcpkg)
- [2.5 ccache](#ccache)
- [3. Building GNU/Linux](#building-linux)
- [3.1 Ubuntu 22.04](#ubuntu)
- [4. Building Android (on Linux/macOS/Windows)](#building-android)
- [4.1. Android on Ubuntu](#android-on-linux)
- [4.2. Android on macOS](#android-on-macos)
- [4.3. Android on Windows](#android-on-windows)
- [5. Building iOS](#building-ios)
- [6. Building macOS](#building-macos)
- [7. Building Windows](#building-windows)
- [8. FAQ](#faq)
- [9. Auto Testing](#auto-testing)

# 1. Introduction <a name="introduction"></a>

This document is the original installation guide of the described software
Mergin Maps mobile app. The software and hardware descriptions named in this
Expand All @@ -39,7 +43,7 @@ For code architecture of codebase, please see [docs](./docs/README.md).
**Note to document writers:** Please use this document as the central
place for describing build procedures. Please do not remove this notice.

# 2. Overview
# 2. Overview <a name="overview"></a>

Mobile app, like a number of major projects (e.g., KDE),
uses [CMake](https://www.cmake.org) for building from source.
Expand All @@ -53,7 +57,7 @@ Generally, for building setup, we recommend to use the same versions of librarie
[GitHub Actions](https://github.com/MerginMaps/mobile/tree/master/.github/workflows).
Open workflow file for your platform/target and see the version of libraries used and replicate it in your setup.

## 2.1 Secrets
## 2.1 Secrets <a name="secrets"></a>

To communicate with MerginAPI, some endpoints need to attach `api_key`. To not leak API_KEY,
the source code that returns the API_KEYS is encrypted.
Expand Down Expand Up @@ -81,7 +85,7 @@ cd core/
openssl aes-256-cbc -d -in merginsecrets.cpp.enc -out merginsecrets.cpp -md md5
```

## 2.2 Code formatting
## 2.2 Code formatting <a name="code-formatting"></a>

We use `astyle` to format CPP and Objective-C files. Format is similar to what QGIS has.
We use `cmake-format` to format CMake files.
Expand All @@ -92,12 +96,12 @@ their usage

For more details about code conventions, please read our [code conventions doc](./docs/code_convention.md).

## 2.3 Qt packages
## 2.3 Qt packages <a name="qt-packages"></a>

Mergin Maps Mobile app is built with Qt. Qt is build with vcpkg as part of the configure step, but it is recommended
to install QtCreator and Qt on your host to be able to release translations.

## 2.4 Vcpkg
## 2.4 Vcpkg <a name="vcpkg"></a>

Dependencies are build with vcpkg. To fix the version of libraries, you need to download vcpkg and checkout to git commit specified
in the file `VCPKG_BASELINE` in the repository.
Expand All @@ -115,13 +119,13 @@ in the file `VCPKG_BASELINE` in the repository.
./bootstrap-vcpkg.sh
```

## 2.4 ccache
## 2.5 ccache <a name="ccache"></a>

Install and configure ccache for development. It speeds up the development significantly.

# 3. Building GNU/Linux
# 3. Building GNU/Linux <a name="building-linux"></a>

## 3.1 Ubuntu 22.04
## 3.1 Ubuntu 22.04 <a name="ubuntu"></a>

Steps to build and run mobile app:

Expand Down Expand Up @@ -157,7 +161,7 @@ Steps to build and run mobile app:
Alternatively you can open QtCreator and add cmake defines to the QtCreator Project setup table and configure from QtCreator (recommended for
development and debugging)

To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

```
mkdir -p build
Expand All @@ -172,6 +176,10 @@ Steps to build and run mobile app:
-GNinja \
-S ../mobile
```

Note: `libpq` will fail to build if the `zic` tool is not in the system path. In that case, set the `ZIC` environment variable to the full path leading to
the executable, for example: `export ZIC=/usr/sbin/zic`.

4. Build application

```
Expand All @@ -184,13 +192,13 @@ Steps to build and run mobile app:
./app/Input
```

For testing read [Auto Testing](#AutoTesting) section.
For testing read [Auto Testing](#auto-testing) section.

# 4. Building Android (on Linux/macOS/Windows)
# 4. Building Android (on Linux/macOS/Windows) <a name="building-android"></a>

For building ABIs see https://www.qt.io/blog/android-multi-abi-builds-are-back

## 4.1. Android on Linux
## 4.1. Android on Linux <a name="android-on-linux"></a>

1. Install some dependencies, see requirements in `.github/workflows/android.yml`

Expand Down Expand Up @@ -275,7 +283,7 @@ For building ABIs see https://www.qt.io/blog/android-multi-abi-builds-are-back
```


To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

4. Build and Run

Expand All @@ -290,7 +298,7 @@ For building ABIs see https://www.qt.io/blog/android-multi-abi-builds-are-back
MerginMaps
```

## 4.2. Android on macOS
## 4.2. Android on macOS <a name="android-on-macos"></a>
1. Install Java

- `brew install openjdk@17`, then make this java version default ``export JAVA_HOME=`usr/libexec/java_home -v 17` ``. Check if it's default by executing `java --version`
Expand Down Expand Up @@ -391,7 +399,7 @@ For building ABIs see https://www.qt.io/blog/android-multi-abi-builds-are-back
```


To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

4. Build and Run

Expand All @@ -406,12 +414,12 @@ For building ABIs see https://www.qt.io/blog/android-multi-abi-builds-are-back
MerginMaps
```

## 4.3. Android on Windows
## 4.3. Android on Windows <a name="android-on-windows"></a>

Even technically it should be possible, we haven't tried this setup yet. If you managed to compile
mobile app for Android on Windows, please help us to update this section.

# 5. Building iOS
# 5. Building iOS <a name="building-ios"></a>

- you have to run Release or RelWithDebInfo builds. Debug builds will usually crash on some Qt's assert
- if there is any problem running mobile app from Qt Creator, open cmake-generated project in XCode directly
Expand Down Expand Up @@ -441,7 +449,7 @@ mobile app for Android on Windows, please help us to update this section.

Alternatively you can open QtCreator and add cmake defines to the QtCreator Project setup table and configure from QtCreator (recommended for development and debugging)

To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

Note: make sure you adjust VCPKG_HOST_TRIPLET and CMAKE_SYSTEM_PROCESSOR if you use x64-osx host machine.

Expand Down Expand Up @@ -492,7 +500,7 @@ Alternatively, navigate to the build folder and open the Xcode Project:
Once the project is opened, build it from Xcode.


# 6. Building macOS
# 6. Building macOS <a name="building-macos"></a>

1. Install some dependencies, critically XCode, bison and flex. See "Install Build Dependencies" step in `.github/workflows/macos.yml`
```
Expand Down Expand Up @@ -521,7 +529,7 @@ Once the project is opened, build it from Xcode.

Alternatively you can open QtCreator and add cmake defines to the QtCreator Project setup table and configure from QtCreator (recommended for development and debugging)

To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

Note: for x64-osx (intel laptops) build use VCPKG_TARGET_TRIPLET instead of arm64-osx (Mx laptops)

Expand Down Expand Up @@ -555,7 +563,7 @@ Once the project is opened, build it from Xcode.
./app/MerginMaps.app/Contents/MacOS/MerginMaps
```

# 7. Building Windows
# 7. Building Windows <a name="building-windows"></a>

1. Install some dependencies. See `.github/workflows/win.yml`
Critically Visual Studio, cmake, bison and flex. Setup build VS environment (adjust to your version)
Expand Down Expand Up @@ -583,7 +591,7 @@ Once the project is opened, build it from Xcode.
Alternatively you can open QtCreator and add cmake defines to the QtCreator Project setup table and configure from QtCreator (recommended for
development and debugging)

To use USE_MM_SERVER_API_KEY read [Secrets](#Secrets) section.
To use USE_MM_SERVER_API_KEY read [Secrets](#secrets) section.

```
mkdir build
Expand Down Expand Up @@ -613,7 +621,7 @@ Once the project is opened, build it from Xcode.
./app/MerginMaps.exe
```

# 8. FAQ
# 8. FAQ <a name="faq"></a>

- If you have "error: undefined reference to 'stdout'" or so, make sure that in BUILD ENV you have ANDROID_NDK_PLATFORM=android-24 or later!
![image](https://user-images.githubusercontent.com/22449698/166630970-a776576f-c505-4265-b4c8-ffbe212c6745.png)
Expand All @@ -625,7 +633,7 @@ Once the project is opened, build it from Xcode.
- Make sure it's targeting **build** directory
- If using Visual Studio Code to configure and build the project, check the template in the `docs` folder.

# 9. Auto Testing
# 9. Auto Testing <a name="auto-testing"></a>

You need to add cmake define `-DENABLE_TESTING=TRUE` on your cmake configure line.
Also, you need to open Passbolt and check for password for user `test_mobileapp` on `app.dev.merginmaps.com`,
Expand All @@ -641,4 +649,4 @@ TEST_API_PASSWORD=<your_password>
```

Build binary, and you can run tests either with `ctest` or you can run individual tests by adding `--test<TestName>`
e.g. ` ./MerginMaps --testMerginApi`
e.g. ` ./MerginMaps --testMerginApi`
9 changes: 9 additions & 0 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ set(MM_SRCS
featurelayerpair.cpp
featuresmodel.cpp
fieldsmodel.cpp
filter/uniquevaluesfiltermodel.cpp
filter/valuemapfiltermodel.cpp
filter/searchproxymodel.cpp
filtercontroller.cpp
guidelinecontroller.cpp
hapticsmodel.cpp
identifykit.cpp
Expand Down Expand Up @@ -147,6 +151,10 @@ set(MM_HDRS
featurelayerpair.h
featuresmodel.h
fieldsmodel.h
filter/uniquevaluesfiltermodel.h
filter/valuemapfiltermodel.h
filter/searchproxymodel.h
filtercontroller.h
guidelinecontroller.h
hapticsmodel.h
identifykit.h
Expand Down Expand Up @@ -318,6 +326,7 @@ target_include_directories(
MerginMaps
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/attributes
${CMAKE_CURRENT_SOURCE_DIR}/filter
${CMAKE_CURRENT_SOURCE_DIR}/map
${CMAKE_CURRENT_SOURCE_DIR}/layer
${CMAKE_CURRENT_SOURCE_DIR}/maptools
Expand Down
8 changes: 8 additions & 0 deletions app/activeproject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ ActiveProject::ActiveProject( AppSettings &appSettings
setAutosyncEnabled( mAppSettings.autosyncAllowed() );

QObject::connect( &mAppSettings, &AppSettings::autosyncAllowedChanged, this, &ActiveProject::setAutosyncEnabled );

mFilterController = std::make_unique<FilterController>();
connect( this, &ActiveProject::projectReloaded, mFilterController.get(), &FilterController::loadFilterConfig );
}

ActiveProject::~ActiveProject() = default;
Expand Down Expand Up @@ -668,3 +671,8 @@ bool ActiveProject::photoSketchingEnabled() const

return mQgsProject->readBoolEntry( QStringLiteral( "Mergin" ), QStringLiteral( "PhotoSketching/Enabled" ), false );
}

FilterController *ActiveProject::filterController() const
{
return mFilterController.get();
}
Loading
Loading