Skip to content

Conversation

mohsenD98
Copy link
Collaborator

@mohsenD98 mohsenD98 commented Sep 19, 2025

🚀 Description

This pull request introduces major enhancements to QField, focusing on improving the user experience and the project creation workflow.
⚠️ Note: It's not fully functional yet; upcoming PRs will connect the core logic to this UI.

✨ Key Changes

  1. Redesigned Welcome Screen
    Updated to include the new "Create new project" button for easier access.

  2. Project Creation UI
    Provides an intuitive interface for creating new projects with the following options:

    • Project Name – Specify a custom project name.
    • Basemap Selection – Choose from predefined basemaps, a blank map, or provide a custom URL.
    • Take Notes – Enable note-taking with optional media attachments.
    • Track Position – Record location automatically with configurable settings.
    • QFieldCloud Integration – Enable backup and collaboration through QFieldCloud.
  3. Introduce QfExpandableGroupBox.qml
    Collapsible and expandable group box with check property and automatic height, used across the project creation UI.

🎬 Demo

Screencast.From.2025-09-19.17-38-19.webm

@mohsenD98 mohsenD98 self-assigned this Sep 19, 2025
@duke-nyuki
Copy link

@qfield-fairy
Copy link
Collaborator

qfield-fairy commented Sep 19, 2025

@mohsenD98 mohsenD98 marked this pull request as ready for review September 19, 2025 14:35
import Theme

Page {
id: createNewProject
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
id: createNewProject
id: projectCreation

Comment on lines +4359 to +4361
onCreate: projectConfig => {
console.log(JSON.stringify(projectConfig));
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We will go down a different path, you can remove that.

Page {
id: createNewProject

signal create(var projectConfig)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can remove that.

header: QfPageHeader {
title: qsTr("Create a new project")

backgroundFill: false
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❤️

Comment on lines +35 to +38
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: createProjectButton.top
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can go for anchors.fill: parent

What we want here is for the create project button container to sit on top of the flickable view, with a semi transparent background that's opaque enough not to be distracting but transparent enough to see any content that's not in the visible part (like we do with the dashboard)

TextField {
id: baseMapURL
font: Theme.defaultFont
placeholderText: text == "" && !focus ? "e.g., https://your-map-service.com/{z}/" : ""
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
placeholderText: text == "" && !focus ? "e.g., https://your-map-service.com/{z}/" : ""
placeholderText: text == "" && !focus ? "e.g., https://your-map-service.com/{z}/{x}/{y}.png" : ""

anchors.right: parent.right

Label {
text: qsTr("Quickly capture notes with date, time, and comments. Optionally, attach images to enrich your notes.")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
text: qsTr("Quickly capture notes with date, time, and comments. Optionally, attach images to enrich your notes.")
text: qsTr("Quickly capture notes with date, time, and comments. Optionally, attach multimedia items such as images and videos to enrich your notes.")

}
}

QfButton {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we'll want a floating Rectangle {} over the configuration layout with a semi opaque background, within which this single QfButton will exist.

Comment on lines +334 to +341
"name": projectName.text,
"isCustomBasemapSelected": isCustomBasemap,
"basemap": selectedBasemap,
"takeNotes": takeNotesGroupBox.checked,
"takeMediaAttachments": takeMediaCheckBox.checked,
"trackPosition": trackPositionGroupBox.checked,
"autoTrackPosition": autoTrackPositionCheckBox.checked,
"useCloud": qfieldCloudGroupBox.checked
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please align the keys with that: #6652

For cloud, name is "use_cloud"

"iconColor": Theme.mainColor,
"action": function () {
platformUtilities.requestStoragePermission();
openLocalDataPicker();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For the sake of harmonizing function names, let's go for showLocalDataPicker();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants