Example #1
0
 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)
Example #2
0
    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)))
Example #3
0
    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>"
        )
Example #4
0
 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)
Example #5
0
    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()
Example #6
0
 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
Example #7
0
 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()
Example #9
0
 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
Example #10
0
    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)))
Example #11
0
 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
Example #12
0
 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
Example #13
0
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
Example #14
0
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
Example #15
0
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 = []
Example #16
0
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 = []
Example #17
0
    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('')
Example #18
0
    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('')
Example #19
0
 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))
Example #20
0
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
Example #21
0
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()
Example #22
0
 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
Example #23
0
 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
Example #24
0
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()
Example #25
0
    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()
Example #26
0
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'))
Example #27
0
 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])
Example #28
0
    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()
Example #29
0
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'))
Example #30
0
    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
Example #31
0
    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)
Example #32
0
    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
Example #33
0
    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)
Example #34
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
Example #35
0
 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])
Example #36
0
 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)
Example #37
0
 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)
Example #38
0
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
Example #39
0
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
Example #41
0
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))
Example #42
0
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))
Example #43
0
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)
Example #44
0
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 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))
Example #46
0
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
Example #47
0
    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
Example #48
0
    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))
Example #50
0
    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
Example #51
0
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])
Example #52
0
    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
Example #53
0
 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)
Example #54
0
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
Example #55
0
    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)
Example #56
0
    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)
Example #57
0
    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)