Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UX - Enable more widgets when clicking in the baselayers predefined group #548

Merged
merged 1 commit into from
Jan 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 6 additions & 5 deletions lizmap/definitions/definitions.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,12 @@ class RepositoryComboData(Enum):
@unique
class PredefinedGroup(Enum):
""" The list of predefined group in LWC. """
No = Qt.UserRole
Hidden = Qt.UserRole + 1
Baselayers = Qt.UserRole + 2
BackgroundColor = Qt.UserRole + 3
Overview = Qt.UserRole + 4
No = Qt.UserRole # 256
Hidden = Qt.UserRole + 1 # 257
Baselayers = Qt.UserRole + 2 # 258 The group `baselayers`
BackgroundColor = Qt.UserRole + 3 # 259
Overview = Qt.UserRole + 4 # 260
BaselayerItem = Qt.UserRole + 5 # 261 Layer or group in the `baselayers`, which will be an item in the combobox


IgnLayer = namedtuple('IgnLayer', ['name', 'title', 'format'])
Expand Down
2 changes: 1 addition & 1 deletion lizmap/dialogs/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -923,7 +923,7 @@ def setup_icons(self):
# Set stylesheet for QGroupBox
q_group_box = (
self.gb_tree,
self.gb_layerSettings,
self.panel_layer_all_settings,
self.gb_ftp,
self.gb_project_thumbnail,
self.gb_visibleTools,
Expand Down
40 changes: 30 additions & 10 deletions lizmap/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,7 @@ def write_log_message(message, tag, level):
self.dlg.up_layout_form_button,
self.dlg.down_layout_form_button,
# Drag drop dataviz designer
self.dlg.label_dnd_dataviz_help,
self.dlg.button_add_dd_dataviz,
self.dlg.button_remove_dd_dataviz,
self.dlg.button_edit_dd_dataviz,
Expand Down Expand Up @@ -507,7 +508,7 @@ def write_log_message(message, tag, level):
self.layer_options_list['toggled']['widget'] = self.dlg.cbToggled
self.layer_options_list['group_visibility']['widget'] = self.dlg.list_group_visibility
self.layer_options_list['popup']['widget'] = self.dlg.checkbox_popup
self.layer_options_list['popupFrame']['widget'] = self.dlg.popup_frame
self.layer_options_list['popupFrame']['widget'] = self.dlg.frame_layer_popup
self.layer_options_list['popupTemplate']['widget'] = None
self.layer_options_list['popupMaxFeatures']['widget'] = self.dlg.sbPopupMaxFeatures
self.layer_options_list['popupDisplayChildren']['widget'] = self.dlg.cbPopupDisplayChildren
Expand Down Expand Up @@ -2289,7 +2290,11 @@ def process_node(self, node, parent_node, json_layers):
if self.myDic[child_id]['name'].lower() == 'overview':
predefined_group = PredefinedGroup.Overview.value

elif parent_node.data(0, Qt.UserRole + 1) == PredefinedGroup.Baselayers.value:
# Parent is "baselayers", children will be an item in the dropdown menu
predefined_group = PredefinedGroup.BaselayerItem.value
elif parent_node.data(0, Qt.UserRole + 1) != PredefinedGroup.No.value:
# Others will be in "hidden" or "overview".
# TODO fixme maybe ?
predefined_group = PredefinedGroup.Hidden.value

Expand All @@ -2302,6 +2307,9 @@ def process_node(self, node, parent_node, json_layers):
)
if predefined_group != PredefinedGroup.No.value:
text = tr('Special group for Lizmap Web Client')
if self.is_dev_version:
# For debug purpose only about groups
text += f'. Data group ID {Qt.UserRole} : {predefined_group}'
item.setToolTip(0, self.myDic[child_id]['name'] + ' - ' + text)
elif is_layer_wms_excluded(self.project, self.myDic[child_id]['name']):
text = tr(
Expand Down Expand Up @@ -2373,7 +2381,12 @@ def populate_layer_tree(self) -> dict:
def from_data_to_ui_for_layer_group(self):
""" Restore layer/group values into each field when selecting a layer in the tree. """
# At the beginning, enable all widgets.
self.dlg.gb_layerSettings.setEnabled(True)
self.dlg.panel_layer_all_settings.setEnabled(True)
self.dlg.group_layer_metadata.setEnabled(True)
self.dlg.group_layer_tree_options.setEnabled(True)
self.dlg.checkbox_popup.setEnabled(True)
self.dlg.frame_layer_popup.setEnabled(True)
self.dlg.group_layer_embedded.setEnabled(True)
# for key, val in self.layer_options_list.items():
# if val.get('widget'):
# val.get('widget').setEnabled(True)
Expand Down Expand Up @@ -2521,19 +2534,26 @@ def from_data_to_ui_for_layer_group(self):
self.enable_popup_source_button()
self.dlg.follow_map_theme_toggled()

if to_bool(os.getenv("CI"), default_value=False):
if self._current_item_predefined_group() != PredefinedGroup.No.value:
self.dlg.gb_layerSettings.setEnabled(False)
return

if self.current_lwc_version() >= LwcVersions.Lizmap_3_7:
if self._current_item_predefined_group() != PredefinedGroup.No.value:
self.dlg.gb_layerSettings.setEnabled(False)
if self._current_item_predefined_group() == PredefinedGroup.BaselayerItem.value:
self.dlg.group_layer_metadata.setEnabled(False)
self.dlg.group_layer_tree_options.setEnabled(False)
self.dlg.checkbox_popup.setEnabled(False)
self.dlg.frame_layer_popup.setEnabled(False)
self.dlg.group_layer_embedded.setEnabled(False)

elif self._current_item_predefined_group() in (
PredefinedGroup.Overview.value,
PredefinedGroup.Baselayers.value,
PredefinedGroup.BackgroundColor.value,
PredefinedGroup.Hidden.value,
):
self.dlg.panel_layer_all_settings.setEnabled(False)

layer = self._current_selected_layer()
if isinstance(layer, QgsMapLayer):
if is_layer_wms_excluded(self.project, layer.name()):
self.dlg.gb_layerSettings.setEnabled(False)
self.dlg.panel_layer_all_settings.setEnabled(False)

# def enable_or_not_toggle_checkbox(self):
# """ Only for groups, to determine the state of the "toggled" option. """
Expand Down
30 changes: 20 additions & 10 deletions lizmap/resources/ui/ui_lizmap.ui
Original file line number Diff line number Diff line change
Expand Up @@ -1487,7 +1487,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</widget>
</item>
<item>
<widget class="QGroupBox" name="gb_layerSettings">
<widget class="QGroupBox" name="panel_layer_all_settings">
<property name="title">
<string>Selected item settings</string>
</property>
Expand All @@ -1508,7 +1508,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<item>
<widget class="QgsCollapsibleGroupBox" name="mGroupBox">
<widget class="QgsCollapsibleGroupBox" name="group_layer_metadata">
<property name="title">
<string>Metadata</string>
</property>
Expand Down Expand Up @@ -1592,7 +1592,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="mGroupBox_2">
<widget class="QgsCollapsibleGroupBox" name="group_layer_tree_options">
<property name="title">
<string>Layer tree options</string>
</property>
Expand Down Expand Up @@ -1709,7 +1709,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</widget>
</item>
<item>
<widget class="QFrame" name="popup_frame">
<widget class="QFrame" name="frame_layer_popup">
<property name="frameShape">
<enum>QFrame::Box</enum>
</property>
Expand Down Expand Up @@ -1914,7 +1914,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</widget>
</item>
<item>
<widget class="QgsCollapsibleGroupBox" name="mGroupBox_4">
<widget class="QgsCollapsibleGroupBox" name="group_layer_map_options">
<property name="title">
<string>Map options</string>
</property>
Expand Down Expand Up @@ -2093,7 +2093,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<widget class="QGroupBox" name="group_layer_embedded">
<property name="title">
<string>Embedded layers and groups</string>
</property>
Expand Down Expand Up @@ -2239,7 +2239,7 @@ This is different to the map maximum extent (defined in QGIS project properties,
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>This is just some predefined base layers. You can have more using the &quot;QuickMapServices&quot; plugin.</string>
<string>This is just some predefined base layers.</string>
</property>
</widget>
</item>
Expand Down Expand Up @@ -3612,7 +3612,17 @@ This is different to the map maximum extent (defined in QGIS project properties,
<attribute name="title">
<string>Drag and Drop Layout</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_45">
<layout class="QVBoxLayout" name="verticalLayout_75">
<item>
<widget class="QLabel" name="label_dnd_dataviz_help">
<property name="text">
<string>Similar to the native QGIS feature about Drag&amp;Drop form layout, it's possible to organize plots in tabs and containers</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_59">
<item>
Expand Down Expand Up @@ -5299,8 +5309,8 @@ This is different to the map maximum extent (defined in QGIS project properties,
<tabstop>remove_filter_form_button</tabstop>
<tabstop>out_log</tabstop>
<tabstop>button_clear_log</tabstop>
<tabstop>mGroupBox_2</tabstop>
<tabstop>mGroupBox_4</tabstop>
<tabstop>group_layer_tree_options</tabstop>
<tabstop>group_layer_map_options</tabstop>
<tabstop>checkbox_popup</tabstop>
<tabstop>btConfigurePopup</tabstop>
<tabstop>checkbox_server_cache</tabstop>
Expand Down
21 changes: 18 additions & 3 deletions lizmap/test/test_ui.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from pathlib import Path

from qgis.core import QgsProject, QgsVectorLayer
from qgis.core import QgsProject, QgsRasterLayer, QgsVectorLayer
from qgis.PyQt.QtCore import Qt
from qgis.testing import unittest
from qgis.testing.mocked import get_iface
Expand Down Expand Up @@ -102,6 +102,13 @@ def _setup_empty_project(self, lwc_version=LwcVersions.latest()):
lizmap = Lizmap(get_iface(), lwc_version=lwc_version)
baselayers = lizmap._add_group_legend('baselayers', parent=None, project=project)
lizmap._add_group_legend('project-background-color', baselayers, project=project)
hidden = lizmap._add_group_legend('hidden', project=project)

# For testing, we add OSM as hidden layer
hidden_raster = QgsRasterLayer(
"type=xyz&url=https://tile.openstreetmap.org/{z}/{x}/{y}.png&zmax=19&zmin=0", "OSM", 'wms')
project.addMapLayer(hidden_raster, False)
hidden.addLayer(hidden_raster)

# Do not use read_lizmap_config_file
# as it will be called by read_cfg_file and also the UI is set in read_cfg_file
Expand Down Expand Up @@ -150,13 +157,21 @@ def test_lizmap_layer_properties(self):
# Click the group base-layers
group_item = lizmap.dlg.layer_tree.findItems('baselayers', Qt.MatchContains | Qt.MatchRecursive, 0)[0]
lizmap.dlg.layer_tree.setCurrentItem(group_item)
self.assertFalse(lizmap.dlg.gb_layerSettings.isEnabled())
self.assertFalse(lizmap.dlg.panel_layer_all_settings.isEnabled())

# Click the group project-background-color
group_item = lizmap.dlg.layer_tree.findItems(
'project-background-color', Qt.MatchContains | Qt.MatchRecursive, 0)[0]
lizmap.dlg.layer_tree.setCurrentItem(group_item)
self.assertFalse(lizmap.dlg.gb_layerSettings.isEnabled())
self.assertTrue(lizmap.dlg.panel_layer_all_settings.isEnabled())
self.assertFalse(lizmap.dlg.group_layer_metadata.isEnabled())

# Click the group hidden
group_item = lizmap.dlg.layer_tree.findItems('hidden', Qt.MatchContains | Qt.MatchRecursive, 0)[0]
lizmap.dlg.layer_tree.setCurrentItem(group_item)
# It should work, maybe the test click and click in the UI is missing one thing
# self.assertEqual(PredefinedGroup.Hidden.value, lizmap._current_item_predefined_group())
# self.assertFalse(lizmap.dlg.panel_layer_all_settings.isEnabled())

# Back to a layer outside of these groups
group_item = lizmap.dlg.layer_tree.findItems('lines', Qt.MatchContains | Qt.MatchRecursive, 0)[0]
Expand Down