def Reboot(reason=''): if not CanReboot(): lg.Info('appUtils.Reboot', 'suppressing reboot due to single sign-on') lg.Info('appUtils.Reboot', 'rebooting due to ' + reason) bluepy.Terminate(reason) lg.Info('appUtils.Reboot', 'About to reboot the client because:' + reason) prefs.SetValue('rebootReason', reason) prefs.SetValue('rebootTime', blue.os.GetWallclockTime()) allargs = blue.pyos.GetArg() cmd = allargs[0] args = [] for arg in allargs[1:]: arg = arg.strip() if arg.find(' ') >= 0 or arg.find('\t') >= 0: arg = '"""' + arg + '"""' args.append(arg) args = ' '.join(args) lg.Info('appUtils.Reboot', 'About to reboot the client with:' + str( (0, None, cmd, args))) try: blue.win32.ShellExecute(0, None, cmd, args) except Exception as e: lg.Error('appUtils.Reboot', 'Failed with: ' + str(e)) raise bluepy.Terminate(reason)
def GetIcon(self, index): for each in self.scroll.GetContentContainer().children: if getattr(each, 'index', -1) == index // self.cols * self.cols: lg.Info('vcont', 'GetIcon(', index, ') returns', each.sr.icons[index % self.cols].name) return each.sr.icons[index % self.cols] lg.Info('vcont', 'GetIcon(', index, ') found nothing')
def OnDropData(self, dragObj, nodes): if self.controller.GetModule( ) is not None and not self.controller.SlotExists(): return items = self.GetDroppedItems(nodes) chargeTypeID = None chargeItems = [] for item in items: if not getattr(item, 'typeID', None): lg.Info('fittingUI', 'Dropped a non-item here', item) return if self.controller.IsChargeable() and self.IsCharge(item.typeID): if chargeTypeID is None: chargeTypeID = item.typeID if chargeTypeID == item.typeID: chargeItems.append(item) elif self.controller.IsInWeaponBank(item): ret = uicore.Message( 'CustomQuestion', { 'header': localization.GetByLabel('UI/Common/Confirm'), 'question': localization.GetByLabel('UI/Fitting/ClearGroupModule') }, uiconst.YESNO) if ret == uiconst.ID_YES: uthread.new(self.AddItem, item) else: uthread.new(self.AddItem, item) if len(chargeItems): self.controller.FitCharges(chargeItems)
def RemoveItem(self, rec): lg.Info('vcont', 'RemoveItem', rec and '[%s %s]' % (rec.stacksize, cfg.invtypes.Get(rec.typeID).name)) if self.viewMode in ('details', 'list'): for entry in self.scroll.sr.nodes: if entry.item.itemID == rec.itemID: self.scroll.RemoveEntries([entry]) break for item in self.items: if item.itemID == rec.itemID: self.items.remove(item) else: i = 0 for rowNode in self.scroll.sr.nodes: si = 0 for entry in rowNode.internalNodes: if entry and entry.item and entry.item.itemID == rec.itemID: self.SetItem(i, None) rowNode.internalNodes[si] = None break si += 1 i += 1 i = 0 for item in self.items: if item and item.itemID == rec.itemID: self.items[i] = None i += 1 self.CleanupRows()
def UpdateItem(self, rec, *etc): lg.Info('vcont', 'UpdateItem', rec and '[%s %s]' % (rec.stacksize, cfg.invtypes.Get(rec.typeID).name)) if self.viewMode in ('details', 'list'): idx = 0 for each in self.items: if each.itemID == rec.itemID: self.items[idx] = rec break idx += 1 for entry in self.scroll.sr.nodes: if entry.item.itemID == rec.itemID: newentry = uix.GetItemData(rec, self.viewMode, self.invController.viewOnly, container=self, scrollID=self.scroll.sr.id) for key, value in newentry.iteritems(): entry[key] = value if entry.panel: entry.panel.Load(entry) self.UpdateHint() return else: i = 0 for rowNode in self.scroll.sr.nodes: for entry in rowNode.internalNodes: if entry is not None and entry.item and entry.item.itemID == rec.itemID: self.SetItem(i, rec) return i += 1 lg.Warn('vcont', 'Tried to update an item that is not there??')
def OnDropData(self, dragObj, nodes): shipID = self.GetShipID() if self.module is not None and not self.shell.SlotExists( shipID, self.module.flagID): return chargeTypeID = None chargeItems = [] items = [] subSystemGroupIDs = set() for node in filter( lambda n: n.__guid__ in ('listentry.InvItem', 'xtriui.InvItem'), nodes): item = node.rec if item.categoryID == const.categorySubSystem: if item.groupID in subSystemGroupIDs: continue subSystemGroupIDs.add(item.groupID) items.append(node.rec) for item in items: if not getattr(item, 'typeID', None): lg.Info('fittingUI', 'Dropped a non-item here', item) return if self.isChargeable and self.IsCharge(item.typeID): if chargeTypeID is None: chargeTypeID = item.typeID if chargeTypeID == item.typeID: chargeItems.append(item) elif self.shell.IsInWeaponBank(item.locationID, item.itemID): ret = eve.Message( 'CustomQuestion', { 'header': localization.GetByLabel('UI/Common/Confirm'), 'question': localization.GetByLabel('UI/Fitting/ClearGroupModule') }, uiconst.YESNO) if ret == uiconst.ID_YES: eve.Message('DragDropSlot') uthread.new(self.Add, item) elif item.categoryID == const.categorySubSystem and getattr( self, 'module', None) is not None: uthread.new(self.Add, item) else: eve.Message('DragDropSlot') uthread.new(self.Add, item) if len(chargeItems): chargeTypeID = chargeItems[0].typeID self.shell.DropLoadChargeToModule(self.module.itemID, chargeTypeID, chargeItems)
def AddItem(self, rec, index = None, fromWhere = None): if self.quickFilterInput: if not self.QuickFilter(rec): return if not self.FilterItems([rec]): return lg.Info('vcont', 'AddItem', fromWhere, rec.stacksize, cfg.invtypes.Get(rec.typeID).name) for node in self.scroll.sr.nodes: if self.viewMode in ('details', 'list'): if node is not None and node.Get('item', None) and node.item.itemID == rec.itemID: lg.Warn('vcont', 'Tried to add an item that is already there??') self.UpdateItem(node.item) return else: for internalNode in node.internalNodes: if internalNode is not None and internalNode.item.itemID == rec.itemID: lg.Warn('vcont', 'Tried to add an item that is already there??') self.UpdateItem(internalNode.item) return import listentry if self.viewMode in ('details', 'list'): self.items.append(rec) self.scroll.AddEntries(-1, [listentry.Get('InvItem', data=uix.GetItemData(rec, self.viewMode, self.invController.viewOnly, container=self, scrollID=self.scroll.sr.id))]) self.UpdateHint() else: if index is not None: while index < len(self.items): if self.items[index] is None: return self.SetItem(index, rec) index += 1 while index >= len(self.scroll.sr.nodes) * self.cols: self.AddRow() return self.SetItem(index, rec) if len(self.items) and None in self.items: idx = self.tmpDropIdx.get(rec.itemID, None) if idx is None: idx = self.items.index(None) return self.SetItem(idx, rec) if not self.cols: self.RefreshCols() if index >= len(self.scroll.sr.nodes) * self.cols: self.AddRow() return self.SetItem(0, rec)
def SetItem(self, index, rec): lg.Info('vcont', 'SetItem', index, rec and '[%s %s]' % (rec.stacksize, cfg.invtypes.Get(rec.typeID).name)) if not self or self.destroyed: return if index < len(self.items) and rec and self.items[index] is not None and self.items[index].itemID != rec.itemID: while index < len(self.items) and self.items[index] is not None: index += 1 if self.cols: rowIndex = index // self.cols else: rowIndex = 0 while rowIndex >= len(self.scroll.sr.nodes): self.AddRow() while index >= len(self.items): self.items += [None] self.items[index] = rec try: self.scroll.sr.nodes[rowIndex].rec[index % self.cols] = rec self.UpdateHint() node = None if rec: node = uix.GetItemData(rec, self.viewMode, self.invController.viewOnly, container=self, scrollID=self.scroll.sr.id) if not self or self.destroyed: return node.scroll = self.scroll node.panel = None node.idx = index node.__guid__ = 'xtriui.InvItem' self.scroll.sr.nodes[index // self.cols].internalNodes[index % self.cols] = node except IndexError: return icon = self.GetIcon(index) if icon: if rec is None: icon.state = uiconst.UI_HIDDEN icon.sr.node = None else: icon.state = uiconst.UI_NORMAL node.panel = icon node.viewOnly = self.invController.viewOnly icon.Load(node)
def OnDropData(self, dragObj, nodes): if self.controller.GetModule( ) is not None and not self.controller.SlotExists(): return items = self.GetDroppedItems(nodes) chargeTypeID = None chargeItems = [] for item in items: if not getattr(item, 'typeID', None): lg.Info('fittingUI', 'Dropped a non-item here', item) return if self.controller.IsChargeable() and self.IsCharge(item.typeID): if chargeTypeID is None: chargeTypeID = item.typeID if chargeTypeID == item.typeID: chargeItems.append(item) else: uthread.new(self.Add, item) if len(chargeItems): self.controller.FitCharges(chargeItems)
def LogInfo(self, *args): lg.Info(self.__guid__, *args)
def Draw(self, ids, idlevel, drawlevel, needsize, sprite = None, solarsystem = None): _settings = (ids, idlevel, drawlevel, needsize) if _settings == self.settings: return self.settings = _settings lg.Info('2Dmaps', 'Drawing map, ids/idlevel/drawlevel:', ids, idlevel, drawlevel) if drawlevel <= idlevel: return if drawlevel == DRAW_SOLARSYSTEM_INTERIOR and len(ids) > 1: ids = ids[:1] SIZE = needsize if sprite is None: sprite = self.sprite _ids = {} for id in ids: _ids[id] = '' ids = _ids.keys() endid = '' if len(ids) > 1: endid = '%s_' % ids[-1] self.ids = ids self.idlevel = idlevel self.drawlevel = drawlevel self.needsize = needsize imageid = '%s_%s_%s_%s_%s_%s' % (ids[0], '_' * max(0, len(ids) - 2), endid, idlevel, drawlevel, self.fillSize) imageid = imageid.replace('.', '') if self.drawlevel == DRAW_SOLARSYSTEM_INTERIOR: imageid += '_' + str(settings.user.ui.Get('solarsystemmapabstract', 0)) lg.Info('2Dmaps', 'MapID is: %s' % imageid) for each in self.overlays.children: if each.name == 'destinationline': each.renderObject = None each.Close() self.cordsAsPortion = {} mapitems = self.mapitems = self.GetMapData(ids, idlevel, drawlevel) if drawlevel == 4: self.DrawSolarsystem(sprite, ids, imageid, mapitems, SIZE) self.CheckMyLocation(solarsystem=solarsystem) return connections, outsideitems = self.GetConnectionData(ids, idlevel, drawlevel) self.outsideitems = outsideitems minx = 1e+100 maxx = -1e+100 minz = 1e+100 maxz = -1e+100 for item in mapitems: minx = min(minx, item.x) maxx = max(maxx, item.x) minz = min(minz, item.z) maxz = max(maxz, item.z) mw = -minx + maxx mh = -minz + maxz if not (mw and mh): return SIZE = SIZE * 2 drawarea = DrawArea() drawarea.setTransparentColor(-1) drawarea.setSize(SIZE, SIZE, 4278190080L) dotrad = [2, 3, 4, 5, 6][idlevel] sizefactor = min(SIZE / mw, SIZE / mh) * self.portion cords = {} for item in mapitems[:]: if item.groupID == const.groupRegion: if drawlevel != 1: continue if item.groupID == const.groupConstellation: if drawlevel != 2: continue x = int(item.x * sizefactor - int(minx * sizefactor) + (SIZE - mw * sizefactor) / 2) y = int(item.z * sizefactor - int(minz * sizefactor) + (SIZE - mh * sizefactor) / 2) cords[item.itemID] = (x, SIZE - y, dotrad, 1, 16777215) for item in self.outsideitems: x = int(item.x * sizefactor - int(minx * sizefactor) + (SIZE - mw * sizefactor) / 2) y = int(item.z * sizefactor - int(minz * sizefactor) + (SIZE - mh * sizefactor) / 2) cords[item.itemID] = (x, SIZE - y, dotrad, 0, None) done = [] i = 0 lineWidth = 2.0 for jumptype in connections: for pair in jumptype: fr, to = pair if (fr, to) in done: continue if fr in cords and to in cords: drawarea.line(cords[fr][0], cords[fr][1], cords[to][0], cords[to][1], [43520, 255, 16711680][i], lineWidth) drawarea.line(cords[fr][0] + 1, cords[fr][1], cords[to][0] + 1, cords[to][1], [43520, 255, 16711680][i], lineWidth) drawarea.line(cords[fr][0], cords[fr][1] + 1, cords[to][0], cords[to][1] + 1, [43520, 255, 16711680][i], lineWidth) i += 1 for x, y, dotrad, cordtype, col in cords.itervalues(): if cordtype == 0: dotrad = dotrad / 2 drawarea.circle(x, y, dotrad, dotrad, 16777215, 16777215) self.areas = [ (cords[id][0], cords[id][1], cords[id][2], id) for id in cords.iterkeys() ] self.cordsAsPortion = {} for id in cords.iterkeys(): self.cordsAsPortion[id] = (cords[id][0] / float(SIZE), cords[id][1] / float(SIZE)) self.CheckMyLocation(solarsystem=solarsystem) self.CheckDestination() self.PlaceMap(sprite, drawarea, SIZE)
def LogInfo(self, *k, **v): lg.Info('ime', *k, **v)
def SetFitting(self, invItem, shell=None, putOnline=0): if self.destroyed: return lg.Info('fitting', 'SetFitting', self.flag, invItem and cfg.invtypes.Get(invItem.typeID).Group().name) if invItem is None: self.DisableDrag() else: self.EnableDrag() self.shell = shell or self.shell if invItem and self.IsCharge(invItem.typeID): self.charge = invItem chargeQty = self.shell.GetQuantity(invItem.itemID) if self.module is None: portion = 1.0 else: cap = self.shell.GetCapacity(self.module.locationID, const.attributeCapacity, self.flag) if cap.capacity == 0: portion = 1.0 else: portion = cap.used / cap.capacity step = max(0, min(4, int(portion * 5.0))) self.sr.chargeIndicator.rectTop = 10 * step self.sr.chargeIndicator.state = uiconst.UI_NORMAL self.sr.chargeIndicator.hint = '%s %d%%' % (cfg.invtypes.Get( self.charge.typeID).name, portion * 100) elif invItem is None: self.id = None self.isChargeable = 0 self.typeID = None self.module = None self.charge = None self.fitted = 0 self.isChargeable = 0 self.HideUtilButtons(1) self.sr.chargeIndicator.state = uiconst.UI_HIDDEN else: self.id = invItem.itemID self.typeID = invItem.typeID self.module = invItem self.fitted = 1 self.charge = None if invItem.groupID in cfg.__chargecompatiblegroups__: self.isChargeable = 1 self.sr.chargeIndicator.rectTop = 0 self.sr.chargeIndicator.state = uiconst.UI_NORMAL self.sr.chargeIndicator.hint = localization.GetByLabel( 'UI/Fitting/NoCharge') else: self.isChargeable = 0 self.sr.chargeIndicator.state = uiconst.UI_HIDDEN if self.typeID: self.tooltipPanelClassInfo = TooltipModuleWrapper() modulehint = cfg.invtypes.Get(self.typeID).name if self.charge: modulehint += '<br>%s' % localization.GetByLabel( 'UI/Fitting/ChargeQuantity', charge=self.charge.typeID, chargeQuantity=chargeQty) shipID = self.GetShipID() if not self.shell.SlotExists(shipID, self.module.flagID): modulehint = localization.GetByLabel( 'UI/Fitting/SlotDoesNotExist') self.hint = modulehint else: self.tooltipPanelClassInfo = None self.hint = self._emptyHint tooltipName = self._emptyTooltip if tooltipName: SetFittingTooltipInfo(targetObject=self, tooltipName=tooltipName, includeDesc=False) self.opacity = 1.0 self.state = uiconst.UI_NORMAL self.PrepareUtilButtons() if putOnline: uthread.new(self.DelayedOnlineAttempt, eve.session.shipid, invItem.itemID) icon = self.sr.flagIcon icon.SetAlign(uiconst.CENTER) iconSize = int(48 * self.scaleFactor) icon.SetSize(iconSize, iconSize) icon.SetPosition(0, 0) if self.charge or self.module: icon.LoadIconByTypeID((self.charge or self.module).typeID, ignoreSize=True) icon.parent.SetRotation(-self.GetRotation()) else: rev = 0 slotIcon = { const.flagSubSystemSlot0: 'ui_81_64_9', const.flagSubSystemSlot1: 'ui_81_64_10', const.flagSubSystemSlot2: 'ui_81_64_11', const.flagSubSystemSlot3: 'ui_81_64_12', const.flagSubSystemSlot4: 'ui_81_64_13' }.get(self.flag, None) if slotIcon is None: slotIcon = { const.effectLoPower: 'ui_81_64_5', const.effectMedPower: 'ui_81_64_6', const.effectHiPower: 'ui_81_64_7', const.effectRigSlot: 'ui_81_64_8' }.get(self.powerType, None) else: rev = 1 if slotIcon is not None: icon.LoadIcon(slotIcon, ignoreSize=True) if rev: icon.parent.SetRotation(mathUtil.DegToRad(180.0)) else: icon.parent.SetRotation(0.0) icon.state = uiconst.UI_PICKCHILDREN self.SetGroup() self.UpdateOnlineDisplay() self.Hilite(0)
def LogInfo(self, *args): lg.Info('listentry.CorpMemberRoleEntry', *args)