Coverage for gws-app/gws/base/layer/group.py: 0%
55 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1"""Generic group layer."""
3import gws
4import gws.config
5import gws.gis.bounds
6import gws.gis.source
8from . import core
10gws.ext.new.layer('group')
13class Config(core.Config):
14 """Group layer"""
16 layers: list[gws.ext.config.layer]
17 """layers in this group"""
20class Props(core.Props):
21 layers: list[gws.ext.props.layer]
24class Object(core.Object):
25 isGroup = True
27 def configure(self):
28 self.configure_group()
29 if not self.layers:
30 raise gws.Error(f'group {self} is empty')
31 self.configure_layer()
33 def configure_group(self):
34 p = self.cfg('layers')
35 if p:
36 self.configure_group_layers(p)
37 return True
39 def configure_bounds(self):
40 if super().configure_bounds():
41 return True
42 self.bounds = gws.gis.bounds.union([la.bounds for la in self.layers])
43 return True
45 def configure_zoom_bounds(self):
46 if super().configure_zoom_bounds():
47 return True
48 self.zoomBounds = gws.gis.bounds.union([(la.zoomBounds or la.bounds) for la in self.layers])
49 return True
51 def configure_resolutions(self):
52 if super().configure_resolutions():
53 return True
54 res = set()
55 for la in self.layers:
56 res.update(la.resolutions)
57 self.resolutions = sorted(res)
58 return True
60 def configure_legend(self):
61 if super().configure_legend():
62 return True
63 layers_uids = [la.uid for la in self.layers if la.legend]
64 if layers_uids:
65 self.legend = self.create_child(gws.ext.object.legend, type='combined', layerUids=layers_uids)
66 return True
68 def post_configure(self):
69 self.canRenderBox = any(la.canRenderBox for la in self.layers)
70 self.canRenderXyz = any(la.canRenderXyz for la in self.layers)
71 self.canRenderSvg = any(la.canRenderSvg for la in self.layers)
73 self.isSearchable = any(la.isSearchable for la in self.layers)
75 ##
77 def props(self, user):
78 return gws.u.merge(super().props(user), type='group')