def showAddonInfo(addon): """Display a summary of an addon in the help panel. @param addon An addons.Addon object. """ global currentAddon, currentSetting # No longer showing a setting. currentSetting = None # The current addon that is displayed in the help. currentAddon = addon oneLiners = (detailedAddonMode == False) ident = addon.getId() # Begin the page with a table that contains the basic info. msg = '<html>' def optLink(id, isLink): if isLink: return '<a href="%s">%s</a>' % (id, language.translate(id)) else: return language.translate(id) # The detail selection links. msg += '<center><font size="-1">' msg += optLink('help-addon-mode-brief', detailedAddonMode) + ' | ' msg += optLink('help-addon-mode-detailed', not detailedAddonMode) msg += '</font></center><br>' # Summary table. msg += tableBegin msg += '<tr><td colspan="2"><b><font size="+1">' + \ language.translate(ident) + \ '</font></b>' def makeField(msg, fieldId, oneLiner=True): title = language.translate('help-addon-' + fieldId) contentId = ident + '-' + fieldId text = '' if language.isDefined(contentId): # This information has been defined. text = language.translate(contentId) elif detailedAddonMode: # Force all fields to show. text = '-' if text: if oneLiner: msg += tableRow + entryHeader(title) + entryContent(text) else: msg += tableRow + entryHeader(title, 2) + \ tableRow + entryContent(text, 2) return msg msg = makeField(msg, 'version') if detailedAddonMode: # Get the last modification time from the addon. modTime = time.localtime(addon.getLastModified()) msg += tableRow + entryHeader(language.translate('help-addon-date')) \ + entryContent(time.strftime("%d %b %Y", modTime)) msg = makeField(msg, 'summary', oneLiners) if detailedAddonMode: msg = makeField(msg, 'contact', oneLiners) msg = makeField(msg, 'author', oneLiners) msg = makeField(msg, 'copyright', oneLiners) msg = makeField(msg, 'license', oneLiners) # Dependencies. deps = [] exCats = addon.getExcludedCategories() if len(exCats): deps.append((language.translate('help-addon-excluded-categories'), map(lambda c: language.translate(c.getLongId()), exCats))) for type, label in [(sb.addon.EXCLUDES, 'help-addon-excludes'), (sb.addon.REQUIRES, 'help-addon-requires'), (sb.addon.PROVIDES, 'help-addon-provides'), (sb.addon.OFFERS, 'help-addon-offers')]: # Make a copy of the list so we can modify it. keywords = [kw for kw in addon.getKeywords(type)] # In the Brief mode, hide the identifier of the addon in the # Provides field. if not detailedAddonMode and type == sb.addon.PROVIDES: keywords.remove(addon.getId()) if len(keywords) > 0: # Include this in the info. def xlate(key): if ao.exists(key): return '<a href="%s">%s</a>' % \ (key, language.translate(key)) else: return key deps.append((language.translate(label), map(xlate, keywords))) if len(deps): # Print a dependencies table. msg += tableRow + entryHeader( language.translate('help-addon-dependencies'), 2) content = "" for dep in deps: if dep is not deps[0]: content += '<br>' content += "<b>" + dep[0] + ":</b><ul><li>" content += string.join(dep[1], '<li>') content += '</ul>' msg += tableRow + entryContent(content, 2) msg += tableEnd # Inside a box? if addon.getBox(): box = addon.getBox() msg += language.expand(language.translate('help-addon-part-of-box'), box.getId(), language.translate( box.getId())) + '<p>' # The overview. if language.isDefined(ident + '-readme'): msg += language.translate(ident + '-readme') msg += '</html>' helpText.setText(msg) showLogo(False)
def showAddonInfo(addon): """Display a summary of an addon in the help panel. @param addon An addons.Addon object. """ global currentAddon, currentSetting # No longer showing a setting. currentSetting = None # The current addon that is displayed in the help. currentAddon = addon oneLiners = (detailedAddonMode == False) ident = addon.getId() # Begin the page with a table that contains the basic info. msg = '<html>' def optLink(id, isLink): if isLink: return '<a href="%s">%s</a>' % (id, language.translate(id)) else: return language.translate(id) # The detail selection links. msg += '<center><font size="-1">' msg += optLink('help-addon-mode-brief', detailedAddonMode) + ' | ' msg += optLink('help-addon-mode-detailed', not detailedAddonMode) msg += '</font></center><br>' # Summary table. msg += tableBegin msg += '<tr><td colspan="2"><b><font size="+1">' + \ language.translate(ident) + \ '</font></b>' def makeField(msg, fieldId, oneLiner=True): title = language.translate('help-addon-' + fieldId) contentId = ident + '-' + fieldId text = '' if language.isDefined(contentId): # This information has been defined. text = language.translate(contentId) elif detailedAddonMode: # Force all fields to show. text = '-' if text: if oneLiner: msg += tableRow + entryHeader(title) + entryContent(text) else: msg += tableRow + entryHeader(title, 2) + \ tableRow + entryContent(text, 2) return msg msg = makeField(msg, 'version') if detailedAddonMode: # Get the last modification time from the addon. modTime = time.localtime(addon.getLastModified()) msg += tableRow + entryHeader(language.translate('help-addon-date')) \ + entryContent(time.strftime("%d %b %Y", modTime)) msg = makeField(msg, 'summary', oneLiners) if detailedAddonMode: msg = makeField(msg, 'contact', oneLiners) msg = makeField(msg, 'author', oneLiners) msg = makeField(msg, 'copyright', oneLiners) msg = makeField(msg, 'license', oneLiners) # Dependencies. deps = [] exCats = addon.getExcludedCategories() if len(exCats): deps.append((language.translate('help-addon-excluded-categories'), map(lambda c: language.translate(c.getLongId()), exCats))) for type, label in [(sb.addon.EXCLUDES, 'help-addon-excludes'), (sb.addon.REQUIRES, 'help-addon-requires'), (sb.addon.PROVIDES, 'help-addon-provides'), (sb.addon.OFFERS, 'help-addon-offers')]: # Make a copy of the list so we can modify it. keywords = [kw for kw in addon.getKeywords(type)] # In the Brief mode, hide the identifier of the addon in the # Provides field. if not detailedAddonMode and type == sb.addon.PROVIDES: keywords.remove(addon.getId()) if len(keywords) > 0: # Include this in the info. def xlate(key): if ao.exists(key): return '<a href="%s">%s</a>' % \ (key, language.translate(key)) else: return key deps.append((language.translate(label), map(xlate, keywords))) if len(deps): # Print a dependencies table. msg += tableRow + entryHeader( language.translate('help-addon-dependencies'), 2) content = "" for dep in deps: if dep is not deps[0]: content += '<br>' content += "<b>" + dep[0] + ":</b><ul><li>" content += string.join(dep[1], '<li>') content += '</ul>' msg += tableRow + entryContent(content, 2) msg += tableEnd # Inside a box? if addon.getBox(): box = addon.getBox() msg += language.expand( language.translate('help-addon-part-of-box'), box.getId(), language.translate(box.getId())) + '<p>' # The overview. if language.isDefined(ident + '-readme'): msg += language.translate(ident + '-readme') msg += '</html>' helpText.setText(msg) showLogo(False)
def refreshList(): """Refreshes the list of addons.""" addonList.freeze() # Try to keep the old selection, if there is one. oldSelections = addonList.getSelectedItems() addonList.clear() # Filtering parameters. profile = pr.getActive() isDefaults = profile is pr.getDefaults() if tree.getSelectedItem(): filterCategory = ao.getCategory(tree.getSelectedItem()) else: filterCategory = None # Which addons are currently attached? defaultAddons = pr.getDefaults().getAddons() if not isDefaults: profileAddons = pr.getActive().getAddons() else: profileAddons = None # Categories that will be in bold font in category-tree. boldCategories = [] # Determine filtering options. mode = listFilter.getSelectedItem() onlyCompatible = False onlyPWAD = False alsoBoxes = False if 'compatible' in mode: onlyCompatible = True if 'pwad' in mode: onlyPWAD = True if 'with-boxes' in mode: alsoBoxes = True for addon in ao.getAddons(): # Does this addon pass the filter? if not isDefaults and onlyCompatible: if not addon.isCompatibleWith(pr.getActive()): # Cannot be listed. continue if onlyPWAD and (addon.getType() != 'addon-type-wad' or not addon.isPWAD()): continue # Has a category been selected? if filterCategory and not filterCategory.isAncestorOf( addon.getCategory()): # Not in the category. continue # Addons in boxes are not listed unless the correct category is selected. if not alsoBoxes and addon.getBox(): # Addons in boxes are only visible if the selected category is a box category. boxCateg = addon.getBox().getContentCategoryLongId() if not filterCategory: continue if filterCategory.getLongId().find(boxCateg) != 0: # Not the right category. continue # Passed the filter! id = addon.getId() versionStr = '' icon = determineIcon(addon, profile, defaultAddons, profileAddons) if language.isDefined(id + '-version'): versionStr = language.translate(id + '-version') name = language.translate(id) if addon.getBox() and alsoBoxes: name += ' ' + language.translate('addon-list-in-box') addonList.addItemWithColumns(id, icon, name, versionStr) # Reselect old items. oldSelections.reverse() for sel in oldSelections: addonList.selectItem(sel) addonList.ensureVisible(sel) sortList() updateButtons() addonList.unfreeze() # Update the counter text. countText.setText( language.expand(language.translate('addon-counter'), str(len(addonList.getItems())), str(ao.getAddonCount()))) # Update boldings in category-tree. # --TODO!-- global mustRefreshList mustRefreshList = False
def refreshList(): """Refreshes the list of addons.""" addonList.freeze() # Try to keep the old selection, if there is one. oldSelections = addonList.getSelectedItems() addonList.clear() # Filtering parameters. profile = pr.getActive() isDefaults = profile is pr.getDefaults() if tree.getSelectedItem(): filterCategory = ao.getCategory(tree.getSelectedItem()) else: filterCategory = None # Which addons are currently attached? defaultAddons = pr.getDefaults().getAddons() if not isDefaults: profileAddons = pr.getActive().getAddons() else: profileAddons = None # Categories that will be in bold font in category-tree. boldCategories = [] # Determine filtering options. mode = listFilter.getSelectedItem() onlyCompatible = False onlyPWAD = False alsoBoxes = False if 'compatible' in mode: onlyCompatible = True if 'pwad' in mode: onlyPWAD = True if 'with-boxes' in mode: alsoBoxes = True for addon in ao.getAddons(): # Does this addon pass the filter? if not isDefaults and onlyCompatible: if not addon.isCompatibleWith(pr.getActive()): # Cannot be listed. continue if onlyPWAD and (addon.getType() != 'addon-type-wad' or not addon.isPWAD()): continue # Has a category been selected? if filterCategory and not filterCategory.isAncestorOf(addon.getCategory()): # Not in the category. continue # Addons in boxes are not listed unless the correct category is selected. if not alsoBoxes and addon.getBox(): # Addons in boxes are only visible if the selected category is a box category. boxCateg = addon.getBox().getContentCategoryLongId() if not filterCategory: continue if filterCategory.getLongId().find(boxCateg) != 0: # Not the right category. continue # Passed the filter! id = addon.getId() versionStr = '' icon = determineIcon(addon, profile, defaultAddons, profileAddons) if language.isDefined(id + '-version'): versionStr = language.translate(id + '-version') name = language.translate(id) if addon.getBox() and alsoBoxes: name += ' ' + language.translate('addon-list-in-box') addonList.addItemWithColumns(id, icon, name, versionStr) # Reselect old items. oldSelections.reverse() for sel in oldSelections: addonList.selectItem(sel) addonList.ensureVisible(sel) sortList() updateButtons() addonList.unfreeze() # Update the counter text. countText.setText(language.expand(language.translate('addon-counter'), str(len(addonList.getItems())), str(ao.getAddonCount()))) # Update boldings in category-tree. # --TODO!-- global mustRefreshList mustRefreshList = False