Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2008-08-27 21:04:42 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2008-08-27 21:04:42 (GMT)
commit629bf7de1b6d97a4f300376286598be637472a44 (patch)
tree09bb14ed65cc0ae0dd633d8ef5dfa951f3214ca4
parent03da84de3da61cc88673b19143e0f0d07fd03563 (diff)
parent5ce638547e4ed93ee23abb8fd533a71da64f4250 (diff)
Merge branch 'sucrose-0.82' of git+ssh://dev.laptop.org/git/sugar into sucrose-0.82
-rw-r--r--po/ht.po436
-rw-r--r--po/mn.po110
-rw-r--r--po/pt.po4
-rw-r--r--src/controlpanel/model/language.py6
-rw-r--r--src/hardware/nmclient.py38
-rw-r--r--src/model/devices/network/mesh.py12
-rw-r--r--src/model/devices/network/wireless.py9
-rw-r--r--src/view/devices/network/mesh.py63
-rw-r--r--src/view/devices/network/wireless.py71
9 files changed, 505 insertions, 244 deletions
diff --git a/po/ht.po b/po/ht.po
index 86a54e2..e3d2500 100644
--- a/po/ht.po
+++ b/po/ht.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-21 00:30-0400\n"
-"PO-Revision-Date: 2008-03-12 09:14-0400\n"
-"Last-Translator: Jude Augusma <jayme2901@yahoo.com>\n"
+"POT-Creation-Date: 2008-08-19 17:12-0400\n"
+"PO-Revision-Date: 2008-08-18 16:47-0400\n"
+"Last-Translator: lacrete <le_teaseur@hotmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -17,36 +17,36 @@ msgstr ""
#: ../src/intro/intro.py:65 ../src/controlpanel/view/aboutme.py:100
msgid "Name:"
-msgstr "Non"
+msgstr "Non:"
-#: ../src/intro/intro.py:94
+#: ../src/intro/intro.py:97
msgid "Click to change color:"
-msgstr "Klike pou chanje koulè"
+msgstr "Klike pou chanje koulè:"
-#: ../src/intro/intro.py:145
+#: ../src/intro/intro.py:148
msgid "Back"
msgstr "Retounen"
-#: ../src/intro/intro.py:159 ../src/controlpanel/toolbar.py:61
+#: ../src/intro/intro.py:162 ../src/controlpanel/toolbar.py:61
msgid "Done"
msgstr "Fini"
-#: ../src/intro/intro.py:162
+#: ../src/intro/intro.py:165
msgid "Next"
-msgstr "Prochen"
+msgstr "Pwochen"
#: ../src/view/BuddyMenu.py:58
msgid "Remove friend"
-msgstr "Retire zanmi"
+msgstr "Retire zanmi "
#: ../src/view/BuddyMenu.py:61
msgid "Make friend"
-msgstr "Fè zanmi"
+msgstr "Fè zanmi "
#: ../src/view/BuddyMenu.py:91
#, python-format
msgid "Invite to %s"
-msgstr "Envite sou %s"
+msgstr "Envite nan %s"
#: ../src/view/clipboardmenu.py:48
msgid "Remove"
@@ -54,73 +54,119 @@ msgstr "Retire"
#: ../src/view/clipboardmenu.py:53 ../src/view/clipboardmenu.py:79
msgid "Open"
-msgstr "Louvri"
+msgstr "Ouvri"
#. self._stop_item = MenuItem(_('Stop download'), 'stock-close')
#. TODO: Implement stopping downloads
#. self._stop_item.connect('activate', self._stop_item_activate_cb)
#. self.append_menu_item(self._stop_item)
-#: ../src/view/clipboardmenu.py:63
+#: ../src/view/clipboardmenu.py:63 ../src/view/home/HomeBox.py:87
msgid "Keep"
-msgstr ""
+msgstr "Kenbe"
#: ../src/view/clipboardmenu.py:84
msgid "Open with"
-msgstr ""
+msgstr "Ouvri ak"
-#: ../src/view/clipboardmenu.py:212
+#: ../src/view/clipboardmenu.py:216
#, python-format
msgid "Clipboard object: %s."
msgstr "Objè ekritwa: %s."
#: ../src/hardware/keydialog.py:150
msgid "Key Type:"
-msgstr "Tip kle:"
+msgstr "kalite kle:"
#: ../src/hardware/keydialog.py:170
msgid "Authentication Type:"
-msgstr "Tip otantifikasyon:"
+msgstr "Kalite otantifikasyon:"
#: ../src/hardware/keydialog.py:251
msgid "Encryption Type:"
-msgstr "Tip kod sekrè"
+msgstr "Kalite kod sekrè"
+
+#: ../src/hardware/schoolserver.py:17
+msgid "Cannot obtain data needed for registration."
+msgstr ""
+
+#: ../src/hardware/schoolserver.py:31
+msgid "Cannot connect to the server."
+msgstr ""
-#: ../src/view/Shell.py:262
+#: ../src/hardware/schoolserver.py:36
+msgid "The server could not complete the request."
+msgstr ""
+
+#: ../src/view/Shell.py:240
msgid "Screenshot"
msgstr "Ekran projektwa"
-#: ../src/view/home/HomeBox.py:147
-msgid "List view"
-msgstr ""
+#: ../src/view/home/HomeBox.py:81
+msgid "Confirm erase"
+msgstr "Konfime sa ou efase a"
-#: ../src/view/home/HomeBox.py:148
-msgid "<Ctrl>L"
+#: ../src/view/home/HomeBox.py:83
+#, python-format
+msgid "Confirm erase: Do you want to permanently erase %s?"
+msgstr "Konfime sa ou efase a: ou vle retire'l net %s?"
+
+#: ../src/view/home/HomeBox.py:90 ../src/view/palettes.py:120
+msgid "Erase"
+msgstr "Efase"
+
+#: ../src/view/home/HomeBox.py:120
+msgid "Software Update"
msgstr ""
-#: ../src/view/home/HomeBox.py:204
-msgid "Favorites view"
+#: ../src/view/home/HomeBox.py:121
+msgid "Update your activities to ensure compatibility with your new software"
msgstr ""
-#: ../src/view/home/HomeBox.py:205
-msgid "<Ctrl>R"
+#: ../src/view/home/HomeBox.py:125 ../src/controlpanel/toolbar.py:115
+msgid "Cancel"
+msgstr "Anile"
+
+#: ../src/view/home/HomeBox.py:127 ../src/controlpanel/gui.py:275
+msgid "Later"
+msgstr "Pi ta"
+
+#: ../src/view/home/HomeBox.py:130
+msgid "Check now"
msgstr ""
+#: ../src/view/home/HomeBox.py:266
+msgid "List view"
+msgstr "Gade lis"
+
+#: ../src/view/home/HomeBox.py:267
+msgid "<Ctrl>2"
+msgstr "<Ctrl>2"
+
+#: ../src/view/home/HomeBox.py:325
+msgid "Favorites view"
+msgstr "Fas prefere"
+
+#: ../src/view/home/HomeBox.py:326
+msgid "<Ctrl>1"
+msgstr "<Ctrl>1"
+
+# TRANS: label for the freeform layout in the favorites view
#. TRANS: label for the freeform layout in the favorites view
-#: ../src/view/home/HomeBox.py:211
+#: ../src/view/home/HomeBox.py:334
msgid "Freeform"
-msgstr ""
+msgstr "Fòm lib"
+# TRANS: label for the ring layout in the favorites view
#. TRANS: label for the ring layout in the favorites view
-#: ../src/view/home/HomeBox.py:218
+#: ../src/view/home/HomeBox.py:341
msgid "Ring"
-msgstr ""
+msgstr "Zanno"
#: ../src/view/home/MeshBox.py:97
msgid "Connect"
-msgstr ""
+msgstr "Konekte"
#: ../src/view/home/MeshBox.py:106
-#, fuzzy
msgid "Disconnect"
msgstr "Dekonekte"
@@ -129,101 +175,99 @@ msgstr "Dekonekte"
# method for a device either (for various reasons) so this doesn't
# have a good mapping
#: ../src/view/home/MeshBox.py:118
-#, fuzzy
msgid "Disconnecting..."
-msgstr "Dekonekte..."
+msgstr "An dekoneksyon..."
# Only show disconnect when there's a mesh device, because mesh takes
# priority over the normal wireless device. NM doesn't have a "disconnect"
# method for a device either (for various reasons) so this doesn't
# have a good mapping
#: ../src/view/home/MeshBox.py:152
-#, fuzzy
msgid "Connecting..."
-msgstr "Dekonekte..."
+msgstr "An koneksyon..."
#. TODO: show the channel number
#: ../src/view/home/MeshBox.py:159
msgid "Connected"
-msgstr ""
+msgstr "Konekte"
-#: ../src/view/home/MeshBox.py:211 ../src/view/devices/network/mesh.py:38
-#: ../src/view/devices/network/mesh.py:65
-#: ../src/view/devices/network/mesh.py:69
+#: ../src/view/home/MeshBox.py:211 ../src/view/devices/network/mesh.py:41
+#: ../src/view/devices/network/mesh.py:68
+#: ../src/view/devices/network/mesh.py:72
msgid "Mesh Network"
-msgstr "Rezo "
+msgstr "Rezo maye"
# Only show disconnect when there's a mesh device, because mesh takes
# priority over the normal wireless device. NM doesn't have a "disconnect"
# method for a device either (for various reasons) so this doesn't
# have a good mapping
-#: ../src/view/home/MeshBox.py:214 ../src/view/devices/network/wireless.py:116
-#: ../src/view/devices/network/mesh.py:86
+#: ../src/view/home/MeshBox.py:214 ../src/view/devices/network/wireless.py:119
+#: ../src/view/devices/network/mesh.py:89
msgid "Disconnect..."
msgstr "Dekonekte..."
-#: ../src/view/home/MeshBox.py:302 ../src/view/palettes.py:60
+#: ../src/view/home/MeshBox.py:302 ../src/view/palettes.py:61
msgid "Resume"
msgstr "Repwann"
-#: ../src/view/home/MeshBox.py:307 ../src/view/frame/activitiestray.py:219
+#: ../src/view/home/MeshBox.py:307 ../src/view/frame/activitiestray.py:205
msgid "Join"
-msgstr "Rankontre"
+msgstr "Rejwen'n"
-#: ../src/view/devices/battery.py:42
+#: ../src/view/devices/battery.py:45
msgid "My Battery"
-msgstr ""
+msgstr "Batri-m"
-#: ../src/view/devices/battery.py:111
+#: ../src/view/devices/battery.py:114
msgid "Charging"
-msgstr ""
+msgstr "Ap chaje"
-#: ../src/view/devices/battery.py:114
+#: ../src/view/devices/battery.py:117
msgid "Very little power remaining"
-msgstr ""
+msgstr "Yon ti kras chaj ki rete"
-#: ../src/view/devices/battery.py:120
+#: ../src/view/devices/battery.py:123
#, python-format
msgid "%(hour)d:%(min).2d remaining"
-msgstr ""
+msgstr "%(hour)d:%(min).2d ki rete"
-#: ../src/view/devices/battery.py:124
+#: ../src/view/devices/battery.py:127
msgid "Charged"
-msgstr ""
+msgstr "Fin chaje"
-#: ../src/view/devices/speaker.py:40
+#: ../src/view/devices/speaker.py:44
msgid "My Speakers"
-msgstr ""
+msgstr "Opalè m' yo"
-#: ../src/view/devices/speaker.py:104
+#: ../src/view/devices/speaker.py:119
msgid "Unmute"
-msgstr ""
+msgstr "Aktive son an"
-#: ../src/view/devices/speaker.py:107
+#: ../src/view/devices/speaker.py:122
msgid "Mute"
-msgstr ""
+msgstr "Dezaktive son an"
-#: ../src/view/devices/network/wireless.py:64
+#: ../src/view/devices/network/wireless.py:67
msgid "Disconnected"
msgstr "Dekonekte"
-#: ../src/view/devices/network/wireless.py:134
+#: ../src/view/devices/network/wireless.py:137
msgid "Channel"
msgstr "Chanèl"
-#: ../src/view/frame/zoomtoolbar.py:34
+#: ../src/view/frame/zoomtoolbar.py:37
msgid "Neighborhood"
msgstr "Vwazinaj"
-#: ../src/view/frame/zoomtoolbar.py:36
+#: ../src/view/frame/zoomtoolbar.py:39
msgid "Group"
msgstr "Gwoup"
-#: ../src/view/frame/zoomtoolbar.py:38
+#: ../src/view/frame/zoomtoolbar.py:41
msgid "Home"
msgstr "Lakay"
-#: ../src/view/frame/zoomtoolbar.py:40
+#: ../src/view/frame/zoomtoolbar.py:43
msgid "Activity"
msgstr "Aktivite"
@@ -233,6 +277,8 @@ msgid ""
"sugar-control-panel: WARNING, found more than one option with the same name: "
"%s module: %r"
msgstr ""
+"Sugar-control-panel: Atansyon, yo jwenn plizyè opsyon ak yon menm non: %s "
+"modil: %r"
#: ../src/controlpanel/cmd.py:28
#, python-format
@@ -245,6 +291,7 @@ msgid "sugar-control-panel: %s"
msgstr "Sugar-kontwòl-panèl: %s"
#: ../src/controlpanel/cmd.py:33
+#, fuzzy
msgid ""
"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
" Control for the sugar environment. \n"
@@ -254,81 +301,74 @@ msgid ""
" -h key show information about this key \n"
" -g key get the current value of the key \n"
" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
" "
msgstr ""
"Sèvi: Sugar-Kontwòl-panèl [opsyon] kle [args ... ]\n"
-" Kontwòl pou anvironman sugar. \n"
-" opsyon: \n"
-" -h montre mesaj èd sa epi soti \n"
-" -l fè lis tout opsyon disponib yo \n"
-" -h kle montre enfòmasyon sou kle sa \n"
-" -g kle pwan valè kouran kle-a \n"
-" -s kle fikse valè Kouran pou kle-a \n"
-" "
-
-#: ../src/controlpanel/cmd.py:45
+"\tKontwòl pou anvironman sugar. \n"
+"\topsyon: \n"
+"\t-h\tmontre mesaj èd sa epi soti \n"
+"\t-l\tfè lis tout opsyon disponib yo \n"
+"\t-h kle\tmontre enfòmasyon sou kle sa \n"
+"\t-g kle\tpwan valè kouran kle-a \n"
+"\t-s kle\tfikse valè Kouran pou kle-a \n"
+"\t"
+
+#: ../src/controlpanel/cmd.py:46
msgid "To apply your changes you have to restart sugar.\n"
msgstr "Pou aplike chanjman ou yo ou bezwen reyinisyalize program nan.\n"
-#: ../src/controlpanel/toolbar.py:115
-msgid "Cancel"
-msgstr ""
-
-#: ../src/controlpanel/toolbar.py:121
+#: ../src/controlpanel/toolbar.py:121 ../src/view/home/favoritesview.py:296
msgid "Ok"
-msgstr ""
+msgstr "Ok"
-#: ../src/controlpanel/sectionview.py:34 ../src/controlpanel/gui.py:250
+#: ../src/controlpanel/sectionview.py:42 ../src/controlpanel/gui.py:267
msgid "Changes require restart"
-msgstr ""
+msgstr "Redemare pou aplike chanjman yo"
-#: ../src/controlpanel/gui.py:249
+#: ../src/controlpanel/gui.py:266
msgid "Warning"
-msgstr ""
+msgstr "Avètisman"
-#: ../src/controlpanel/gui.py:253
+#: ../src/controlpanel/gui.py:270
msgid "Cancel changes"
-msgstr ""
-
-#: ../src/controlpanel/gui.py:257
-msgid "Later"
-msgstr ""
+msgstr "Anile chanjman yo"
-#: ../src/controlpanel/gui.py:261
+#: ../src/controlpanel/gui.py:279
msgid "Restart now"
-msgstr ""
+msgstr "Redemare kounye a menm"
#: ../src/controlpanel/model/aboutme.py:44
msgid "You must enter a name."
-msgstr ""
+msgstr "Ou dwe rantre yon non."
-#: ../src/controlpanel/model/aboutme.py:67
+#: ../src/controlpanel/model/aboutme.py:69
#, python-format
msgid "stroke: color=%s hue=%s"
-msgstr ""
+msgstr "stroke:_ koulè=%s hue=%s"
-#: ../src/controlpanel/model/aboutme.py:70
+#: ../src/controlpanel/model/aboutme.py:72
#, python-format
msgid "stroke: %s"
-msgstr ""
+msgstr "stroke:_ %s"
-#: ../src/controlpanel/model/aboutme.py:72
+#: ../src/controlpanel/model/aboutme.py:74
#, python-format
msgid "fill: color=%s hue=%s"
-msgstr ""
+msgstr "fill:_ koulè=%s hue=%s"
-#: ../src/controlpanel/model/aboutme.py:74
+#: ../src/controlpanel/model/aboutme.py:76
#, python-format
msgid "fill: %s"
-msgstr ""
+msgstr "fill: _ %s"
-#: ../src/controlpanel/model/aboutme.py:85
+#: ../src/controlpanel/model/aboutme.py:87
msgid "Error in specified color modifiers."
-msgstr "Erè nan modifikatè endike koulè yo"
+msgstr "Erè nan modifikatè koulè espesifye yo"
-#: ../src/controlpanel/model/aboutme.py:88
+#: ../src/controlpanel/model/aboutme.py:90
msgid "Error in specified colors."
-msgstr "Erè nan koulè endike yo"
+msgstr "Erè nan koulè espesifye yo"
#: ../src/controlpanel/model/aboutxo.py:24
msgid "Not available"
@@ -340,12 +380,11 @@ msgstr "Erè lè lokal pa egziste."
#: ../src/controlpanel/model/frame.py:38 ../src/controlpanel/model/frame.py:60
msgid "Value must be an integer."
-msgstr ""
+msgstr "Valè-a dwe yon antye."
#: ../src/controlpanel/model/language.py:28
-#, fuzzy
msgid "Could not access ~/.i18n. Create standard settings."
-msgstr "Pa ka rantre %s. Kreye reglaj estanda"
+msgstr "Aksè enposib ~/.i18n. Kreye paramèt pa defo yo"
#: ../src/controlpanel/model/language.py:104
#, python-format
@@ -355,11 +394,11 @@ msgstr "Lang pou kod=%s pa ka tèmine."
#: ../src/controlpanel/model/language.py:121
#, python-format
msgid "Sorry I do not speak '%s'."
-msgstr "Mwen regrèt mwen pa pale '%s'."
+msgstr "Dezole mwen pa pale '%s'."
#: ../src/controlpanel/model/network.py:48
msgid "You must enter a server."
-msgstr ""
+msgstr "Ou dwe endike yon sèvè."
#: ../src/controlpanel/model/network.py:63
msgid "State is unknown."
@@ -367,179 +406,224 @@ msgstr "Yo pa konnen eta l'"
#: ../src/controlpanel/model/network.py:83
msgid "Error in specified radio argument use on/off."
-msgstr "Erè nan itilizasyon limen/etenn agiman radio endike-a. "
+msgstr "Agiman radio espesifye-a pa kòrèk sèvi limen/etenn. "
+
+#: ../src/controlpanel/model/power.py:57
+msgid "Error in automatic pm argument, use on/off."
+msgstr "Agiman pou jere alimantasyon otomatik la pa kòrèk sèvi ak limen/etenn"
+
+#: ../src/controlpanel/model/power.py:86
+msgid "Error in extreme pm argument, use on/off."
+msgstr "Agiman pou gere alimantasyon ak dèyo pa kòrèk sèvi ak limen/etenn"
#: ../src/controlpanel/view/aboutme.py:32
msgid "About Me"
-msgstr ""
+msgstr "Enfòmasyon pèsonèl"
#: ../src/controlpanel/view/aboutme.py:134
-#, fuzzy
msgid "Click to change your color:"
msgstr "Klike pou chanje koulè"
#: ../src/controlpanel/view/aboutxo.py:26
msgid "About my XO"
-msgstr ""
+msgstr "Enfòmasyon sou XO mwen"
#: ../src/controlpanel/view/aboutxo.py:47
msgid "Identity"
-msgstr ""
+msgstr "Idantite"
#: ../src/controlpanel/view/aboutxo.py:56
msgid "Serial Number:"
-msgstr ""
+msgstr "Nimero seri:"
#: ../src/controlpanel/view/aboutxo.py:79
msgid "Software"
-msgstr ""
+msgstr "Pwogram"
#: ../src/controlpanel/view/aboutxo.py:88
msgid "Build:"
-msgstr ""
+msgstr "Bati:"
#: ../src/controlpanel/view/aboutxo.py:103
msgid "Firmware:"
-msgstr ""
+msgstr "Mikrolojisyèl:"
#: ../src/controlpanel/view/datetime.py:29
msgid "Date & Time"
-msgstr ""
+msgstr "Dat ak lè"
#: ../src/controlpanel/view/datetime.py:72
msgid "Timezone"
-msgstr ""
+msgstr "Lè lokal"
#: ../src/controlpanel/view/frame.py:28
msgid "Frame"
-msgstr ""
+msgstr "Ankadreman"
#: ../src/controlpanel/view/frame.py:30
msgid "never"
-msgstr ""
+msgstr "Jamè"
#: ../src/controlpanel/view/frame.py:31
msgid "instantaneous"
-msgstr ""
+msgstr "imediat"
#: ../src/controlpanel/view/frame.py:32
#, python-format
msgid "%s seconds"
-msgstr ""
+msgstr "%s segond"
#: ../src/controlpanel/view/frame.py:56
msgid "Activation Delay"
-msgstr ""
+msgstr "Reta aktivasyon"
#: ../src/controlpanel/view/frame.py:80
msgid "Corner"
-msgstr ""
+msgstr "Kwen"
#: ../src/controlpanel/view/frame.py:115
msgid "Edge"
-msgstr ""
+msgstr "Bò"
#: ../src/controlpanel/view/language.py:29
#: ../src/controlpanel/view/language.py:74
msgid "Language"
-msgstr ""
+msgstr "Lang"
#: ../src/controlpanel/view/network.py:28
msgid "Network"
-msgstr ""
+msgstr "Rezo"
#: ../src/controlpanel/view/network.py:53
msgid "Wireless"
-msgstr ""
+msgstr "San fil"
#: ../src/controlpanel/view/network.py:61
msgid "Radio:"
-msgstr ""
+msgstr "Radio"
#: ../src/controlpanel/view/network.py:94
msgid "Mesh"
-msgstr ""
+msgstr "Rezo maye"
#: ../src/controlpanel/view/network.py:103
msgid "Server:"
-msgstr ""
+msgstr "Sèvè:"
+
+#: ../src/controlpanel/view/power.py:27
+msgid "Power"
+msgstr "Alimantasyon"
+
+#: ../src/controlpanel/view/power.py:51
+msgid "Power management"
+msgstr "Jere alimantasyon"
-#: ../src/view/devices/network/mesh.py:108
+#: ../src/controlpanel/view/power.py:61
+msgid "Automatic power management (increases battery life)"
+msgstr "automatic power management(ogmante tan batri a ap bay)"
+
+#: ../src/controlpanel/view/power.py:89
+msgid ""
+"Extreme power management (disables wireless radio, increases battery life)"
+msgstr "(retire posibilite capte ond wireless, ogmante tan batri a ap bay)"
+
+#: ../src/view/devices/network/mesh.py:111
msgid "Connected to a School Mesh Portal"
-msgstr "Konekte sou rezo lekòl la"
+msgstr "Konekte sou pòtay rezo lekòl la"
-#: ../src/view/devices/network/mesh.py:110
+#: ../src/view/devices/network/mesh.py:113
msgid "Looking for a School Mesh Portal..."
-msgstr "Ap chache rezo lekòl la"
+msgstr "Ap chache pòtay rezo lekòl la"
-#: ../src/view/devices/network/mesh.py:113
+#: ../src/view/devices/network/mesh.py:116
msgid "Connected to an XO Mesh Portal"
-msgstr "Konekte sou yon rezo XO"
+msgstr "Konekte sou pòtal yon rezo XO"
-#: ../src/view/devices/network/mesh.py:115
+#: ../src/view/devices/network/mesh.py:118
msgid "Looking for an XO Mesh Portal..."
msgstr "Ap chache yon rezo XO..."
-#: ../src/view/devices/network/mesh.py:118
+#: ../src/view/devices/network/mesh.py:121
msgid "Connected to a Simple Mesh"
msgstr "Konekte sou yon senp rezo"
-#: ../src/view/devices/network/mesh.py:120
+#: ../src/view/devices/network/mesh.py:123
msgid "Starting a Simple Mesh"
msgstr "Kòmanse yon senp rezo"
-#: ../src/view/devices/network/mesh.py:127
+#: ../src/view/devices/network/mesh.py:130
msgid "Unknown Mesh"
-msgstr "Rezo non idantifye"
+msgstr "Rezo maye inkoni"
-#: ../src/view/frame/activitiestray.py:224
+#: ../src/view/frame/activitiestray.py:210
msgid "Decline"
-msgstr ""
+msgstr "Refize"
+
+#: ../src/view/home/favoritesview.py:287
+msgid "Registration Failed"
+msgstr "enskripsyon an pa fèt"
+
+# se yon kòd enfòmatik li pa dwe chanje
+#: ../src/view/home/favoritesview.py:288
+#, python-format
+msgid "%s"
+msgstr "%s"
-#: ../src/view/home/favoritesview.py:351
+#: ../src/view/home/favoritesview.py:290
+msgid "Registration Successful"
+msgstr "enskripsyon an fèt"
+
+#: ../src/view/home/favoritesview.py:291
+msgid "You are now registered with your school server."
+msgstr "ou pa enskri avek sèvè lekol ou a"
+
+#: ../src/view/home/favoritesview.py:407
msgid "Control Panel"
-msgstr ""
+msgstr "Pano kontwòl"
-#: ../src/view/home/favoritesview.py:362
+#: ../src/view/home/favoritesview.py:418
msgid "Restart"
-msgstr ""
+msgstr "Redemare"
-#: ../src/view/home/favoritesview.py:367
+#: ../src/view/home/favoritesview.py:423
msgid "Shutdown"
-msgstr "Fèmen"
+msgstr "Eten'n"
-#: ../src/view/home/favoritesview.py:373
+#: ../src/view/home/favoritesview.py:429
msgid "Register"
msgstr "Enskri"
-#: ../src/view/palettes.py:41
+#: ../src/view/palettes.py:42
msgid "Starting..."
-msgstr "ap louvri"
+msgstr "Demaraj...."
-#: ../src/view/palettes.py:71
+#: ../src/view/palettes.py:72
msgid "Stop"
msgstr "Stope, rete"
-#: ../src/view/palettes.py:96
+#: ../src/view/palettes.py:104
msgid "Start"
-msgstr ""
+msgstr "Demare"
-#: ../src/view/palettes.py:119
+#: ../src/view/palettes.py:132
msgid "Remove favorite"
-msgstr ""
+msgstr "Siprime favori"
-#: ../src/view/palettes.py:123
+#: ../src/view/palettes.py:136
msgid "Make favorite"
-msgstr ""
+msgstr "Ajoute nan favori"
-#: ../src/view/palettes.py:169
+#: ../src/view/palettes.py:185
msgid "Show contents"
-msgstr ""
+msgstr "Afiche kontni yo"
-#: ../src/view/palettes.py:193
+#: ../src/view/palettes.py:209
#, python-format
msgid "%(free_space)d MB Free"
-msgstr ""
+msgstr "%(free_space)d MB vid"
+
+#~ msgid "<Ctrl>R"
+#~ msgstr "<Ctrl>R"
#~ msgid "off"
#~ msgstr "Etenn"
diff --git a/po/mn.po b/po/mn.po
index ec3dfb6..2a8b511 100644
--- a/po/mn.po
+++ b/po/mn.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-07-23 07:44-0400\n"
+"POT-Creation-Date: 2008-08-19 17:12-0400\n"
"PO-Revision-Date: 2008-08-07 01:30-0400\n"
"Last-Translator: Odontsetseg Bat-Erdene <obat-erdene@suffolk.edu>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -19,19 +19,19 @@ msgstr ""
msgid "Name:"
msgstr "Нэр:"
-#: ../src/intro/intro.py:94
+#: ../src/intro/intro.py:97
msgid "Click to change color:"
msgstr "Энд дарж өнгөө солино уу"
-#: ../src/intro/intro.py:145
+#: ../src/intro/intro.py:148
msgid "Back"
msgstr "Буцах"
-#: ../src/intro/intro.py:159 ../src/controlpanel/toolbar.py:61
+#: ../src/intro/intro.py:162 ../src/controlpanel/toolbar.py:61
msgid "Done"
msgstr "Боллоо"
-#: ../src/intro/intro.py:162
+#: ../src/intro/intro.py:165
msgid "Next"
msgstr "Дараах"
@@ -64,7 +64,7 @@ msgstr "Нээх"
#. TODO: Implement stopping downloads
#. self._stop_item.connect('activate', self._stop_item_activate_cb)
#. self.append_menu_item(self._stop_item)
-#: ../src/view/clipboardmenu.py:63 ../src/view/home/HomeBox.py:86
+#: ../src/view/clipboardmenu.py:63 ../src/view/home/HomeBox.py:87
msgid "Keep"
msgstr "Хадгалах"
@@ -89,48 +89,80 @@ msgstr "Нэвтрэх нууцлалын төрөл:"
msgid "Encryption Type:"
msgstr "Нууцлалын төрөл:"
+#: ../src/hardware/schoolserver.py:17
+msgid "Cannot obtain data needed for registration."
+msgstr ""
+
+#: ../src/hardware/schoolserver.py:31
+msgid "Cannot connect to the server."
+msgstr ""
+
+#: ../src/hardware/schoolserver.py:36
+msgid "The server could not complete the request."
+msgstr ""
+
#: ../src/view/Shell.py:240
msgid "Screenshot"
msgstr "Дэлгэцний зураг"
-#: ../src/view/home/HomeBox.py:80
+#: ../src/view/home/HomeBox.py:81
msgid "Confirm erase"
msgstr "Арилгахыг зөвшөөрөх"
-#: ../src/view/home/HomeBox.py:82
+#: ../src/view/home/HomeBox.py:83
#, python-format
msgid "Confirm erase: Do you want to permanently erase %s?"
msgstr "Арилгахыг зөвшөөрөх: Та %s бүр мөсөн арилгахыг хүсч байна уу?"
-#: ../src/view/home/HomeBox.py:89 ../src/view/palettes.py:120
+#: ../src/view/home/HomeBox.py:90 ../src/view/palettes.py:120
msgid "Erase"
msgstr "Арилгах"
-#: ../src/view/home/HomeBox.py:215
+#: ../src/view/home/HomeBox.py:120
+msgid "Software Update"
+msgstr ""
+
+#: ../src/view/home/HomeBox.py:121
+msgid "Update your activities to ensure compatibility with your new software"
+msgstr ""
+
+#: ../src/view/home/HomeBox.py:125 ../src/controlpanel/toolbar.py:115
+msgid "Cancel"
+msgstr "Болих"
+
+#: ../src/view/home/HomeBox.py:127 ../src/controlpanel/gui.py:275
+msgid "Later"
+msgstr "Дараа"
+
+#: ../src/view/home/HomeBox.py:130
+msgid "Check now"
+msgstr ""
+
+#: ../src/view/home/HomeBox.py:266
msgid "List view"
msgstr "Жагсаалтыг харах"
-#: ../src/view/home/HomeBox.py:216
+#: ../src/view/home/HomeBox.py:267
msgid "<Ctrl>2"
msgstr "<Ctrl>2"
-#: ../src/view/home/HomeBox.py:273
+#: ../src/view/home/HomeBox.py:325
msgid "Favorites view"
msgstr "Дуртай зүйлсийг үзэх"
-#: ../src/view/home/HomeBox.py:274
+#: ../src/view/home/HomeBox.py:326
msgid "<Ctrl>1"
msgstr "<Ctrl>1"
# TRANS: label for the freeform layout in the favorites view
#. TRANS: label for the freeform layout in the favorites view
-#: ../src/view/home/HomeBox.py:282
+#: ../src/view/home/HomeBox.py:334
msgid "Freeform"
msgstr "Дурын хэлбэр"
# TRANS: label for the ring layout in the favorites view
#. TRANS: label for the ring layout in the favorites view
-#: ../src/view/home/HomeBox.py:289
+#: ../src/view/home/HomeBox.py:341
msgid "Ring"
msgstr "Цагираг"
@@ -201,7 +233,7 @@ msgstr "Цэнэг маш бага байна"
#: ../src/view/devices/battery.py:123
#, python-format
msgid "%(hour)d:%(min).2d remaining"
-msgstr "%(цаг)d:%(мин).2d үлдлээ"
+msgstr "%(hour)d:%(min).2d үлдлээ"
#: ../src/view/devices/battery.py:127
msgid "Charged"
@@ -227,19 +259,19 @@ msgstr "Салгагдсан"
msgid "Channel"
msgstr "Суваг"
-#: ../src/view/frame/zoomtoolbar.py:34
+#: ../src/view/frame/zoomtoolbar.py:37
msgid "Neighborhood"
msgstr "Хөршүүд"
-#: ../src/view/frame/zoomtoolbar.py:36
+#: ../src/view/frame/zoomtoolbar.py:39
msgid "Group"
msgstr "Бүлэг"
-#: ../src/view/frame/zoomtoolbar.py:38
+#: ../src/view/frame/zoomtoolbar.py:41
msgid "Home"
msgstr "Нүүр хуудас"
-#: ../src/view/frame/zoomtoolbar.py:40
+#: ../src/view/frame/zoomtoolbar.py:43
msgid "Activity"
msgstr "Үйл ажиллагаа"
@@ -261,6 +293,7 @@ msgid "sugar-control-panel: %s"
msgstr "sugar-удирдах-самбар: %s"
#: ../src/controlpanel/cmd.py:33
+#, fuzzy
msgid ""
"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
" Control for the sugar environment. \n"
@@ -270,6 +303,7 @@ msgid ""
" -h key show information about this key \n"
" -g key get the current value of the key \n"
" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
" "
msgstr ""
"Хэрэглээ: sugar-удирдах-самбар [ сонголт ] товч [ аргумент ... ] \n"
@@ -282,35 +316,27 @@ msgstr ""
"-ы товч Товчны одоогийн ач холбогдлыг тохируулах \n"
" "
-#: ../src/controlpanel/cmd.py:45
+#: ../src/controlpanel/cmd.py:46
msgid "To apply your changes you have to restart sugar.\n"
msgstr "Өөрчлөлтийг идэвхжүүлэхийн тулд та дахин эхлүүлэх шаардлагатай.\n"
-#: ../src/controlpanel/toolbar.py:115
-msgid "Cancel"
-msgstr "Болих"
-
-#: ../src/controlpanel/toolbar.py:121 ../src/view/home/favoritesview.py:294
+#: ../src/controlpanel/toolbar.py:121 ../src/view/home/favoritesview.py:296
msgid "Ok"
msgstr "Тийм"
-#: ../src/controlpanel/sectionview.py:34 ../src/controlpanel/gui.py:260
+#: ../src/controlpanel/sectionview.py:42 ../src/controlpanel/gui.py:267
msgid "Changes require restart"
msgstr "Өөрчлөхийн тулд дахин эхлүүлэх хэрэгтэй"
-#: ../src/controlpanel/gui.py:259
+#: ../src/controlpanel/gui.py:266
msgid "Warning"
msgstr "Анхаар"
-#: ../src/controlpanel/gui.py:263
+#: ../src/controlpanel/gui.py:270
msgid "Cancel changes"
msgstr "Өөрчлөлтийг цуцлах"
-#: ../src/controlpanel/gui.py:267
-msgid "Later"
-msgstr "Дараа"
-
-#: ../src/controlpanel/gui.py:271
+#: ../src/controlpanel/gui.py:279
msgid "Restart now"
msgstr "Одоо эхлүүлэх үү"
@@ -536,36 +562,36 @@ msgstr "Үл мэдэгдэх тархалтын сүлжээ"
msgid "Decline"
msgstr "Үл зөвшөөрөх"
-#: ../src/view/home/favoritesview.py:285
+#: ../src/view/home/favoritesview.py:287
msgid "Registration Failed"
msgstr "Бүртгэл бүтэлгүйтлээ"
-#: ../src/view/home/favoritesview.py:286
+#: ../src/view/home/favoritesview.py:288
#, python-format
msgid "%s"
msgstr "%s"
-#: ../src/view/home/favoritesview.py:288
+#: ../src/view/home/favoritesview.py:290
msgid "Registration Successful"
msgstr "Бүртгэл амжилттай"
-#: ../src/view/home/favoritesview.py:289
+#: ../src/view/home/favoritesview.py:291
msgid "You are now registered with your school server."
msgstr "Та одоо сургуулийн серверт бүртгэгдлээ."
-#: ../src/view/home/favoritesview.py:405
+#: ../src/view/home/favoritesview.py:407
msgid "Control Panel"
msgstr "Удирдах Самбар"
-#: ../src/view/home/favoritesview.py:416
+#: ../src/view/home/favoritesview.py:418
msgid "Restart"
msgstr "Дахин эхлүүлэх"
-#: ../src/view/home/favoritesview.py:421
+#: ../src/view/home/favoritesview.py:423
msgid "Shutdown"
msgstr "Унтраах"
-#: ../src/view/home/favoritesview.py:427
+#: ../src/view/home/favoritesview.py:429
msgid "Register"
msgstr "Бүртгүүлэх"
diff --git a/po/pt.po b/po/pt.po
index 40662e8..28e613c 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-08-19 17:12-0400\n"
-"PO-Revision-Date: 2008-08-27 05:47-0400\n"
+"PO-Revision-Date: 2008-08-27 12:13-0400\n"
"Last-Translator: Eduardo H. Silva <HoboPrimate@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
@@ -29,7 +29,7 @@ msgstr "Voltar"
#: ../src/intro/intro.py:162 ../src/controlpanel/toolbar.py:61
msgid "Done"
-msgstr "Terminado"
+msgstr "Finalizar"
#: ../src/intro/intro.py:165
msgid "Next"
diff --git a/src/controlpanel/model/language.py b/src/controlpanel/model/language.py
index 3215465..d835f77 100644
--- a/src/controlpanel/model/language.py
+++ b/src/controlpanel/model/language.py
@@ -43,6 +43,12 @@ def read_all_languages():
if locale.endswith('utf8') and len(lang):
locales.append((lang, territory, locale))
+ #FIXME: This is a temporary workaround for locales that are essential to
+ # OLPC, but are not in Glibc yet.
+ locales.append(('Kreyol', 'Haiti', 'ht_HT.utf8'))
+ locales.append(('Dari', 'Afghanistan', 'fa_AF.utf8'))
+ locales.append(('Pashto', 'Afghanistan', 'ps_AF.utf8'))
+
locales.sort()
return locales
diff --git a/src/hardware/nmclient.py b/src/hardware/nmclient.py
index 5a92176..ac9ddfd 100644
--- a/src/hardware/nmclient.py
+++ b/src/hardware/nmclient.py
@@ -214,7 +214,9 @@ class Device(gobject.GObject):
([gobject.TYPE_PYOBJECT])),
'network-disappeared': (gobject.SIGNAL_RUN_FIRST,
gobject.TYPE_NONE,
- ([gobject.TYPE_PYOBJECT]))
+ ([gobject.TYPE_PYOBJECT])),
+ 'ip-changed': (gobject.SIGNAL_RUN_FIRST,
+ gobject.TYPE_NONE, ([])),
}
def __init__(self, client, op):
@@ -235,6 +237,7 @@ class Device(gobject.GObject):
self._state = DEVICE_STATE_INACTIVE
self._active_network = None
self._active_net_sigid = 0
+ self._ip_address = None
obj = sys_bus.get_object(NM_SERVICE, self._op)
self.dev = dbus.Interface(obj, NM_IFACE_DEVICES)
@@ -251,6 +254,18 @@ class Device(gobject.GObject):
return True
return False
+ # 6248: remove for NM0.7; http://dev.laptop.org/ticket/6248#comment:2
+ def _getproperties_for_ip_only_reply_cb(self, *props):
+ current_ip = props[6]
+ if current_ip != self._ip_address:
+ self._ip_address = current_ip
+ if self._valid:
+ self.emit('ip-changed')
+
+ # 6248: remove for NM0.7; http://dev.laptop.org/ticket/6248#comment:2
+ def _getproperties_for_ip_only_error_cb(self, err):
+ logging.warning("Device(%s): failed to update. (%s)" % (self._op, err))
+
def _update_reply_cb(self, *props):
self._iface = props[1]
self._type = props[2]
@@ -276,6 +291,11 @@ class Device(gobject.GObject):
self._valid = True
+ # 6248: remove for NM0.7; http://dev.laptop.org/ticket/6248#comment:2
+ if props[6] != self._ip_address:
+ self._ip_address = props[6]
+ self.emit('ip-changed')
+
if self._is_activating():
self.set_state(DEVICE_STATE_ACTIVATING)
elif self._is_activated():
@@ -353,6 +373,9 @@ class Device(gobject.GObject):
self._freq = freq / 1000000000.0
return self._freq
+ def get_ip_address(self):
+ return self._ip_address
+
def get_strength(self):
return self._strength
@@ -454,6 +477,13 @@ class Device(gobject.GObject):
self._get_active_net_cb(state, *args),
error_handler=self._get_active_net_error_cb)
+ if state == DEVICE_STATE_ACTIVATED:
+ # 6248: reimplement for NM0.7
+ # see http://dev.laptop.org/ticket/6248#comment:2
+ self.dev.getProperties(
+ reply_handler=self._getproperties_for_ip_only_reply_cb,
+ error_handler=self._getproperties_for_ip_only_error_cb)
+
def set_activation_stage(self, stage):
if stage == self._act_stage:
return
@@ -461,6 +491,12 @@ class Device(gobject.GObject):
if self._valid:
self.emit('activation-stage-changed')
+ # 6248: reimplement for NM0.7
+ # see http://dev.laptop.org/ticket/6248#comment:2
+ self.dev.getProperties(
+ reply_handler=self._getproperties_for_ip_only_reply_cb,
+ error_handler=self._getproperties_for_ip_only_error_cb)
+
def get_activation_stage(self):
return self._act_stage
diff --git a/src/model/devices/network/mesh.py b/src/model/devices/network/mesh.py
index 36626e6..ec2ca7b 100644
--- a/src/model/devices/network/mesh.py
+++ b/src/model/devices/network/mesh.py
@@ -28,11 +28,14 @@ class Device(device.Device):
'activation-stage': (int, None, None, 0, 7, 0, gobject.PARAM_READABLE),
'frequency': (float, None, None, 0, 2.72, 0, gobject.PARAM_READABLE),
'mesh-step': (int, None, None, 0, 4, 0, gobject.PARAM_READABLE),
+ 'ip-address' : (str, None, None, None, gobject.PARAM_READABLE),
}
def __init__(self, nm_device):
device.Device.__init__(self)
self._nm_device = nm_device
+ self._nm_device.connect('ip-changed', self._ip_changed_cb)
+ self.notify('ip-address')
self._nm_device.connect('strength-changed',
self._strength_changed_cb)
@@ -47,6 +50,9 @@ class Device(device.Device):
def _state_changed_cb(self, nm_device):
self.notify('state')
+ def _ip_changed_cb(self, nm_device):
+ self.notify('ip-address')
+
def _activation_stage_changed_cb(self, nm_device):
self.notify('activation-stage')
@@ -62,6 +68,12 @@ class Device(device.Device):
return self._nm_device.get_frequency()
elif pspec.name == 'mesh-step':
return self._nm_device.get_mesh_step()
+ elif pspec.name == 'ip-address':
+ return self.get_ip_address()
+
+ def get_ip_address(self):
+ if self._nm_device is not None:
+ return self._nm_device.get_ip_address()
def get_type(self):
return 'network.mesh'
diff --git a/src/model/devices/network/wireless.py b/src/model/devices/network/wireless.py
index 8bf407e..b2efb49 100644
--- a/src/model/devices/network/wireless.py
+++ b/src/model/devices/network/wireless.py
@@ -44,7 +44,8 @@ class Device(device.Device):
'state' : (int, None, None, device.STATE_ACTIVATING,
device.STATE_INACTIVE, 0, gobject.PARAM_READABLE),
'frequency': (float, None, None, 0.0, 9999.99, 0.0,
- gobject.PARAM_READABLE)
+ gobject.PARAM_READABLE),
+ 'ip-address' : (str, None, None, None, gobject.PARAM_READABLE),
}
def __init__(self, nm_device):
@@ -57,6 +58,7 @@ class Device(device.Device):
self._ssid_changed_cb)
self._nm_device.connect('state-changed',
self._state_changed_cb)
+ self._nm_device.connect('ip-changed', self._ip_changed_cb)
def _strength_changed_cb(self, nm_device):
self.notify('strength')
@@ -67,6 +69,9 @@ class Device(device.Device):
def _state_changed_cb(self, nm_device):
self.notify('state')
+ def _ip_changed_cb(self, nm_device):
+ self.notify('ip-address')
+
def do_get_property(self, pspec):
if pspec.name == 'strength':
return self._nm_device.get_strength()
@@ -80,6 +85,8 @@ class Device(device.Device):
return device.nm_state_to_state[nm_state]
elif pspec.name == 'frequency':
return self._nm_device.get_frequency()
+ elif pspec.name == 'ip-address':
+ return self._nm_device.get_ip_address()
def get_type(self):
return 'network.wireless'
diff --git a/src/view/devices/network/mesh.py b/src/view/devices/network/mesh.py
index 1d115e9..40746ce 100644
--- a/src/view/devices/network/mesh.py
+++ b/src/view/devices/network/mesh.py
@@ -20,24 +20,34 @@ from gettext import gettext as _
import gtk
from sugar import profile
-from sugar.graphics.tray import TrayIcon
from sugar.graphics import style
from sugar.graphics.palette import Palette
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.xocolor import XoColor
from model.devices import device
from model.devices.network import wireless
from hardware import hardwaremanager
+from view.devices.network.wireless import IP_ADDRESS_TEXT_TEMPLATE
from view.frame.frameinvoker import FrameWidgetInvoker
+from view.pulsingicon import PulsingIcon
-class DeviceView(TrayIcon):
+class DeviceView(ToolButton):
FRAME_POSITION_RELATIVE = 400
def __init__(self, model):
- TrayIcon.__init__(self, icon_name='network-mesh')
+ ToolButton.__init__(self)
self._model = model
+ self._icon = PulsingIcon()
+ self._icon.props.icon_name = 'network-mesh'
+ pulse_color = XoColor("%s,%s" % (style.COLOR_BUTTON_GREY.get_svg(),
+ style.COLOR_TRANSPARENT.get_svg()))
+ self._icon.props.pulse_color = pulse_color
+ self._icon.props.base_color = pulse_color # only temporarily
+
self.palette = MeshPalette(_("Mesh Network"), model)
self.set_palette(self.palette)
self.palette.props.invoker = FrameWidgetInvoker(self)
@@ -45,24 +55,38 @@ class DeviceView(TrayIcon):
model.connect('notify::state', self._state_changed_cb)
model.connect('notify::activation-stage', self._state_changed_cb)
+ model.connect('notify::ip-address', self._ip_address_changed_cb)
+
self._update_state()
+ self._update_ip_address()
+ self.set_icon_widget(self._icon)
+ self._icon.show()
+
+ def _ip_address_changed_cb(self, model, pspec):
+ self._update_ip_address()
def _state_changed_cb(self, model, pspec):
self._update_state()
+ def _update_ip_address(self):
+ self.palette.set_ip_address(self._model.props.ip_address)
+
def _update_state(self):
# FIXME Change icon colors once we have real icons
state = self._model.props.state
self.palette.update_state(state)
+ self._icon.props.pulsing = state == device.STATE_ACTIVATING
if state == device.STATE_ACTIVATING:
- self.icon.props.fill_color = style.COLOR_INACTIVE_FILL.get_svg()
- self.icon.props.stroke_color = style.COLOR_INACTIVE_STROKE.get_svg()
+ self._icon.props.base_color = \
+ XoColor("%s,%s" % (style.COLOR_INACTIVE_STROKE.get_svg(),
+ style.COLOR_INACTIVE_FILL.get_svg()))
elif state == device.STATE_ACTIVATED:
- self.icon.props.xo_color = profile.get_color()
+ self._icon.props.base_color = profile.get_color()
elif state == device.STATE_INACTIVE:
- self.icon.props.fill_color = style.COLOR_INACTIVE_FILL.get_svg()
- self.icon.props.stroke_color = style.COLOR_INACTIVE_STROKE.get_svg()
+ self._icon.props.base_color = \
+ XoColor("%s,%s" % (style.COLOR_INACTIVE_STROKE.get_svg(),
+ style.COLOR_INACTIVE_FILL.get_svg()))
if state == device.STATE_INACTIVE:
self.palette.set_primary_text(_("Mesh Network"))
@@ -80,9 +104,21 @@ class MeshPalette(Palette):
self._step_label = gtk.Label()
self._step_label.show()
+ self._ip_address_label = gtk.Label()
+ def _padded(child, xalign=0, yalign=0.5):
+ padder = gtk.Alignment(xalign=xalign, yalign=yalign,
+ xscale=1, yscale=0.33)
+ padder.set_padding(style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING)
+ padder.add(child)
+ return padder
+
vbox = gtk.VBox()
- vbox.pack_start(self._step_label)
- vbox.show()
+ vbox.pack_start(_padded(self._step_label))
+ vbox.pack_start(_padded(self._ip_address_label))
+ vbox.show_all()
self.set_content(vbox)
@@ -104,6 +140,13 @@ class MeshPalette(Palette):
if network_manager and nm_device:
network_manager.set_active_device(nm_device)
+ def set_ip_address(self, ip_address):
+ if ip_address is not None and ip_address != "0.0.0.0":
+ ip_address_text = IP_ADDRESS_TEXT_TEMPLATE % ip_address
+ else:
+ ip_address_text = ""
+ self._ip_address_label.set_text(ip_address_text)
+
def set_mesh_step(self, step, state):
label = ""
if step == 1:
diff --git a/src/view/devices/network/wireless.py b/src/view/devices/network/wireless.py
index a339928..f95f5c4 100644
--- a/src/view/devices/network/wireless.py
+++ b/src/view/devices/network/wireless.py
@@ -20,26 +20,40 @@ from gettext import gettext as _
import gtk
from sugar.graphics.icon import get_icon_state
-from sugar.graphics.tray import TrayIcon
from sugar.graphics import style
from sugar.graphics.palette import Palette
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.xocolor import XoColor
from model.devices.network import wireless
from model.devices import device
from hardware import hardwaremanager
from hardware import nmclient
from view.frame.frameinvoker import FrameWidgetInvoker
+from view.pulsingicon import PulsingIcon
_ICON_NAME = 'network-wireless'
-class DeviceView(TrayIcon):
+IP_ADDRESS_TEXT_TEMPLATE = _("IP address: %s")
+
+class DeviceView(ToolButton):
FRAME_POSITION_RELATIVE = 300
def __init__(self, model):
- TrayIcon.__init__(self, icon_name=_ICON_NAME)
+ ToolButton.__init__(self)
self._model = model
+ self._icon = PulsingIcon()
+ self._icon.props.icon_name = _ICON_NAME
+ pulse_color = XoColor("%s,%s" % (style.COLOR_BUTTON_GREY.get_svg(),
+ style.COLOR_TRANSPARENT.get_svg()))
+ self._icon.props.pulse_color = pulse_color
+ self._icon.props.base_color = pulse_color # only temporarily
+ self._inactive_color = XoColor("%s,%s" % (
+ style.COLOR_INACTIVE_STROKE.get_html(),
+ style.COLOR_INACTIVE_FILL.get_html()))
+
meshdev = None
network_manager = hardwaremanager.get_network_manager()
for dev in network_manager.get_devices():
@@ -56,11 +70,16 @@ class DeviceView(TrayIcon):
self.palette.set_frequency(self._model.props.frequency)
model.connect('notify::name', self._name_changed_cb)
+ model.connect('notify::ip-address', self._ip_address_changed_cb)
model.connect('notify::strength', self._strength_changed_cb)
model.connect('notify::state', self._state_changed_cb)
self._update_icon()
self._update_state()
+ self._update_ip_address()
+
+ self.set_icon_widget(self._icon)
+ self._icon.show()
def _get_palette_primary_text(self):
if self._model.props.state == device.STATE_INACTIVE:
@@ -74,8 +93,12 @@ class DeviceView(TrayIcon):
self.palette.set_frequency(self._model.props.frequency)
self._counter += 1
+ def _ip_address_changed_cb(self, model, pspec):
+ self._update_ip_address()
+
def _name_changed_cb(self, model, pspec):
self.palette.set_primary_text(self._get_palette_primary_text())
+ self._update_state()
def _state_changed_cb(self, model, pspec):
self._update_state()
@@ -87,21 +110,24 @@ class DeviceView(TrayIcon):
strength = 0
icon_name = get_icon_state(_ICON_NAME, strength)
if icon_name:
- self.icon.props.icon_name = icon_name
+ self._icon.props.icon_name = icon_name
def _update_state(self):
# FIXME Change icon colors once we have real icons
state = self._model.props.state
+ self._icon.props.pulsing = state == device.STATE_ACTIVATING
if state == device.STATE_ACTIVATING:
- self.icon.props.fill_color = style.COLOR_INACTIVE_FILL.get_svg()
- self.icon.props.stroke_color = style.COLOR_INACTIVE_STROKE.get_svg()
+ fill = style.COLOR_INACTIVE_FILL.get_svg()
+ stroke = style.COLOR_INACTIVE_STROKE.get_svg()
elif state == device.STATE_ACTIVATED:
(stroke, fill) = self._model.get_active_network_colors()
- self.icon.props.stroke_color = stroke
- self.icon.props.fill_color = fill
elif state == device.STATE_INACTIVE:
- self.icon.props.fill_color = style.COLOR_INACTIVE_FILL.get_svg()
- self.icon.props.stroke_color = style.COLOR_INACTIVE_STROKE.get_svg()
+ fill = style.COLOR_INACTIVE_FILL.get_svg()
+ stroke = style.COLOR_INACTIVE_STROKE.get_svg()
+ self._icon.props.base_color = XoColor("%s,%s" % (stroke, fill))
+
+ def _update_ip_address(self):
+ self.palette.set_ip_address(self._model.props.ip_address)
class WirelessPalette(Palette):
def __init__(self, primary_text, meshdev):
@@ -109,11 +135,26 @@ class WirelessPalette(Palette):
self._meshdev = meshdev
self._chan_label = gtk.Label()
+ self._chan_label.props.xalign = 0.0
self._chan_label.show()
+ self._ip_address_label = gtk.Label()
+
vbox = gtk.VBox()
- vbox.pack_start(self._chan_label)
- vbox.show()
+
+ def _padded(child, xalign=0, yalign=0.5):
+ padder = gtk.Alignment(xalign=xalign, yalign=yalign,
+ xscale=1, yscale=0.33)
+ padder.set_padding(style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING,
+ style.DEFAULT_SPACING)
+ padder.add(child)
+ return padder
+
+ vbox.pack_start(_padded(self._chan_label))
+ vbox.pack_start(_padded(self._ip_address_label))
+ vbox.show_all()
if meshdev:
disconnect_item = gtk.MenuItem(_('Disconnect...'))
@@ -136,3 +177,9 @@ class WirelessPalette(Palette):
chan = 0
self._chan_label.set_text("%s: %d" % (_("Channel"), chan))
+ def set_ip_address(self, ip_address):
+ if ip_address is not None and ip_address != "0.0.0.0":
+ ip_address_text = IP_ADDRESS_TEXT_TEMPLATE % ip_address
+ else:
+ ip_address_text = ""
+ self._ip_address_label.set_text(ip_address_text)