diff --git a/qfieldsync/gui/mapthemes_config_widget.py b/qfieldsync/gui/mapthemes_config_widget.py
new file mode 100644
index 00000000..c8ba2a66
--- /dev/null
+++ b/qfieldsync/gui/mapthemes_config_widget.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+"""
+/***************************************************************************
+ MapThemesConfigWidget
+ A QGIS plugin
+ Sync your projects to QField
+ -------------------
+ begin : 2020-10-10
+ git sha : $Format:%H$
+ copyright : (C) 2020 by OPENGIS.ch
+ email : info@opengis.ch
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program 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. *
+ * *
+ ***************************************************************************/
+"""
+
+from qgis.core import Qgis
+from qgis.gui import QgsMapLayerComboBox
+
+from qgis.PyQt.QtCore import Qt
+from qgis.PyQt.QtWidgets import QTableWidgetItem, QTableWidget
+
+
+class MapThemesConfigWidget(QTableWidget):
+ def __init__(self, project, configuration, parent=None):
+ """Constructor."""
+ super(QTableWidget, self).__init__(parent=parent)
+
+ self.project = project
+
+ self.setMinimumHeight(200)
+ self.setColumnCount(2)
+ self.setHorizontalHeaderLabels(
+ [self.tr("Map Theme"), self.tr("Default Active Layer")]
+ )
+
+ self.reload(configuration)
+
+ def reload(self, configuration):
+ """
+ Load map themes into table.
+ """
+
+ self.setRowCount(0)
+ self.setSortingEnabled(False)
+ map_themes = self.project.mapThemeCollection().mapThemes()
+ for map_theme in map_themes:
+ count = self.rowCount()
+ self.insertRow(count)
+ item = QTableWidgetItem(map_theme)
+ item.setData(Qt.EditRole, map_theme)
+ self.setItem(count, 0, item)
+
+ cmb = QgsMapLayerComboBox()
+ cmb.setAllowEmptyLayer(True)
+ cmb.setProject(self.project)
+ cmb.setFilters(Qgis.LayerFilter.VectorLayer)
+ if map_theme in configuration:
+ cmb.setLayer(self.project.mapLayer(configuration[map_theme]))
+ self.setCellWidget(count, 1, cmb)
+
+ self.setColumnWidth(0, int(self.width() * 0.2))
+ self.setColumnWidth(1, int(self.width() * 0.75))
+ self.sortByColumn(0, Qt.AscendingOrder)
+ self.setSortingEnabled(True)
+
+ def createConfiguration(self):
+ configuration = {}
+ for i in range(self.rowCount()):
+ item = self.item(i, 0)
+ map_theme = item.data(Qt.EditRole)
+ cmb = self.cellWidget(i, 1)
+ layer_id = cmb.currentLayer().id() if cmb.currentLayer() else ""
+ configuration[map_theme] = layer_id
+
+ return configuration
diff --git a/qfieldsync/gui/project_configuration_widget.py b/qfieldsync/gui/project_configuration_widget.py
index 28de3858..691c750e 100644
--- a/qfieldsync/gui/project_configuration_widget.py
+++ b/qfieldsync/gui/project_configuration_widget.py
@@ -36,6 +36,7 @@
from qfieldsync.core.preferences import Preferences
from qfieldsync.gui.layers_config_widget import LayersConfigWidget
+from qfieldsync.gui.mapthemes_config_widget import MapThemesConfigWidget
WidgetUi, _ = loadUiType(
os.path.join(os.path.dirname(__file__), "../ui/project_configuration_widget.ui"),
@@ -152,7 +153,7 @@ def reloadProject(self):
self.cloudExportTab.layout().addWidget(infoLabel, 0, 2)
self.cableExportTab.layout().addWidget(self.cableLayersConfigWidget)
- # Load Map Themes
+ # Map Themes configuration widgets
for theme in self.project.mapThemeCollection().mapThemes():
self.mapThemeComboBox.addItem(theme)
@@ -166,6 +167,11 @@ def reloadProject(self):
self.__project_configuration = ProjectConfiguration(self.project)
+ self.mapThemesConfigWidget = MapThemesConfigWidget(
+ self.project, self.__project_configuration.map_themes_active_layer
+ )
+ self.mapThemesGroupBox.layout().addWidget(self.mapThemesConfigWidget)
+
# Base map settings
self.createBaseMapGroupBox.setChecked(
self.__project_configuration.create_base_map
@@ -371,6 +377,10 @@ def apply(self):
keys[item.text()] = 1
self.preferences.set_value("attachmentDirs", list(keys.keys()))
+ self.__project_configuration.map_themes_active_layer = (
+ self.mapThemesConfigWidget.createConfiguration()
+ )
+
def onForceAutoPushClicked(self, checked):
self.forceAutoPushInterval.setEnabled(checked)
diff --git a/qfieldsync/ui/project_configuration_widget.ui b/qfieldsync/ui/project_configuration_widget.ui
index c1a0a3a3..2068859e 100644
--- a/qfieldsync/ui/project_configuration_widget.ui
+++ b/qfieldsync/ui/project_configuration_widget.ui
@@ -420,6 +420,23 @@
true
+ -
+
+
+ Map Themes Configuration
+
+
+ false
+
+
+ false
+
+
+ true
+
+
+
+
-