Hi,
Ah yes.
Usually when I develop a feature and while it is being "cooked" in a branch,
I omit translator comments and/or calls to Gettext, seeing that strings may
change. Once the branch is integrated into master (after going through
testing), then I add translator comments (either right away or much later
when the add-on is about to go live; for this, I use scons mergePot to
generate the pot file and look for missing translator comments).
Cheers,
Joseph
From: nvda-addons-bounce@xxxxxxxxxxxxx
[mailto:nvda-addons-bounce@xxxxxxxxxxxxx] On Behalf Of derek riemer
Sent: Thursday, April 21, 2016 1:02 AM
To: nvda-addons@xxxxxxxxxxxxx
Subject: [nvda-addons] Re: commit/StationPlaylist: 2 new changesets
Out of curiosity, there's no translators comment here.
if level in (1, 2):
ui.message(_("No comment"))
On 4/19/2016 10:58 AM, commits-noreply@xxxxxxxxxxxxx
<mailto:commits-noreply@xxxxxxxxxxxxx> wrote:
2 new commits in StationPlaylist:
https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/7cb6feb17d95/
Changeset: 7cb6feb17d95 Branch: None User: josephsl Date: 2016-04-19
16:57:36+00:00 Summary: Track comments (8.0-dev/LTS): Track Comment
announcement combo box and entry dialog added.
Added a combo box in add-on settings to control how track comments should be
nnounced. Also added a text entry dialog for entering track comments
(Alt+NVDA+C three times).
Affected #: 2 files
diff --git a/addon/appModules/splstudio/__init__.py
b/addon/appModules/splstudio/__init__.py index 7bef11d..d565aa6 100755 ---
a/addon/appModules/splstudio/__init__.py +++
b/addon/appModules/splstudio/__init__.py @@ -279,15 +279,34 @@ class
SPLTrackItem(IAccessible):
if level == 0:
if splconfig.SPLConfig["General"]["TrackCommentAnnounce"] in ("message",
"both"):
ui.message(_("Has comment"))
* if splconfig.SPLConfig["General"]["TrackCommentAnnounce"] in
("message", "both"):
* tones.beep(512, 500)
+ if splconfig.SPLConfig["General"]["TrackCommentAnnounce"] in ("beep",
"both"): + tones.beep(1024, 100)
elif level == 1:
ui.message(splconfig.trackComments[filename])
elif level == 2:
api.copyToClip(splconfig.trackComments[filename])
+ # Translators: Presented when track comment has been copied to clipboard.
+ ui.message(_("Track comment copied to clipboard")) + else: +
self._trackCommentsEntry(filename, splconfig.trackComments[filename])
else:
if level in (1, 2):
ui.message(_("No comment"))
+ elif level == 3: + self._trackCommentsEntry(filename, "") + + # A proxy
function to call the track comments entry dialog. + def
_trackCommentsEntry(self, filename, comment): + dlg =
wx.TextEntryDialog(gui.mainFrame, + _("Track comment"), + # Translators: The
title of the track comments dialog. + _("Track comment"),
defaultValue=comment) + def callback(result): + if result == wx.ID_OK: + if
dlg.GetValue() is None: return + elif dlg.GetValue() == "": del
splconfig.trackComments[filename] + else: splconfig.trackComments[filename]
= dlg.GetValue() + gui.runScriptModalDialog(dlg, callback)
def script_announceTrackComment(self, gesture):
self.announceTrackComment(scriptHandler.getLastScriptRepeatCount()+1)
diff --git a/addon/appModules/splstudio/splconfui.py
b/addon/appModules/splstudio/splconfui.py index b73d530..6af223e 100755 ---
a/addon/appModules/splstudio/splconfui.py +++
b/addon/appModules/splstudio/splconfui.py @@ -249,6 +249,27 @@ class
SPLConfigDialog(gui.SettingsDialog):
self.categorySoundsCheckbox.SetValue(splconfig.SPLConfig["General"]["Categor
ySounds"])
settingsSizer.Add(self.categorySoundsCheckbox,
border=10,flag=wx.BOTTOM)
+ sizer = wx.BoxSizer(wx.HORIZONTAL) + # Translators: the label for a
setting in SPL add-on settings to set how track comments are announced. +
label = wx.StaticText(self, wx.ID_ANY, label=_("&Track comment
announcement:")) + self.trackCommentValues=[("off",_("Off")), + #
Translators: One of the track comment notification settings. +
("message",_("Message")), + # Translators: One of the track comment
notification settings. + ("beep",_("Beep")), + # Translators: One of the
track comment notification settings. + ("both",_("Both"))] +
self.trackCommentList = wx.Choice(self, wx.ID_ANY, choices=[x[1] for x in
self.trackCommentValues]) +
trackCommentCurValue=splconfig.SPLConfig["General"]["TrackCommentAnnounce"]
+ selection = (x for x,y in enumerate(self.trackCommentValues) if
y[0]==trackCommentCurValue).next() + try: +
self.trackCommentList.SetSelection(sele ction) + except: + pass +
sizer.Add(label) + sizer.Add(self.trackCommentList) +
settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM) +
# Translators: the label for a setting in SPL add-on settings to toggle top
and bottom notification.
self.topBottomCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Notify when
located at &top or bottom of playlist viewer"))
self.topBottomCheckbox.SetValue(splconfig.SPLConfig["General"]["TopBottomAnn
ounce"])
@@ -342,6 +363,7 @@ class SPLConfigDialog(gui.SettingsDialog):
splconfig.SPLConfig["General"]["TimeHourAnnounce"] =
self.hourAnnounceCheckbox.Value
splconfig.SPLConfig["General"]["TrackDial"] = self.trackDialCheckbox.Value
splconfig.SPLConfig["General"]["CategorySounds"] =
self.categorySoundsCheckbox.Value
+ splconfig.SPLConfig["General"]["TrackCommentAnnounce"] =
self.trackCommentValues[self.trackCommentList.GetSelection()][0]
splconfig.SPLConfig["General"]["TopBottomAnnounce"] =
self.topBottomCheckbox.Value
splconfig.SPLConfig["General"]["MetadataReminder"] =
self.metadataValues[self.metadataList.GetSelection()][0]
splconfig.SPLConfig["MetadataStreaming"]["MetadataEnabled"] =
self.metadataStreams
https://bitbucket.org/nvdaaddonteam/stationplaylist/commits/5afba6a3be47/
Changeset: 5afba6a3be47 Branch: staging User: josephsl Date: 2016-04-19
16:58:48+00:00 Summary: Merge branch '8.0/trackComments' into staging
Affected #: 3 files
diff --git a/addon/appModules/splstudio/__init__.py
b/addon/appModules/splstudio/__init__.py index 77e411c..fe965b4 100755 ---
a/addon/appModules/splstudio/__init__.py +++
b/addon/appModules/splstudio/__init__.py @@ -138,7 +138,6 @@ class
SPLTrackItem(IAccessible):
def reportFocus(self):
# 7.0: Cache column header data structures if meeting track items for the
first time.
# It is better to do it while reporting focus, otherwise Python throws
recursion limit exceeded error when initOverlayClass does this.
* # Cache header column.
if self.appModule._columnHeaders is None:
self.appModule._columnHeaders = self.parent.children[-1]
# 7.0: Also cache column header names to improve performance (may need to
check for header repositioning later).
@@ -148,6 +147,9 @@ class SPLTrackItem(IAccessible):
category = self._getColumnContent(self._indexOf("Category"))
if category in _SPLCategoryTones:
tones.beep(_SPLCategoryTones[category], 50)
+ # LTS: Comments please. + if
splconfig.SPLConfig["General"]["TrackCommentAnnounce"] != "off": +
self.announceTrackComment(0)
# 6.3: Catch an unusual case where screen order is off yet column order is
same as screen order and NvDA is told to announce all columns.
if splconfig._shouldBuildDescriptionPieces():
descriptionPieces = []
@@ -266,12 +268,56 @@ class SPLTrackItem(IAccessible):
if self.IAccessibleChildID == 1 and
splconfig.SPLConfig["General"]["TopBottomAnnounce"]:
tones.beep(2000, 100)
+ # Track comments. + + # Track comment announcer. + # Levels indicate what
should be done. + # 0 indicates reportFocus, subsequent levels indicate
script repeat count+1. + def announceTrackComment(self, level): + filename =
self._getColumnContent(self._indexOf("Filename")) + if filename in
splconfig.trackComments: + if level == 0: + if
splconfig.SPLConfig["General"]["TrackCommentAnnounce"] in ("message",
"both"): + ui.message(_("Has comment")) + if
splconfig.SPLConfig["General"]["TrackCommentAnnounce"] in ("beep", "both"):
+ tones.beep(1024, 100) + elif level == 1: +
ui.message(splconfig.trackComments[filename]) + elif level == 2: +
api.copyToClip(splconfig.trackComments[filename]) + # Translators: Presented
when track comment has been copied to clipboard. + ui.message(_("Track
comment copied to clipboard")) + else: + self._trackCo mmentsEntry(filename,
splconfig.trackComments[filename]) + else: + if level in (1, 2): +
ui.message(_("No comment")) + elif level == 3: +
self._trackCommentsEntry(filename, "") + + # A proxy function to call the
track comments entry dialog. + def _trackCommentsEntry(self, filename,
comment): + dlg = wx.TextEntryDialog(gui.mainFrame, + _("Track comment"), +
# Translators: The title of the track comments dialog. + _("Track comment"),
defaultValue=comment) + def callback(result): + if result == wx.ID_OK: + if
dlg.GetValue() is None: return + elif dlg.GetValue() == "": del
splconfig.trackComments[filename] + else: splconfig.trackComments[filename]
= dlg.GetValue() + gui.runScriptModalDialog(dlg, callback) + + def
script_announceTrackComment(self, gesture): +
self.announceTrackComment(scriptHandler.getLastScriptRepeatCount()+1) +
__gestures={
"kb:control+alt+rightArrow":"nextColumn",
"kb:control+alt+leftArrow":"prevColumn",
#"kb:control+`":"toggleTrackDial",
"kb:downArrow":"nextTrack",
"kb:upArrow":"prevTrack",
+ "kb:Alt+NVDA+C":"announceTrackComment"
}
class SPL510TrackItem(SPLTrackItem):
diff --git a/addon/appModules/splstudio/splconfig.py
b/addon/appModules/splstudio/splconfig.py index 1572e0a..356c4dd 100755 ---
a/addon/appModules/splstudio/splconfig.py +++
b/addon/appModules/splstudio/splconfig.py @@ -30,6 +30,7 @@ BeepAnnounce =
boolean(default=false)
MessageVerbosity = option("beginner", "advanced", default="beginner")
BrailleTimer = option("off", "intro", "outro", "both", default="off")
AlarmAnnounce = option("beep", "message", "both", default="beep")
+TrackCommentAnnounce = option("off", "beep", "message", "both",
default="off")
LibraryScanAnnounce = option("off", "ending", "progress", "numbers",
default="off")
TrackDial = boolean(default=false)
CategorySounds = boolean(default=false)
@@ -126,6 +127,8 @@ _configErrors ={
# The below init function is really a vehicle that traverses through config
profiles in a loop.
# Prompt the config error dialog only once.
_configLoadStatus = {} # Key = filename, value is pass or no pass.
+# Track comments map. +trackComments = {}
def initConfig():
# 7.0: When add-on 7.0 starts for the first time, check if a conversion
file exists.
@@ -139,7 +142,7 @@ def initConfig():
os.remove(SPLIni)
os.rename(os.path.join(globalVars.appArgs.configPath, "splstudio7.ini"),
SPLIni)
# Load the default config from a list of profiles.
* global SPLConfig, SPLConfigPool, _configLoadStatus,
SPLActiveProfile, SPLSwitchProfile
+ global SPLConfig, SPLConfigPool, _configLoadStatus, SPLActiveProfile,
SPLSwitchProfile, trackComments
if SPLConfigPool is None: SPLConfigPool = []
# Translators: The name of the default (normal) profile.
if SPLActiveProfile is None: SPLActiveProfile = _("Normal profile")
@@ -163,6 +166,12 @@ def initConfig():
_configLoadStatus[SPLConfigPool[0].name] = "noInstantProfile"
# 7.1: The config module knows the fate of the instant profile.
del SPLConfig["InstantProfile"]
+ # LTS: Load track comments if they exist. + # This must be a separate file
(another pickle file). + try: + trackComments =
cPickle.load(file(os.path.join(globalVars.appArgs.configPath,
"spltrackcomments.pickle"), "r")) + except IOError: + pass
if len(_configLoadStatus):
# Translators: Standard error title for configuration error.
title = _("Studio add-on Configuration error")
@@ -599,6 +608,8 @@ def saveConfig():
splupdate._SPLUpdateT = None
# Close profile triggers dictionary.
saveProfileTriggers()
+ # Dump track comments. + cPickle.dump(trackComments,
file(os.path.join(globalVars.appArgs.configPath, "spltrackcomments.pickle"),
"wb"))
# Save update check state.
splupdate.terminate()
# Save profile-specific settings to appropriate dictionary if this is the
case.
diff --git a/addon/appModules/splstudio/splconfui.py
b/addon/appModules/splstudio/splconfui.py index 9c9b5f7..a4a7d9d 100755 ---
a/addon/appModules/splstudio/splconfui.py +++
b/addon/appModules/splstudio/splconfui.py @@ -249,6 +249,27 @@ class
SPLConfigDialog(gui.SettingsDialog):
self.categorySoundsCheckbox.SetValue(splconfig.SPLConfig["General"]["Categor
ySounds"])
settingsSizer.Add(self.categorySoundsCheckbox,
border=10,flag=wx.BOTTOM)
+ sizer = wx.BoxSizer(wx.HORIZONTAL) + # Translators: the label for a
setting in SPL add-on settings to set how track comments are announced. +
label = wx.StaticText(self, wx.ID_ANY, label=_("&Track comment
announcement:")) + self.trackCommentValues=[("off",_("Off")), + #
Translators: One of the track comment notification settings. +
("message",_("Message")), + # Translators: One of the track comment
notification settings. + ("beep",_("Beep")), + # Translators: One of the
track comment notification settings. + ("both",_("Both"))] +
self.trackCommentList = wx.Choice(self, wx.ID_ANY, choices=[x[1] for x in
self.trackCommentValues]) +
trackCommentCurValue=splconfig.SPLConfig["General"]["TrackCommentAnnounce"]
+ selection = (x for x,y in enumerate(self.trackCommentValues) if
y[0]==trackCommentCurValue).next() + try: +
self.trackCommentList.SetSelection(sele ction) + except: + pass +
sizer.Add(label) + sizer.Add(self.trackCommentList) +
settingsSizer.Add(sizer, border=10, flag=wx.BOTTOM) +
# Translators: the label for a setting in SPL add-on settings to toggle top
and bottom notification.
self.topBottomCheckbox=wx.CheckBox(self,wx.NewId(),label=_("Notify when
located at &top or bottom of playlist viewer"))
self.topBottomCheckbox.SetValue(splconfig.SPLConfig["General"]["TopBottomAnn
ounce"])
@@ -342,6 +363,7 @@ class SPLConfigDialog(gui.SettingsDialog):
splconfig.SPLConfig["General"]["TimeHourAnnounce"] =
self.hourAnnounceCheckbox.Value
splconfig.SPLConfig["General"]["TrackDial"] = self.trackDialCheckbox.Value
splconfig.SPLConfig["General"]["CategorySounds"] =
self.categorySoundsCheckbox.Value
+ splconfig.SPLConfig["General"]["TrackCommentAnnounce"] =
self.trackCommentValues[self.trackCommentList.GetSelection()][0]
splconfig.SPLConfig["General"]["TopBottomAnnounce"] =
self.topBottomCheckbox.Value
splconfig.SPLConfig["General"]["MetadataReminder"] =
self.metadataValues[self.metadataList.GetSelection()][0]
splconfig.SPLConfig["MetadataStreaming"]["MetadataEnabled"] =
self.metadataStreams
Repository URL: https://bitbucket.org/nvdaaddonteam/stationplaylist/
-
This is a commit notification from bitbucket.org. You are receiving this
because you have the service enabled, addressing the recipient of this
email.
--
_____
Derek Riemer
* Department of computer science, third year undergraduate student.
* Proud user of the NVDA screen reader.
* Open source enthusiast.
* Member of Bridge Cu
* Avid skiier.
Websites:
Honors portfolio <http://derekriemer.com>
Awesome little hand built weather app!
<http://django.derekriemer.com/weather/>
email me at derek.riemer@xxxxxxxxxxxx <mailto:derek.riemer@xxxxxxxxxxxx>
Phone: (303) 906-2194