def _pageContributors(self, extra=False): """Contributors info""" if extra: contribfile = os.path.join(os.getenv("GISBASE"), "contributors_extra.csv") else: contribfile = os.path.join(os.getenv("GISBASE"), "contributors.csv") if os.path.exists(contribfile): contribFile = codecs.open(contribfile, encoding='utf-8', mode='r') contribs = list() errLines = list() for line in contribFile.readlines()[1:]: line = line.rstrip('\n') try: if extra: name, email, country, rfc2_agreed = line.split(',') else: cvs_id, name, email, country, osgeo_id, rfc2_agreed = line.split( ',') except ValueError: errLines.append(line) continue if extra: contribs.append((name, email, country)) else: contribs.append((name, email, country, osgeo_id)) contribFile.close() if errLines: GError( parent=self, message=_("Error when reading file '%s'.") % contribfile + "\n\n" + _("Lines:") + " %s" % os.linesep.join(map(DecodeString, errLines))) else: contribs = None contribwin = ScrolledPanel(self.aboutNotebook) contribwin.SetAutoLayout(True) contribwin.SetupScrolling() contribwin.sizer = wx.BoxSizer(wx.VERTICAL) if not contribs: contribtxt = StaticText(contribwin, id=wx.ID_ANY, label=_('%s file missing') % contribfile) contribwin.sizer.Add(contribtxt, proportion=1, flag=wx.EXPAND | wx.ALL, border=3) else: if extra: items = (_('Name'), _('E-mail'), _('Country')) else: items = (_('Name'), _('E-mail'), _('Country'), _('OSGeo_ID')) contribBox = wx.FlexGridSizer(cols=len(items), vgap=5, hgap=5) for item in items: text = StaticText(parent=contribwin, id=wx.ID_ANY, label=item) text.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) contribBox.Add(text) for vals in sorted(contribs, key=lambda x: x[0]): for item in vals: contribBox.Add( StaticText(parent=contribwin, id=wx.ID_ANY, label=item)) contribwin.sizer.Add(contribBox, proportion=1, flag=wx.EXPAND | wx.ALL, border=3) contribwin.SetSizer(contribwin.sizer) contribwin.Layout() return contribwin
def _pageTranslators(self): """Translators info""" translatorsfile = os.path.join(os.getenv("GISBASE"), "translators.csv") if os.path.exists(translatorsfile): translatorsFile = codecs.open(translatorsfile, encoding='utf-8', mode='r') translators = dict() errLines = list() for line in translatorsFile.readlines()[1:]: line = line.rstrip('\n') try: name, email, languages = line.split(',') except ValueError: errLines.append(line) continue for language in languages.split(' '): if language not in translators: translators[language] = list() translators[language].append((name, email)) translatorsFile.close() if errLines: GError(parent=self, message=_("Error when reading file '%s'.") % translatorsfile + "\n\n" + _("Lines:") + " %s" % os.linesep.join(map(DecodeString, errLines))) else: translators = None translatorswin = ScrolledPanel(self.aboutNotebook) translatorswin.SetBackgroundColour('WHITE') translatorswin.SetAutoLayout(True) translatorswin.SetupScrolling() translatorswin.sizer = wx.BoxSizer(wx.VERTICAL) if not translators: translatorstxt = StaticText(translatorswin, id=wx.ID_ANY, label=_('%s file missing') % 'translators.csv') translatorswin.sizer.Add(translatorstxt, proportion=1, flag=wx.EXPAND | wx.ALL, border=3) else: translatorsBox = wx.FlexGridSizer(cols=4, vgap=5, hgap=5) languages = sorted(translators.keys()) tname = StaticText(parent=translatorswin, id=wx.ID_ANY, label=_('Name')) tname.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) translatorsBox.Add(tname) temail = StaticText(parent=translatorswin, id=wx.ID_ANY, label=_('E-mail')) temail.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) translatorsBox.Add(temail) tlang = StaticText(parent=translatorswin, id=wx.ID_ANY, label=_('Language')) tlang.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) translatorsBox.Add(tlang) tnat = StaticText(parent=translatorswin, id=wx.ID_ANY, label=_('Nation')) tnat.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) translatorsBox.Add(tnat) for lang in languages: for translator in translators[lang]: name, email = translator translatorsBox.Add( StaticText(parent=translatorswin, id=wx.ID_ANY, label=name)) translatorsBox.Add( StaticText(parent=translatorswin, id=wx.ID_ANY, label=email)) translatorsBox.Add( StaticText(parent=translatorswin, id=wx.ID_ANY, label=lang)) flag = os.path.join(globalvar.ICONDIR, "flags", "%s.png" % lang.lower()) if os.path.exists(flag): flagBitmap = wx.StaticBitmap( translatorswin, wx.ID_ANY, wx.Bitmap(name=flag, type=wx.BITMAP_TYPE_PNG)) translatorsBox.Add(flagBitmap) else: translatorsBox.Add( StaticText(parent=translatorswin, id=wx.ID_ANY, label=lang)) translatorswin.sizer.Add(translatorsBox, proportion=1, flag=wx.EXPAND | wx.ALL, border=3) translatorswin.SetSizer(translatorswin.sizer) translatorswin.Layout() return translatorswin
def _pageInfo(self): """Info page""" # get version and web site vInfo = grass.version() if not vInfo: sys.stderr.write(_("Unable to get GRASS version\n")) infoTxt = ScrolledPanel(self.aboutNotebook) infoTxt.SetBackgroundColour('WHITE') infoTxt.SetupScrolling() infoSizer = wx.BoxSizer(wx.VERTICAL) infoGridSizer = wx.GridBagSizer(vgap=5, hgap=5) logo = os.path.join(globalvar.ICONDIR, "grass-64x64.png") logoBitmap = wx.StaticBitmap( infoTxt, wx.ID_ANY, wx.Bitmap(name=logo, type=wx.BITMAP_TYPE_PNG)) infoSizer.Add(logoBitmap, proportion=0, flag=wx.ALL | wx.ALIGN_CENTER, border=20) infoLabel = 'GRASS GIS %s' % vInfo.get('version', _('unknown version')) if 'x86_64' in vInfo.get('build_platform', ''): infoLabel += ' (64bit)' info = StaticText(parent=infoTxt, id=wx.ID_ANY, label=infoLabel + os.linesep) info.SetFont(wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) info.SetForegroundColour(wx.Colour(35, 142, 35)) infoSizer.Add(info, proportion=0, flag=wx.BOTTOM | wx.ALIGN_CENTER, border=1) team = StaticText(parent=infoTxt, label=_grassDevTeam(1999) + '\n') infoSizer.Add(team, proportion=0, flag=wx.BOTTOM | wx.ALIGN_CENTER, border=1) row = 0 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label=_('Official GRASS site:')), pos=(row, 0), flag=wx.ALIGN_RIGHT) infoGridSizer.Add(HyperLinkCtrl(parent=infoTxt, id=wx.ID_ANY, label='https://grass.osgeo.org'), pos=(row, 1), flag=wx.ALIGN_LEFT) row += 2 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label='%s:' % _('Code Revision')), pos=(row, 0), flag=wx.ALIGN_RIGHT) infoGridSizer.Add(HyperLinkCtrl( parent=infoTxt, id=wx.ID_ANY, label=vInfo.get('revision', '?'), URL='https://github.com/OSGeo/grass.git'), pos=(row, 1), flag=wx.ALIGN_LEFT) row += 1 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label='%s:' % _('Build Date')), pos=(row, 0), flag=wx.ALIGN_RIGHT) infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label=vInfo.get('build_date', '?')), pos=(row, 1), flag=wx.ALIGN_LEFT) # show only basic info # row += 1 # infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY, # label = '%s:' % _('GIS Library Revision')), # pos = (row, 0), # flag = wx.ALIGN_RIGHT) # infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY, # label = vInfo['libgis_revision'] + ' (' + # vInfo['libgis_date'].split(' ')[0] + ')'), # pos = (row, 1), # flag = wx.ALIGN_LEFT) row += 2 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label='Python:'), pos=(row, 0), flag=wx.ALIGN_RIGHT) infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label=platform.python_version()), pos=(row, 1), flag=wx.ALIGN_LEFT) row += 1 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label='wxPython:'), pos=(row, 0), flag=wx.ALIGN_RIGHT) infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label=wx.__version__), pos=(row, 1), flag=wx.ALIGN_LEFT) infoGridSizer.AddGrowableCol(0) infoGridSizer.AddGrowableCol(1) infoSizer.Add(infoGridSizer, proportion=1, flag=wx.EXPAND) row += 2 infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label="%s:" % _('Language')), pos=(row, 0), flag=wx.ALIGN_RIGHT) self.langUsed = grass.gisenv().get('LANG', None) if not self.langUsed: import locale loc = locale.getdefaultlocale() if loc == (None, None): self.langUsed = _('unknown') else: self.langUsed = u'%s.%s' % (loc[0], loc[1]) infoGridSizer.Add(StaticText(parent=infoTxt, id=wx.ID_ANY, label=self.langUsed), pos=(row, 1), flag=wx.ALIGN_LEFT) infoTxt.SetSizer(infoSizer) infoSizer.Fit(infoTxt) return infoTxt