def __init__(self, parent=None): super(EditTMs, self).__init__(EditWidget.TAB, parent) self.tabname = "TMs/HMs" self.valuers = [] x = 0 y = 0 off = 0 txt = "%s%%02i" % translate("pokemontm") if pokeversion.gens[config.project["versioninfo"][0]] == 4: tmmax = 92 else: tmmax = 95 for i in range(104): sb = EditWidget(EditWidget.CHECKBOX, self) if i == 60: x = width mheight = y y = 0 elif i == tmmax: txt = "%s%%02i" % translate("pokemonhm") off = tmmax sb.setName(txt % (i - off + 1)) width, height = sb.getGeometry() sb.setGeometry(QRect(x, y, width, height)) sb.changed = self._changed self.valuers.append(sb) y += height self.setGeometry(0, 0, width * 2, mheight)
def addItem(self, item, toIndex=None): """Append a list of items into the drop-down list. @param items An array of strings. """ w = self.getWxWidget() try: # Does this already exist? index = self.items.index(item) # Update label. w.SetString(index, language.translate(item)) return except: pass if toIndex is not None: # A specific index has been given. self.items.insert(toIndex, item) w.Insert(language.translate(item), toIndex) else: if self.addSorted: # Need to locate the right index. toIndex = 0 # Sort alphabetically based on identifier. for i in range(len(self.items)): if cmp(item, self.items[i]) < 0: break toIndex = i + 1 self.items.insert(toIndex, item) w.Insert(language.translate(item), toIndex) else: # Just append. self.items.append(item) w.Append(self.__filter(language.translate(item)))
def __getPresentation(self, tabId): """Compose the HTML presentation for a tab identifier. @return HTML content as a string. """ # Kludge for the game-options icon. There should be a way to # map the icon more flexibly so this hardcoding wouldn't be # needed. if tabId == "game-options": game = "game-jdoom" if pr.getActive(): for c in pr.getActive().getComponents(): if c[:5] == "game-": game = c break imageName = language.translate(game + "-icon") else: imageName = language.translate(tabId + "-icon") return ( '<table width="100%" border=0 cellspacing=3 cellpadding=1>' + "<tr><td width=35><img width=32 height=32 " + 'src="%s"></td><td align="left" valign="center">%s</td>' % (paths.findBitmap(imageName), language.translate(tabId)) + "</tr></table>" )
def setupUi(self): self.setObjectName("EditDlg") self.resize(600, 400) icon = QIcon() icon.addPixmap(QPixmap("PPRE.ico"), QIcon.Normal, QIcon.Off) self.setWindowIcon(icon) self.menubar = QMenuBar(self) self.menubar.setGeometry(QRect(0, 0, 600, 20)) self.menus = {} self.menus["file"] = QMenu(self.menubar) self.menus["file"].setTitle(translate("menu_file")) self.menutasks = [] self.addMenuEntry("file", translate("menu_new"), self.new, "CTRL+N") self.addMenuEntry("file", translate("menu_save"), self.save, "CTRL+S") self.addMenuEntry("file", translate("menu_close"), self.quit, "CTRL+W") self.menubar.addAction(self.menus["file"].menuAction()) self.setMenuBar(self.menubar) self.statusbar = QStatusBar(self) self.setStatusBar(self.statusbar) self.widgetcontainer = QWidget(self) self.chooser = QComboBox(self.widgetcontainer) self.chooser.setGeometry(QRect(50, 25, 200, 20)) QObject.connect(self.chooser, QtCore.SIGNAL("currentIndexChanged(int)"), self.openChoice) self.currentLabel = QLabel(self.widgetcontainer) self.currentLabel.setGeometry(QRect(260, 25, 100, 20)) self.tabcontainer = QTabWidget(self.widgetcontainer) self.tabcontainer.setGeometry(QRect(25, 50, 550, 300)) self.tabs = [] self.listtabs = [] self.texttabs = [] self.manualtabs = [] self.setCentralWidget(self.widgetcontainer) self.updateWindowTitle("No file loaded") QMetaObject.connectSlotsByName(self)
def getShortContentAnalysis(self): """Forms a short single line of text that describes the contents of the WAD.""" # The directory must already be read by this time. analysis = [] mapCount = 0 hasCustomTextures = False for lump in self.lumps: # Count the number of maps. if len(lump) == 4 and lump[0] == 'E' and lump[2] == 'M' and \ lump[1] in string.digits and lump[3] in string.digits: mapCount += 1 elif len(lump) == 5 and lump[:3] == 'MAP' and \ lump[3] in string.digits and lump[4] in string.digits: mapCount += 1 # Any custom textures? elif lump == 'PNAMES' or lump == 'TEXTURE1' or lump == 'TEXTURE2': hasCustomTextures = True if mapCount > 0: analysis.append( language.expand( language.translate('wad-analysis-maps'), str(mapCount)) ) if hasCustomTextures: analysis.append(language.translate('wad-analysis-custom-textures')) return string.join(analysis, ', ').capitalize()
def getPokemonWidget(self, name, size, parent): choices = None if name[:4] == "type": choices = self.typenames elif name[:4] == "item": choices = self.itemnames elif name[:7] == "ability": choices = self.abilitynames elif name[:8] == "egggroup": choices = translate("pokemonegggroups") elif name == "evs": return EditEVs(parent) elif name == "tms": return EditTMs(None) elif name in ("exprate", "color"): choices = translate("pokemon" + name + "s") if choices: cb = EditWidget(EditWidget.COMBOBOX, parent) cb.setValues(choices) cb.setName(translate(name)) return cb sb = EditWidget(EditWidget.SPINBOX, parent) if size == 'H': sb.setValues([0, 0xFFFF]) else: sb.setValues([0, 0xFF]) sb.setName(translate(name)) return sb
def __init__(self, parent=None): super(EditTMs, self).__init__(EditWidget.TAB, parent) self.tabname = "TMs/HMs" self.valuers = [] x = 0 y = 0 off = 0 txt = "%s%%02i"%translate("pokemontm") if pokeversion.gens[config.project["versioninfo"][0]] == 4: tmmax = 92 else: tmmax = 95 for i in range(104): sb = EditWidget(EditWidget.CHECKBOX, self) if i == 60: x = width mheight = y y = 0 elif i == tmmax: txt = "%s%%02i"%translate("pokemonhm") off = tmmax sb.setName(txt%(i-off+1)) width, height = sb.getGeometry() sb.setGeometry(QRect(x, y, width, height)) sb.changed = self._changed self.valuers.append(sb) y += height self.setGeometry(0, 0, width*2, mheight)
def getShortContentAnalysis(self): """Forms a short single line of text that describes the contents of the WAD.""" # The directory must already be read by this time. analysis = [] mapCount = 0 hasCustomTextures = False for lump in self.lumps: # Count the number of maps. if len(lump) == 4 and lump[0] == 'E' and lump[2] == 'M' and \ lump[1] in string.digits and lump[3] in string.digits: mapCount += 1 elif len(lump) == 5 and lump[:3] == 'MAP' and \ lump[3] in string.digits and lump[4] in string.digits: mapCount += 1 # Any custom textures? elif lump == 'PNAMES' or lump == 'TEXTURE1' or lump == 'TEXTURE2': hasCustomTextures = True if mapCount > 0: analysis.append( language.expand(language.translate('wad-analysis-maps'), str(mapCount))) if hasCustomTextures: analysis.append(language.translate('wad-analysis-custom-textures')) return string.join(analysis, ', ').capitalize()
def getPokemonWidget(self, name, size, parent): choices = None if name[:4] == "type": choices = self.typenames elif name[:4] == "item": choices = self.itemnames elif name[:7] == "ability": choices = self.abilitynames elif name[:8] == "egggroup": choices = translate("pokemonegggroups") elif name == "evs": return EditEVs(parent) elif name == "tms": return EditTMs(None) elif name in ("exprate", "color"): choices = translate("pokemon"+name+"s") if choices: cb = EditWidget(EditWidget.COMBOBOX, parent) cb.setValues(choices) cb.setName(translate(name)) return cb sb = EditWidget(EditWidget.SPINBOX, parent) if size == 'H': sb.setValues([0, 0xFFFF]) else: sb.setValues([0, 0xFF]) sb.setName(translate(name)) return sb
def getFlavorWidget(self, section, name, parent): if section == "flavor": te = EditWidget(EditWidget.TEXTEDIT, parent) te.setName(translate(name)) return te le = EditWidget(EditWidget.LINEEDIT, parent) le.setName(translate(name)) return le
def handleNotify(event): """This is called when somebody sends a notification. @param event A events.Notify object. """ if event.hasId('show-help-text-now'): helpText.unfreeze() return if helpDisabled: return if event.hasId('init-done'): setField(FIELD_MAIN, language.translate('help-welcome')) setField(FIELD_COMMAND, language.translate('help-command-defaults')) updateHelpText() elif event.hasId('show-help-text-now'): helpText.unfreeze() elif event.hasId('active-profile-changed'): if pr.getActive() is pr.getDefaults(): setField(FIELD_COMMAND, language.translate('help-command-defaults')) else: setField(FIELD_COMMAND, language.translate('help-command')) elif event.hasId('tab-selected'): setField(FIELD_MAIN, '') setField(FIELD_CURRENT_TAB, language.translate('help-' + event.getSelection())) elif event.hasId('addon-list-selected') or \ event.hasId('maps-list-selected'): # Display information about the selected addon in the panel. try: showAddonInfo(ao.get(event.getSelection())) except KeyError: # It wasn't an addon. pass elif event.hasId('focus-changed'): try: setting = st.getSetting(event.getFocus()) showSettingInfo(setting) except KeyError: # It was likely not a setting id. pass elif event.hasId('value-changed'): if currentSetting and event.getSetting() == currentSetting.getId(): showSettingInfo(currentSetting) elif event.hasId('language-changed'): pass
def show(): """Show all the issues in a dialog. The list of issues will be automatically cleared. If there are no issues to report, nothing is done.""" global allIssues if len(allIssues) == 0: # Nothing to report. return import sb.util.dialog dialog, area = sb.util.dialog.createButtonDialog( 'issue-dialog', ['ok'], 'ok') message = area.createFormattedText() message.setMinSize(500, 300) msg = '' bgColor = ['#90E090', '#FFFF80', '#E05050'] fgColor = ['black', 'black', 'white'] severeName = ['Note', 'Warning', 'Error'] isFirst = True # Compose a HTML formatted version of each issue. for severe in [HIGH, MEDIUM, LOW]: # Show the important issues first. for issue in allIssues: if issue[0] != severe: continue if not isFirst: msg += '<hr>' isFirst = False msg += '<table width="100%" border=0 cellspacing=3 cellpadding=4>' msg += '<tr><td bgcolor="%s" width="20%%" align=center>' % \ bgColor[issue[0]] msg += '<font color="%s"><b>' % fgColor[issue[0]] + \ severeName[issue[0]] + '</b></font>' msg += '<td width="80%"><h3>' + language.expand( language.translate(issue[1]), *issue[2]) msg += '</h3>' + language.expand( language.translate(issue[1] + '-text'), *issue[2]) msg += '</table>' message.setText(msg) dialog.run() # Only show each issue once. allIssues = []
def show(): """Show all the issues in a dialog. The list of issues will be automatically cleared. If there are no issues to report, nothing is done.""" global allIssues if len(allIssues) == 0: # Nothing to report. return import sb.util.dialog dialog, area = sb.util.dialog.createButtonDialog('issue-dialog', ['ok'], 'ok') message = area.createFormattedText() message.setMinSize(500, 300) msg = '' bgColor = ['#90E090', '#FFFF80', '#E05050'] fgColor = ['black', 'black', 'white'] severeName = ['Note', 'Warning', 'Error'] isFirst = True # Compose a HTML formatted version of each issue. for severe in [HIGH, MEDIUM, LOW]: # Show the important issues first. for issue in allIssues: if issue[0] != severe: continue if not isFirst: msg += '<hr>' isFirst = False msg += '<table width="100%" border=0 cellspacing=3 cellpadding=4>' msg += '<tr><td bgcolor="%s" width="20%%" align=center>' % \ bgColor[issue[0]] msg += '<font color="%s"><b>' % fgColor[issue[0]] + \ severeName[issue[0]] + '</b></font>' msg += '<td width="80%"><h3>' + language.expand( language.translate(issue[1]), *issue[2]) msg += '</h3>' + language.expand( language.translate(issue[1] + '-text'), *issue[2]) msg += '</table>' message.setText(msg) dialog.run() # Only show each issue once. allIssues = []
def updateState(self): """Update the state of the indicator to match one of the three states.""" if self.indicator: w = self.getWxWidget() if w.Get3StateValue() == wx.CHK_UNDETERMINED: self.indicator.setText( '(' + language.translate('toggle-use-default-value') + \ language.translate( pr.getDefaults().getValue(self.widgetId).getValue()) + ')') else: self.indicator.setText('')
def createConflictButtons(self, addonName): self.area.setWeight(0) self.choices = [] self.choices.append( resolving.area.createRadioButton('', True, True)) self.choices.append( resolving.area.createRadioButton('', False)) self.choices[0].setText(language.expand( language.translate('conflict-choice1'), addonName)) self.choices[1].setText(language.expand( language.translate('conflict-choice2'), addonName))
def translate_functions(string): for color in ["green", "yellow", "red"]: for fn in get_rules()[color]: code = get_source_code(fn) if code.startswith("def "): fn_name = code[4:code.index("(")] string = string.replace(fn_name, translate("functions", fn_name)) for variable in variables: string = string.replace(variable, translate("variables", variable)) if variable == "string" and len(translate("variables", variable)) == len(variable) - 1: string = string.replace("# index: 012345678", "# index: 012345678") return string
def handleCommand(event): """Handle the About command and display the About Snowberry dialog. @param event An events.Command event. """ if event.hasId('about'): # Create the About dialog and show it. dialog, area = sb.util.dialog.createButtonDialog( 'about-dialog', ['show-credits', '', 'ok'], 'ok', resizable=False) content = area.createArea(alignment=ui.ALIGN_VERTICAL, border=0) content.setWeight(0) # Big logo. content.setBorder(16, ui.BORDER_BOTTOM) content.createImage('about') content.setBorder(6, ui.BORDER_BOTTOM) versionText = content.createText('', align=wt.Text.MIDDLE) versionText.setBoldStyle() versionText.setText( language.translate('about-version') + ' ' + st.getSystemString('snowberry-version')) content.createText('about-subtitle', align=wt.Text.MIDDLE) content.createText('about-license', align=wt.Text.MIDDLE) content.createText('about-website', align=wt.Text.MIDDLE).setSmallStyle() #content.setBorder(6) #content.setWeight(1) #box = content.createArea(boxedWithTitle='about-credits') #info = box.createFormattedText() #info.setMinSize(300, 280) #info.setText(language.translate('about-info')) dialog.focusWidget('ok') dialog.run() elif event.hasId('show-credits'): dialog, area = sb.util.dialog.createButtonDialog( 'about-credits', ['close'], 'close') info = area.createFormattedText() info.setMinSize(290, 230) info.setText(language.translate('credits')) dialog.addEndCommand('close') dialog.run()
def getEvolutionWidget(self, name, size, parent): choices = None if name[:6] == "method": choices = translate("pokemonevolutionmethods") elif name[:6] == "target": choices = self.pokemonnames if choices: cb = EditWidget(EditWidget.COMBOBOX, parent) cb.setValues(choices) cb.setName(translate(name)) return cb sb = EditWidget(EditWidget.SPINBOX, parent) sb.setValues([0, 0xFFFF]) sb.setName(translate(name)) return sb
def __init__(self, parent, wxId, label, isChecked): base.Widget.__init__(self, wx.CheckBox(parent, wxId, uniConv(language.translate(label)), style=wx.CHK_3STATE | wx.CHK_ALLOW_3RD_STATE_FOR_USER)) self.widgetId = label # Set the initial value of the checkbox. w = self.getWxWidget() if isChecked: w.Set3StateValue(wx.CHK_CHECKED) else: w.Set3StateValue(wx.CHK_UNCHECKED) # We want focus notifications. self.setFocusId(self.widgetId) self.indicator = None # When the checkbox is focused, send a notification. wx.EVT_CHECKBOX(parent, wxId, self.onClick) # Listen for value changes. self.addValueChangeListener() self.addProfileChangeListener()
def handleCommand(event): """This is called when somebody sends a command. @param event A events.Command object. """ global detailedAddonMode global helpDisabled if event.hasId('help-addon-mode-brief'): detailedAddonMode = False if currentAddon: showAddonInfo(currentAddon) elif event.hasId('help-addon-mode-detailed'): detailedAddonMode = True if currentAddon: showAddonInfo(currentAddon) elif event.hasId('freeze'): helpDisabled = True elif event.hasId('unfreeze'): helpDisabled = False updateHelpText() elif event.hasId('open-documentation'): webbrowser.open_new(language.translate('documentation-url'))
def addTextTab(self, tabname, getEntryList, getEntry, getwidget=defaultTextWidget): tabscroller = QScrollArea(self.tabcontainer) container = QWidget(tabscroller) fields = [] y = 10 ypadding = 0 x = 5 mwidth = 0 self.tabcontainer.addTab(tabscroller, tabname) for section in getEntryList(): w = QLabel(translate(section[0]), container) w.setGeometry(QRect(x, y, 100, 20)) y += ypadding + 20 for entry in section[1]: w = getwidget(section[0], entry, container) width, height = w.getGeometry() w.setGeometry(QRect(x, y, width, height)) w.changed = self.changed fields.append([section[0], entry, w]) y += ypadding + height mwidth = max(mwidth, width) container.setGeometry(QRect(0, 0, mwidth + 20, y)) tabscroller.setWidget(container) self.texttabs.append([fields, getEntry, container])
def __init__(self, parent, wxId, label, isChecked): base.Widget.__init__( self, wx.CheckBox(parent, wxId, uniConv(language.translate(label)), style=wx.CHK_3STATE | wx.CHK_ALLOW_3RD_STATE_FOR_USER)) self.widgetId = label # Set the initial value of the checkbox. w = self.getWxWidget() if isChecked: w.Set3StateValue(wx.CHK_CHECKED) else: w.Set3StateValue(wx.CHK_UNCHECKED) # We want focus notifications. self.setFocusId(self.widgetId) self.indicator = None # When the checkbox is focused, send a notification. wx.EVT_CHECKBOX(parent, wxId, self.onClick) # Listen for value changes. self.addValueChangeListener() self.addProfileChangeListener()
def moveItem(self, identifier, steps): """Move an item up or down in the list. @param identifier Item to move. @param steps Number of indices to move. Negative numbers move the item upwards, positive numbers move it down. """ w = self.getWxWidget() for index in range(len(self.items)): if self.items[index] == identifier: # This is the item to move. w.Delete(index) del self.items[index] # Insert it to another location. index += steps if index < 0: index = 0 elif index > len(self.items): index = len(self.items) w.Insert(language.translate(identifier), index) w.SetSelection(index) # Also update the items list. self.items = self.items[:index] + [identifier] + \ self.items[index:] break
def __init__(self, boxTitle, parentArea, panel, alignment=0, border=0): """Construct a new BoxedArea. Instances of BoxedArea are always sub-areas. @param boxTitle Identifier of the box title. @param parentArea The Area object inside which the BoxedArea will be added. @param panel The wxPanel into which all the widgets in the BoxedArea will be placed. @param alignment Alignment of widgets inside the area. @param border Border around widgets. """ Area.__init__(self, '', panel, alignment, border, parentArea) self.label = boxTitle # Create a wxStaticBox and place it inside the area. self.box = wx.StaticBox(panel, -1, language.translate(boxTitle)) self.containerSizer = wx.StaticBoxSizer(self.box, self.sizer.GetOrientation()) # Insert the static box sizer into the area's sizer. All the # widgets of the area will go inside the container sizer, # which is the static box sizer. self.sizer.Add(self.containerSizer, self.weight, self._getLayoutFlags(), self.border)
def __init__(self, parent, wxId, id, size, align=ui.ALIGN_VERTICAL, resizable=True): # Determine flags. flags = wx.CLOSE_BOX | wx.CAPTION if resizable: flags |= wx.RESIZE_BORDER wx.Dialog.__init__(self, parent, wxId, uniConv(language.translate(id)), style=flags) self.dialogId = id self.widgetMap = {} if size: self.recommendedSize = size else: self.recommendedSize = None # All the commands that will cause the dialog to be closed. self.dialogEndCommands = ['ok', 'cancel', 'yes', 'no'] # Create an area inside the dialog. self.area = sb.widget.area.Area('', self, alignment=align, border=0)
def addTab(self, id): """Add a new tab into the TabArea widget. The tab is appended after previously added tabs. @param id Identifier for the tab. The name and the icon of the tab will be determined using this identifier. @return The Area object for the contents of the tab. """ book = self.getWxWidget() #tab = scrolled.ScrolledPanel(book, -1) #tab.SetupScrolling() tab = wx.Panel(book, -1, style=wx.CLIP_CHILDREN) if host.isWindows(): tab.SetBackgroundStyle(wx.BG_STYLE_SYSTEM) # Put the new tab in the page map so that when an event # occurs, we will know the ID of the tab. self.panelMap.append((id, tab)) # Insert the page into the book. book.AddPage(tab, language.translate(id)) import sb.widget.area area = sb.widget.area.Area(id, tab, ui.ALIGN_VERTICAL) area.setExpanding(True) area.setWeight(1) # Store the Area object in a dictionary for quick access. self.tabAreas[id] = area self.updateIcons() return area
def addTextTab(self, tabname, getEntryList, getEntry, getwidget=defaultTextWidget): tabscroller = QScrollArea(self.tabcontainer) container = QWidget(tabscroller) fields = [] y = 10 ypadding = 0 x = 5 mwidth = 0 self.tabcontainer.addTab(tabscroller, tabname) for section in getEntryList(): w = QLabel(translate(section[0]), container) w.setGeometry(QRect(x, y, 100, 20)) y += ypadding + 20 for entry in section[1]: w = getwidget(section[0], entry, container) width, height = w.getGeometry() w.setGeometry(QRect(x, y, width, height)) w.changed = self.changed fields.append([section[0], entry, w]) y += ypadding + height mwidth = max(mwidth, width) container.setGeometry(QRect(0, 0, mwidth+20, y)) tabscroller.setWidget(container) self.texttabs.append([fields, getEntry, container])
def retranslateColumns(self): w = self.getWxWidget() numCols = w.GetColumnCount() for i in range(numCols): col = w.GetColumn(i) col.SetMask(wx.LIST_MASK_TEXT) col.SetText(language.translate(self.columns[i])) w.SetColumn(i, col)
def defaultWidget(name, size, parent): sb = EditWidget(EditWidget.SPINBOX, parent) if size == 'H': sb.setValues([0, 0xFFFF]) else: sb.setValues([0, 0xFF]) sb.setName(translate(name)) return sb
def getName(self): """Returns the name of the profile. This is the name provided by the user. """ if self is profdb.defaults: # The defaults profile has a translateable name. return language.translate('defaults-profile') return self.name
def run(): # Open the file selection dialog. for selection in chooseAddons('install-addon-dialog', language.translate('install-addon-title'), 'install'): try: ao.install(selection) except Exception, ex: logger.add(logger.HIGH, 'error-addon-installation-failed', selection, str(ex))
def makeProfileHTML(profile): if profile is pr.getDefaults(): return makeHTML(profile.getName(), "defaults", boldName=True) # iconPath = paths.findBitmap('defaults') # iconSize = iconSizeString() # return '<table width="100%" border=0 cellspacing=2 cellpadding=5>' + \ # '<tr><td width="' + iconSize + \ # '"><img width="%s" height="%s"' % (iconSize, iconSize) + \ # ' src="' + iconPath + \ # '"><td align=left><font size="+1"><b>' + profile.getName() + \ # '</b></font></table>' else: game = "game-undefined" for c in profile.getComponents(): if c[:5] == "game-": game = c break return makeHTML(profile.getName(), language.translate(game + "-icon"), language.translate(game))
def chooseFolder(prompt, default): """Show a directory chooser dialog. @param prompt Identifier of the dialog title string. @param default The default path. @return The selected path. """ return wx.DirSelector(language.translate(prompt), default)
def chooseFile(prompt, default, mustExist, fileTypes, defExt=None): """Show a file chooser dialog. @param prompt Identifier of the dialog title string. @param default The default selection. @param mustExist The selected file must exist. @param fileTypes An array of tuples (name, extension). @return The full pathname of the selected file. """ # Compile the string of file types. types = [] for ident, ext in fileTypes: types.append(language.translate(ident)) types.append('*.' + ext.lower() + ';*.' + ext.upper()) # Always append the "all files" filter. types.append(language.translate('file-type-anything')) types.append('*.*') if not defExt: if len(fileTypes) > 0: # By default use the first file type. defExt = fileTypes[0][1] else: defExt = '' if mustExist: flags = wx.FILE_MUST_EXIST else: flags = 0 selection = wx.FileSelector(language.translate(prompt), os.path.dirname(default), os.path.basename(default), defExt, string.join(types, '|'), flags) return selection
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
def makeProfileHTML(profile): if profile is pr.getDefaults(): return makeHTML(profile.getName(), 'defaults', boldName=True) #iconPath = paths.findBitmap('defaults') #iconSize = iconSizeString() #return '<table width="100%" border=0 cellspacing=2 cellpadding=5>' + \ # '<tr><td width="' + iconSize + \ # '"><img width="%s" height="%s"' % (iconSize, iconSize) + \ # ' src="' + iconPath + \ # '"><td align=left><font size="+1"><b>' + profile.getName() + \ # '</b></font></table>' else: game = 'game-undefined' for c in profile.getComponents(): if c[:5] == 'game-': game = c break return makeHTML(profile.getName(), language.translate(game + '-icon'), language.translate(game))
def retranslate(self): """Retranslate the tab labels.""" for identifier, panel in self.panelMap: pageIndex = self.__getPanelIndex(panel) if pageIndex != None: try: self.getWxWidget().SetPageText(pageIndex, language.translate(identifier)) except: # wxWidgets hasn't implemented the appropriate method? pass
def sortList(): """Sort the current addon list according to the sort mode.""" # Unsorted items of the list. Sorting will be done based on this information. if listSortMode == 'check': icons = addonList.getItemImages() items = addonList.getItems() keys = map( lambda i: (language.translate(i).lower(), language.translate(i + '-version', '0.0')), items) def checkSortCmp(a, b): # First compare check icon (descending). result = cmp(icons[b], icons[a]) if result != 0: return result # Then compare as in by name. return nameSortCmp(a, b) def nameSortCmp(a, b): # First by name. result = cmp(keys[a][0], keys[b][0]) if result != 0: return result # Then by version (descending). return cmp(keys[b][1], keys[a][1]) def versionSortCmp(a, b): # First by version (descending). result = cmp(keys[b][1], keys[a][1]) if result != 0: return result # Then by name. return cmp(keys[a][0], keys[b][0]) funcs = { 'version': versionSortCmp, 'check': checkSortCmp, 'name': nameSortCmp } addonList.sortItems(funcs[listSortMode])
def retranslate(self): """Retranslate the tab labels.""" for identifier, panel in self.panelMap: pageIndex = self.__getPanelIndex(panel) if pageIndex != None: try: self.getWxWidget().SetPageText( pageIndex, language.translate(identifier)) except: # wxWidgets hasn't implemented the appropriate method? pass
def __init__(self, parent, wxId, label, isToggled, isFirst=False): if isFirst: flags = wx.RB_GROUP else: flags = 0 base.Widget.__init__(self, wx.RadioButton(parent, wxId, language.translate(label), style=flags)) self.label = label if isToggled: self.getWxWidget().SetValue(True)
def retranslate(self): """Update the text of the items in the drop list. Preserve current selection.""" drop = self.getWxWidget() sel = drop.GetSelection() # We will replace all the items in the list. drop.Clear() for i in range(len(self.items)): drop.Append(self.__filter(language.translate(self.items[i]))) drop.SetSelection(sel)
def __init__(self, parent, wxId, id, style): # Create a wxButton of the appropriate type. if style != Button.STYLE_MINI: widget = wx.Button(parent, wxId, uniConv(language.translate(id))) else: widget = wx.ToggleButton(parent, wxId, uniConv(language.translate(id))) # Default buttons are usually a bit different visually. if style == Button.STYLE_DEFAULT: widget.SetDefault() base.Widget.__init__(self, widget) self.widgetId = id if style == Button.STYLE_MINI: # The mini buttons use the small style. self.setSmallStyle() # The size of the mini buttons is configurable. bestSize = widget.GetBestSize() width = 30 height = bestSize[1] try: width = st.getSystemInteger('button-mini-width') if st.getSystemInteger('button-mini-height'): height = st.getSystemInteger('button-mini-height') except: pass widget.SetMinSize((width, height)) if style != Button.STYLE_MINI: # We will handle the click event ourselves. wx.EVT_BUTTON(parent, wxId, self.onClick) #self.updateDefaultSize() else: # Pop back up when toggled down. wx.EVT_TOGGLEBUTTON(parent, wxId, self.onToggle)