def LoadResult(self, cargoList): scrolllist = [] for typeID, quantity in cargoList: invType = cfg.invtypes.Get(typeID) qty = quantity if quantity > 0 else 1 data = util.KeyVal() isCopy = False param = {'qty': qty, 'typeID': typeID} if invType.categoryID == const.categoryBlueprint: if quantity == -const.singletonBlueprintCopy: typeName = 'UI/Ship/ShipScan/BlueprintCopy' quantity = 1 isCopy = True else: typeName = 'UI/Ship/ShipScan/BlueprintOriginal' else: typeName = 'UI/Ship/ShipScan/FoundTypes' data.label = localization.GetByLabel(typeName, **param) data.itemID = None data.typeID = typeID data.isCopy = isCopy data.getIcon = True if invType.categoryID == const.categoryBlueprint: data.abstractinfo = util.KeyVal( categoryID=const.categoryBlueprint, isCopy=data.isCopy) scrolllist.append(listentry.Get('Item', data=data)) self.sr.scroll.Load(contentList=scrolllist, noContentHint=localization.GetByLabel( 'UI/Ship/ShipScan/NoBookmarksFound'))
def write(self, txt): import listentry self.sr.scroll.AddNode(-1, listentry.Get("Text", { "text": txt, "line": 1 }))
def _PrepareListEntries(self, messages): showmsgs = [] dateSortKey = 'sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time') openMsgTitle = localization.GetByLabel('UI/Accessories/Log/LogMessage') for msg in messages: msgtext, msgtype, timestamp = msg if not self.ShowMessage(msgtype): continue color = COLORS_BY_TYPE.get(msgtype, '<color=0xffffffff>') if msgtype: if msgtype in self.localizedMessages: label = self.localizedMessages[msgtype] else: label = msgtype else: label = localization.GetByLabel('UI/Accessories/Log/Generic') text = localization.GetByLabel('UI/Accessories/Log/MessageOutput', logtime=timestamp, color=color, label=label, message=uiutil.StripTags(msgtext, stripOnly=['t'])) data = {'label': text, 'canOpen': openMsgTitle, dateSortKey: timestamp, 'line': 1} entry = listentry.Get('Generic', data=data) showmsgs.append(entry) return showmsgs
def ShowJournal(self, *args): if self is not None and not self.destroyed: sm.GetService('corpui').ShowLoad() else: return if (const.corpRoleAccountant | const.corpRoleJuniorAccountant) & eve.session.corprole == 0: self.SetHint(localization.GetByLabel('UI/Corporations/Assets/NeedAccountantRole')) self.sr.scroll.Clear() sm.GetService('corpui').HideLoad() return keymap = sm.GetService('account').GetKeyMap() scrolllist = [] for row in keymap: label = '%s (%s - %s)' % (row.keyName.capitalize(), util.FmtDate(self.sr.journalFromDate, 'ls'), util.FmtDate(self.sr.journalToDate, 'ls')) data = {'GetSubContent': self.GetJournalSubContent, 'label': label, 'groupItems': None, 'id': ('corpaccounts', row.keyName), 'tabs': [], 'state': 'locked', 'accountKey': row.keyID, 'showicon': 'hide', 'fromDate': self.sr.journalFromDate} scrolllist.append(listentry.Get('Group', data)) self.sr.scroll.Load(fixedEntryHeight=19, contentList=scrolllist, headers=[localization.GetByLabel('UI/Common/Date'), localization.GetByLabel('UI/Common/ID'), localization.GetByLabel('UI/Common/Amount'), localization.GetByLabel('UI/Common/Description'), localization.GetByLabel('UI/Common/Amount')]) sm.GetService('corpui').HideLoad()
def UpdateAccessScrollData(self): """ Fetches information from server and populates both Blocked and Allowed scrolls, since the information is in the same dictionary provided by the mailinglist service """ self.scrolllist = { const.mailingListAllowed: [], const.mailingListBlocked: [] } accessList = self.mlsvc.GetSettings(self.mailingListID).access for i, m in enumerate(accessList.iteritems()): ownerID, accessLevel = m owner = cfg.eveowners.Get(ownerID) ownerGroup = cfg.invgroups.Get(owner.groupID) data = util.KeyVal() data.label = '%s<t>%s' % (owner.name, ownerGroup.name) data.props = None data.cfgname = 'member' data.retval = ownerID data.index = i self.scrolllist[accessLevel].append( listentry.Get('Generic', data=data)) self.UpdateAllowedScroll() self.UpdateBlockedScroll()
def GetJournalSubContent(self, nodedata, *args): items = sm.GetService('account').GetJournal(nodedata.keyID, nodedata.fromDate, None, 1) scrolllist = [] for row in items: if row.entryTypeID == const.refSkipLog: continue data = {} if row.entryTypeID in (const.refMarketEscrow, const.refTransactionTax, const.refBrokerfee): actor = cfg.eveowners.Get(row.ownerID1).name else: actor = '' data['label'] = '%s<t>%s<t>%s<t>%s<t>%s' % ( util.FmtDate(row.transactionDate, 'ls'), row.transactionID, util.FmtCurrency( row.amount, currency=None, showFractionsAlways=0), util.FmtRef(row.entryTypeID, row.ownerID1, row.ownerID2, row.referenceID, amount=row.amount), actor) data['sort_%s' % localization.GetByLabel( 'UI/Common/Date')] = row.transactionDate data['sort_%s' % localization.GetByLabel('UI/Common/Amount')] = row.amount data['sort_%s' % localization.GetByLabel('UI/Common/ID')] = row.transactionID scrolllist.append(listentry.Get('Generic', data)) return scrolllist
def Profile_Refresh(self): content = [] for gid in self.skillGroups: items = [ typeID for typeID in self.currentProfile.iterkeys() if evetypes.GetGroupID(typeID) == gid ] if items: node = { 'label': evetypes.GetGroupNameByGroup(gid), 'iconMargin': 18, 'showlen': True, 'groupItems': items, 'state': 0, 'allowCopy': 0, 'GetSubContent': self.Profile_GetSubContent, 'selected': 0, 'id': ('p' + str(gid), gid), 'sublevel': 0 } content.append(listentry.Get('Group', node)) self.wnd.sr.scroll2.Load(contentList=content, fixedEntryHeight=None, headers=['Name']) self.wnd.sr.profile.text = self.currentProfileName or '<New Profile>'
def ConstructScrollList(self): fittings = self.fittingSvc.GetLegacyClientFittings() scrolllist = [] fittingList = [] for fittingID, fitting in fittings.iteritems(): fittingList.append((fitting.name, fitting)) fittingList.sort() self.emptyFittings = [] for fittingName, fitting in fittingList: if len(fitting.fitData) == 0: self.emptyFittings.append(fitting) continue typeFlag = set() for typeID, flag, qty in fitting.fitData[:]: if (typeID, flag) in typeFlag: fitting.fitData.remove((typeID, flag, qty)) else: typeFlag.add((typeID, flag)) data = util.KeyVal() data.label = fittingName data.checked = False data.OnChange = self.OnSelectionChanged data.cfgname = 'groups' data.retval = True data.report = False data.fitting = fitting scrolllist.append(listentry.Get('Checkbox', data=data)) self.sr.scroll.Load(contentList=scrolllist) self.totalLocalFittings = len(fittingList) self.OnSelectionChanged(None)
def ShowLockdownSubcontent(self, nodedata, *args): scrolllist = [] items = sm.GetService('corp').GetLockedItemsByLocation( nodedata.locationID) locationID = nodedata.locationID offices = sm.GetService( 'corp').GetMyCorporationsOffices().SelectByUniqueColumnValues( 'stationID', [locationID]) if offices and len(offices): for office in offices: if locationID == office.stationID: locationID = office.officeID header = [ 'itemID', 'typeID', 'ownerID', 'groupID', 'categoryID', 'quantity', 'singleton', 'stacksize', 'locationID', 'flagID' ] for it in items.itervalues(): typeInfo = cfg.invtypes.Get(it.typeID) line = [ it.itemID, it.typeID, eve.session.corpid, typeInfo.groupID, typeInfo.categoryID, 1, const.singletonBlueprintOriginal, 1, locationID, 4 ] fakeItem = Row(header, line) data = uix.GetItemData(fakeItem, self.sr.viewMode, viewOnly=1, scrollID=nodedata.scrollID) data.GetMenu = self.OnGetEmptyMenu scrolllist.append(listentry.Get('InvItem', data)) return scrolllist
def GetShipGroupSubContent(self, nodedata, *args): scrolllist = [] fittingsByType = {} shipTypes = [] for fitting in nodedata.fittings: shipTypeID = fitting.shipTypeID if shipTypeID not in fittingsByType: fittingsByType[shipTypeID] = [] fittingsByType[shipTypeID].append(fitting) type = cfg.invtypes.Get(shipTypeID) if (type.name, shipTypeID) not in shipTypes: shipTypes.append((type.name, shipTypeID)) shipTypes.sort() for typeName, typeID in shipTypes: data = util.KeyVal() data.GetSubContent = self.GetFittingSubContent data.label = typeName data.groupItems = fittingsByType[typeID] data.fittings = fittingsByType[typeID] data.id = ('fittingMgmtScrollWndType', typeName) data.sublevel = 1 data.showicon = 'hide' data.state = 'locked' scrolllist.append(listentry.Get('Group', data=data)) return scrolllist
def AddTitleCheckBox(self, title, hasTitle): data = {'label': title.titleName, 'checked': hasTitle, 'cfgname': title.titleName, 'retval': title.titleID, 'OnChange': self.TitleCheckBoxChange} return listentry.Get('Checkbox', data)
def PopulateMembersScroll(self, *args): """ Load the currently selected page of members into the members scroll """ scrolllist = [] self.checkedMembers = [] if len(self.pagedMembers) == 0: page = [] else: page = self.pagedMembers[self.currPage] for m in page: data = util.KeyVal() data.label = '%s<t>%s' % (cfg.eveowners.Get( m.memberID).name, self.roles[m.accessLevel]) data.checked = False data.cfgname = 'member' data.retval = m.memberID data.charID = m.memberID data.GetMenu = self.GetCharMenu scrolllist.append(listentry.Get('Generic', data=data)) self.sr.membersPanel.scroll.Load( contentList=scrolllist, headers=[ localization.GetByLabel('UI/Generic/NamePerson'), localization.GetByLabel('UI/EVEMail/MailingLists/Role') ], customColumnWidths=True, noContentHint=localization.GetByLabel( 'UI/EVEMail/MailingLists/NoMembersFound')) self.sr.membersPanel.ApplyBtn.Disable()
def GetSolarSystemOptions(): import uiutil, util, listentry validGroups = GetValidSolarsystemGroups() wantedGroups = GetVisibleSolarsystemBrackets() wantedHints = GetHintsOnSolarsystemBrackets() scrolllist = [] for groupID in validGroups: data = util.KeyVal() data.visible = groupID in wantedGroups data.showhint = groupID in wantedHints data.groupID = groupID if type(groupID) in types.StringTypes: cerbString = { 'bookmark': 'UI/Map/MapPallet/cbSolarSystem_bookmark', 'scanresult': 'UI/Map/MapPallet/cbSolarSystem_scanresult' }[groupID] data.label = localization.GetByLabel(cerbString) else: data.label = evetypes.GetGroupNameByGroup(groupID) scrolllist.append( (data.label, listentry.Get('BracketSelectorEntry', data=data))) if scrolllist: scrolllist = uiutil.SortListOfTuples(scrolllist) return scrolllist
def GetSearchSubContent(dataX, *args): scrolllist = [] entryType, typeList = dataX['groupItems'] for x in typeList: scrolllist.append(listentry.Get(entryType, x)) return scrolllist
def ScrollEntry(self, entry): sentry = listentry.Get( 'AttributeCheckbox', { 'line': 1, 'info': entry, 'label': entry.displayName, 'iconID': entry.iconID, 'item': entry, 'text': sm.GetService('info').FormatUnit(entry.unitID) or ' ', 'hint': entry.displayName, 'checked': [True, False ][entry.attributeID not in self.attrDictChecked], 'cfgname': entry.attributeID, 'retval': entry.attributeID, 'OnChange': self.OnAttributeSelectedChanged }) return sentry
def __AddToList(self, member, scrolllist): data = util.KeyVal() data.label = self.__GetLabel(member.corporationID) data.member = member data.GetMenu = self.GetMemberMenu data.corporationID = member.corporationID scrolllist.append(listentry.Get('Corporation', data=data))
def AddSearchTerm(self, *args): try: self.LogInfo('AddSearchTerm') sm.GetService('loading').Cycle('Loading') joinOperator = None if self.comboJoinOperator.state == uiconst.UI_NORMAL: joinOperator = self.comboJoinOperator.GetValue() property = self.comboProperty.GetValue() operator = self.comboOperator.GetValue() value = None if self.propertyControls.has_key('current'): currentControlType = self.propertyControls['current'] currentControl = self.propertyControls[currentControlType] value = currentControl.GetValue() self.LogInfo('joinOperator: ', joinOperator) self.LogInfo('property: ', property) self.LogInfo('operator: ', operator) self.LogInfo('value: ', value) if not value: raise UserError( 'CustomInfo', { 'info': localization.GetByLabel( 'UI/Shared/PleaseTypeSomething') }) label = self.MakeLabel(joinOperator, property, operator, value) params = { 'label': label, 'caption1': localization.GetByLabel( 'UI/Corporations/CorporationWindow/Members/FindMemberInRole/Edit' ), 'caption2': localization.GetByLabel( 'UI/Corporations/CorporationWindow/Members/FindMemberInRole/Remove' ), 'OnClick1': self.OnClickEdit, 'OnClick2': self.OnClickRemove, 'args1': label, 'args2': label, 'joinOperator': joinOperator, 'property': property, 'operator': operator, 'value': value } control = listentry.Get('TwoButtons', params) self.scrollQuery.AddEntries(-1, [control]) self.comboJoinOperator.state = uiconst.UI_NORMAL finally: sm.GetService('loading').StopCycle()
def DisplayItems(self, *args): self.itemToRepairDescription = '' self.HideButtons() btnSetup = { self.sr.pickBtn: uiconst.UI_HIDDEN, self.sr.selBtn: uiconst.UI_NORMAL, self.sr.repairAllBtn: uiconst.UI_HIDDEN } self.SetHint() self.sr.avgDamage.text = '' self.sr.totalCost.text = '' try: hangarInv = sm.GetService('invCache').GetInventory( const.containerHangar) items = hangarInv.List() tmplst = [] for item in items: if util.IsItemOfRepairableType(item): if item.categoryID == const.categoryShip: tmplst.append( (cfg.evelocations.Get(item.itemID).name, item)) else: tmplst.append( (cfg.invtypes.Get(item.typeID).name, item)) if len(tmplst) == 0: self.SetHint( localization.GetByLabel( 'UI/Station/Repair/NothingToRepair', repairShop=localization.GetByLabel( 'UI/Station/Repair/RepairFacilities'))) else: scrolllist = [] currIndex = 1 for label, item in tmplst: scrolllist.append( listentry.Get( 'Item', { 'info': item, 'itemID': item.itemID, 'typeID': item.typeID, 'label': label, 'getIcon': 1, 'GetMenu': self.GetItemInHangarMenu, 'OnDblClick': self.OnDblClick, 'name': 'repairEntry%s' % currIndex })) currIndex += 1 self.sr.scroll.sr.id = None self.sr.scroll.sr.ignoreTabTrimming = 1 self.state = uiconst.UI_NORMAL self.sr.scroll.Load( contentList=scrolllist, headers=[localization.GetByLabel('UI/Common/Type')]) finally: self.state = uiconst.UI_NORMAL self.DisplayButtons(btnSetup)
def LoadAllWindowsScroll(self): msgs = [] for n in self.allWindows: if n not in self.openedWindows: msgs.append(listentry.Get('WindowMonitorEntry', {'text': n, 'line': 1})) self.allWindowsScroll.Load(contentList=msgs, headers=[], noContentHint='arse')
def LoadOutcome(self, nodedata, *args): scrolllist = [] if self.job.activityID == industry.MANUFACTURING: for product in nodedata.groupItems: entry = listentry.Get( 'Item', KeyVal(itemID=None, typeID=product.typeID, label=product.GetHint(), getIcon=1)) scrolllist.append(entry) elif self.job.activityID == industry.RESEARCH_MATERIAL: label = localization.GetByLabel( 'UI/Industry/StepMaterialEfficiency', stepSize=industry.STEP_MATERIAL_EFFICIENCY) entry = listentry.Get('Generic', KeyVal(label=label, sublevel=1)) scrolllist.append(entry) elif self.job.activityID == industry.RESEARCH_TIME: label = localization.GetByLabel( 'UI/Industry/StepTimeEfficiency', stepSize=industry.STEP_TIME_EFFICIENCY) entry = listentry.Get('Generic', KeyVal(label=label, sublevel=1)) scrolllist.append(entry) elif self.job.activityID == industry.COPYING: typeID = self.bpData.blueprintTypeID label = evetypes.GetName(typeID) entry = listentry.Get(decoClass=listentry.Item, data=KeyVal(itemID=None, typeID=typeID, label=label, getIcon=1, isCopy=True)) scrolllist.append(entry) elif self.job.activityID == industry.INVENTION: for product in nodedata.groupItems: entry = listentry.Get( 'Item', KeyVal(itemID=None, typeID=product.typeID, label=product.GetName(), getIcon=1, isCopy=True)) scrolllist.append(entry) return scrolllist
def OnFileSelected(self, entry): filepath = os.path.join(self.dirpath, entry.sr.node.label + '.xml') self.sr.selectedFileName = entry.sr.node.label profileCheckboxes = [] try: doc = parse(filepath) try: profiles = doc.documentElement.getElementsByTagName('profile') for x in profiles: globalSettings = util.KeyVal() globalSettings.label = x.attributes['name'].value globalSettings.checked = True globalSettings.cfgname = 'profiles' globalSettings.retval = True globalSettings.OnChange = self.OnChange profileCheckboxes.append( listentry.Get('Checkbox', data=globalSettings)) if len( doc.documentElement.getElementsByTagName( 'globalSettings')): globalSettings = util.KeyVal() globalSettings.label = localization.GetByLabel( 'UI/Overview/GlobalOverviewSettings') globalSettings.checked = True globalSettings.cfgname = 'profiles' globalSettings.retval = True globalSettings.OnChange = self.OnChange profileCheckboxes.append( listentry.Get('Checkbox', data=globalSettings)) self.sr.importProfilesBtn.state = uiconst.UI_NORMAL finally: doc.unlink() except Exception as e: profileCheckboxes = [ listentry.Get( 'Generic', { 'label': localization.GetByLabel('UI/Common/Files/FileNotValid') }) ] self.sr.importProfilesBtn.state = uiconst.UI_HIDDEN self.sr.profilesScroll.Load(contentList=profileCheckboxes) self.OnChange()
def GetListEntry(self, label, text, typeID = None, itemID = None, station = None): entry = listentry.Get('LabelTextTop', {'line': 1, 'label': localization.GetByLabel(label), 'text': text, 'typeID': typeID, 'itemID': itemID, 'station': station}) return entry
def RefreshLists(self, *args): pinListItems = [] for typeID, qty in self.pinContents.iteritems(): lbl = '<t>%s<t>%d' % (cfg.invtypes.Get(typeID).name, qty) data = util.KeyVal(itemID=None, typeID=typeID, label=lbl, getIcon=1, quantity=qty, OnDropData=self.OnSourceScrollDropData) pinListItems.append(listentry.Get('DraggableItem', data=data)) transferListItems = [] for typeID, qty in self.transferContents.iteritems(): lbl = '<t>%s<t>%d' % (cfg.invtypes.Get(typeID).name, qty) data = util.KeyVal(itemID=None, typeID=typeID, label=lbl, getIcon=1, quantity=qty, OnDropData=self.OnTransferScrollDropData) transferListItems.append(listentry.Get('DraggableItem', data=data)) self.sr.sourcePinListScroll.Load( contentList=pinListItems, noContentHint=localization.GetByLabel( 'UI/PI/Common/StorehouseIsEmpty'), headers=[ localization.GetByLabel('UI/Common/Type'), localization.GetByLabel('UI/Common/Name'), localization.GetByLabel('UI/Common/Quantity') ]) self.sr.transferListScroll.Load( contentList=transferListItems, noContentHint=localization.GetByLabel('UI/PI/Common/NoItemsFound'), headers=[ localization.GetByLabel('UI/Common/Type'), localization.GetByLabel('UI/Common/Name'), localization.GetByLabel('UI/Common/Quantity') ]) transferVolume = planetCommon.GetCommodityTotalVolume( self.transferContents) self.sr.volumeText.text = localization.GetByLabel( 'UI/PI/Common/VolumeAmount', amount=transferVolume) self.SetNextTransferText() self.SetCooldownTimeText()
def _ReloadScrolls(self): scrolllist = [] for typeID, amount in self.contentsCommodities.iteritems(): data = util.KeyVal() data.label = '<t>%s<t>%s' % (cfg.invtypes.Get(typeID).name, amount) data.typeID = typeID data.itemID = None data.getIcon = True sortBy = amount scrolllist.append((sortBy, listentry.Get('Item', data=data))) scrolllist = uiutil.SortListOfTuples(scrolllist) self.contentsScroll.Load( contentList=scrolllist, noContentHint=localization.GetByLabel( 'UI/PI/Common/StorehouseIsEmpty'), headers=[ '', localization.GetByLabel('UI/PI/Common/Type'), localization.GetByLabel('UI/Common/Quantity') ]) scrolllist = [] for typeID, amount in self.payloadCommodities.iteritems(): data = util.KeyVal() data.label = '<t>%s<t>%s' % (cfg.invtypes.Get(typeID).name, amount) data.typeID = typeID data.itemID = None data.getIcon = True sortBy = amount scrolllist.append((sortBy, listentry.Get('Item', data=data))) scrolllist = uiutil.SortListOfTuples(scrolllist) self.payloadScroll.Load( contentList=scrolllist, noContentHint=localization.GetByLabel( 'UI/PI/Common/PayloadIsEmpty'), headers=[ '', localization.GetByLabel('UI/PI/Common/Type'), localization.GetByLabel('UI/Common/Quantity') ]) self.costText.text = localization.GetByLabel( 'UI/PI/Common/LaunchCost', iskAmount=util.FmtISK( self.pin.GetExportTax(self.payloadCommodities)))
def PrepareResultScrollEntries(self, results, *args): scrollList = [] import listentry for groupEntry in results: entryType, typeList = groupEntry['groupItems'] for entryData in typeList: scrollList.append(listentry.Get(entryType, entryData)) return scrollList
def GetSubContent(self, groupData, *args): scrolllist = [] for typeInfo in groupData.types: data = {} data['typeInfo'] = typeInfo data['hubID'] = self.hubID scrolllist.append(listentry.Get('BaseUpgradeEntry', data)) return scrolllist
def AddCheckBox(self, role, on, roleVariablesName): log.LogInfo('AddCheckBox', role, on, roleVariablesName) label = localization.GetByLabel('UI/Corporations/EditMemberDialog/RoleNameDashRoleDescription', roleName=role.shortDescription, roleDesc=role.description) data = {'label': label, 'checked': on, 'cfgname': roleVariablesName, 'retval': role.roleID, 'OnChange': self.CheckBoxChange} return listentry.Get('Checkbox', data)
def __AddToList(self, war, scrolllist): data = util.KeyVal() data.label = '' data.war = war if self.myWars: data.myWars = True else: data.myWars = False scrolllist.append(listentry.Get('WarEntry', data=data))
def Refresh(self, *args): contentList = [] p = self.prefs.GetKeys() p.sort() for key in p: value = self.prefs.GetValue(key) contentList.append(listentry.Get('PrefsEntry', {'label': u'%s<t>%s' % (key, value), 'key': key, 'value': value, 'AddEntry': self.AddEntry, 'EditAttribute': self.EditAttribute, 'DeleteKey': self.DeleteKey})) for key, value in sm.GetService('machoNet').GetGlobalConfig().iteritems(): contentList.append(listentry.Get('Generic', {'label': u'zsystem.clientConfig: %s<t>%s' % (key, value)})) self.scroll.Load(contentList=contentList, headers=['Key', 'Value'], fixedEntryHeight=18) self.scroll.Sort('Key')
def GetContent(self, node, newitems=0): if node is None: rows = cfg.invcategories level = 0 elif node.sublevel == 0: rows = [g for g in cfg.invgroups if g.categoryID == node.id[1]] level = 1 else: rows = [ cfg.invtypes.Get(line.typeID) for line in cfg.invtypes if line.groupID == node.id[1] ] level = 2 stuff = [] if level != 2: rows = sorted(rows, key=lambda row: row.name) for row in rows: data = { 'GetSubContent': self.GetContent, 'MenuFunction': self.Menu, 'label': row.name, 'id': (row.name, row.id), 'groupItems': [], 'showlen': False, 'sublevel': level, 'state': 'locked', 'selected': 0, 'hideExpander': True, 'BlockOpenWindow': 1, 'hideFill': True } stuff.append(listentry.Get('Group', data)) else: for row in rows: data = util.KeyVal() data.sublevel = 2 data.label = '%s<t>%d' % (row.name, row.typeID) data.invtype = row data.showinfo = 1 data.typeID = row.typeID stuff.append(listentry.Get('TypeDBEntry', data=data)) return stuff