layer.py (4242B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\layer.py 2 import carbonui.const as uiconst 3 from carbonui.primitives.container import Container 4 from carbonui.uicore import uicore 5 6 class LayerManager(object): 7 __guid__ = 'uicls.LayerManager' 8 9 def __getattr__(self, k): 10 return self.GetLayer(k) 11 12 def GetLayer(self, name): 13 for layer in uicore.desktop.children: 14 if hasattr(layer, 'GetLayer'): 15 found = layer.GetLayer(name.lower()) 16 if found: 17 return found 18 19 Get = GetLayer 20 21 22 class LayerCore(Container): 23 __guid__ = 'uicls.LayerCore' 24 isTopLevelWindow = False 25 26 def ApplyAttributes(self, attributes): 27 Container.ApplyAttributes(self, attributes) 28 self.isopen = 0 29 self.isopening = 0 30 self.decoClass = None 31 self.form = self 32 self.uiwindow = self 33 34 @property 35 def analyticID(self): 36 return self.name 37 38 def ReloadUIObject(self): 39 newInstance = self.CloseView() 40 if newInstance: 41 newInstance.OpenView() 42 return newInstance 43 else: 44 self.display = True 45 return self 46 47 def GetLayer(self, name): 48 if name.lower() == self.name[2:].lower(): 49 return self 50 if name.lower() == self.name.lower(): 51 return self 52 for layer in self.children: 53 if hasattr(layer, 'GetLayer'): 54 found = layer.GetLayer(name) 55 if found: 56 return found 57 58 def OpenView(self, **kwargs): 59 self.display = True 60 if self.isopen or self.decoClass is None: 61 return 62 if self.isopening: 63 return 64 self.isopening = True 65 if getattr(self, '__notifyevents__', None): 66 sm.RegisterNotify(self) 67 try: 68 self.OnOpenView(**kwargs) 69 self.isopen = True 70 finally: 71 self.isopening = False 72 73 def OnOpenView(self, **kwargs): 74 pass 75 76 def OnCloseView(self, *args): 77 pass 78 79 def CloseView(self, recreate = True, *args): 80 if not self.isopen: 81 return 82 for l in self.children[:]: 83 if hasattr(l, 'CloseView'): 84 l.CloseView(recreate=True) 85 elif recreate: 86 l.Close() 87 88 wasopen = self.isopen 89 self.isopen = 0 90 if wasopen: 91 self.OnCloseView() 92 if getattr(self, '__notifyevents__', None): 93 sm.UnregisterNotify(self) 94 if uicore.uilib.GetMouseCapture() is self: 95 uicore.uilib.ReleaseCapture() 96 if recreate: 97 parent = None 98 name = None 99 if self.parent: 100 parent = self.parent 101 name = self.name 102 idx = parent.children.index(self) 103 self.Close() 104 if parent is not None: 105 decoClass, subLayers = uicore.layerData.get(name, (None, None)) 106 newInstance = parent.AddLayer(name, decoClass, subLayers, idx=idx) 107 return newInstance 108 else: 109 self.display = False 110 111 def AddLayer(self, name, decoClass = None, subLayers = None, idx = -1): 112 if decoClass: 113 layer = decoClass(parent=self, name=name, idx=idx, align=uiconst.TOALL, state=uiconst.UI_PICKCHILDREN) 114 else: 115 layer = LayerCore(parent=self, name=name, idx=idx, align=uiconst.TOALL, state=uiconst.UI_PICKCHILDREN) 116 layer.decoClass = decoClass or LayerCore 117 uicore.layerData[name] = (decoClass or LayerCore, subLayers) 118 if name.startswith('l_'): 119 name = name[2:] 120 setattr(uicore.layer, name.lower(), layer) 121 if subLayers is not None: 122 for _layerName, _decoClass, _subLayers in subLayers: 123 subLayer = layer.AddLayer(_layerName, _decoClass, _subLayers) 124 if _layerName.startswith('l_'): 125 _layerName = _layerName[2:] 126 setattr(layer, _layerName, subLayer) 127 128 return layer 129 130 def IsClosed(self): 131 return not self.isopen and not self.isopening 132 133 def ZoomBy(self, amount): 134 pass