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

1"""Generic group layer.""" 

2 

3import gws 

4import gws.config 

5import gws.gis.bounds 

6import gws.gis.source 

7 

8from . import core 

9 

10gws.ext.new.layer('group') 

11 

12 

13class Config(core.Config): 

14 """Group layer""" 

15 

16 layers: list[gws.ext.config.layer] 

17 """layers in this group""" 

18 

19 

20class Props(core.Props): 

21 layers: list[gws.ext.props.layer] 

22 

23 

24class Object(core.Object): 

25 isGroup = True 

26 

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() 

32 

33 def configure_group(self): 

34 p = self.cfg('layers') 

35 if p: 

36 self.configure_group_layers(p) 

37 return True 

38 

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 

44 

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 

50 

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 

59 

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 

67 

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) 

72 

73 self.isSearchable = any(la.isSearchable for la in self.layers) 

74 

75 ## 

76 

77 def props(self, user): 

78 return gws.u.merge(super().props(user), type='group')