def SpawnPointer(self, cumTop, cumLeft, pointLeft, pointUp, pointDown, element, text, arrowPosition): """ This is the function that actually creates the UI pointer """ layer = uicore.layer.hint display = True if self.ShouldHidePointer( ) or cumTop <= 0 and cumLeft <= 0 or not uiutil.IsVisible(element): display = False rectTop = 128 if pointLeft: rectTop = 0 elementContainer = UIPointerContainer( parent=layer, name='UIPointer', text=text, idx=-1, pos=(cumTop, cumLeft, UIPOINTER_WIDTH, UIPOINTER_HEIGHT), align=uiconst.TOPLEFT, state=uiconst.UI_NORMAL, display=display, rectTop=rectTop, pointDirections=(pointUp, pointDown, pointLeft), arrowPositionModifier=arrowPosition) elementContainer.ResizeAndAddFrame() return elementContainer
def FindFocus(self, browse=0): modal = self.GetModalWindow() if modal: active = modal else: active = self.GetActive() focus = self.GetFocus() if active is None: active = uicore.desktop if focus and hasattr(focus, 'CheckFocusChange'): usedFocusChange = focus.CheckFocusChange(browse) if usedFocusChange: return if focus and uiutil.IsUnder( focus, active) and uiutil.IsVisible(focus) and not browse: uthread.new(self.SetFocus, focus) return tabstops = [] if active: current, tabstops = self.CrawlForTabstops(active) if browse and len(tabstops) > 1: current = current or focus idx = 0 if current in tabstops: idx = browse + tabstops.index(current) if idx < 0: idx = len(tabstops) - 1 elif idx >= len(tabstops): idx = 0 self.SetFocus(tabstops[idx]) return if len(tabstops) and focus != tabstops[0]: self.SetFocus(tabstops[0]) return
def Confirm(self, starter=None): if self._blockConfirm: self._blockConfirm = 0 return False if uicore.ime.IsVisible(): return focus = self.GetFocus() active = self.GetActive() modal = self.GetModalWindow() if modal: if focus and uiutil.IsUnder(focus, modal): if hasattr(focus, 'Confirm') and focus != starter: return uthread.new(focus.Confirm) if hasattr(modal, 'Confirm') and modal != starter: if not getattr(modal, 'blockconfirmonreturn', 0) or uicore.uilib.Key(uiconst.VK_CONTROL): modal.Confirm() return True else: result = self.GetModalResult(uiconst.ID_OK) modal.SetModalResult(result) return True return False if getattr(focus, 'Confirm', None) and focus != starter: uthread.new(focus.Confirm) return True if hasattr(active, 'IsCurrentDialog') and active.IsCurrentDialog(): active.SetModalResult(uiconst.ID_OK) return True if getattr(active, 'Confirm', None) and active != starter: uthread.new(active.Confirm) return True if focus and focus.HasEventHandler('OnClick'): uthread.new(focus.OnClick, focus) return True if focus: searchFrom = self.GetTopLevelWindowAboveItem(focus) else: searchFrom = uicore.desktop if searchFrom: wnds = [ w for w in searchFrom.Find('trinity.Tr2Sprite2dContainer') + searchFrom.Find('trinity.Tr2Sprite2d') if getattr(w, 'btn_default', 0) == 1 ] if len(wnds): for wnd in wnds: if starter and starter == wnd: continue if uiutil.IsVisible(wnd): if wnd.HasEventHandler('OnClick'): uthread.new(wnd.OnClick, wnd) return True return False
def CheckMessages(self): if uiutil.IsVisible(self.sr.scroll): dateSortKey = 'sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time') messages = sm.GetService('logger').GetPendingMessages() if messages: entryList = self._PrepareListEntries(messages) maxlog = settings.user.ui.Get('logmessageamount', 100) self.sr.scroll.AddEntries(0, entryList) revSorting = self.sr.scroll.GetSortDirection() or self.sr.scroll.GetSortBy() is None if revSorting: self.sr.scroll.RemoveEntries(self.sr.scroll.GetNodes()[maxlog:]) else: self.sr.scroll.RemoveEntries(self.sr.scroll.GetNodes()[:-maxlog])
def ResolveOnChar(self, char, flag): ignore = (uiconst.VK_RETURN, uiconst.VK_BACK) if char < 32 and char not in ignore: return False focus = uicore.registry.GetFocus() if focus and hasattr(focus, 'OnChar') and uiutil.IsVisible(focus): if not blue.win32.IsTransgaming(): capsLock = trinity.app.GetKeyState(uiconst.VK_CAPITAL) if capsLock & 1: char = ord(unichr(char).upper()) ret = focus.OnChar(char, flag) if ret: return focus
def ApplyContentPortion(self): if not util.GetAttrs(self, 'sr', 'stationsoutpostsResults') or getattr( self, '_ignorePortion', False) or not uiutil.IsVisible( self.sr.stationsoutpostsResults) or not util.GetAttrs( self, 'sr', 'infrastructurehubs'): return portion = settings.user.ui.Get('stationsoutpostsPortion', 0.5) minResultSpace = self.sr.infrastructurehubs.height + 18 if self.sr.infrastructurehubsResults.state != uiconst.UI_HIDDEN: minResultSpace += 50 else: portion = 1.0 sl, st, sw, sh = self.sr.regionalOverview.GetAbsolute() rcl, rct, rcw, rch = self.sr.infrastructurehubsResults.GetAbsolute() spread = sh - self.sr.stationsoutposts.height - self.sr.header.height height = int(spread * portion) self.sr.stationsoutpostsResults.height = min(height, spread - minResultSpace)
def Confirm(self, *args): if self.OnReturn: self.CloseHistoryMenu() return uthread.new(self.OnReturn) searchFrom = uiutil.GetWindowAbove(self) if searchFrom: wnds = [ w for w in searchFrom.Find('trinity.Tr2Sprite2dContainer') + searchFrom.Find('trinity.Tr2Sprite2d') if getattr(w, 'btn_default', 0) == 1 ] if len(wnds): for wnd in wnds: if self == wnd: continue if uiutil.IsVisible(wnd): if hasattr(wnd, 'OnClick'): uthread.new(wnd.OnClick, wnd) return True return False
def CrawlForTabstops(self, fromwhere): blueTypeName = 'trinity.Tr2Sprite2dContainer' sorted = [] current = [] done = [] tabstopgroups = [ wnd for wnd in fromwhere.Find(blueTypeName) if getattr(wnd, 'isTabOrderGroup', None) and uiutil.IsVisible(wnd) ] for tabstopgroup in tabstopgroups: tabstops = [ wnd for wnd in tabstopgroup.Find(blueTypeName) if getattr(wnd, 'isTabStop', None) ] gAbs = tabstopgroup.GetAbsolute() for tabstop in tabstops: if uiutil.IsClickable(tabstop): if getattr(tabstop, 'hasFocus', None): current.append(tabstop) tAbs = tabstop.GetAbsolute() sorted.append(([gAbs[1], gAbs[0], tAbs[1], tAbs[0]], tabstop)) done.append(tabstop) tabstops = [ wnd for wnd in fromwhere.Find(blueTypeName) if getattr(wnd, 'isTabStop', None) ] for tabstop in tabstops: if tabstop not in done and uiutil.IsClickable(tabstop): if getattr(tabstop, 'hasFocus', None) == 1: current.append(tabstop) tAbs = tabstop.GetAbsolute() sorted.append(([tAbs[1], tAbs[0], tAbs[1], tAbs[0]], tabstop)) done.append(tabstop) if current: current = current[0] return (current, uiutil.SortListOfTuples(sorted))
def GetValidWindows(self, getModals=0, floatingOnly=False, getHidden=0): validWnds = [] for wnd in self.GetWindows(): if not self.IsWindow(wnd) or wnd.sr.stack is not None or getattr( wnd, '_changing', 0): continue if not getHidden and not uiutil.IsVisible(wnd): continue if not getModals and (getattr(wnd, 'isModal', 0) or getattr(wnd, 'isDialog', 0)): continue if floatingOnly and wnd.GetAlign() != uiconst.RELATIVE: continue if getattr(wnd, 'parent', None) is None: log.LogError( "Window without parent!; that shouldn't be possible. Window: %s" % repr(wnd)) print "Window without parent!; that shouldn't be possible. Window: %s" % repr( wnd), wnd.name continue validWnds.append(wnd) return validWnds
def SpawnPointer(self, cumTop, cumLeft, pointLeft, pointUp, pointDown, element, text, arrowPosition): layer = uicore.layer.hint display = True if uicore.layer.systemmenu.isopen or cumTop <= 0 and cumLeft <= 0 or not uiutil.IsVisible( element): display = False rectTop = 128 if pointLeft: rectTop = 0 elementContainer = uicls.UIPointerContainer( parent=layer, name='UIPointer', text=text, idx=-1, pos=(cumTop, cumLeft, UIPOINTER_WIDTH, UIPOINTER_HEIGHT), align=uiconst.TOPLEFT, state=uiconst.UI_NORMAL, display=display, rectTop=rectTop, pointDirections=(pointUp, pointDown, pointLeft), arrowPositionModifier=arrowPosition) elementContainer.ResizeAndAddFrame() return elementContainer
def Confirm(self, *args): if uiutil.IsVisible(self): uthread.new(self.OnClick, self)
def OnSetCorpStanding(self, *args): if uiutil.IsVisible(self) and self.sr.Get('inited', False) and self.sr.tabs: self.sr.tabs.ReloadVisible()
def OnAppEvent(self, msgID, wParam, lParam): try: returnValue = 0 currentMouseOver = self.GetMouseOver() if msgID == WM_MOUSEMOVE: mouseX = uicore.ReverseScaleDpi(lParam & 65535) mouseY = uicore.ReverseScaleDpi(lParam >> 16) if self.x != mouseX or self.y != mouseY: self.dx = mouseX - self.x self.dy = mouseY - self.y self.x = mouseX self.y = mouseY self.z = 0 if self.centerMouse: self.SetCursorPos(uicore.desktop.width / 2, uicore.desktop.height / 2) mouseCaptureItem = self.GetMouseCapture() if mouseCaptureItem: self._TryExecuteHandler(uiconst.UI_MOUSEMOVE, mouseCaptureItem, param=(wParam, lParam)) self._TryExecuteHandler(uiconst.UI_MOUSEMOVEDRAG, mouseCaptureItem, param=(wParam, lParam)) elif currentMouseOver: self._TryExecuteHandler(uiconst.UI_MOUSEMOVE, currentMouseOver, param=(wParam, lParam)) self._TryExecuteHandler(uiconst.UI_MOUSEMOVEDRAG, currentMouseOver, param=(wParam, lParam)) elif msgID == WM_LBUTTONDOWN: self._globalClickCounter += 1 self.RegisterAppEventTime() self._expandMenu = uiconst.MOUSELEFT self._mouseButtonStates[uiconst.MOUSELEFT] = True self._mouseDownPosition[uiconst.MOUSELEFT] = (self.x, self.y, self.z) if self.exclusiveMouseFocusActive: self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, self.GetMouseCapture(), (uiconst.MOUSELEFT, ), param=(uiconst.MOUSELEFT, wParam)) self._TryExecuteHandler(uiconst.UI_MOUSEDOWNDRAG, self.GetMouseCapture(), (uiconst.MOUSELEFT, ), param=(uiconst.MOUSELEFT, wParam)) else: self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, currentMouseOver, (uiconst.MOUSELEFT, ), param=(uiconst.MOUSELEFT, wParam)) self._TryExecuteHandler(uiconst.UI_MOUSEDOWNDRAG, currentMouseOver, (uiconst.MOUSELEFT, ), param=(uiconst.MOUSELEFT, wParam)) self.SetCapture(currentMouseOver, retainFocus=self.exclusiveMouseFocusActive) if not uiutil.IsUnder(currentMouseOver, uicore.layer.menu): uicore.layer.menu.Flush() currentFocus = uicore.registry.GetFocus() if currentFocus != currentMouseOver: uicore.registry.SetFocus(currentMouseOver) elif msgID == WM_MBUTTONDOWN: self._globalClickCounter += 1 self.RegisterAppEventTime() self._expandMenu = None self._mouseButtonStates[uiconst.MOUSEMIDDLE] = True self._mouseDownPosition[uiconst.MOUSEMIDDLE] = (self.x, self.y, self.z) self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, currentMouseOver, (uiconst.MOUSEMIDDLE, ), param=(uiconst.MOUSEMIDDLE, wParam)) uthread.new(self.CheckAccelerators, uiconst.VK_MBUTTON, lParam) elif msgID == WM_RBUTTONDOWN: self._globalClickCounter += 1 self.RegisterAppEventTime() self._expandMenu = uiconst.MOUSERIGHT self._mouseButtonStates[uiconst.MOUSERIGHT] = True self._mouseDownPosition[uiconst.MOUSERIGHT] = (self.x, self.y, self.z) if self.exclusiveMouseFocusActive: self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, self.GetMouseCapture(), (uiconst.MOUSERIGHT, ), param=(uiconst.MOUSERIGHT, wParam)) else: self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, currentMouseOver, (uiconst.MOUSERIGHT, ), param=(uiconst.MOUSERIGHT, wParam)) if not uiutil.IsUnder(currentMouseOver, uicore.layer.menu): uicore.layer.menu.Flush() currentFocus = uicore.registry.GetFocus() if currentFocus is not currentMouseOver: uicore.registry.SetFocus(currentMouseOver) elif msgID == WM_XBUTTONDOWN: self._globalClickCounter += 1 self.RegisterAppEventTime() if wParam & 65536: self._mouseButtonStates[uiconst.MOUSEXBUTTON1] = True self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, currentMouseOver, (uiconst.MOUSEXBUTTON1, ), param=(uiconst.MOUSEXBUTTON1, wParam)) uthread.new(self.CheckAccelerators, uiconst.VK_XBUTTON1, lParam) else: self._mouseButtonStates[uiconst.MOUSEXBUTTON2] = True self._TryExecuteHandler(uiconst.UI_MOUSEDOWN, currentMouseOver, (uiconst.MOUSEXBUTTON2, ), param=(uiconst.MOUSEXBUTTON2, wParam)) uthread.new(self.CheckAccelerators, uiconst.VK_XBUTTON2, lParam) elif msgID == WM_LBUTTONUP: self.RegisterAppEventTime() self._mouseButtonStates[uiconst.MOUSELEFT] = False mouseCaptureItem = self.GetMouseCapture() if mouseCaptureItem: if not self.exclusiveMouseFocusActive: if getattr( mouseCaptureItem, 'expandOnLeft', 0 ) and not self.rightbtn and self._expandMenu == uiconst.MOUSELEFT and getattr( mouseCaptureItem, 'GetMenu', None): x, y, z = self._mouseDownPosition[ uiconst.MOUSELEFT] if abs(self.x - x) < 3 and abs(self.y - y) < 3: uthread.new(menu.ShowMenu, mouseCaptureItem, self.GetAuxMouseOver()) self._expandMenu = False self._TryExecuteHandler(uiconst.UI_MOUSEUP, mouseCaptureItem, (uiconst.MOUSELEFT, ), param=(uiconst.MOUSELEFT, wParam)) if not self.exclusiveMouseFocusActive: self.ReleaseCapture() if currentMouseOver is not mouseCaptureItem: self._TryExecuteHandler(uiconst.UI_MOUSEEXIT, mouseCaptureItem, param=(wParam, lParam)) self._TryExecuteHandler(uiconst.UI_MOUSEENTER, currentMouseOver, param=(wParam, lParam)) else: self._TryExecuteClickHandler(wParam, lParam) elif msgID == WM_RBUTTONUP: self._mouseButtonStates[uiconst.MOUSERIGHT] = False if self.exclusiveMouseFocusActive: self._TryExecuteHandler(uiconst.UI_MOUSEUP, self.GetMouseCapture(), (uiconst.MOUSERIGHT, ), param=(uiconst.MOUSERIGHT, wParam)) else: if not self.leftbtn and self._expandMenu == uiconst.MOUSERIGHT and ( getattr(currentMouseOver, 'GetMenu', None) or self._auxMouseOverRO is not None): x, y, z = self._mouseDownPosition[uiconst.MOUSERIGHT] if abs(self.x - x) < 3 and abs(self.y - y) < 3: uthread.new(menu.ShowMenu, currentMouseOver, self.GetAuxMouseOver()) self._expandMenu = None self._TryExecuteHandler(uiconst.UI_MOUSEUP, currentMouseOver, (uiconst.MOUSERIGHT, ), param=(uiconst.MOUSERIGHT, wParam)) elif msgID == WM_MBUTTONUP: self._mouseButtonStates[uiconst.MOUSEMIDDLE] = False self._TryExecuteHandler(uiconst.UI_MOUSEUP, currentMouseOver, (uiconst.MOUSEMIDDLE, ), param=(uiconst.MOUSEMIDDLE, wParam)) elif msgID == WM_XBUTTONUP: if wParam & 65536: self._mouseButtonStates[uiconst.MOUSEXBUTTON1] = False self._TryExecuteHandler(uiconst.UI_MOUSEUP, currentMouseOver, (uiconst.MOUSEXBUTTON1, ), param=(uiconst.MOUSEXBUTTON1, wParam)) else: self._mouseButtonStates[uiconst.MOUSEXBUTTON2] = False self._TryExecuteHandler(uiconst.UI_MOUSEUP, currentMouseOver, (uiconst.MOUSEXBUTTON2, ), param=(uiconst.MOUSEXBUTTON2, wParam)) elif msgID == WM_MOUSEWHEEL: self.RegisterAppEventTime() mouseZ = wParam >> 16 self.dz = mouseZ if self.mouseOver: mo = self.mouseOver mwHandlerArgs, mwHandler = self.FindEventHandler( mo, 'OnMouseWheel') while not mwHandler: if not mo.parent or mo is uicore.uilib.desktop: break mo = mo.parent mwHandlerArgs, mwHandler = self.FindEventHandler( mo, 'OnMouseWheel') calledMethod = None if mo: calledMethod = self._TryExecuteHandler( uiconst.UI_MOUSEWHEEL, mo, (mouseZ, ), param=(wParam, lParam)) if not calledMethod: focus = uicore.registry.GetFocus() if focus and uiutil.GetWindowAbove( self.mouseOver) == uicore.registry.GetActive(): self._TryExecuteHandler(uiconst.UI_MOUSEWHEEL, focus, (mouseZ, ), param=(wParam, lParam)) elif msgID in (WM_KEYDOWN, WM_SYSKEYDOWN): self._globalKeyDownCounter += 1 self.RegisterAppEventTime() focus = uicore.registry.GetFocus() if focus: self._TryExecuteHandler(uiconst.UI_KEYDOWN, focus, (wParam, lParam), param=(wParam, lParam)) self._keyDownAcceleratorThread = uthread.new( self.CheckAccelerators, wParam, lParam) elif msgID == WM_CHAR: char = wParam ignoreChar = False if char <= 32 or char == self.ignoreDeadChar: ctrl = trinity.app.Key(uiconst.VK_CONTROL) if char not in (uiconst.VK_RETURN, uiconst.VK_BACK, uiconst.VK_SPACE) or ctrl: ignoreChar = True if not ignoreChar: calledOn = self.ResolveOnChar(wParam, lParam) if calledOn and self._keyDownAcceleratorThread: self._keyDownAcceleratorThread.kill() self.ignoreDeadChar = None elif msgID == WM_DEADCHAR: focus = uicore.registry.GetFocus() if focus and hasattr(focus, 'OnChar') and uiutil.IsVisible(focus): self._keyDownAcceleratorThread.kill() else: self.ignoreDeadChar = wParam elif msgID in (WM_KEYUP, WM_SYSKEYUP): focus = uicore.registry.GetFocus() if focus: self._TryExecuteHandler(uiconst.UI_KEYUP, focus, (wParam, lParam), param=(wParam, lParam)) if wParam == uiconst.VK_SNAPSHOT: uicore.cmd.PrintScreen() elif msgID == WM_ACTIVATE: self.CheckAppFocus(hasFocus=wParam > 0) self.CheckCallbacks(obj=uicore.registry.GetFocus(), msgID=uiconst.UI_ACTIVE, param=(wParam, lParam)) elif msgID == WM_ACTIVATEAPP: if self.activateAppHandler: returnValue = self.activateAppHandler(wParam, lParam) elif msgID == WM_INPUTLANGCHANGE: if self.inputLangChangeHandler: returnValue = self.inputLangChangeHandler(wParam, lParam) elif msgID == WM_IME_SETCONTEXT: if self.imeSetContextHandler: returnValue = self.imeSetContextHandler(wParam, lParam) elif msgID == WM_IME_STARTCOMPOSITION: if self.imeStartCompositionHandler: returnValue = self.imeStartCompositionHandler( wParam, lParam) elif msgID == WM_IME_COMPOSITION: if self.imeCompositionHandler: returnValue = self.imeCompositionHandler(wParam, lParam) elif msgID == WM_IME_ENDCOMPOSITION: if self.imeEndCompositionHandler: returnValue = self.imeEndCompositionHandler(wParam, lParam) elif msgID == WM_IME_NOTIFY: if self.imeNotifyHandler: returnValue = self.imeNotifyHandler(wParam, lParam) elif msgID == WM_CLOSE: uthread.new(uicore.cmd.CmdQuitGame) returnValue = 1 else: returnValue = None return returnValue except: log.LogException()
def Update(self, *args): wnd = DestroyableItemsWindow.GetIfOpen() if wnd and wnd.IsMinimized() == False: tabparent = uiutil.GetChild(wnd, 'tabparent') if uiutil.IsVisible(tabparent): tabparent.ReloadVisible()