Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@walter-laptop.(none)>2009-07-13 20:40:11 (GMT)
committer Walter Bender <walter@walter-laptop.(none)>2009-07-13 20:40:11 (GMT)
commit8f1ce5e3ba6c98e45e565e2530c75c6e68d5bd1c (patch)
tree49442dc9182dc0b1b38e5aebe31f8726c383975a
migrating Measure activity to gitorious
-rwxr-xr-xMANIFEST73
-rwxr-xr-xNEWS83
-rw-r--r--README15
-rwxr-xr-xSOURCES7
-rw-r--r--activity/activity-measure.svg10
-rwxr-xr-xactivity/activity.info9
-rwxr-xr-xactivity/activity.info~9
-rwxr-xr-xaudiograb.py489
-rwxr-xr-xconfig.py51
-rwxr-xr-xdrawwaveform.py411
-rwxr-xr-xgraphs.py45
-rw-r--r--icons/amp-high.svg3
-rw-r--r--icons/amp-low.svg3
-rw-r--r--icons/bias-off.svg14
-rw-r--r--icons/bias-off2.svg115
-rw-r--r--icons/bias-on.svg14
-rw-r--r--icons/bias-on2.svg113
-rw-r--r--icons/current-ac.svg9
-rw-r--r--icons/current-dc.svg10
-rw-r--r--icons/domain-freq.svg10
-rw-r--r--icons/domain-freq2.svg99
-rw-r--r--icons/domain-time.svg9
-rw-r--r--icons/domain-time2.svg89
-rw-r--r--icons/freq-high.svg3
-rw-r--r--icons/freq-low.svg3
-rw-r--r--icons/sample_rate.svg19
-rw-r--r--icons/view-details.svg17
-rwxr-xr-xjournal.py385
-rw-r--r--locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/am/activity.linfo2
-rw-r--r--locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 667 bytes
-rw-r--r--locale/ar/activity.linfo2
-rw-r--r--locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/ay/activity.linfo2
-rw-r--r--locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2045 bytes
-rw-r--r--locale/bg/activity.linfo2
-rw-r--r--locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1093 bytes
-rw-r--r--locale/bn/activity.linfo2
-rw-r--r--locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2163 bytes
-rw-r--r--locale/bn_IN/activity.linfo2
-rw-r--r--locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1451 bytes
-rw-r--r--locale/ca/activity.linfo2
-rw-r--r--locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1727 bytes
-rw-r--r--locale/de/activity.linfo2
-rw-r--r--locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/dz/activity.linfo2
-rw-r--r--locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1990 bytes
-rw-r--r--locale/el/activity.linfo2
-rw-r--r--locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/en/activity.linfo2
-rw-r--r--locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1682 bytes
-rw-r--r--locale/es/activity.linfo2
-rw-r--r--locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1891 bytes
-rw-r--r--locale/fa/activity.linfo2
-rw-r--r--locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1950 bytes
-rw-r--r--locale/fa_AF/activity.linfo2
-rw-r--r--locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/ff/activity.linfo2
-rw-r--r--locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2512 bytes
-rw-r--r--locale/fr/activity.linfo2
-rw-r--r--locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/ha/activity.linfo2
-rw-r--r--locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1466 bytes
-rw-r--r--locale/hi/activity.linfo2
-rw-r--r--locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/ig/activity.linfo2
-rw-r--r--locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 442 bytes
-rw-r--r--locale/is/activity.linfo2
-rw-r--r--locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 637 bytes
-rw-r--r--locale/ja/activity.linfo2
-rw-r--r--locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1354 bytes
-rw-r--r--locale/mk/activity.linfo2
-rw-r--r--locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/ml/activity.linfo2
-rw-r--r--locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 851 bytes
-rw-r--r--locale/mn/activity.linfo2
-rw-r--r--locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1935 bytes
-rw-r--r--locale/ne/activity.linfo2
-rw-r--r--locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2517 bytes
-rw-r--r--locale/nl/activity.linfo2
-rw-r--r--locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/pa/activity.linfo2
-rw-r--r--locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/pl/activity.linfo2
-rw-r--r--locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1840 bytes
-rw-r--r--locale/ps/activity.linfo2
-rw-r--r--locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/pseudo/activity.linfo2
-rw-r--r--locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1586 bytes
-rw-r--r--locale/pt/activity.linfo2
-rw-r--r--locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 882 bytes
-rw-r--r--locale/pt_BR/activity.linfo2
-rw-r--r--locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/qu/activity.linfo2
-rw-r--r--locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1207 bytes
-rw-r--r--locale/ro/activity.linfo2
-rw-r--r--locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2136 bytes
-rw-r--r--locale/ru/activity.linfo2
-rw-r--r--locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1574 bytes
-rw-r--r--locale/rw/activity.linfo2
-rw-r--r--locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2242 bytes
-rw-r--r--locale/te/activity.linfo2
-rw-r--r--locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 2126 bytes
-rw-r--r--locale/th/activity.linfo2
-rw-r--r--locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 1899 bytes
-rw-r--r--locale/ur/activity.linfo2
-rw-r--r--locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mobin0 -> 404 bytes
-rw-r--r--locale/yo/activity.linfo2
-rwxr-xr-xlog1.csv1
-rwxr-xr-xlog3.csv3
-rwxr-xr-xlogging_ui.py136
-rwxr-xr-xmeasure.py163
-rw-r--r--po/Measure.pot117
-rw-r--r--po/am.po117
-rw-r--r--po/ar.po122
-rw-r--r--po/ay.po117
-rw-r--r--po/bg.po129
-rw-r--r--po/bn.po124
-rw-r--r--po/bn_IN.po124
-rw-r--r--po/ca.po125
-rw-r--r--po/de.po148
-rw-r--r--po/dz.po117
-rw-r--r--po/el.po148
-rw-r--r--po/en.po117
-rw-r--r--po/es.po191
-rw-r--r--po/fa.po126
-rw-r--r--po/fa_AF.po146
-rw-r--r--po/ff.po117
-rw-r--r--po/fr.po248
-rw-r--r--po/ha.po117
-rw-r--r--po/hi.po149
-rw-r--r--po/ig.po117
-rw-r--r--po/is.po117
-rw-r--r--po/ja.po165
-rw-r--r--po/mk.po133
-rw-r--r--po/ml.po117
-rw-r--r--po/mn.po143
-rw-r--r--po/ne.po152
-rw-r--r--po/nl.po239
-rw-r--r--po/pa.po117
-rw-r--r--po/pl.po117
-rw-r--r--po/ps.po146
-rw-r--r--po/pseudo.po117
-rw-r--r--po/pt.po130
-rw-r--r--po/pt_BR.po151
-rw-r--r--po/qu.po117
-rw-r--r--po/ro.po128
-rw-r--r--po/ru.po133
-rw-r--r--po/rw.po119
-rw-r--r--po/te.po137
-rw-r--r--po/th.po131
-rw-r--r--po/ur.po153
-rw-r--r--po/yo.po117
-rw-r--r--sensor_toolbar.py240
-rwxr-xr-xsheet.py102
-rwxr-xr-xsheet_ui.py46
-rw-r--r--sound_toolbar.py355
-rw-r--r--textbox.py81
-rwxr-xr-xtoolbar_side.py65
-rwxr-xr-xtoolbar_top.py121
160 files changed, 9105 insertions, 0 deletions
diff --git a/MANIFEST b/MANIFEST
new file mode 100755
index 0000000..3903295
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,73 @@
+measure.py
+sheet.py
+sheet_ui.py
+audiograb.py
+drawwaveform.py
+config.py
+toolbar_top.py
+sound_toolbar.py
+sensor_toolbar.py
+logging_ui.py
+toolbar_side.py
+journal.py
+graphs.py
+textbox.py
+./icons/amp-high.svg
+./icons/amp-low.svg
+./icons/bias-off.svg
+./icons/bias-on.svg
+./icons/bias-off2.svg
+./icons/bias-on2.svg
+./icons/current-ac.svg
+./icons/current-dc.svg
+./icons/domain-freq.svg
+./icons/domain-freq2.svg
+./icons/domain-time.svg
+./icons/domain-time2.svg
+./icons/freq-low.svg
+./icons/freq-high.svg
+./icons/sample_rate.svg
+./icons/view-details.svg
+po/Measure.pot
+po/am.po
+po/bn.po
+po/el.po
+po/fa.po
+po/fa_AF.po
+po/ff.po
+po/hi.po
+po/ja.po
+po/ne.po
+po/pseudo.po
+po/qu.po
+po/rw.po
+po/yo.po
+po/ar.po
+po/de.po
+po/en.po
+po/fr.po
+po/ig.po
+po/mk.po
+po/nl.po
+po/pt_BR.po
+po/ro.po
+po/th.po
+po/ay.po
+po/dz.po
+po/es.po
+po/ha.po
+po/is.po
+po/ml.po
+po/pa.po
+po/pt.po
+po/ru.po
+po/ur.po
+po/bg.po
+po/bn_IN.po
+po/ca.po
+po/mn.po
+po/pl.po
+po/te.po
+po/ps.po
+SOURCES
+README
diff --git a/NEWS b/NEWS
new file mode 100755
index 0000000..679d71f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,83 @@
+23
+
+21
+* #8683 Fixed minor sensor logging problem
+
+20
+* Added license information
+
+19
+* New usage context based UI - sound and sensors context
+* In sound context recording takes screenshots of waveforms and creates journal entries
+* In sensors context recording writes csv values and creates journal entry
+* Textbox at bottom to show prompts for easy usage
+* New even lower frequency display in sound context for 25hz waveforms
+* Waveform color is XO stroke color
+* Major changes in codebase from ver18 to make it easily extensible from a dev point of view
+* Supports upto 4 simultaneous waveforms display by specifying start and end co-ordinates
+
+18
+* Fixed changing Numeric to numpy
+* Updated translations
+17
+
+* New translations (Pootle)
+* Bitfrost compliant (Logging works now) #6436
+
+16
+
+* New translations added via Pootle - pl, te, mn, ff_AF, ff, bg, ca
+
+15
+
+* New translations added via Pootle
+
+14
+
+* (Note : This release doesn't comply with Bitfrost. Please see AnalogInput.py to correct that)
+* Revisited Journal Integration - now scale, mode etc. are also written in logfile
+* Details show/hide added - rms, avg, X Axis scale and Y Axis scale are visible
+* Fixed #3616 by making the Activity wait for ,active = True to fire before trying to get hold of the sound device
+* Increased gain slider sensitivity, also disabled Mic Boost throughout Activity
+
+13
+
+* Changing sampling rate from ALSA rather than using downsampling in code
+* Frequency slider now takes three discrete values
+* Faster background drawing method
+* Code cleanup
+* Fixed Activity not calling on_quit when quitting.
+
+12
+
+* Fixed #4444 by disabling the gobject.timeout when activity is inactive that queues up the expose drawing event
+
+11
+
+* Fixed and closed #3666
+
+10
+
+* Fixed sound related problem by turning up Master and PCM high on exit (closed #3481)
+
+9
+
+
+* Code modified to match Alsacontrol name 'DC Mode Enable'
+* UI refinement and improvement
+* Fixed loud feedback problem
+
+
+8
+
+* No change from version 7.
+
+7
+
+* Fix NEWS file
+ NEWS files should be appended to for every major change and the setup
+ will take care of adding the version when releasing
+
+6
+
+* Initial release
diff --git a/README b/README
new file mode 100644
index 0000000..bd67df8
--- /dev/null
+++ b/README
@@ -0,0 +1,15 @@
+Project Adviser:
+Walter Bender - walter@laptop.org
+
+Core Developer(s):
+Arjun Sarwal - arjun@laptop.org
+
+Contributor(s):
+Many many!
+See http://wiki.laptop.org/go/Measure
+
+Contact:
+Email: arjun@laptop.org
+IRC : arjs on Freenode
+
+
diff --git a/SOURCES b/SOURCES
new file mode 100755
index 0000000..c088438
--- /dev/null
+++ b/SOURCES
@@ -0,0 +1,7 @@
+The source code for this release of 'Measure Activity' is here :-
+
+http://dev.laptop.org/git?p=projects/measure;a=summary
+
+Please contact me in case of any questions -
+Email : arjun@laptop.org
+IRC : arjs (#olpc and #sugar)
diff --git a/activity/activity-measure.svg b/activity/activity-measure.svg
new file mode 100644
index 0000000..e55d7ce
--- /dev/null
+++ b/activity/activity-measure.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-measure">
+ <g>
+ <path d="M48.143,36.983c0,3.3-2.7,6-6,6H12.705c-3.3,0-6-2.7-6-6V18.213c0-3.3,2.7-6,6-6h29.438c3.3,0,6,2.7,6,6 V36.983z" fill="&fill_color;"/>
+ <path d="M48.143,36.983c0,3.3-2.7,6-6,6H12.705 c-3.3,0-6-2.7-6-6V18.213c0-3.3,2.7-6,6-6h29.438c3.3,0,6,2.7,6,6V36.983z" fill="none" stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+ </g>
+ <path d="M8.007,27.598 c10.118,0,6.243,9.431,11.213,9.431c4.375,0,2.154-19.154,6.279-19.154c4.875,0,1.719,19.154,6.719,19.154 c4.406,0,1.781-11.529,5.156-11.529s2,4.875,4.25,4.875c2.375,0,0.25-3.375,5.75-3.375" fill="&fill_color;" stroke="&stroke_color;" stroke-linejoin="round" stroke-width="3.5"/>
+</g></svg> \ No newline at end of file
diff --git a/activity/activity.info b/activity/activity.info
new file mode 100755
index 0000000..dd0c62f
--- /dev/null
+++ b/activity/activity.info
@@ -0,0 +1,9 @@
+[Activity]
+name = Measure
+service_name = org.laptop.MeasureActivity
+class = measure.MeasureActivity
+icon = activity-measure
+activity_version = 24
+show_launcher = yes
+license = GPLv2+
+update_url = http://wiki.laptop.org/go/Activities/G1G1
diff --git a/activity/activity.info~ b/activity/activity.info~
new file mode 100755
index 0000000..5334e19
--- /dev/null
+++ b/activity/activity.info~
@@ -0,0 +1,9 @@
+[Activity]
+name = Measure
+service_name = org.laptop.MeasureActivity
+class = measure.MeasureActivity
+icon = activity-measure
+activity_version = 23
+show_launcher = yes
+license = GPLv2+
+update_url = http://wiki.laptop.org/go/Activities/G1G1
diff --git a/audiograb.py b/audiograb.py
new file mode 100755
index 0000000..b169d0f
--- /dev/null
+++ b/audiograb.py
@@ -0,0 +1,489 @@
+#! /usr/bin/python
+#
+# Author: Arjun Sarwal arjun@laptop.org
+# Copyright (C) 2007, OLPC
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import pygst
+pygst.require("0.10")
+import gst
+import gobject
+import os
+import subprocess
+from struct import unpack
+from string import find
+import config #This has all the golabals
+
+
+class AudioGrab():
+
+
+ def __init__(self, callable1, journal):
+
+ self.callable1 = callable1
+ self.ji = journal
+
+ self.temp_buffer = []
+ self.picture_buffer = []
+
+ self.draw_graph_status = False
+ self.f = None
+ self.logging_status = False
+ self.screenshot = True
+
+ self.rate = 48000
+ self.final_count = 0
+ self.count_temp = 0
+ self.entry_count = 0
+
+
+ self.waveform_id = 1
+ self.logging_state = False
+ self.buffer_interval_logging = 0
+ self.counter_buffer = 0
+
+ ####Variables for saving and resuming state of sound device######
+ self.master = self.get_master()
+ self.PCM = self.get_PCM_gain()
+ self.mic = self.get_mic_gain()
+ self.bias = config.BIAS
+ self.dcmode = config.DC_MODE_ENABLE
+ self.capture_gain = config.CAPTURE_GAIN
+ self.mic_boost = config.MIC_BOOST
+ #################################################################
+
+
+ self.pipeline = gst.Pipeline("pipeline")
+ self.alsasrc = gst.element_factory_make("alsasrc", "alsa-source")
+ self.pipeline.add(self.alsasrc)
+ self.caps1 = gst.element_factory_make("capsfilter", "caps1")
+ self.pipeline.add(self.caps1)
+ caps_str = "audio/x-raw-int,rate=%d,channels=1,depth=16" % (config.RATE, )
+ self.caps1.set_property("caps", gst.caps_from_string(caps_str) )
+ self.fakesink = gst.element_factory_make("fakesink", "fsink")
+ self.pipeline.add(self.fakesink)
+ self.fakesink.connect("handoff", self.on_buffer)
+ self.fakesink.set_property("signal-handoffs",True)
+ gst.element_link_many(self.alsasrc, self.caps1, self.fakesink)
+
+
+ self.dont_queue_the_buffer = False
+
+
+ def set_handoff_signal(self, handoff_state):
+ """Sets whether the handoff signal would generate an interrupt or not"""
+ self.fakesink.set_property("signal-handoffs",handoff_state)
+
+ def _new_buffer(self,buf):
+ if self.dont_queue_the_buffer == False:
+ self.callable1(str(buf))
+ #print "$$audiograb:have just called callback to update buffer for drawing"
+ else:
+ pass
+ #print "$$audiograb:not queuing2"
+
+
+
+ def on_buffer(self, element, buffer, pad):
+ """The function that is called whenever new data is available
+ This is the signal handler for the handoff signal"""
+ self.temp_buffer = buffer
+ if self.dont_queue_the_buffer == False:
+ gobject.timeout_add(config.AUDIO_BUFFER_TIMEOUT, self._new_buffer, self.temp_buffer)
+ else:
+ pass
+
+ if self.logging_state==True:
+ if self.waveform_id == config.SOUND_MAX_WAVE_LOGS:
+ self.waveform_id = 1
+ self.logging_state = False
+ self.ji.stop_session()
+ else:
+ if self.counter_buffer == self.buffer_interval_logging:
+ #gobject.timeout_add(300, self._emit_for_logging, self.temp_buffer)
+ self._emit_for_logging(str(self.temp_buffer))
+ self.counter_buffer=0
+
+ self.counter_buffer+=1
+
+ if self.buffer_interval_logging ==0: #If a record is to be written, thats all for the logging session
+ self.logging_state = False
+ self.ji.stop_session()
+ self.waveform_id = 1
+
+ return False
+
+
+ def set_freeze_the_display(self, freeze = False):
+ """Useful when just the display is needed to be frozen, but logging should continue"""
+ self.dont_queue_the_buffer = not freeze
+
+
+ def get_freeze_the_display(self):
+ """Returns state of queueing the buffer"""
+ return not self.dont_queue_the_buffer
+
+ def _emit_for_logging(self, buf):
+ """Sends the data for logging"""
+ if self.buffer_interval_logging==0:
+ #self.ji.write_record(self.picture_buffer)
+ self.ji.take_screenshot()
+ else:
+ if self.screenshot == True:
+ self.ji.take_screenshot(self.waveform_id)
+ self.waveform_id+=1
+ else:
+ temp_buf = list(unpack( str(int(len(buf))/2)+'h' , buf))
+ self.ji.write_value(temp_buf[0])
+
+
+ def start_sound_device(self):
+ """Start or Restart grabbing data from the audio capture"""
+ gst.event_new_flush_start()
+ self.pipeline.set_state(gst.STATE_PLAYING)
+
+
+ def stop_sound_device(self):
+ """Stop grabbing data from capture device"""
+ gst.event_new_flush_stop()
+ self.pipeline.set_state(gst.STATE_NULL)
+
+
+ def save_state(self):
+ """Saves the state of all audio controls"""
+ self.master = self.get_master()
+ self.PCM = self.get_PCM_gain()
+ self.mic = self.get_mic_gain()
+ self.bias = self.get_bias()
+ self.dcmode = self.get_dc_mode()
+ self.capture_gain = self.get_capture_gain()
+ self.mic_boost = self.get_mic_boost()
+
+ def resume_state(self):
+ """Put back all audio control settings from the saved state"""
+ self.set_master(self.master)
+ self.set_PCM_gain(self.PCM )
+ self.set_mic_gain(self.mic)
+ self.set_bias(self.bias)
+ self.set_dc_mode(self.dcmode)
+ self.set_capture_gain(self.capture_gain)
+ self.set_mic_boost(self.mic_boost)
+
+
+ def set_logging_params(self, start_stop=False, interval=0, screenshot = True):
+ """Configures for logging of data i.e. starts or stops a session
+ Sets an interval if logging interval is to be started
+ Sets if screenshot of waveform is to be taken or values need to be written"""
+ self.logging_state = start_stop
+ self.set_buffer_interval_logging(interval)
+ #if interval==0:
+ # self.take_picture()
+ self.reset_counter_buffer()
+ self.screenshot = screenshot
+
+ def take_picture(self):
+ """Used to grab and temporarily store the current buffer"""
+ self.picture_buffer = list(unpack( str(int(len(str(self.temp_buffer)))/2)+'h' , str(self.temp_buffer)))
+
+ def set_logging_state(self, start_stop=False):
+ """Sets whether buffer is to be emited for logging (True) or not (False)"""
+ self.logging_state = start_stop
+
+ def set_buffer_interval_logging(self, interval=0):
+ """Sets the number of buffers after which a buffer needs to be emitted"""
+ self.buffer_interval_logging = interval
+
+ def reset_counter_buffer(self):
+ """Resets the counter buffer used to keep track of after how many buffers to emit a buffer for logging"""
+ self.counter_buffer = 0
+
+
+ def mute_master(self):
+ """Mutes the Master Control"""
+ os.system("amixer set Master mute")
+
+ def unmute_master(self):
+ """Unmutes the Master Control"""
+ os.system("amixer set Master unmute")
+
+ def mute_PCM(self):
+ """Mutes the PCM Control"""
+ os.system("amixer set PCM mute")
+
+ def unmute_PCM(self):
+ """Unmutes the PCM Control"""
+ os.system("amixer set PCM unmute")
+
+ def mute_mic(self):
+ """Mutes the Mic Control"""
+ os.system("amixer set Mic mute")
+
+ def unmute_mic(self):
+ """Unmutes the Mic Control"""
+ os.system("amixer set Mic unmute")
+
+ def set_master(self, master_val ):
+ """Sets the Master gain slider settings
+ master_val must be given as an integer between 0 and 100 indicating the
+ percentage of the slider to be set"""
+ os.system("amixer set Master " + str(master_val) + "%")
+
+
+ def get_master(self):
+ """Gets the Master gain slider settings. The value returned is an integer between 0-100
+ and is an indicative of the percentage 0 - 100%"""
+ p = str(subprocess.Popen(["amixer", "get", "Master"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Front Left:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"%]")]
+ return int(p)
+
+
+
+ def get_mix_for_recording(self):
+ """Returns True if Mix is set as recording device and False if it isn't """
+ p = str(subprocess.Popen(["amixer", "get", "Mix", "capture", "cap"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"]")]
+ if p=="on" :
+ return True
+ else:
+ return False
+
+
+ def get_mic_for_recording(self):
+ """Returns True if mic is set as recording device and False if it isn't """
+ p = str(subprocess.Popen(["amixer", "get", "Mic", "capture", "cap"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"]")]
+ if p=="on" :
+ return True
+ else:
+ return False
+
+ def set_mic_for_recording(self):
+ """Sets Mic as the default recording source"""
+ os.system("amixer set Mic capture cap")
+
+ def set_mix_for_recording(self):
+ """Sets Mix as the default recording source"""
+ os.system("amixer set Mix capture cap")
+
+
+ def set_bias(self,bias_state=False):
+ """Sets the Bias control
+ pass False to disable and True to enable"""
+ if bias_state==False:
+ bias_str="mute"
+ else:
+ bias_str="unmute"
+ os.system("amixer set 'V_REFOUT Enable' " + bias_str)
+
+ def get_bias(self):
+ """Returns the setting of Bias control
+ i.e. True: Enabled and False: Disabled"""
+ p = str(subprocess.Popen(["amixer", "get", "'V_REFOUT Enable'"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"]")]
+ if p=="on" :
+ return True
+ else:
+ return False
+
+ def set_dc_mode(self, dc_mode = False):
+ """Sets the DC Mode Enable control
+ pass False to mute and True to unmute"""
+ if dc_mode==False:
+ dcm_str="mute"
+ else:
+ dcm_str="unmute"
+ os.system("amixer set 'DC Mode Enable' " + dcm_str)
+
+ def get_dc_mode(self):
+ """Returns the setting of DC Mode Enable control
+ i .e. True: Unmuted and False: Muted"""
+ p = str(subprocess.Popen(["amixer", "get", "'DC Mode Enable'"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"]")]
+ if p=="on" :
+ return True
+ else:
+ return False
+
+ def set_mic_boost(self, mic_boost=False):
+ """Sets the Mic Boost +20dB control
+ pass False to mute and True to unmute"""
+ if mic_boost==False:
+ mb_str="mute"
+ else:
+ mb_str="unmute"
+ os.system("amixer set 'Mic Boost (+20dB)' " + mb_str)
+
+ def get_mic_boost(self):
+ """Returns the setting of Mic Boost +20dB control
+ i.e. True: Unmuted and False: Muted"""
+ p = str(subprocess.Popen(["amixer", "get", "'Mic Boost (+20dB)'"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"]")]
+ if p=="on" :
+ return True
+ else:
+ return False
+
+
+ def set_capture_gain(self, capture_val):
+ """Sets the Capture gain slider settings
+ capture_val must be given as an integer between 0 and 100 indicating the
+ percentage of the slider to be set"""
+ os.system("amixer set Capture " + str(capture_val) + "%")
+
+
+ def get_capture_gain(self):
+ """Gets the Capture gain slider settings. The value returned is an integer between 0-100
+ and is an indicative of the percentage 0 - 100%"""
+ p = str(subprocess.Popen(["amixer", "get", "Capture"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Front Left:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"%]")]
+ return int(p)
+
+
+ def set_PCM_gain(self, PCM_val):
+ """Sets the PCM gain slider settings
+ PCM_val must be given as an integer between 0 and 100 indicating the
+ percentage of the slider to be set"""
+ os.system("amixer set PCM " + str(PCM_val) + "%")
+
+ def get_PCM_gain(self):
+ """Gets the PCM gain slider settings. The value returned is an indicative of the percentage 0 - 100%"""
+ p = str(subprocess.Popen(["amixer", "get", "PCM"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Front Left:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"%]")]
+ return int(p)
+
+
+ def set_mic_gain(self, mic_val):
+ """Sets the MIC gain slider settings
+ mic_val must be given as an integer between 0 and 100 indicating the
+ percentage of the slider to be set"""
+ os.system("amixer set Mic " + str(mic_val) + "%")
+
+ def get_mic_gain(self):
+ """Gets the MIC gain slider settings. The value returned is an indicative of the percentage 0 - 100%"""
+ p = str(subprocess.Popen(["amixer", "get", "Mic"], stdout=subprocess.PIPE).communicate()[0])
+ p = p[find(p,"Mono:"):]
+ p = p[find(p,"[")+1:]
+ p = p[:find(p,"%]")]
+ return int(p)
+
+ def set_sampling_rate(self, sr):
+ """Sets the sampling rate of the capture device
+ Sampling rate must be given as an integer for example 16000 for setting 16Khz sampling rate
+ The sampling rate would be set in the device to the nearest available"""
+ self.pause_grabbing()
+ caps_str = "audio/x-raw-int,rate=%d,channels=1,depth=16" % (sr, )
+ self.caps1.set_property("caps", gst.caps_from_string(caps_str) )
+ self.resume_grabbing()
+
+
+ def get_sampling_rate(self):
+ """Gets the sampling rate of the capture device"""
+ return int(self.caps1.get_property("caps")[0]['rate'] )
+
+
+ def set_callable1(self, callable1):
+ """Sets the callable to the drawing function for giving the
+ data at the end of idle-add"""
+ self.callable1 = callable1
+
+
+ def set_sensor_type(self, sensor_type=1):
+ """Set the type of sensor you want to use. Set sensor_type according to the following
+ 0 - AC coupling with Bias Off --> Very rarely used. Use when connecting a dynamic microphone externally
+ 1 - AC coupling with Bias On --> The default settings. The internal MIC uses these
+ 2 - DC coupling with Bias Off --> Used when using a voltage output sensor. For example LM35 which gives output proportional to temperature
+ 3 - DC coupling with Bias On --> Used with resistive sensors. For example"""
+ if sensor_type==0:
+ self.set_dc_mode(False)
+ self.set_bias(False)
+ self.set_capture_gain(50)
+ self.set_mic_boost(True)
+ elif sensor_type==1:
+ self.set_dc_mode(False)
+ self.set_bias(True)
+ self.set_capture_gain(40)
+ self.set_mic_boost(True)
+ elif sensor_type==2:
+ self.set_dc_mode(True)
+ self.set_bias(False)
+ self.set_capture_gain(0)
+ self.set_mic_boost(False)
+ elif sensor_type==3:
+ self.set_dc_mode(True)
+ self.set_bias(True)
+ self.set_capture_gain(0)
+ self.set_mic_boost(False)
+
+
+ def start_grabbing(self):
+ """Called right at the start of the Activity"""
+ self.start_sound_device()
+ #self.set_handoff_signal(True)
+ ####Sound device settings at start####
+ #self.set_sampling_rate(config.RATE)
+ #self.set_mic_boost(config.MIC_BOOST)
+ #self.set_dc_mode(config.DC_MODE_ENABLE)
+ #self.set_capture_gain(config.CAPTURE_GAIN)
+ #self.set_bias(config.BIAS)
+ ######################################
+
+
+
+ def pause_grabbing(self):
+ """When Activity goes into background"""
+ self.save_state()
+ self.stop_sound_device()
+
+ def resume_grabbing(self):
+ """When Activity becomes active after going to background"""
+ self.start_sound_device()
+ self.resume_state()
+
+
+ def stop_grabbing(self):
+ self.stop_sound_device()
+ self.set_handoff_signal(False)
+
+ def on_activity_quit(self):
+ """When Activity quits"""
+ self.set_mic_boost(config.QUIT_MIC_BOOST)
+ self.set_dc_mode(config.QUIT_DC_MODE_ENABLE)
+ self.set_capture_gain(config.QUIT_CAPTURE_GAIN)
+ self.set_bias(config.QUIT_BIAS)
+ self.set_PCM_gain(config.QUIT_PCM)
+ self.stop_sound_device()
+
+
+
+
+
diff --git a/config.py b/config.py
new file mode 100755
index 0000000..5c0e810
--- /dev/null
+++ b/config.py
@@ -0,0 +1,51 @@
+import os
+import os.path
+import tempfile
+from sugar.activity import activity
+
+MEASURE_ROOT = activity.get_bundle_path()
+ICONS_DIR = MEASURE_ROOT + '/icons'
+
+
+#Waveform drawing area dimensions
+WINDOW_W=1200.0
+WINDOW_H=700.0
+
+
+#In milliseconds, the delay interval after which the waveform draw function will be queued"
+REFRESH_TIME = 30
+
+#Multiplied with width and height to set placement of text
+TEXT_X_M = 0.65
+TEXT_Y_M = 0.70
+
+#Maximum number of graphs that can be simultaneously be displayed
+MAX_GRAPHS = 4
+
+#Device settings at start of Activity
+RATE = 48000
+MIC_BOOST = True
+DC_MODE_ENABLE = False
+CAPTURE_GAIN = 50
+BIAS = True
+
+#Interval, in ms, after which audio buffer will be sent to drawing class
+AUDIO_BUFFER_TIMEOUT = 30
+
+#When Activity quits
+QUIT_MIC_BOOST = False
+QUIT_DC_MODE_ENABLE = False
+QUIT_CAPTURE_GAIN = 100
+QUIT_BIAS = True
+QUIT_PCM = 70
+
+#Which context is active on start
+# 1 - sound
+# 2 - sensors
+CONTEXT = 1
+
+#How many maximum screenshots Measure will save while recording in Sound context
+SOUND_MAX_WAVE_LOGS = 10
+
+#To track if one context is logging, other wouldn't also do it simultaneously
+LOGGING_IN_SESSION = False
diff --git a/drawwaveform.py b/drawwaveform.py
new file mode 100755
index 0000000..dcdd55a
--- /dev/null
+++ b/drawwaveform.py
@@ -0,0 +1,411 @@
+#! /usr/bin/python
+import pygst
+pygst.require("0.10")
+import pygtk
+import gtk
+import cairo
+import gobject
+import time
+from struct import unpack
+import pango
+import os
+import audioop
+import math
+from gtk import gdk
+from sugar import profile
+from numpy.oldnumeric import *
+from numpy.fft import *
+
+from gettext import gettext as _
+
+import config #This has all the globals
+
+
+class DrawWaveform(gtk.DrawingArea):
+
+ def __init__(self):
+
+ gtk.DrawingArea.__init__(self)
+
+ self.buffers = []
+ self.str_buffer=''
+ self.buffers_temp=[]
+ self.integer_buffer=[]
+ self.peaks = []
+ self.main_buffers = []
+ self.fftx = []
+
+ self.rms=''
+ self.avg=''
+ self.pp=''
+ self.count=0
+
+ self.param1= config.WINDOW_H/65536.0
+ self.param2= config.WINDOW_H/2.0
+ self.y_mag = 3.0
+ self.g = 1 #Gain (not in dB) introduced by Capture Gain and Mic Boost
+ self._freq_range = 4 #See comment in sound_toolbar.py to see what different ranges are all about
+ self.draw_interval = 10
+ self.num_of_points = 115
+ self.details_iter = 50
+ self.c = 1180
+ self.m = 0.0238
+ self.k = 0.0238
+ self.c2 = 139240 #c squared
+ self.t_x = (int)(config.TEXT_X_M*config.WINDOW_W)
+ self.t_y = (int)(config.TEXT_Y_M*config.WINDOW_H)
+ self.rms = 0
+ self.avg = 0
+ self.Rv = 0
+ self.y_mag_bias_multiplier = 1 #constant to multiply with self.param2 while scaling values
+ self.log_param1 = ""
+ self.log_param2 = ""
+ self.log_param3 = ""
+ self.log_param4 = ""
+ self.log_param5 = ""
+
+ self._BACKGROUND_LINE_THICKNESS = 0.8
+ self._FOREGROUND_LINE_THICKNESS = 6
+
+ self.logging_status = False
+ self.f = None
+ self.stop = False
+ self.fft_show = False
+ self.side_toolbar_copy = None
+
+ self.scaleX = str( 1.04167/self.draw_interval ) + " ms"
+ self.scaleY = ""
+
+
+ self._line_gc = None
+ self._back_surf = None
+ self.pango_context = self.create_pango_context()
+ #self.font_desc = pango.FontDescription('Serif 6')
+ self.expose_event_id = self.connect("expose_event", self._expose)
+
+
+
+ self.pr_time = 0
+ self.MAX_GRAPHS = config.MAX_GRAPHS #Maximum simultaneous graphs
+
+ self.graph_show_state=[]
+ self.Xstart =[]
+ self.Ystart = []
+ self.Xend = []
+ self.Yend = []
+ self.type = []
+ self.color = []
+ self.source = []
+ self.graph_id = []
+
+ for x in range (0, self.MAX_GRAPHS):
+ self.graph_show_state.append(False)
+ self.Xstart.append(0)
+ self.Ystart.append(50)
+ self.Xend.append(1000)
+ self.Yend.append(500)
+ self.type .append(0)
+ self.color.append([65535,0,0])
+ self.source.append(0)
+ self.graph_id.append(x)
+
+ self.graph_show_state[0]=True
+ self.Xstart[0] = 0
+ self.Ystart[0] = 0
+ self.Xend[0] = 1150
+ self.Yend[0] = 750
+ self.type[0] = 0
+ self.color[0] = [65535,0,65535]
+ self.source[0] = 0
+
+ """
+ self.graph_show_state[1]=True
+ self.Xstart[0] = 0
+ self.Ystart[1] = 0
+ self.Xend[0] = 800
+ self.Yend[1] = 600
+ self.type[1] = 0
+ self.color[1] = [0,65535,65535]
+ self.source[1] = 0
+
+ self.graph_show_state[2]=True
+ self.Xstart[2] = 30
+ self.Ystart[2] = 0
+ self.Xend[2] = 300
+ self.Yend[2] = 300
+ self.type[2] = 0
+ self.color[2] = [0,65535,0]
+ self.source[2] = 0
+
+ self.graph_show_state[3]=True
+ self.Xstart[3] = 0
+ self.Ystart[3] = 300
+ self.Xend[3] = 1000
+ self.Yend[3] = 700
+ self.type[3] = 0
+ self.color[3] = [65535,65535,0]
+ self.source[3] = 0
+ """
+
+ self.max_samples = 115
+
+ self.debug_str="start"
+
+ self.context = True
+
+ def new_buffer(self, buf):
+ buf = str(buf)
+ self.str_buffer = buf
+ tmp_val = (self.max_samples - 1)
+ self.integer_buffer = list(unpack( str(int(len(buf))/2)+'h' , buf))
+ if(len(self.main_buffers)>tmp_val):
+ del self.main_buffers[0:(len(self.main_buffers)-tmp_val)]
+ self.main_buffers += self.integer_buffer
+ return True
+
+ def set_context_on(self):
+ self.handler_unblock(self.expose_event_id)
+ self.context = True
+
+ def set_context_off(self):
+ self.context = False
+ self.handler_block(self.expose_event_id)
+
+
+ def get_drawing_interval(self):
+ """Returns the pixel interval horizontally between plots of two consecutive points"""
+ return self.draw_interval
+
+
+ def _init_background(self):
+ if self._back_surf:
+ return
+
+ colmap = self.get_colormap()
+ clr = colmap.alloc_color(0, 65535, 0, False, False)
+ self._line_gc = self.window.new_gc(foreground = clr)
+ self._line_gc.set_line_attributes(self._FOREGROUND_LINE_THICKNESS, gdk.LINE_SOLID,\
+ gdk.CAP_ROUND, gdk.JOIN_BEVEL)
+
+ self._back_surf = gdk.Pixmap(self.window, int(config.WINDOW_W), \
+ int(config.WINDOW_H))
+ cr = self._back_surf.cairo_create()
+
+ #background
+ cr.set_source_rgb(0, 0, 0)
+ cr.rectangle(0, 0, config.WINDOW_W, config.WINDOW_H)
+ cr.fill()
+
+ #grid
+ cr.set_line_width(self._BACKGROUND_LINE_THICKNESS)
+ cr.set_source_rgb(0.2, 0.2, 0.2)
+
+ x = 0
+ y = 0
+
+ for j in range(1, 25):
+ cr.move_to(x, y)
+ cr.rel_line_to(0, config.WINDOW_H)
+ x = x + 50
+
+ cr.set_line_width(self._BACKGROUND_LINE_THICKNESS)
+ x = 0
+ y = 0
+
+ for j in range(1, 17):
+ cr.move_to(x, y)
+ cr.rel_line_to(config.WINDOW_W, 0)
+ y = y + 50
+
+ cr.stroke()
+
+
+ def _expose(self, widget, event):
+ """This function is the "expose" event handler and does all the drawing"""
+
+ #######################Real time drawing###################################
+ if(self.context == True):
+
+ #Draw the background
+ #We could probably make this faster with another pixmap.
+ self._init_background()
+ self.window.draw_drawable(self.get_style().bg_gc[0], self._back_surf, 0, 0, 0, \
+ 0, config.WINDOW_W, config.WINDOW_H)
+
+ #Iterate for each graph
+ for graph_id in self.graph_id:
+ if self.graph_show_state[graph_id] == True:
+ span = self.Xend[graph_id]-self.Xstart[graph_id]
+
+ if self._freq_range == 1:
+ self.draw_interval = 4
+ self.max_samples = span/self.draw_interval
+ else:
+ if span>=700:
+ self.draw_interval = 10
+ elif span<700 and span>=500:
+ self.draw_interval = 7
+ elif span<500 and span>=300:
+ self.draw_interval = 5
+ else:
+ self.draw_interval = 3
+ self.max_samples = span/self.draw_interval
+
+
+ if(len(self.main_buffers)>=self.max_samples):
+ del self.main_buffers[0:(len(self.main_buffers)-(self.max_samples+1))]
+
+ if(self.fft_show==False):
+ self.y_mag_bias_multiplier = 1
+ #Depending upon the X span of the graph, deciding the total number of points to take
+
+
+ else:
+ ###############FFT################
+ Fs = 48000
+ nfft = 65536
+ if self.integer_buffer:
+ self.integer_buffer = self.integer_buffer[0:256]
+ self.fftx = fft(self.integer_buffer, 256,-1)
+ self.fftx = self.fftx[0:self.max_samples]
+ self.main_buffers = [(abs(x) * 0.02) for x in self.fftx]
+ self.y_mag_bias_multiplier=0.1
+ ##################################
+
+
+ #################Getting data######################
+ if self.source[graph_id]==0:
+ self.buffers=self.main_buffers
+ else:
+ pass #write code here that gets data from file
+ ###############################################
+
+ ################Scaling the values###################
+ if config.CONTEXT == 2:
+ self.y_mag = 1
+ self.y_mag_bias_multiplier = 1
+ self.param2= (self.Yend[graph_id]-self.Ystart[graph_id])/2.0
+ self.param1= self.param2/32768.0
+
+ val=[]
+ for i in self.buffers:
+ temp_val_float = (self.param1*i*self.y_mag) + (self.param2*self.y_mag_bias_multiplier)
+ if(temp_val_float>=self.Yend[graph_id]):
+ temp_val_float= self.Yend[graph_id]
+ if(temp_val_float<=self.Ystart[graph_id]):
+ temp_val_float= self.Ystart[graph_id]
+ val.append( config.WINDOW_H - temp_val_float )
+
+ self.peaks=val
+ ################################################
+
+
+
+ ##########The actual drawing of the graph##################
+ #TODO: Improvement : The color setting shouldn't happen in every drawing loop, should happen only once
+ colmap = self.get_colormap()
+ r,g,b = self.get_stroke_color_from_sugar()
+ clr = colmap.alloc_color( r, g, b, False, False)
+ self._line_gc.set_foreground(clr)
+
+ count = self.Xstart[graph_id]
+ lines = []
+ for peak in self.peaks:
+ lines.append((count, peak))
+ count = count + self.draw_interval
+
+ if self.type[graph_id] ==0:
+ self.window.draw_lines(self._line_gc, lines)
+ else:
+ self.window.draw_points(self._line_gc, lines)
+ ############################################################
+
+
+ """
+ ## DISPLAYING FRAMERATE FOR DEBUGGGIN
+ fr = 1.0/( time.time()-self.pr_time)
+ self.pr_time=time.time()
+ layout = pango.Layout(self.pango_context)
+ layout.set_text(str(fr) +self.debug_str)
+ self.window.draw_layout(self.get_style().white_gc, self.t_x, self.t_y, layout)
+ """
+ return True
+
+
+ def set_side_toolbar_reference(self, side_toolbar):
+ self.side_toolbar_copy = side_toolbar
+
+
+ def set_electrical_ui_reference(self, electrical_ui):
+ self.electrical_ui_copy = electrical_ui
+
+ def set_graph_source(self, graph_id, source=0):
+ """Sets from where the graph will get data
+ 0 - uses from audiograb
+ 1 - uses from file"""
+ self.source[graph_id] = source
+
+ def set_graph_params(self, graph_id, Xstart, Ystart, Xend, Yend, type, color):
+ """Sets Xstart, Ystart --> the bottom left co-ordinates
+ Xend, Yend --> the top right co-ordinates
+ type --> 0 for a connected graph, 1 for a dotted graph
+ color --> what color graph to draw"""
+ self.Xstart[graph_id] = Xstart
+ self.Ystart[graph_id] = Ystart
+ self.Xend[graph_id] = Xend
+ self.Yend[graph_id] = Yend
+ self.type[graph_id] = type
+ self.color[graph_id] = color
+
+
+ def get_fft_mode(self):
+ """Returns if FFT is ON (True) or OFF (False)"""
+ return self.fft_show
+
+ def set_fft_mode(self, fft_mode=False):
+ """Sets whether FFT mode is ON (True) or OFF (False)"""
+ self.fft_show = fft_mode
+
+ def set_freq_range(self, freq_range=4):
+ """See sound_toolbar to see what all frequency ranges are"""
+ self._freq_range = freq_range
+
+
+ def get_stroke_color_from_sugar(self):
+ """Returns in (r,g,b) format the stroke color set in the profile on the XO"""
+ color = profile.get_color()
+ stroke = color.get_stroke_color()
+ colorstring = stroke.strip()
+ if colorstring[0] == '#':
+ colorstring = colorstring[1:]
+ r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:]
+ r+="00"
+ g+="00"
+ b+="00"
+ r,g,b = [int(n, 16) for n in (r,g,b)]
+ return (r,g,b)
+
+
+ def get_fill_color_from_sugar(self):
+ """Returns in (r,g,b) format the fill color set in the profile on the XO"""
+ color = profile.get_color()
+ fill = color.get_fill_color()
+ colorstring = fill.strip()
+ if colorstring[0] == '#':
+ colorstring = colorstring[1:]
+ r,g,b = colorstring[:2], colorstring[2:4], colorstring[4:]
+ r+="00"
+ g+="00"
+ b+="00"
+ r,g,b = [int(n, 16) for n in (r,g,b)]
+ return (r,g,b)
+
+
+ def get_mag_params(self):
+ return self.g, self.y_mag
+
+ def set_mag_params(self, g=1.0, y_mag=3.0):
+ self.g = g
+ self.y_mag = y_mag
+
+
diff --git a/graphs.py b/graphs.py
new file mode 100755
index 0000000..9c1efda
--- /dev/null
+++ b/graphs.py
@@ -0,0 +1,45 @@
+"""import gtk
+from matplotlib.toolkits.gtktools import rec2gtk
+import matplotlib.mlab as mlab
+from pylab import figure, show, plot
+from matplotlib.figure import Figure
+from numpy import arange
+from matplotlib.numerix import sin,pi
+from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
+from matplotlib.backends.backend_gtk import NavigationToolbar2GTK as NavigationToolbar
+import gtk
+
+from gettext import gettext as _
+import config #This has all the globals
+
+
+class Graphs(gtk.DrawingArea):
+
+ def __init__(self):
+ gtk.DrawingArea.__init__(self)
+
+ #d = mlab.csv2rec('myfile.csv')
+ #print type(d)
+ """
+ t = arange(0,10,1)
+ s= sin(2*pi*t)
+ plot(t,s)
+ show()
+ """
+
+ fig = Figure(figsize=(5,4), dpi=100)
+ ax = fig.add_subplot(111)
+ t = arange(0.0,3.0,1)
+ s =[1,2,3]
+ s2=[9,8,7]
+ ax.plot(t,s,t, s2)
+ canvas = FigureCanvas(fig) # a gtk.DrawingArea
+ self.vbox1=gtk.VBox()
+ self.vbox1.pack_start(canvas)
+ toolbar = NavigationToolbar(canvas, None)
+ self.vbox1.pack_start(toolbar, False, False)
+
+ self.vbox1.show_all()
+
+ """
+
diff --git a/icons/amp-high.svg b/icons/amp-high.svg
new file mode 100644
index 0000000..ca4b26a
--- /dev/null
+++ b/icons/amp-high.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="amp-high">
+ <path d="M4.973,27.5 c2.83-11.647,5.69-23.295,11.287-23.295c11.193,0,11.193,46.59,22.387,46.59c5.598,0,8.52-11.646,11.381-23.295" display="inline" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-width="3.5"/>
+</g></svg> \ No newline at end of file
diff --git a/icons/amp-low.svg b/icons/amp-low.svg
new file mode 100644
index 0000000..c821f93
--- /dev/null
+++ b/icons/amp-low.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="amp-low">
+ <path d="M4.973,27.5 c2.83-2.148,5.69-4.296,11.287-4.296c11.193,0,11.193,8.592,22.387,8.592c5.598,0,8.52-2.147,11.381-4.296" display="inline" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-width="3.5"/>
+</g></svg> \ No newline at end of file
diff --git a/icons/bias-off.svg b/icons/bias-off.svg
new file mode 100644
index 0000000..839c7b2
--- /dev/null
+++ b/icons/bias-off.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="bias-off">
+ <g id="Bias_On">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25" x1="21.789" x2="8.214" y1="27.5" y2="27.499"/>
+ <polyline fill="none" points="17,23.46 21.789,27.5 17,31.54 " stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/>
+ </g>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" x1="49.5" x2="28.5" y1="27.5" y2="27.5"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/bias-off2.svg b/icons/bias-off2.svg
new file mode 100644
index 0000000..50fe53a
--- /dev/null
+++ b/icons/bias-off2.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 55.125 55"
+ height="55px"
+ version="1.1"
+ viewBox="0 0 55.125 55"
+ width="55.125px"
+ x="0px"
+ xml:space="preserve"
+ y="0px"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="bias-off2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+ id="metadata21"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs19"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 27.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="55.125 : 27.5 : 1"
+ inkscape:persp3d-origin="27.5625 : 18.333333 : 1"
+ id="perspective23" /></defs><sodipodi:namedview
+ inkscape:window-height="719"
+ inkscape:window-width="641"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="8.9818182"
+ inkscape:cx="27.5625"
+ inkscape:cy="27.5"
+ inkscape:window-x="-4"
+ inkscape:window-y="25"
+ inkscape:current-layer="svg2" /><g
+ display="block"
+ id="bias-off"
+ style="fill:#ffffff;fill-opacity:1">
+ <g
+ id="Bias_On"
+ style="fill:#ffffff;fill-opacity:1">
+ <g
+ id="g6"
+ style="fill:#ffffff;fill-opacity:1">
+ <path
+ d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z"
+ fill="#808284"
+ id="path8"
+ style="fill:#ffffff;fill-opacity:1" />
+ </g>
+ <g
+ id="g10"
+ style="fill:#ffffff;fill-opacity:1">
+
+ <line
+ fill="none"
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ x1="21.789"
+ x2="8.214"
+ y1="27.5"
+ y2="27.499"
+ id="line12"
+ style="fill:#ffffff;fill-opacity:1" />
+ <polyline
+ fill="none"
+ points="17,23.46 21.789,27.5 17,31.54 "
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ id="polyline14"
+ style="fill:#ffffff;fill-opacity:1" />
+ </g>
+
+ <line
+ fill="none"
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="3.5"
+ x1="49.5"
+ x2="28.5"
+ y1="27.5"
+ y2="27.5"
+ id="line16"
+ style="fill:#ffffff;fill-opacity:1" />
+ </g>
+</g><path
+ style="fill:#808284;fill-opacity:1"
+ d="M 16.308996,32.273747 C 15.890077,31.854828 15.868987,31.305061 16.254268,30.847179 C 16.403161,30.670228 17.03075,30.102747 17.648909,29.586107 L 18.772835,28.646761 L 13.249032,28.591093 L 7.725228,28.535425 L 7.4566187,28.223043 C 7.0944526,27.801862 7.1019801,27.263045 7.4762428,26.818259 L 7.7644818,26.475709 L 13.21005,26.475709 C 16.412886,26.475709 18.655617,26.433922 18.655617,26.374247 C 18.655617,26.318444 18.167131,25.861131 17.570091,25.357999 C 16.973052,24.854866 16.372086,24.311835 16.234612,24.151263 C 15.928113,23.793265 15.902491,23.149067 16.181069,22.805036 C 16.452836,22.469419 17.065697,22.349044 17.47272,22.551335 C 17.648797,22.638846 18.90947,23.656008 20.274218,24.811697 C 22.973453,27.09745 23.070806,27.222449 22.722846,27.955721 C 22.62443,28.163119 22.408034,28.433379 22.241968,28.556295 C 22.075904,28.679213 21.038209,29.545063 19.935982,30.480407 C 18.833755,31.415749 17.78163,32.274931 17.597925,32.389695 C 17.110653,32.694105 16.691664,32.656414 16.308997,32.273746 L 16.308996,32.273747 z"
+ id="path2396" /><path
+ style="fill:#ffffff;fill-opacity:1"
+ d="M 27.663095,28.951773 C 26.811887,28.434587 26.588397,27.25292 27.198485,26.495227 C 27.379701,26.270169 27.698565,26.026234 27.907075,25.953146 C 28.190636,25.853753 31.00806,25.819852 39.085779,25.818643 C 49.060043,25.817149 49.912346,25.831559 50.238293,26.007198 C 50.79599,26.307714 51.088723,26.764824 51.136191,27.409286 C 51.185668,28.081033 50.931742,28.576845 50.35957,28.925702 C 50.00365,29.142709 49.785858,29.146755 38.974443,29.137179 C 29.143527,29.12847 27.920931,29.10843 27.663094,28.951772 L 27.663095,28.951773 z"
+ id="path2398" /><path
+ style="fill:#808284;fill-opacity:1"
+ d="M 27.629859,28.93382 C 26.794413,28.383055 26.593398,27.246708 27.198485,26.495227 C 27.379701,26.270169 27.698565,26.026234 27.907075,25.953146 C 28.190636,25.853753 31.00806,25.819852 39.085779,25.818643 C 49.060043,25.817149 49.912346,25.831559 50.238293,26.007198 C 50.79599,26.307714 51.088723,26.764824 51.136191,27.409286 C 51.185668,28.081033 50.931742,28.576845 50.35957,28.925702 C 50.003934,29.142536 49.777229,29.146935 38.974443,29.146623 C 28.315422,29.146315 27.941554,29.139304 27.629861,28.933821 L 27.629859,28.93382 z"
+ id="path2400" /></svg> \ No newline at end of file
diff --git a/icons/bias-on.svg b/icons/bias-on.svg
new file mode 100644
index 0000000..14ca879
--- /dev/null
+++ b/icons/bias-on.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="bias-on">
+ <g display="inline" id="Bias_Off">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <g>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25" x1="21.789" x2="8.214" y1="27.5" y2="27.499"/>
+ <polyline fill="none" points="17,23.46 21.789,27.5 17,31.54 " stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25"/>
+ </g>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5" x1="49.5" x2="28.5" y1="13" y2="13"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/bias-on2.svg b/icons/bias-on2.svg
new file mode 100644
index 0000000..05656f9
--- /dev/null
+++ b/icons/bias-on2.svg
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 55.125 55"
+ height="55px"
+ version="1.1"
+ viewBox="0 0 55.125 55"
+ width="55.125px"
+ x="0px"
+ xml:space="preserve"
+ y="0px"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="bias-on2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+ id="metadata21"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs19"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 27.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="55.125 : 27.5 : 1"
+ inkscape:persp3d-origin="27.5625 : 18.333333 : 1"
+ id="perspective23" /></defs><sodipodi:namedview
+ inkscape:window-height="719"
+ inkscape:window-width="641"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="8.9818182"
+ inkscape:cx="27.5625"
+ inkscape:cy="27.5"
+ inkscape:window-x="-4"
+ inkscape:window-y="25"
+ inkscape:current-layer="svg2" /><g
+ display="block"
+ id="bias-on"
+ style="fill:#ffffff">
+ <g
+ display="inline"
+ id="Bias_Off"
+ style="fill:#ffffff">
+ <g
+ id="g6"
+ style="fill:#ffffff">
+ <path
+ d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z"
+ fill="#808284"
+ id="path8"
+ style="fill:#ffffff" />
+ </g>
+ <g
+ id="g10"
+ style="fill:#ffffff">
+
+ <line
+ fill="none"
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ x1="21.789"
+ x2="8.214"
+ y1="27.5"
+ y2="27.499"
+ id="line12"
+ style="fill:#ffffff" />
+ <polyline
+ fill="none"
+ points="17,23.46 21.789,27.5 17,31.54 "
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2.25"
+ id="polyline14"
+ style="fill:#ffffff" />
+ </g>
+
+ <line
+ fill="none"
+ stroke="#FFFFFF"
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="3.5"
+ x1="49.5"
+ x2="28.5"
+ y1="13"
+ y2="13"
+ id="line16"
+ style="fill:#ffffff" />
+ </g>
+</g><path
+ style="fill:#808284;fill-opacity:1"
+ d="M 16.308996,32.273747 C 15.890077,31.854828 15.868987,31.305061 16.254268,30.847179 C 16.403161,30.670228 17.03075,30.102747 17.648909,29.586107 L 18.772835,28.646761 L 13.249032,28.591093 L 7.725228,28.535425 L 7.4566187,28.223043 C 7.0944526,27.801862 7.1019801,27.263045 7.4762428,26.818259 L 7.7644818,26.475709 L 13.21005,26.475709 C 16.412886,26.475709 18.655617,26.433922 18.655617,26.374247 C 18.655617,26.318444 18.167131,25.861131 17.570091,25.357999 C 16.973052,24.854866 16.372086,24.311835 16.234612,24.151263 C 15.928113,23.793265 15.902491,23.149067 16.181069,22.805036 C 16.452836,22.469419 17.065697,22.349044 17.47272,22.551335 C 17.648797,22.638846 18.90947,23.656008 20.274218,24.811697 C 22.973453,27.09745 23.070806,27.222449 22.722846,27.955721 C 22.62443,28.163119 22.408034,28.433379 22.241968,28.556295 C 22.075904,28.679213 21.038209,29.545063 19.935982,30.480407 C 18.833755,31.415749 17.78163,32.274931 17.597925,32.389695 C 17.110653,32.694105 16.691664,32.656414 16.308997,32.273746 L 16.308996,32.273747 z"
+ id="path2396" /><path
+ style="fill:#808284;fill-opacity:1"
+ d="M 27.672705,14.423583 C 27.071341,14.014299 26.850877,13.632402 26.860174,13.016087 C 26.870373,12.340124 27.134125,11.873393 27.678966,11.567175 C 28.092247,11.334897 28.135651,11.334008 39.056639,11.334008 L 50.019448,11.334008 L 50.386441,11.584514 C 51.164389,12.115532 51.395091,13.171517 50.894197,13.908648 C 50.34112,14.722579 51.097986,14.674089 38.946247,14.674089 L 28.040775,14.674089 L 27.672705,14.423583 z"
+ id="path2398" /></svg> \ No newline at end of file
diff --git a/icons/current-ac.svg b/icons/current-ac.svg
new file mode 100644
index 0000000..d3adb71
--- /dev/null
+++ b/icons/current-ac.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="current-dc">
+ <g id="AC_1_">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <text fill="#FFFFFF" font-family="'BitstreamVeraSansMono-Roman'" font-size="19" transform="matrix(1 0 0 1 16.1338 48.7461)">AC</text>
+ <path d="M5,25.167c7.334,0,7.5-16.333,15-16.333s7.5,16.333,15,16.333 S42.834,8.834,50,8.834" fill="none" stroke="#FFFFFF" stroke-width="3.5"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/current-dc.svg b/icons/current-dc.svg
new file mode 100644
index 0000000..0078b77
--- /dev/null
+++ b/icons/current-dc.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="current-ac">
+ <g id="DC">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <text fill="#FFFFFF" font-family="'BitstreamVeraSansMono-Roman'" font-size="19" transform="matrix(1 0 0 1 16.1338 48.7461)">DC</text>
+ <line fill="none" stroke="#E7E7E8" stroke-width="3.5" x1="5" x2="50" y1="10" y2="10"/>
+ <line fill="none" stroke="#E7E7E8" stroke-dasharray="4" stroke-width="3.5" x1="5" x2="50" y1="25" y2="25"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/domain-freq.svg b/icons/domain-freq.svg
new file mode 100644
index 0000000..038807e
--- /dev/null
+++ b/icons/domain-freq.svg
@@ -0,0 +1,10 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="domain-freq">
+ <g id="Freq_Domain_1_">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <path d="M51,46.506c0,0-1.982,0-7.779,0S40.018,10,35.289,10 c-5.686,0-3.891,36.584-9.84,36.584S21.31,20.32,17.898,20.32c-3.428,0-2.877,26.033-8.695,26.033H6" fill="none" stroke="#FFFFFF" stroke-width="3.5"/>
+ <line fill="none" stroke="#C6C8CA" stroke-linecap="round" stroke-width="2.25" x1="6" x2="51" y1="50" y2="50"/>
+ <line fill="none" stroke="#C6C8CA" stroke-linecap="round" stroke-width="2.25" x1="6" x2="6" y1="5" y2="50"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/domain-freq2.svg b/icons/domain-freq2.svg
new file mode 100644
index 0000000..c13310d
--- /dev/null
+++ b/icons/domain-freq2.svg
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 55.125 55"
+ height="55px"
+ version="1.1"
+ viewBox="0 0 55.125 55"
+ width="55.125px"
+ x="0px"
+ xml:space="preserve"
+ y="0px"
+ id="svg2456"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="domain-freq2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><metadata
+ id="metadata2473"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs2471"><inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 27.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="55.125 : 27.5 : 1"
+ inkscape:persp3d-origin="27.5625 : 18.333333 : 1"
+ id="perspective2475" /></defs><sodipodi:namedview
+ inkscape:window-height="719"
+ inkscape:window-width="641"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="8.9818182"
+ inkscape:cx="27.5625"
+ inkscape:cy="27.5"
+ inkscape:window-x="-4"
+ inkscape:window-y="25"
+ inkscape:current-layer="svg2456" /><g
+ display="block"
+ id="domain-freq"
+ style="fill:#ffffff">
+ <g
+ id="Freq_Domain_1_"
+ style="fill:#ffffff">
+ <g
+ id="g2460"
+ style="fill:#ffffff">
+ <path
+ d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z"
+ fill="#808284"
+ id="path2462"
+ style="fill:#ffffff" />
+ </g>
+ <path
+ d="M51,46.506c0,0-1.982,0-7.779,0S40.018,10,35.289,10 c-5.686,0-3.891,36.584-9.84,36.584S21.31,20.32,17.898,20.32c-3.428,0-2.877,26.033-8.695,26.033H6"
+ fill="none"
+ stroke="#FFFFFF"
+ stroke-width="3.5"
+ id="path2464"
+ style="fill:#ffffff" />
+ <line
+ fill="none"
+ stroke="#C6C8CA"
+ stroke-linecap="round"
+ stroke-width="2.25"
+ x1="6"
+ x2="51"
+ y1="50"
+ y2="50"
+ id="line2466"
+ style="fill:#ffffff" />
+ <line
+ fill="none"
+ stroke="#C6C8CA"
+ stroke-linecap="round"
+ stroke-width="2.25"
+ x1="6"
+ x2="6"
+ y1="5"
+ y2="50"
+ id="line2468"
+ style="fill:#ffffff" />
+ </g>
+</g><path
+ style="fill:#808284;fill-opacity:1"
+ d="M 24.667641,48.201919 C 23.547632,47.963558 22.346882,46.91454 21.639466,45.556396 C 20.306456,42.99719 19.6797,39.799612 18.7107,30.614417 C 18.351477,27.209351 18.092088,25.147219 17.91816,24.313803 C 17.868518,24.075928 17.826462,24.031652 17.7611,24.148448 C 17.605646,24.426228 17.131829,27.066996 16.484549,31.263158 C 16.139779,33.498229 15.707857,36.128543 15.524725,37.1083 C 14.337409,43.460449 12.990935,46.485912 10.841351,47.631628 C 10.172013,47.988381 10.082328,48.005785 8.6656212,48.053833 L 7.1880061,48.10395 L 7.1880061,46.363712 L 7.1880061,44.623482 L 8.3006694,44.623482 L 9.4133306,44.623482 L 9.7625427,44.150304 C 10.267894,43.465563 10.688769,42.49167 11.128669,40.989129 C 11.837218,38.568983 12.235525,36.496975 13.20164,30.205466 C 14.348584,22.736363 14.94527,20.578411 16.20205,19.35427 C 17.435111,18.153231 19.227443,18.474851 20.15892,20.064296 C 20.996955,21.494295 21.447287,23.92082 22.164967,30.873482 C 22.858854,37.595664 23.448994,41.028323 24.277999,43.164374 C 24.612719,44.026829 25.112002,44.790486 25.341157,44.790486 C 25.56932,44.790486 26.279577,43.306909 26.61441,42.130921 C 27.32105,39.64909 27.75751,36.824757 28.732601,28.424089 C 29.81795,19.0735 30.125491,16.998991 30.861774,14.061741 C 31.771734,10.431643 32.90559,8.7464073 34.680961,8.3853323 C 35.657271,8.1867712 36.447479,8.4289794 37.181894,9.1518976 C 38.859966,10.803705 39.482652,14.02501 40.369205,25.640688 C 40.811248,31.432391 41.099994,34.788798 41.312999,36.611554 C 41.78214,40.626134 42.465466,43.551445 43.162887,44.530884 L 43.387377,44.846154 L 47.165226,44.846154 L 50.943067,44.846154 L 50.943067,46.522209 L 50.943067,48.198256 L 46.628796,48.164415 L 42.314524,48.130567 L 41.766502,47.808457 C 40.494475,47.060816 39.630529,45.583568 38.98125,43.046013 C 38.157928,39.828251 37.743711,36.240061 36.914149,25.139676 C 36.670096,21.873998 36.312482,18.043901 36.130393,16.745535 C 35.837171,14.654747 35.300722,12.224696 35.132389,12.224696 C 34.821408,12.224696 33.965857,15.329835 33.475876,18.236842 C 33.074509,20.618103 32.978283,21.366755 32.073456,29.147773 C 31.296086,35.83272 31.044795,37.689778 30.627146,39.836032 C 30.06541,42.722733 29.674668,44.066807 28.976431,45.51417 C 28.473552,46.556578 27.493186,47.657272 26.764817,47.99723 C 26.291466,48.218164 25.230531,48.32171 24.66764,48.201916 L 24.667641,48.201919 z"
+ id="path2477" /></svg> \ No newline at end of file
diff --git a/icons/domain-time.svg b/icons/domain-time.svg
new file mode 100644
index 0000000..d469a02
--- /dev/null
+++ b/icons/domain-time.svg
@@ -0,0 +1,9 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="domain-time">
+ <g id="Time_Domain">
+ <g>
+ <path d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z" fill="#808284"/>
+ </g>
+ <line fill="none" stroke="#C6C8CA" stroke-dasharray="5" stroke-width="2.25" x1="6.012" x2="51.012" y1="27.5" y2="27.5"/>
+ <path d="M9.066,27.5 c2.32-6.917,4.666-13.834,9.255-13.834c9.179,0,9.179,27.668,18.358,27.668c4.59,0,6.986-6.917,9.332-13.834" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-width="3.5"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/domain-time2.svg b/icons/domain-time2.svg
new file mode 100644
index 0000000..1267089
--- /dev/null
+++ b/icons/domain-time2.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ enable-background="new 0 0 55.125 55"
+ height="55px"
+ version="1.1"
+ viewBox="0 0 55.125 55"
+ width="55.125px"
+ x="0px"
+ xml:space="preserve"
+ y="0px"
+ id="svg2454"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="domain-time2.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"><sodipodi:namedview
+ inkscape:window-height="719"
+ inkscape:window-width="641"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10.0"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ showgrid="false"
+ inkscape:zoom="8.9818182"
+ inkscape:cx="27.5625"
+ inkscape:cy="27.5"
+ inkscape:window-x="110"
+ inkscape:window-y="26"
+ inkscape:current-layer="svg2454" /><metadata
+ id="metadata2469"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs2467"><inkscape:perspective
+ id="perspective2471"
+ inkscape:persp3d-origin="27.5625 : 18.333333 : 1"
+ inkscape:vp_z="55.125 : 27.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 27.5 : 1"
+ sodipodi:type="inkscape:persp3d" /></defs><g
+ id="domain-time"
+ display="block"
+ style="fill:#ffffff">
+ <g
+ id="Time_Domain"
+ style="fill:#ffffff">
+ <g
+ id="g2458"
+ style="fill:#ffffff">
+ <path
+ id="path2460"
+ fill="#808284"
+ d="M55,45c0,5.5-4.5,10-10,10H10C4.5,55,0,50.5,0,45V10C0,4.5,4.5,0,10,0h35c5.5,0,10,4.5,10,10V45z"
+ style="fill:#ffffff" />
+ </g>
+ <line
+ id="line2462"
+ y2="27.5"
+ y1="27.5"
+ x2="51.012"
+ x1="6.012"
+ stroke-width="2.25"
+ stroke-dasharray="5"
+ stroke="#C6C8CA"
+ fill="none"
+ style="fill:#ffffff" />
+ <path
+ id="path2464"
+ stroke-width="3.5"
+ stroke-linecap="round"
+ stroke="#FFFFFF"
+ fill="none"
+ d="M9.066,27.5 c2.32-6.917,4.666-13.834,9.255-13.834c9.179,0,9.179,27.668,18.358,27.668c4.59,0,6.986-6.917,9.332-13.834"
+ style="fill:#ffffff" />
+ </g>
+</g><path
+ style="fill:#808284;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+ d="M 35.801366,42.955202 C 33.876716,42.684617 32.03624,41.34428 30.561138,39.138979 C 29.095685,36.948105 28.042219,34.439344 25.781279,27.756073 C 23.352567,20.576869 22.217878,18.110491 20.59885,16.491464 C 19.214684,15.107298 17.631149,15.046197 16.197202,16.321629 C 14.742961,17.615109 13.108614,20.922996 11.301732,26.229966 C 10.920349,27.350122 10.506695,28.395793 10.382501,28.55368 C 9.4972813,29.679052 7.5733646,29.131677 7.4373108,27.715741 C 7.3794951,27.114026 7.5021785,26.68653 8.6455217,23.505693 C 10.456735,18.466811 11.801966,15.935644 13.636184,14.115353 C 15.125547,12.637298 16.534002,12.002024 18.321609,12.002024 C 20.079913,12.002024 21.51572,12.639601 22.956338,14.060098 C 25.04042,16.115073 26.418988,18.98041 28.998994,26.619703 C 31.550972,34.176007 32.665231,36.654683 34.275472,38.357276 C 35.354887,39.498597 36.392521,39.841685 37.576033,39.448585 C 38.29967,39.208231 39.348032,38.256092 40.057651,37.194735 C 41.218411,35.458616 42.712852,32.005894 44.032124,28.012197 C 44.453183,26.737564 44.744458,26.265526 45.268899,26.007878 C 46.016869,25.640415 46.745162,25.807336 47.306953,26.474987 C 47.900667,27.18057 47.854901,27.48634 46.655307,30.829005 C 44.692289,36.298955 43.251377,39.059402 41.414299,40.869558 C 39.73203,42.527168 37.81734,43.238629 35.801366,42.955204 L 35.801366,42.955202 z"
+ id="path2493" /></svg> \ No newline at end of file
diff --git a/icons/freq-high.svg b/icons/freq-high.svg
new file mode 100644
index 0000000..654511a
--- /dev/null
+++ b/icons/freq-high.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="freq-high">
+ <path d="M10.913,27.5 c0.694-5.98,1.396-11.961,2.77-11.961c2.748,0,2.748,23.922,5.496,23.922c1.373,0,2.098-5.973,2.793-11.961 c0.693-5.98,1.396-11.961,2.77-11.961c2.748,0,2.748,23.922,5.494,23.922c1.375,0,2.098-5.974,2.793-11.961 c0.695-5.98,1.396-11.961,2.771-11.961c2.746,0,2.746,23.922,5.494,23.922c1.373,0,2.092-5.98,2.793-11.961" display="inline" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-width="3.5"/>
+</g></svg> \ No newline at end of file
diff --git a/icons/freq-low.svg b/icons/freq-low.svg
new file mode 100644
index 0000000..bef3b19
--- /dev/null
+++ b/icons/freq-low.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="freq-low">
+ <path d="M11.527,27.5 c2.006-5.98,4.035-11.961,8.003-11.961c7.937,0,7.937,23.922,15.874,23.922c3.969,0,6.041-5.98,8.068-11.961" fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-width="3.5"/>
+</g></svg> \ No newline at end of file
diff --git a/icons/sample_rate.svg b/icons/sample_rate.svg
new file mode 100644
index 0000000..0bf48a8
--- /dev/null
+++ b/icons/sample_rate.svg
@@ -0,0 +1,19 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="sample_x5F_rate">
+ <g>
+ <g>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25" x1="32.562" x2="20.562" y1="38.258" y2="38.258"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25" x1="32.562" x2="32.562" y1="36.258" y2="40.234"/>
+
+ <line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="2.25" x1="20.562" x2="20.562" y1="36.258" y2="40.234"/>
+ </g>
+ <line fill="none" stroke="#C6C8CA" stroke-width="2.25" x1="9" x2="21" y1="28.266" y2="22.266"/>
+ <line fill="none" stroke="#C6C8CA" stroke-width="2.25" x1="21" x2="33" y1="22.266" y2="25.266"/>
+ <line fill="none" stroke="#C6C8CA" stroke-width="2.25" x1="33" x2="46" y1="25.266" y2="18.266"/>
+ <circle cx="9" cy="28.266" fill="#FFFFFF" r="3.5"/>
+ <circle cx="21" cy="22.266" fill="#FFFFFF" r="3.5"/>
+ <circle cx="33" cy="25.266" fill="#FFFFFF" r="3.5"/>
+ <circle cx="46" cy="18.266" fill="#FFFFFF" r="3.5"/>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/icons/view-details.svg b/icons/view-details.svg
new file mode 100644
index 0000000..719047b
--- /dev/null
+++ b/icons/view-details.svg
@@ -0,0 +1,17 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+]><svg enable-background="new 0 0 55.125 55" height="55px" version="1.1" viewBox="0 0 55.125 55" width="55.125px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="view-details">
+ <g>
+ <g id="zoom-in_2_">
+ <g>
+ <path d="M5.048,25.005c0,10.937,8.86,19.807,19.804,19.807 c10.927,0,19.791-8.87,19.791-19.807c0-10.932-8.863-19.797-19.791-19.797C13.908,5.208,5.048,14.073,5.048,25.005z" fill="none" stroke="&fill_color;" stroke-width="4"/>
+ <line fill="none" stroke="&fill_color;" stroke-width="4" x1="38.851" x2="52.338" y1="39.007" y2="52.495"/>
+ </g>
+ </g>
+ <g id="wave_cutout">
+ <path d="M37.761,29.848c-0.975,0.041-1.94-0.624-2.305-1.246c-0.408-0.62-0.555-1.178-0.698-1.686 c-0.172-0.733-0.355-1.399-0.502-1.757c-0.084,0.301-0.17,0.712-0.233,1.178c-0.232,1.571-0.311,3.736-0.669,5.673 c-0.264,1.294-0.566,2.554-1.582,3.631c-0.576,0.609-1.518,1.044-2.453,1.025c-0.825,0.013-1.645-0.355-2.176-0.86 c-0.547-0.503-0.886-1.09-1.156-1.703c-0.529-1.229-0.797-2.657-1.015-4.23c-0.418-3.13-0.548-6.857-0.958-9.611 c-0.135-1.105-0.392-2.052-0.611-2.641c-0.222,0.661-0.434,1.688-0.596,2.87c-0.387,2.727-0.582,6.294-0.998,9.304 c-0.301,2.028-0.607,3.769-1.443,5.192c-0.449,0.788-1.411,1.687-2.711,1.68c-0.037,0.002-0.074,0.002-0.111,0.002 c-1.281,0-2.495-0.717-3.097-1.594c-0.651-0.89-0.935-1.812-1.217-2.702c-0.525-1.8-1.011-3.438-2.024-4.3 c-0.316-0.273-0.702-0.52-1.22-0.708c1.133,7.199,7.344,12.714,14.865,12.714c6.764,0,12.486-4.467,14.387-10.612 C38.784,29.724,38.255,29.888,37.761,29.848z" fill="&fill_color;"/>
+ <path d="M14.619,26.674c1.269,1.804,1.637,3.766,2.078,5.058c0.27,0.881,0.589,1.347,0.671,1.373 c0.013,0.006,0.021,0.013,0.031,0.019c0.044-0.077,0.098-0.18,0.15-0.307c0.272-0.62,0.54-1.763,0.737-3.111 c0.408-2.717,0.605-6.277,0.997-9.278c0.282-2.021,0.564-3.746,1.343-5.161c0.41-0.774,1.331-1.724,2.663-1.724 c0.799-0.012,1.596,0.344,2.115,0.83c0.531,0.484,0.86,1.048,1.124,1.635c0.513,1.174,0.776,2.529,0.991,4.034 c0.412,2.99,0.543,6.574,0.92,9.355c0.213,1.758,0.627,3.208,0.935,3.664c0.146-0.216,0.357-0.764,0.497-1.48 c0.314-1.495,0.407-3.616,0.65-5.48c0.191-1.258,0.342-2.399,1.098-3.514c0.414-0.634,1.343-1.262,2.327-1.233 c0.884-0.012,1.777,0.303,2.391,0.838c0.62,0.527,0.96,1.158,1.19,1.72c0.176,0.449,0.304,0.887,0.406,1.278 c0.311-0.522,0.779-1.091,1.507-1.515c0.122-0.072,0.26-0.125,0.39-0.187c-0.761-7.606-7.178-13.545-14.98-13.545 c-7.886,0-14.341,6.054-15.002,13.763C12.043,24.148,13.66,25.275,14.619,26.674z" fill="&fill_color;"/>
+ </g>
+ </g>
+</g></svg> \ No newline at end of file
diff --git a/journal.py b/journal.py
new file mode 100755
index 0000000..c02da74
--- /dev/null
+++ b/journal.py
@@ -0,0 +1,385 @@
+#! /usr/bin/python
+#
+# Author: Arjun Sarwal arjun@laptop.org
+# Copyright (C) 2007, OLPC
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+"""
+journal.py
+start_new_session(user="", Xscale=0, Yscale=0) or continue_existing_session(session_id_to_continue=-1):
+must be called before every logging session
+for logging value by value, use write_value(value=0),for logging a whole set of values into one session at one time,
+use write_record(value_set=[])
+Note: session_id's are unique within one instance of an Activity and are not re-assigned even if one or more logging sessions are deleted
+"""
+
+import csv
+import os
+import gtk
+import dbus
+import tempfile
+import time
+from os import environ
+from os.path import join
+from numpy import array
+from gettext import gettext as _
+
+from sugar.datastore import datastore
+from sugar import profile
+
+class JournalInteraction():
+ def __init__(self, file_path, existing):
+ """_jobject is the Journal object
+ exiting denotes if a file exists with that journal object (resumed from journal)
+ or not (started afresh)"""
+ self.filepath= file_path
+ #self.filepath = _jobject.file_path
+ self.existing = existing #Denotes if associated journal file exists or not
+ self.session_id = 0
+ self.num_rows=0
+ self.logginginterval_status = ' '
+ self.writer1 = None
+ self.writer2 = None
+ self.making_row = False
+ self.temp_buffer = []
+ self.append_existing=False
+ self._stopped = True
+ self.session_id_to_continue=0
+
+ self.jobject = None
+
+ self.user=""
+ self.Xscale = 0
+ self.Yscale = 0
+
+ if self.existing==True:
+ self.set_max_session_id()
+ self.set_number_of_rows()
+
+ print "$$journal.py: This is the file I will work on", self.filepath
+
+ def __del__(self):
+ pass
+
+ def on_quit(self):
+ pass
+
+
+ def set_max_session_id(self):
+ """Sets the existing maximum session_id if the file already exists"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ max = 0
+ for row in reader:
+ if int(row[0])>max:
+ max= int(row[0])
+ self.session_id=max
+
+ def set_number_of_rows(self):
+ """Sets the number of rows an existing file has"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ for row in reader:
+ self.num_rows+=1
+
+
+
+ def set_session_params(self, user="", Xscale=0, Yscale=0):
+ self.user = user
+ self.Xscale = Xscale
+ self.Yscale = Yscale
+
+
+ def start_new_session(self, user="", Xscale=0, Yscale=0, logginginterval_status=' ' ):
+ """This needs to be called before starting any logging session"""
+ self.user = user
+ self.Xscale = Xscale
+ self.Yscale = Yscale
+ self.logginginterval_status = logginginterval_status
+ self.session_id+=1
+ self.num_rows+=1
+ self.append_existing=False
+ self.making_row=False
+ print "$$journal.py: a new session has been started and the session_id is", self.session_id
+ return self.session_id
+
+ def continue_existing_session(self, session_id_to_continue=-1):
+ """This needs to be called before attempting to continue any logging session"""
+ self.append_existing=True
+ self.session_id_to_continue=session_id_to_continue
+ self.making_row=True
+
+ def write_value(self, value=0):
+ """Append the value passed to temp_buffer if a logging session is started
+ and continuted If a previous logging session is to be continued upon, read
+ the corresponding row from the file and continue to append it and then
+ rewrite the whole row"""
+ if self.append_existing==True:
+ self.apppend_session(self.session_id_to_continue)
+ self.append_existing=False
+
+ if self.making_row==False:
+ # self.write_session_params()
+ self.temp_buffer.append(value)
+ self.making_row = True
+ else:
+ self.temp_buffer.append(value)
+ self._stopped = False
+ print "$$Journal.py: I just wrote this value", value
+
+
+ def get_record(self, session_id=0):
+ """Return the list of values recorded in one logging session specified by session_id"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ for row in reader:
+ if int(row[0])==session_id:
+ temp =row
+ for i in range(0,len(temp)):
+ if i!=1:
+ temp[i]=int(temp[i])
+ return temp
+
+
+ def get_number_of_records(self):
+ """Returns the of records"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ count=0
+ for row in reader:
+ count+=1
+ return count
+
+
+ def stop_session(self):
+ """Write the temp_buffer onto a file"""
+ if self._stopped == False:
+ if self.existing==True:
+ writer1 = csv.writer(open(self.filepath, "ab"))
+ else:
+ writer1 = csv.writer(open(self.filepath, "wb"))
+ self.existing = True
+ for datum in self.temp_buffer:
+ writer1.writerow( [ datum ] )
+ del writer1
+ self.temp_buffer = []
+ self.making_row = False
+ self.append_existing = False
+ #print "$$journal.py: session stopped and the csv writer was", writer1
+ try:
+ self.jobject = datastore.create()
+ try:
+ self.jobject.metadata['title'] = 'Measure Activity log, ' + str(self.logginginterval_status)
+ self.jobject.metadata['keep'] = '0'
+ self.jobject.metadata['buddies'] = ''
+ self.jobject.metadata['preview'] = ''
+ self.jobject.metadata['icon-color'] = profile.get_color().to_string()
+ self.jobject.metadata['mime_type'] = 'text/csv'
+ self.jobject.file_path = self.filepath
+ datastore.write(self.jobject)
+ finally:
+ pass
+ finally:
+ print "$$$ in outermost finally!!"
+ self._stopped = True
+
+
+ def get_number_of_cols(self):
+ """Returns the maximum number of columns amongst all the data"""
+ max = 0
+ reader = csv.reader(open(self.filepath, "rb"))
+ for row in reader:
+ if len(row)>max:
+ max=len(row)
+ return max
+
+
+ def write_record(self, values=[]):
+ """Write a complete row specified by values
+ If file doesn't exist, open a new file and write to it"""
+ # self.write_session_params()
+ self.temp_buffer+=values
+ self.stop_session()
+ self._stopped = False
+ print "$$journal.py: Wrote record", values
+
+ def write_session_params(self):
+ """Write the session parameters to temp_buffers"""
+ self.num_rows+=1
+ self.temp_buffer.append(_('Session: ' + str(self.session_id)))
+ self.temp_buffer.append(_('User: ' + str(self.user)))
+ self.temp_buffer.append(_('Interval: ' + str(self.logginginterval_status)))
+ ##TODO: Probably need to add a field for timing interval
+ #self.temp_buffer.append(self.Xscale)
+ #self.temp_buffer.append(self.Yscale)
+
+
+ def get_session_params(self, session_id=-1):
+ """TODO write this function"""
+ pass
+
+ def find_record(self, session_id=-1):
+ """Returns the index 0 to N-1 of the record
+ session_id may be shifted around due to deletion and editing
+ returns -1 i it doesn't find it"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ found=0
+ for i in range(0, self.num_rows):
+ temp = reader.next()
+ if int(temp[0])==session_id:
+ return found
+ else:
+ found+=1
+ return -1
+
+ def append_session(self, session_id=-1):
+ """Deletes that record from the file and returns the existing
+ data in self.temp_buffer so that further recording can be done"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ data_new = []
+
+ #####Copy all data except row to be deleted, to a temporary buffer
+ for row in reader:
+ if int(row[0])!=session_id:
+ data_new.append(row)
+ else:
+ self.temp_buffer=row
+
+ ##Write the temporary buffer to the file again
+ writer = csv.writer(open(self.filepath, "wb"))
+ for i in range(0, len(data_new)):
+ writer.writerow(data_new[i])
+
+ self.making_row= True
+
+ def delete_record(self, session_id=-1):
+ """Delete the record identified by its session_id"""
+ reader = csv.reader(open(self.filepath, "rb"))
+ data_new = []
+ #found = -1
+ ##Copy all data except row to be deleted, to a temporary buffer
+ for row in reader:
+ if int(row[0])!=session_id:
+ data_new.append(row)
+ #print row
+ else:
+ pass
+ #if found==-1:
+ # return found
+ #print data_new[5]
+ ####Write the temporary buffer to the file again
+ self.num_rows=len(data_new)
+ writer1 = csv.writer(open(self.filepath, "w"))
+ for i in range(0, len(data_new)):
+ writer1.writerow(data_new[i])
+
+
+ def get_existing_sessions_num(self):
+ """Returns the number of existing sessions already done in that instance of the Activity"""
+ return self.num_rows
+
+ def get_records_values(self):
+ pass
+
+ def get_records_session_ids(self):
+ pass
+
+ def get_records_users(self):
+ pass
+
+ def get_all_records(self):
+ """Gets the 2d array of all records"""
+ records = []
+ reader = csv.reader(open(self.filepath, "rb"))
+ for row in reader:
+ temp_row = [int(x) for x in row]
+ records.append(temp_row)
+ return array(records)
+
+
+ def take_activity_screenshot(self):
+ if self._model.get_zoom_level() != ShellModel.ZOOM_ACTIVITY:
+ return
+ if self.get_frame().visible:
+ return
+
+ home_model = self._model.get_home()
+ activity = home_model.get_active_activity()
+ if activity is not None:
+ service = activity.get_service()
+ if service is not None:
+ try:
+ service.TakeScreenshot(timeout=2.0)
+ except dbus.DBusException, e:
+ logging.debug('Error raised by TakeScreenshot(): %s', e)
+
+
+
+ def take_screenshot(self, waveform_id = 1):
+ #file_path = os.path.join(tempfile.gettempdir(), '%i' % time.time())
+ act_root = environ['SUGAR_ACTIVITY_ROOT']
+ tmp_dir = join(act_root, 'data')
+ file_path = str(tempfile.mkstemp(dir=tmp_dir)[1])
+ ###TODO: This is such a crappy way to write a file to the journal
+ ### Ideally I should be implementing the write_file and read_file methods
+ os.chmod(file_path, 0777)
+ window = gtk.gdk.get_default_root_window()
+ width, height = window.get_size()
+ x_orig, y_orig = window.get_origin()
+
+ screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, has_alpha=False,
+ bits_per_sample=8, width=width, height=height)
+ screenshot.get_from_drawable(window, window.get_colormap(), x_orig, y_orig, 0, 0,
+ width, height)
+ screenshot.save(file_path, "png")
+ try:
+ jobject = datastore.create()
+ try:
+ jobject.metadata['title'] = _('Waveform ' + str(waveform_id) + ' ,from Measure Activity')
+ jobject.metadata['keep'] = '0'
+ jobject.metadata['buddies'] = ''
+ jobject.metadata['preview'] = ''
+ jobject.metadata['icon-color'] = profile.get_color().to_string()
+ jobject.metadata['mime_type'] = 'image/png'
+ jobject.file_path = file_path
+ datastore.write(jobject)
+ finally:
+ jobject.destroy()
+ del jobject
+ finally:
+ os.remove(file_path)
+
+
+
+
+"""
+#FOR TESTING JOURNALINTERACTION CLASS
+ji = JournalInteraction("myfile.csv", True)
+print ji.get_all_records()
+ji.set_session_params("guitar", 6, 6)
+ji.write_record([1,1,1])
+ji.write_record([2,2,2])
+print ji.get_number_of_records()
+ji.write_record([3,3,3])
+ji.write_record([4,4,4])
+print ji.get_number_of_records()
+ji.write_record([5,5,5])
+ji.write_record([6,6,6])
+ji.write_record([7,7,7])
+ji.append_session(0)
+ji.write_value(2222)
+ji.write_value(222222)
+ji.stop_session()
+ji.delete_record(3)
+print type(ji.read_record(2)[0])
+"""
diff --git a/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/am/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/am/activity.linfo b/locale/am/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/am/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..aa9d06e
--- /dev/null
+++ b/locale/ar/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ar/activity.linfo b/locale/ar/activity.linfo
new file mode 100644
index 0000000..a54992c
--- /dev/null
+++ b/locale/ar/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = قياس
diff --git a/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/ay/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ay/activity.linfo b/locale/ay/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/ay/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..988e2b9
--- /dev/null
+++ b/locale/bg/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/bg/activity.linfo b/locale/bg/activity.linfo
new file mode 100644
index 0000000..07c0c5e
--- /dev/null
+++ b/locale/bg/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Осцилоскоп
diff --git a/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..fc6ca89
--- /dev/null
+++ b/locale/bn/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/bn/activity.linfo b/locale/bn/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/bn/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..0293ef2
--- /dev/null
+++ b/locale/bn_IN/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/bn_IN/activity.linfo b/locale/bn_IN/activity.linfo
new file mode 100644
index 0000000..4f57866
--- /dev/null
+++ b/locale/bn_IN/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = মেপে নিন
diff --git a/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..b8c78af
--- /dev/null
+++ b/locale/ca/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ca/activity.linfo b/locale/ca/activity.linfo
new file mode 100644
index 0000000..bb222f0
--- /dev/null
+++ b/locale/ca/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Mesura
diff --git a/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..95d7078
--- /dev/null
+++ b/locale/de/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/de/activity.linfo b/locale/de/activity.linfo
new file mode 100644
index 0000000..e9fd1a0
--- /dev/null
+++ b/locale/de/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Messen
diff --git a/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/dz/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/dz/activity.linfo b/locale/dz/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/dz/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..abcd21b
--- /dev/null
+++ b/locale/el/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/el/activity.linfo b/locale/el/activity.linfo
new file mode 100644
index 0000000..a4fdba2
--- /dev/null
+++ b/locale/el/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Μέτρηση
diff --git a/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/en/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/en/activity.linfo b/locale/en/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/en/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..b7e6913
--- /dev/null
+++ b/locale/es/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/es/activity.linfo b/locale/es/activity.linfo
new file mode 100644
index 0000000..fff5c0f
--- /dev/null
+++ b/locale/es/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Medir
diff --git a/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..8d86b62
--- /dev/null
+++ b/locale/fa/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/fa/activity.linfo b/locale/fa/activity.linfo
new file mode 100644
index 0000000..e471dc6
--- /dev/null
+++ b/locale/fa/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = سنجش
diff --git a/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..ed17fe8
--- /dev/null
+++ b/locale/fa_AF/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/fa_AF/activity.linfo b/locale/fa_AF/activity.linfo
new file mode 100644
index 0000000..e471dc6
--- /dev/null
+++ b/locale/fa_AF/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = سنجش
diff --git a/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/ff/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ff/activity.linfo b/locale/ff/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/ff/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..d851065
--- /dev/null
+++ b/locale/fr/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/fr/activity.linfo b/locale/fr/activity.linfo
new file mode 100644
index 0000000..7c3f603
--- /dev/null
+++ b/locale/fr/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Mesure
diff --git a/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/ha/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ha/activity.linfo b/locale/ha/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/ha/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..68fc1f3
--- /dev/null
+++ b/locale/hi/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/hi/activity.linfo b/locale/hi/activity.linfo
new file mode 100644
index 0000000..9fdd894
--- /dev/null
+++ b/locale/hi/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = नाप
diff --git a/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/ig/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ig/activity.linfo b/locale/ig/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/ig/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..622964b
--- /dev/null
+++ b/locale/is/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/is/activity.linfo b/locale/is/activity.linfo
new file mode 100644
index 0000000..7425d9a
--- /dev/null
+++ b/locale/is/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Mæla
diff --git a/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..de16c53
--- /dev/null
+++ b/locale/ja/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ja/activity.linfo b/locale/ja/activity.linfo
new file mode 100644
index 0000000..1efd009
--- /dev/null
+++ b/locale/ja/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = 計測
diff --git a/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..dfeecf6
--- /dev/null
+++ b/locale/mk/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/mk/activity.linfo b/locale/mk/activity.linfo
new file mode 100644
index 0000000..ff1f64b
--- /dev/null
+++ b/locale/mk/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Мерка
diff --git a/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/ml/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ml/activity.linfo b/locale/ml/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/ml/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..07785df
--- /dev/null
+++ b/locale/mn/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/mn/activity.linfo b/locale/mn/activity.linfo
new file mode 100644
index 0000000..14197e5
--- /dev/null
+++ b/locale/mn/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Хэмжигч
diff --git a/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..37015ff
--- /dev/null
+++ b/locale/ne/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ne/activity.linfo b/locale/ne/activity.linfo
new file mode 100644
index 0000000..9fdd894
--- /dev/null
+++ b/locale/ne/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = नाप
diff --git a/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..574d6af
--- /dev/null
+++ b/locale/nl/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/nl/activity.linfo b/locale/nl/activity.linfo
new file mode 100644
index 0000000..e47e1d6
--- /dev/null
+++ b/locale/nl/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Meten
diff --git a/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/pa/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/pa/activity.linfo b/locale/pa/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/pa/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/pl/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/pl/activity.linfo b/locale/pl/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/pl/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c34c167
--- /dev/null
+++ b/locale/ps/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ps/activity.linfo b/locale/ps/activity.linfo
new file mode 100644
index 0000000..9d83b52
--- /dev/null
+++ b/locale/ps/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = اندازه کول
diff --git a/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/pseudo/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/pseudo/activity.linfo b/locale/pseudo/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/pseudo/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..9f57ce1
--- /dev/null
+++ b/locale/pt/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/pt/activity.linfo b/locale/pt/activity.linfo
new file mode 100644
index 0000000..fff5c0f
--- /dev/null
+++ b/locale/pt/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Medir
diff --git a/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..ac57dcd
--- /dev/null
+++ b/locale/pt_BR/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/pt_BR/activity.linfo b/locale/pt_BR/activity.linfo
new file mode 100644
index 0000000..fff5c0f
--- /dev/null
+++ b/locale/pt_BR/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Medir
diff --git a/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/qu/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/qu/activity.linfo b/locale/qu/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/qu/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..22b8d05
--- /dev/null
+++ b/locale/ro/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ro/activity.linfo b/locale/ro/activity.linfo
new file mode 100644
index 0000000..be07be2
--- /dev/null
+++ b/locale/ro/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Măsurători
diff --git a/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..0a2c255
--- /dev/null
+++ b/locale/ru/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ru/activity.linfo b/locale/ru/activity.linfo
new file mode 100644
index 0000000..9b9de0d
--- /dev/null
+++ b/locale/ru/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Измерить
diff --git a/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..141a46b
--- /dev/null
+++ b/locale/rw/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/rw/activity.linfo b/locale/rw/activity.linfo
new file mode 100644
index 0000000..7dc1d4e
--- /dev/null
+++ b/locale/rw/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Gupima
diff --git a/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..f641af6
--- /dev/null
+++ b/locale/te/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/te/activity.linfo b/locale/te/activity.linfo
new file mode 100644
index 0000000..bbfba32
--- /dev/null
+++ b/locale/te/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = కొలువు
diff --git a/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..9ca20f1
--- /dev/null
+++ b/locale/th/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/th/activity.linfo b/locale/th/activity.linfo
new file mode 100644
index 0000000..393013a
--- /dev/null
+++ b/locale/th/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = วัดค่า
diff --git a/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..640cb90
--- /dev/null
+++ b/locale/ur/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/ur/activity.linfo b/locale/ur/activity.linfo
new file mode 100644
index 0000000..3e160cb
--- /dev/null
+++ b/locale/ur/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = ناپیں
diff --git a/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo b/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo
new file mode 100644
index 0000000..c5361e7
--- /dev/null
+++ b/locale/yo/LC_MESSAGES/org.laptop.MeasureActivity.mo
Binary files differ
diff --git a/locale/yo/activity.linfo b/locale/yo/activity.linfo
new file mode 100644
index 0000000..041f72c
--- /dev/null
+++ b/locale/yo/activity.linfo
@@ -0,0 +1,2 @@
+[Activity]
+name = Measure
diff --git a/log1.csv b/log1.csv
new file mode 100755
index 0000000..164f9fd
--- /dev/null
+++ b/log1.csv
@@ -0,0 +1 @@
+Session: 1,User: kim-touchpad,Interval: 1second,-23566,-23947,-23829,-21217,-32768,-23466,-32768,-23836,-32768,-24464,-23228,-25016,-32768,-24039,-23946,-32768,-32768,-32768,-24057,-23830,-23654,-32768,-32768,-32768,-23842,-23884,-23882,-23772
diff --git a/log3.csv b/log3.csv
new file mode 100755
index 0000000..8ac2a6e
--- /dev/null
+++ b/log3.csv
@@ -0,0 +1,3 @@
+Session: 1,User: kim-touchpad,Interval: 1second,-23566,-23947,-23829,-21217,-32768,-23466,-32768,-23836,-32768,-24464,-23228,-25016,-32768,-24039,-23946,-32768,-32768,-32768,-24057,-23830,-23654,-32768,-32768,-32768,-23842,-23884,-23882,-23772
+Session: 2,User: kim-touchpad,Interval: 1second,32767,32767,32767,32767,-32768,-32768,32767,32767,-32768,-32768,32767,32767,32767,-32768,32767,32767,32767,-32768,-32768,-32768,-32768,32767,32767,32767,-32768,-32768,32767,32767,-32768,-32768,-32768,32767,32767,32767
+Session: 3,User: kim-touchpad,Interval: 1second,32767,32767,-32768,32767,32767,-32768,32767,32767,-32768,-32768,32767,32767,32767
diff --git a/logging_ui.py b/logging_ui.py
new file mode 100755
index 0000000..5c00bdc
--- /dev/null
+++ b/logging_ui.py
@@ -0,0 +1,136 @@
+import pygtk
+import gtk
+import gobject
+from gettext import gettext as _
+
+
+import config #This has all the globals
+
+from sugar.activity.activity import ActivityToolbox, EditToolbar
+from sugar.graphics.toolcombobox import ToolComboBox
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toggletoolbutton import ToggleToolButton
+from sugar.graphics.combobox import ComboBox
+from sugar.graphics.menuitem import MenuItem
+
+
+class LogToolbar(gtk.Toolbar):
+ """This class allows one to control throught the toolbar, writing values onto a csv file and hance implement one or many logging sessions"""
+
+ def __init__(self, audiograb, journal, activity):
+
+ gtk.Toolbar.__init__(self)
+
+ self.ag = audiograb
+ self.ji = journal
+ self.activity = activity
+
+
+ self.loginterval_img = gtk.Image()
+ self.loginterval_img.set_from_file(config.ICONS_DIR + '/sample_rate.svg')
+ self.loginterval_img_tool = gtk.ToolItem()
+ self.loginterval_img_tool.add(self.loginterval_img)
+ self.insert(self.loginterval_img_tool,-1)
+ self.loginterval_img.show()
+ self.loginterval_img_tool.show()
+
+ #######################Logging Interval#####################
+ self._loginterval_combo = ComboBox()
+ self.interval = [_('Picture'), _('1 second') , _('5 seconds'), _('1 minute') , _('5 minutes'), _('1 hour')]
+
+ self._interval_changed_id = self._loginterval_combo.connect("changed", self.loginterval_control)
+
+ for i, s in enumerate(self.interval):
+ self._loginterval_combo.append_item(i, s, None)
+ if s == _('Picture'):
+ self._loginterval_combo.set_active(i)
+
+ self._loginterval_tool = ToolComboBox(self._loginterval_combo)
+ self.insert(self._loginterval_tool,-1)
+ self._loginterval_tool.show()
+ self.logginginterval_status = 'picture'
+ ############################################################
+
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(True)
+ self.insert(separator, -1)
+ separator.show()
+
+ #######################Start Logging/Stop Logging#####################
+ self._record = ToolButton('media-record')
+ self.insert(self._record, -1)
+ self._record.show()
+ self._record.set_tooltip(_('Start Logging'))
+ self.record_state = False #True means recording in progress, False means not recording
+ self._record.connect('clicked', self.record_control)
+ ######################################################################
+
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(True)
+ self.insert(separator, -1)
+ separator.show()
+
+
+ def record_control(self, data=None):
+ """Depending upon the selected interval, does either
+ a logging session, or just logs the current buffer"""
+ if self.record_state == False:
+ Xscale = (1.00/self.ag.get_sampling_rate())
+ Yscale = 0.0
+ interval = self.interval_convert()
+ self.ji.start_new_session("arjs", Xscale, Yscale)
+ self.ag.set_logging_params(True, interval)
+ self.record_state = True
+
+ self._record.set_icon('media-playback-stop')
+ self._record.show()
+ self._record.set_tooltip(_('Stop Logging'))
+ if interval==0:
+ self._record.set_icon('media-record')
+ self._record.show()
+ self._record.set_tooltip(_('Start Logging'))
+ self.record_state = False
+ else:
+ self.ji.stop_session()
+ self.ag.set_logging_params(False)
+ self.record_state = False
+
+ self._record.set_icon('media-record')
+ self._record.show()
+ self._record.set_tooltip(_('Start Logging'))
+
+
+ def interval_convert(self):
+ """Converts picture/1second/5seconds/1minute/5minutes to an integer
+ which denotes the number of times the audiograb buffer must be called before a value is written.
+ When set to 0, the whole of current buffer will be written"""
+ if self.logginginterval_status == 'picture':
+ return 0
+ elif self.logginginterval_status == 'second':
+ return 50
+ elif self.logginginterval_status == '5second':
+ return 250
+ elif self.logginginterval_status == 'minute':
+ return 3000
+ elif self.logginginterval_status == '5minute':
+ return 15000
+ elif self.logginginterval_status == 'hour':
+ return 180000
+
+
+
+ def loginterval_control(self, combobox):
+
+ if (self._loginterval_combo.get_active() != -1):
+ if (self._loginterval_combo.get_active() == 0):
+ self.logginginterval_status = 'picture'
+ if (self._loginterval_combo.get_active() == 1):
+ self.logginginterval_status = 'second'
+ if (self._loginterval_combo.get_active() == 2):
+ self.logginginterval_status = '5second'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = 'minute'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = '5minute'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = 'hour'
diff --git a/measure.py b/measure.py
new file mode 100755
index 0000000..2ee314f
--- /dev/null
+++ b/measure.py
@@ -0,0 +1,163 @@
+#!/usr/bin/python
+#
+# Copyright (C) 2007, OLPC
+# Written by Arjun Sarwal <arjun@laptop.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+
+import pygst
+pygst.require("0.10")
+import pygtk
+import gtk
+import gobject
+import time
+import config #This has all the globals
+import os, sys
+import tempfile
+from os import environ
+from os.path import join
+
+from journal import JournalInteraction
+from audiograb import AudioGrab
+from drawwaveform import DrawWaveform
+from toolbar_side import SideToolbar
+from toolbar_top import Toolbar
+from textbox import TextBox
+
+import logging
+from sugar.activity import activity
+from sugar.datastore import datastore
+
+
+class MeasureActivity(activity.Activity):
+
+ def __init__(self, handle):
+
+ activity.Activity.__init__(self, handle)
+ act_root = environ['SUGAR_ACTIVITY_ROOT']
+ tmp_dir = join(act_root, 'data')
+
+
+ self.active_status = True
+ self.ACTIVE = True
+ self.connect( "notify::active", self._activeCb )
+ self.connect("destroy", self.on_quit)
+
+ if self._jobject.file_path:
+ #logging.debug('1.0 Launched from journal')
+ self.existing = True
+ else:
+ #logging.debug('1.1 Launched from frame or from Mesh View')
+ self._jobject.file_path =str(tempfile.mkstemp(dir=tmp_dir)[1])
+ os.chmod(self._jobject.file_path, 0777)
+ self.existing = False
+
+
+ self.ji = JournalInteraction(self._jobject.file_path, self.existing)
+ self.wave = DrawWaveform()
+ self.audiograb = AudioGrab(self.wave.new_buffer, self.ji)
+ self.side_toolbar = SideToolbar(self.wave)
+ self.text_box = TextBox()
+
+
+ self.box3 = gtk.HBox(False, 0)
+ self.box3.pack_start(self.wave,True,True,0)
+ self.box3.pack_start(self.side_toolbar.box1,False,True,0)
+
+ self.box1 = gtk.VBox(False,0)
+ self.box1.pack_start(self.box3, True, True, 0)
+ self.box1.pack_start(self.text_box.box_main, False, True, 0)
+
+ self.set_canvas(self.box1)
+
+ toolbox = Toolbar(self, self.wave, self.audiograb, self.ji, self.text_box)
+ self.set_toolbox(toolbox)
+ toolbox.show()
+
+ self.show_all()
+
+ self.first = True
+
+ gobject.timeout_add(config.REFRESH_TIME, self.waveform_refresh)
+
+
+
+ def set_show_hide_windows(self, window_id=1):
+ """Shows the appropriate window identified by the window_id
+ 1 --> sound
+ 2 --> sensors
+ """
+ if window_id==1:
+ #self.box3.pack_start(self.wave,True,True,0)
+ #self.box3.pack_start(self.side_toolbar.box1,False,True,0)
+ #self.box3.show_all()
+ self.wave.set_context_on()
+ self.side_toolbar.box1.show_all()
+ self.active_context_status = 1
+ return
+
+ elif window_id==2:
+ #self.box3.pack_start(self.wave,True,True,0)
+ #self.box3.show_all()
+ self.wave.set_context_on()
+ self.side_toolbar.box1.hide_all()
+ self.active_context_status = 2
+ return
+
+
+ def get_show_hide_windows(self):
+ """Gets which window is being shown
+ If 0 is returned means waveform window is being shown
+ If 1 is returned means camera context"""
+ return self.active_context_status
+
+
+
+ def waveform_refresh(self):
+ self.wave.queue_draw()
+ return self.active_status
+
+
+ def on_quit(self,data=None):
+ self.audiograb.on_activity_quit()
+ self.ji.on_quit()
+
+ def _activeCb( self, widget, pspec ):
+ if(self.first == True):
+ self.audiograb.start_grabbing()
+ self.first = False
+ if (not self.props.active and self.ACTIVE):
+ self.audiograb.pause_grabbing()
+ self.active_status = False
+ elif (self.props.active and not self.ACTIVE):
+ self.audiograb.resume_grabbing()
+ self.active_status = True
+ gobject.timeout_add(config.REFRESH_TIME, \
+ self.waveform_refresh)
+ self.ACTIVE = self.props.active
+
+
+ def write_file(self, file_path):
+ self.metadata['fulltext'] = 'blah blah'
+
+ def read_file(self, file_path):
+ pass
+
+
+gtk.gdk.threads_init()
+
+
+
diff --git a/po/Measure.pot b/po/Measure.pot
new file mode 100644
index 0000000..bc129df
--- /dev/null
+++ b/po/Measure.pot
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-11-13 23:55+0530\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/am.po b/po/am.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/am.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/ar.po b/po/ar.po
new file mode 100644
index 0000000..4668a5e
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,122 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-08-01 15:55-0400\n"
+"Last-Translator: Khaled Hosny <khaledhosny@eglug.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "قياس"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "توقيف"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "أظهر النتيجة"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 ثانية"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 دقيقة"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 ساعة"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "أظهر الورقة والرسوم البيانية"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 ثوان"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 دقيقة"
diff --git a/po/ay.po b/po/ay.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/ay.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..e2bc058
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,129 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-01-11 14:14+0000\n"
+"Last-Translator: Alexander Todorov <atodorov@redhat.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Осцилоскоп"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Стойност на спектъра"
+
+# средно квадратична стойност
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "СКС : "
+
+# средно аритметична стойност
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "САС : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Мащаб:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Ос X: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Ос Y: "
+
+# постоянен ток
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Натиснете за работа с постоянен ток"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Натиснете за изключване на отклонението"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Натиснете за показване на честотата"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Пауза"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Показване стойностите"
+
+# трябва да се внимава много с променливия ток. Трябва по НАБИВАЩО се на очи съобщение.
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "ВНИМАНИЕ: натиснете за работа с променлив ток!"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Натиснете за включване на отклонението"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Натиснете за покзване на времето"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Скриване стойностите"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Продължаване"
+
+#: logging_ui.py:44 logging_ui.py:50
+#, fuzzy
+msgid "Snapshot"
+msgstr "Запис"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 секунда"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 минута"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 час"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Начало на записа"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Показване на записа"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Край на записа"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Премахване на записа"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 секунда"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 минута"
diff --git a/po/bn.po b/po/bn.po
new file mode 100644
index 0000000..98e9279
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,124 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: xo-bundled\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2007-12-23 17:24+0600\n"
+"Last-Translator: Khandakar Mujahidul Islam <suzan229@gmail.com>\n"
+"Language-Team: Bengali <core@bengalinux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X অক্ষ:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y অক্ষ:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "স্থগিত করো"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "মান দেখাও"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "মান লুকাও"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "১ সেকেন্ড"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "১ মিনিট"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "১ ঘন্টা"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "লগ করা শুরু করো"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "লগ দেখাও"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "লগ করা থামাও"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "লগ মোছো"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "১ সেকেন্ড"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "১ মিনিট"
diff --git a/po/bn_IN.po b/po/bn_IN.po
new file mode 100644
index 0000000..b794ac0
--- /dev/null
+++ b/po/bn_IN.po
@@ -0,0 +1,124 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: xo-bundled\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-02-04 02:51-0500\n"
+"Last-Translator: Sankarshan Mukhopadhyay <sankarshan.mukhopadhyay@gmail.com>\n"
+"Language-Team: Bengali <core@bengalinux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "মেপে নিন"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "স্পেক্ট্রামের মান"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS"
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "মাপকাঠি"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X অক্ষ:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y অক্ষ:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "DC এর জন্য ক্লিক করুন"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Bias বন্ধ করার জন্য ক্লিক করুন"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Frequency base এর জন্য ক্লিক করুন"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "স্থগিত করো"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "মান প্রদর্শন কর"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "AC এর জন্য ক্লিক করুন"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Bias চালু করার জন্য ক্লিক করুন"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Time base এর জন্য ক্লিক করুন"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "মান লুকিয়ে রাখ"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "পুনরায় চালু কর"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "স্ন্যাপশট"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "১ সেকেন্ড"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "১ মিনিট"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "১ ঘন্টা"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "লগ করা শুরু করো"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "লগ প্রদর্শন করো"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "লগ করা বন্ধ করো"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "লগ মুছে ফেল"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "১ সেকেন্ড"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "১ মিনিট"
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..2fb3004
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,125 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-01-14 19:50+0000\n"
+"Last-Translator: Jaume <jaume@nualart.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Mesura"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Valor de l'espectre"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS"
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Escale:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Eix X:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Eix Y:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Clic per DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Clic per la base de freqüència"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Pausa"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Mostra valors"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Clic per AC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Clic per base de temps"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Oculta valors"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Reprendre"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Captura de pantalla"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 segon"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 minut"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 hora"
+
+# no esta clara aquesta traduccio
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Comença l'entrada"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Mostra el registre"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Atura l'entrada"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Esborra el registre"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 segon"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 minut"
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..c70a167
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,148 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-04-15 05:17-0400\n"
+"Last-Translator: Gerhard Steiner <gerhard.steiner@duichwir.at>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Messen"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Bereichswert"
+
+# http://de.wikipedia.org/wiki/Quadratisches_Mittel
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "MW : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Skala:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X-Achse: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y-Achse: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Klicken für Gleichspannung"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Klicken um Vorspannung auszuschalten"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Klicken um Frequenzbasis einzustellen"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Pause"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Zeige Werte"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Klicken für Wechselspannung"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Klicken um Vorspannung anzuschalten"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Klicken um Zeitbasis einzustellen"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Werte verstecken"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "fortsetzen"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Momentaufnahme"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 Sekunde"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 Minute"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 Stunde"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Aufzeichnung starten"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Protokoll anzeigen"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Protokollierung stoppen"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Protokoll entfernen"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Tabelle und Grafiken anzeigen"
+
+#~ msgid "Show waveform"
+#~ msgstr "Wellenform anzeigen"
+
+#~ msgid "Time base"
+#~ msgstr "Zeiteinheit"
+
+#~ msgid "Frequency base"
+#~ msgstr "Frequenzeinheit"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "Widerstandssensor"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "Spannungssensor"
+
+#~ msgid "Picture"
+#~ msgstr "Bild"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 Sekunden"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 Minuten"
+
+#~ msgid "Spectral power"
+#~ msgstr "Spektrale Leistung"
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..17db75a
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,148 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-04-29 04:26-0400\n"
+"Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Μέτρηση"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Τιμή κλίμακας"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "Μ.Ο. : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Κλίμακα:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Χ Άξονας: _"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y Άξονας: _"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Πατήστε για DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Πατήστε για να απενεργοποιήσετε το Bias"
+
+# Αυτό σίγουρα χρειάζεται διόρθωση
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Πατήστε για βάση Συχνότητας"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Παύση"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Εμφάνισε τις τιμές"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Πατήστε για AC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Πατήστε για ενεργοποίηση του Bias"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Πατήστε για βάση με το χρόνο"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Κρύψε τις τιμές"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Επαναφορά"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Στιγμιότυπο"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 δευτερόλεπτο"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 λεπτό"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 ώρα"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Έναρξη Αναφοράς"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Εμφάνιση Καταχώρησης"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Παύση Αναφοράς"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Αφαίρεση Καταχώρησης"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Εμφάνιση φύλλου εργασίας και γραφικών"
+
+#~ msgid "Show waveform"
+#~ msgstr "Εμφάνιση κυματομορφής"
+
+#~ msgid "Time base"
+#~ msgstr "Βάση του χρόνου"
+
+#~ msgid "Frequency base"
+#~ msgstr "Βάση Συχνότητας"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "Αισθητήρας Αντίστασης"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "Αισθητήρας Τάσης"
+
+#~ msgid "Picture"
+#~ msgstr "Εικόνα"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 δευτερόλεπτα"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 λεπτά"
+
+#~ msgid "Spectral power"
+#~ msgstr "Φασματική ισχύς"
diff --git a/po/en.po b/po/en.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/es.po b/po/es.po
new file mode 100644
index 0000000..baf6d6a
--- /dev/null
+++ b/po/es.po
@@ -0,0 +1,191 @@
+# Spanish translations for Measure Activity package.
+# Copyright (C) 2007 Measure Activity'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the Measure Activity package.
+# Arjun Sarwal arjun@laptop.org, 2007
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-06-22 18:11-0400\n"
+"Last-Translator: Maria del Pilar Saenz Rodriguez <mapisaro@gmail.com>\n"
+"Language-Team: Spanish\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Medir"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Valor del espectro"
+
+# for now untranslated
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "Prom.Cuad. : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "PROM : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Escala"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Eje X: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Eje Y: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Haga clic para CC"
+
+# Bias refers to a bias voltage
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Desactivar el voltaje de sesgo"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Haga clic para frecuencia de base"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Pausa"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Mostrar valores"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Haga clic para CA"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Activar el voltaje de sesgo"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Haga clic para la base del tiempo"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Ocultar valores"
+
+# Continuar?
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Retomar"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Instantánea"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 segundo"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 minuto"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 hora"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Comenzar a registrar"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Mostrar registro"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Terminar de registrar"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Eliminar registro"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Mostrar hoja y gráficas"
+
+#~ msgid "Show waveform"
+#~ msgstr "Mostrar forma de onda"
+
+#~ msgid "Time base"
+#~ msgstr "Línea de base de tiempo"
+
+#~ msgid "Frequency base"
+#~ msgstr "Línea de base de frecuencia"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "Sensor de resistencia"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "Sensor de voltaje"
+
+#~ msgid "Picture"
+#~ msgstr "Imagen"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 segundos"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 minutos"
+
+#~ msgid "Spectral power"
+#~ msgstr "Espectro de potencia"
+
+# msec is milliSeconds
+#~ msgid " msec"
+#~ msgstr " mseg"
+
+#~ msgid "hz"
+#~ msgstr "hz"
+
+#~ msgid "5 hours "
+#~ msgstr "5 horas "
+
+# Do not translate this yet
+#, fuzzy
+#~ msgid "temp "
+#~ msgstr "temp "
+
+#~ msgid " mV"
+#~ msgstr " mV"
+
+#~ msgid "Real time parameters:"
+#~ msgstr "Parametros de tiempo real"
+
+# promedio cuadrático
+#~ msgid "RMS:"
+#~ msgstr "Prom.Cuad.:"
+
+# this is ideed promedio in spanish
+#~ msgid "AVG: "
+#~ msgstr "PROM: "
+
+#~ msgid "PK-PK: "
+#~ msgstr "Pico-a-Pico: "
+
+#~ msgid "X Axis one division: "
+#~ msgstr "Eje X una división: "
+
+#~ msgid "Y Axis one division: "
+#~ msgstr "Eje Y una división: "
+
+#~ msgid "Log"
+#~ msgstr "Log"
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 0000000..74f3efa
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,126 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-01-09 10:42+0000\n"
+"Last-Translator: Sohaib Obaidi <ebtihaj_obaidi@yahoo.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "سنجش"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "مقدار طیف (بینایی)"
+
+#: drawWaveform.py:330
+#, fuzzy
+msgid "RMS : "
+msgstr "RMS :"
+
+#: drawWaveform.py:330
+#, fuzzy
+msgid "AVG : "
+msgstr "AVG :"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "مقیاس:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "محور افقی:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "محور عمودی:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "برای منقطع گردیدن تیک نمائید"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "برای خاموش کردن پیشقدرتیک نمائید"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "برای مبنا فریکانس تیک نمائید"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "مکث"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "مقدار ها را نشان بده"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "برای AC تیک کنید"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "برای روشن کردن پیشقدرتیک نمائید"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "برای اساس وقت تیک کنید"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "مقدار ها را نشان نده"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "ادامه"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "عکس فوری"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 ثانیه"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 دقیقه"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 ساعت"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "واقعه نگاری را شروع کن"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "گذارش واقعات را نشان بده"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "واقعه نگاری را متوقف کن"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "گذارش واقعات را پاک کن"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 ثانیه"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 دقیقه"
diff --git a/po/fa_AF.po b/po/fa_AF.po
new file mode 100644
index 0000000..8ec6d4a
--- /dev/null
+++ b/po/fa_AF.po
@@ -0,0 +1,146 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-03-24 06:53-0400\n"
+"Last-Translator: Sohaib Obaidi <ebtihaj_obaidi@yahoo.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "سنجش"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "مقداربینایی"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "مقیاس:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "محور افقی: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "محور عمودی: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "برای منقطع گردیدن تیک کنید"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "برای خاموش کردن پیشقدرتیک نمائید"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "برای مبنا فریکانس تیک نمائید"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "مکث"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "مقدار ها را نشان بده"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "برای AC تیک کنید"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "برای روشن کردن پیشقدرتیک نمائید"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "برای اساس وقت تیک کنید"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "مقدار ها را نشان نده"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "ادامه"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "عکس فوری"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 ثانیه"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 دقیقه"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 ساعت"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "واقعه نگاری را شروع کن"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "گذارش واقعات را نشان بده"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "واقعه نگاری را متوقف کن"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "گذارش واقعات را پاک کن"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "ورق و گراف ها را نشان بده"
+
+#~ msgid "Show waveform"
+#~ msgstr "شكل موج را نشان بده"
+
+#~ msgid "Time base"
+#~ msgstr "مبنا وقت"
+
+#~ msgid "Frequency base"
+#~ msgstr "مبنا فريكانس"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "حساس مقاومت"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "حساس ولتاژ"
+
+#~ msgid "Picture"
+#~ msgstr "عكس"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 ثانیه"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 دقیقه"
+
+#~ msgid "Spectral power"
+#~ msgstr "قوه بينايي"
diff --git a/po/ff.po b/po/ff.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/ff.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..3d2b8eb
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,248 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-10-12 00:30-0400\n"
+"PO-Revision-Date: 2008-10-20 04:40-0400\n"
+"Last-Translator: samy boutayeb <s.boutayeb@free.fr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Mesure"
+
+#: sheet_ui.py:37
+msgid "Show sheet and graphs"
+msgstr "Montrer feuille et graphiques"
+
+#: sheet_ui.py:42
+msgid "Show waveform"
+msgstr "Montrer forme d'onde"
+
+#: toolbar_top.py:44
+msgid "Sound"
+msgstr "Son"
+
+#: toolbar_top.py:48
+msgid "Sensors"
+msgstr "Capteurs"
+
+#: sound_toolbar.py:52
+msgid "Sound "
+msgstr "Son"
+
+#: sound_toolbar.py:53
+msgid "Time Base "
+msgstr "Base de temps"
+
+#: sound_toolbar.py:54
+#, fuzzy
+msgid "Frequency Base "
+msgstr "Base de fréquence"
+
+#: sound_toolbar.py:56
+msgid "X Axis Scale: 1 division = "
+msgstr "Échelle axe X : 1 division = "
+
+#: sound_toolbar.py:57
+msgid "ms "
+msgstr "ms "
+
+#: sound_toolbar.py:58
+msgid "Hz "
+msgstr "Hz "
+
+#: sound_toolbar.py:74
+msgid "Time base"
+msgstr "Base de temps"
+
+#: sound_toolbar.py:82
+msgid "Frequency base"
+msgstr "Base de fréquence"
+
+#: sound_toolbar.py:128 sound_toolbar.py:250
+msgid "Freeze the display"
+msgstr "Figer l'écran"
+
+#: sound_toolbar.py:149
+msgid "Now"
+msgstr "Maintenant"
+
+#: sound_toolbar.py:149 sensor_toolbar.py:92
+msgid "30 seconds"
+msgstr "5 secondes"
+
+#: sound_toolbar.py:149
+msgid "2 minutes"
+msgstr "2 minutes"
+
+#: sound_toolbar.py:149
+msgid "10 minutes"
+msgstr "10 minutes"
+
+#: sound_toolbar.py:149 sensor_toolbar.py:92
+msgid "30 minutes"
+msgstr "30 minutes"
+
+#: sound_toolbar.py:168 sound_toolbar.py:189 sound_toolbar.py:200
+#: sensor_toolbar.py:111 sensor_toolbar.py:142
+msgid "Start Recording"
+msgstr "Commencer l'enregistrement"
+
+#: sound_toolbar.py:184 sensor_toolbar.py:131
+msgid "Stop Recording"
+msgstr "Arrêter l'enregistrement"
+
+#: sound_toolbar.py:243
+msgid "Unfreeze the display"
+msgstr "Défiger l'écran"
+
+#: sensor_toolbar.py:41
+msgid "Sensors, DC (connect sensor to pink 'Mic In' on left side of XO) "
+msgstr "Capteurs, CC (connecter le capteur au port 'Mic In' à gauche du XO)"
+
+#: sensor_toolbar.py:42
+msgid "Bias/Offset Enabled "
+msgstr "Biais/décalage activé"
+
+#: sensor_toolbar.py:43
+msgid "Bias/Offset Disabled "
+msgstr "Biais/décalage désactivé"
+
+#: sensor_toolbar.py:63
+msgid "Resistance Sensor"
+msgstr "Capteur de résistance"
+
+#: sensor_toolbar.py:71
+msgid "Voltage Sensor"
+msgstr "Capteur de tension"
+
+#: sensor_toolbar.py:92 sensor_toolbar.py:98 logging_ui.py:39
+msgid "1 second"
+msgstr "1 seconde"
+
+#: sensor_toolbar.py:92 logging_ui.py:39
+msgid "5 minutes"
+msgstr "5 minutes"
+
+#: logging_ui.py:39 logging_ui.py:45
+msgid "Picture"
+msgstr "Image"
+
+#: logging_ui.py:39
+msgid "5 seconds"
+msgstr "5 secondes"
+
+#: logging_ui.py:39
+msgid "1 minute"
+msgstr "1 minute"
+
+#: logging_ui.py:39
+msgid "1 hour"
+msgstr "1 heure"
+
+# enregistrement, journalisation ?
+#: logging_ui.py:63 logging_ui.py:91 logging_ui.py:100
+msgid "Start Logging"
+msgstr "Démarrer l'enregistrement"
+
+# cf. start logging
+#: logging_ui.py:87
+msgid "Stop Logging"
+msgstr "Arrêter l'enregistrement"
+
+#: journal.py:182 journal.py:196
+msgid " logging sessions, from Measure Activity"
+msgstr "enregistrement des sessions depuis l'activité Mesure"
+
+#: journal.py:223
+msgid "Session: "
+msgstr "Session : "
+
+#: journal.py:224
+msgid "User: "
+msgstr "Utilisateur : "
+
+#: journal.py:225
+msgid "Interval: "
+msgstr "Intervalle : "
+
+#: journal.py:352
+msgid "Waveform "
+msgstr "Forme d'onde "
+
+#~ msgid "Spectrum value"
+#~ msgstr "Valeur du spectre"
+
+#~ msgid "RMS : "
+#~ msgstr "Valeur efficace : "
+
+#~ msgid "AVG : "
+#~ msgstr "Moyenne : "
+
+#~ msgid "Scale:"
+#~ msgstr "Échelle :"
+
+#~ msgid "X Axis: "
+#~ msgstr "Axe X : "
+
+#~ msgid "Y Axis : "
+#~ msgstr "Axe Y : "
+
+# Je ne sais pas à quoi sert ce bouton... Un commentaire du codeur serait apprécié :-)
+#~ msgid "Click for DC"
+#~ msgstr "Sélection du courant continu"
+
+#~ msgid "Click for Bias Off"
+#~ msgstr "Désactivation de la polarisation "
+
+#~ msgid "Click for Frequency base"
+#~ msgstr "Activation de la base de fréquence"
+
+#~ msgid "Pause"
+#~ msgstr "Pause"
+
+#~ msgid "Show values"
+#~ msgstr "Afficher les valeurs"
+
+#~ msgid "Click for AC"
+#~ msgstr "Sélection du courant alternatif"
+
+#~ msgid "Click for Bias On"
+#~ msgstr "Activation de la polarisation "
+
+#~ msgid "Click for Time base"
+#~ msgstr "Sélection de la base de temps"
+
+#~ msgid "Hide values"
+#~ msgstr "Masquer les valeurs"
+
+#~ msgid "Resume"
+#~ msgstr "Reprendre"
+
+#~ msgid "Snapshot"
+#~ msgstr "Capture d'écran"
+
+#~ msgid "Show Log"
+#~ msgstr "Afficher l'enregistrement"
+
+#~ msgid "Remove Log"
+#~ msgstr "Supprimer l'enregistrement"
+
+#~ msgid "Spectral power"
+#~ msgstr "Puissance spectrale"
+
+#~ msgid "RMS: "
+#~ msgstr "Valeur efficace : "
+
+#~ msgid "AVG : "
+#~ msgstr "Moyenne : "
diff --git a/po/ha.po b/po/ha.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/ha.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/hi.po b/po/hi.po
new file mode 100644
index 0000000..bb1a6cb
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,149 @@
+# translation of measure_stable.po to Hindi
+# G Karunakar <karunakar@indlinux.org>, 2007.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+msgid ""
+msgstr ""
+"Project-Id-Version: measure_stable\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-04-23 05:36-0400\n"
+"Last-Translator: Prashant Thakkar <prashantbthakkar@gmail.com>\n"
+"Language-Team: Hindi <indlinux-hindi@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "नाप"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "आर.एम.एस."
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "ए.वी.जी."
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "स्केलः"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "x अक्ष :"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "y अक्ष :"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "ठहरें"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "मान दिखाओ"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "मान छिपाओ"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "पुनरारंभ"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "तस्वीर"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 सेकण्ड"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 मिनट"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 घंटा"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "लागिंग करना प्रारंभ करें"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "लॉग दिखाओ"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "लॉग करना रोकें"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "लॉग हटाओ"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "कागज और ग्राफ़ दिखाए"
+
+#~ msgid "Show waveform"
+#~ msgstr "तरंगरूप दिखाए"
+
+#~ msgid "Time base"
+#~ msgstr "समयानुसार"
+
+#~ msgid "Frequency base"
+#~ msgstr "तरंगानुसार"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "प्रतिरोधक संवेदक"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "वोल्टेज संवेदक"
+
+#~ msgid "Picture"
+#~ msgstr "छवि"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 सेकण्ड"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 मिनट"
+
+#~ msgid "Spectral power"
+#~ msgstr "वर्णक्रम संबंधी की क्षमता"
diff --git a/po/ig.po b/po/ig.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/ig.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/is.po b/po/is.po
new file mode 100644
index 0000000..1db6ef5
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Mæla"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..d5015ce
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,165 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-07-28 20:54-0400\n"
+"Last-Translator: Spiky <y@sailweb.net>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "計測"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+#, fuzzy
+msgid "Spectrum value"
+msgstr "スペクトル値"
+
+#: drawWaveform.py:330
+#, fuzzy
+msgid "RMS : "
+msgstr "実効値 : "
+
+#: drawWaveform.py:330
+#, fuzzy
+msgid "AVG : "
+msgstr "平均 : "
+
+#: drawWaveform.py:331
+#, fuzzy
+msgid "Scale:"
+msgstr "目盛り : "
+
+#: drawWaveform.py:332
+#, fuzzy
+msgid "X Axis: "
+msgstr "X軸: "
+
+#: drawWaveform.py:332
+#, fuzzy
+msgid "Y Axis : "
+msgstr "Y軸: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+#, fuzzy
+msgid "Click for DC"
+msgstr "クリックしてDCに切替"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+#, fuzzy
+msgid "Click for Bias Off"
+msgstr "クリックしてバイアス解放"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+#, fuzzy
+msgid "Click for Frequency base"
+msgstr "クリックして周波数単位を変更"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+#, fuzzy
+msgid "Pause"
+msgstr "一時停止"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+#, fuzzy
+msgid "Show values"
+msgstr "値を表示"
+
+#: electrical_ui.py:141
+#, fuzzy
+msgid "Click for AC"
+msgstr "クリックしてACに切替"
+
+#: electrical_ui.py:163
+#, fuzzy
+msgid "Click for Bias On"
+msgstr "クリックしてバイアスをかける"
+
+#: electrical_ui.py:183
+#, fuzzy
+msgid "Click for Time base"
+msgstr "クリックして時間単位を変更"
+
+#: electrical_ui.py:212
+#, fuzzy
+msgid "Hide values"
+msgstr "値を非表示"
+
+#: electrical_ui.py:249
+#, fuzzy
+msgid "Resume"
+msgstr "再開"
+
+#: logging_ui.py:44 logging_ui.py:50
+#, fuzzy
+msgid "Snapshot"
+msgstr "スナップショット"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1秒間"
+
+# the length of one minute. unsure of the context.
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1分間"
+
+# the length of one hour, unsure of context
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1時間"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "記録開始"
+
+#: logging_ui.py:82 logging_ui.py:167
+#, fuzzy
+msgid "Show Log"
+msgstr "ログ表示"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "記録終了"
+
+#: logging_ui.py:159
+#, fuzzy
+msgid "Remove Log"
+msgstr "ログ削除"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "数値表とグラフを表示"
+
+#~ msgid "Show waveform"
+#~ msgstr "波形を表示"
+
+#~ msgid "Time base"
+#~ msgstr "時間に沿って..."
+
+#~ msgid "Frequency base"
+#~ msgstr "周波数に沿って..."
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "抵抗値センサー"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "電圧センサー"
+
+#~ msgid "Picture"
+#~ msgstr "ピクチャ"
+
+#~ msgid "5 seconds"
+#~ msgstr "5秒間"
+
+# the length of one minute. unsure of the context.
+#~ msgid "5 minutes"
+#~ msgstr "5分間"
diff --git a/po/mk.po b/po/mk.po
new file mode 100644
index 0000000..d5c2aa8
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,133 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2007-11-23 16:35+0000\n"
+"Last-Translator: Aleksandar Balalovski <gemidjy@lugola.net>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 || n%10==1 ? 0 : 1;\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Мерка"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+#, fuzzy
+msgid "Spectrum value"
+msgstr "Вредност на спектар"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Размер"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X оска:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y оска:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+#, fuzzy
+msgid "Click for DC"
+msgstr "Клинки за DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+#, fuzzy
+msgid "Click for Bias Off"
+msgstr "Кликни за исклучување на закосувањето"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+#, fuzzy
+msgid "Click for Frequency base"
+msgstr "Кникни за основна фреквенција"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Пауза"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Прикажи вредности"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Кликни за AC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Кникни за пуштање на закосување"
+
+#: electrical_ui.py:183
+#, fuzzy
+msgid "Click for Time base"
+msgstr "Кликни за основно време"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Скриј вредности"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Продолжи"
+
+#: logging_ui.py:44 logging_ui.py:50
+#, fuzzy
+msgid "Snapshot"
+msgstr "Слика од екран"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 секунда"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 минута"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 час"
+
+#: logging_ui.py:68 logging_ui.py:144
+#, fuzzy
+msgid "Start Logging"
+msgstr "Започни со логирање"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Прикажи записник"
+
+#: logging_ui.py:134
+#, fuzzy
+msgid "Stop Logging"
+msgstr "Престани со логирање"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Отстрани записник"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 секунда"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 минута"
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/mn.po b/po/mn.po
new file mode 100644
index 0000000..0f28f24
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,143 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-09-08 12:43-0400\n"
+"Last-Translator: Odontsetseg Bat-Erdene <obat-erdene@suffolk.edu>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Хэмжигч"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 секунд"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 минут"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 цаг"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Бүртгэж эхлэх"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Бүртгэлийг үзүүлэх"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Бүртгэлийг зогсоох"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Бүртгэлийг Устгах"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Хуудас болон графикыг үзүүлэх"
+
+#~ msgid "Show waveform"
+#~ msgstr "Долгионы хэлбэр үзүүлэх"
+
+#~ msgid "Time base"
+#~ msgstr "Үндсэн хугацаа"
+
+#~ msgid "Frequency base"
+#~ msgstr "Үндсэн давтамж"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "Эсэргүүцэл мэдрэгч"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "Цахилгааны хүчдэл мэдрэгч"
+
+#~ msgid "Picture"
+#~ msgstr "Зураг"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 секунд"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 минут"
diff --git a/po/ne.po b/po/ne.po
new file mode 100644
index 0000000..23b0e5e
--- /dev/null
+++ b/po/ne.po
@@ -0,0 +1,152 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-03-21 15:37-0400\n"
+"Last-Translator: Shankar Pokharel <memshankar@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "नाप"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "वर्णपट माप"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "आर एम एस : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "औसत : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "मापन:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X अक्ष:"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y अक्ष:"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "DC को लागि थिच"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Bias बन्द गर्न थिच"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "आवृती आधारको लागि थिच"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "विश्राम"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "माप देखाउ"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "AC को लागि थिच"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Bias गर्न थिच"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "समय आधारको लागि थिच"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "माप लुकाऊ"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "फेरि चालु गर"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "झलक"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "१ सेकेन्ड"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "१ मिनेट"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "१ घन्टा"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "बचत सुरु गर"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "वहीखाता देखाऊ"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "बचत बन्द गर"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "वहीखाताबाट हटाऊ"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "सुचि र रेखाचित्र देखाऊ"
+
+#~ msgid "Show waveform"
+#~ msgstr "तरङरेखा देखाऊ"
+
+#~ msgid "Time base"
+#~ msgstr "समय आधार"
+
+#~ msgid "Frequency base"
+#~ msgstr "आवृती आधार"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "अवरोध सचेतक"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "भोल्टेज सचेतक"
+
+#~ msgid "Picture"
+#~ msgstr "चित्र"
+
+#~ msgid "5 seconds"
+#~ msgstr "५ सेकेन्ड"
+
+#~ msgid "5 minutes"
+#~ msgstr "५ मिनेट"
+
+#~ msgid "Spectral power"
+#~ msgstr "वर्णपटीय शक्ति"
+
+#~ msgid "RMS: "
+#~ msgstr "आर एम एस:"
+
+#~ msgid "AVG : "
+#~ msgstr "औसत"
diff --git a/po/nl.po b/po/nl.po
new file mode 100644
index 0000000..18b685c
--- /dev/null
+++ b/po/nl.po
@@ -0,0 +1,239 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-10-12 00:30-0400\n"
+"PO-Revision-Date: 2008-10-23 01:49-0400\n"
+"Last-Translator: Myckel Habets <myckel@sdf.lonestar.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Meten"
+
+#: sheet_ui.py:37
+msgid "Show sheet and graphs"
+msgstr "Werkblad en grafieken weergeven"
+
+#: sheet_ui.py:42
+msgid "Show waveform"
+msgstr "Golfvorm weergeven"
+
+#: toolbar_top.py:44
+msgid "Sound"
+msgstr "Geluid"
+
+#: toolbar_top.py:48
+msgid "Sensors"
+msgstr "Sensors"
+
+#: sound_toolbar.py:52
+msgid "Sound "
+msgstr "Geluid "
+
+#: sound_toolbar.py:53
+msgid "Time Base "
+msgstr "Tijddomein "
+
+#: sound_toolbar.py:54
+msgid "Frequency Base "
+msgstr "Frequentiedomein "
+
+#: sound_toolbar.py:56
+msgid "X Axis Scale: 1 division = "
+msgstr "X-as schaal: 1 scheiding = "
+
+#: sound_toolbar.py:57
+msgid "ms "
+msgstr "ms "
+
+#: sound_toolbar.py:58
+msgid "Hz "
+msgstr "Hz "
+
+#: sound_toolbar.py:74
+msgid "Time base"
+msgstr "Tijddomein"
+
+#: sound_toolbar.py:82
+msgid "Frequency base"
+msgstr "Frequentiedomein"
+
+#: sound_toolbar.py:128 sound_toolbar.py:250
+msgid "Freeze the display"
+msgstr "Weergave bevriezen"
+
+#: sound_toolbar.py:149
+msgid "Now"
+msgstr "Nu"
+
+#: sound_toolbar.py:149 sensor_toolbar.py:92
+msgid "30 seconds"
+msgstr "30 seconden"
+
+#: sound_toolbar.py:149
+msgid "2 minutes"
+msgstr "2 minuten"
+
+#: sound_toolbar.py:149
+msgid "10 minutes"
+msgstr "10 minuten"
+
+#: sound_toolbar.py:149 sensor_toolbar.py:92
+msgid "30 minutes"
+msgstr "30 minuten"
+
+#: sound_toolbar.py:168 sound_toolbar.py:189 sound_toolbar.py:200
+#: sensor_toolbar.py:111 sensor_toolbar.py:142
+msgid "Start Recording"
+msgstr "Start opnemen"
+
+#: sound_toolbar.py:184 sensor_toolbar.py:131
+msgid "Stop Recording"
+msgstr "Stop opnemen"
+
+#: sound_toolbar.py:243
+msgid "Unfreeze the display"
+msgstr "Weergave hervatten"
+
+#: sensor_toolbar.py:41
+msgid "Sensors, DC (connect sensor to pink 'Mic In' on left side of XO) "
+msgstr ""
+"Sensors, DC (verbind sensor met roze 'Mic In' aan de linkerzijde van de XO) "
+
+#: sensor_toolbar.py:42
+msgid "Bias/Offset Enabled "
+msgstr "Bias/Uitlijnen geactiveerd "
+
+#: sensor_toolbar.py:43
+msgid "Bias/Offset Disabled "
+msgstr "Bias/Uitlijnen gedeactiveerd "
+
+#: sensor_toolbar.py:63
+msgid "Resistance Sensor"
+msgstr "Weerstandsensor"
+
+#: sensor_toolbar.py:71
+msgid "Voltage Sensor"
+msgstr "Voltage sensor"
+
+#: sensor_toolbar.py:92 sensor_toolbar.py:98 logging_ui.py:39
+msgid "1 second"
+msgstr "1 seconde"
+
+#: sensor_toolbar.py:92 logging_ui.py:39
+msgid "5 minutes"
+msgstr "5 minuten"
+
+#: logging_ui.py:39 logging_ui.py:45
+msgid "Picture"
+msgstr "Afbeelding"
+
+#: logging_ui.py:39
+msgid "5 seconds"
+msgstr "5 seconden"
+
+#: logging_ui.py:39
+msgid "1 minute"
+msgstr "1 minuut"
+
+#: logging_ui.py:39
+msgid "1 hour"
+msgstr "1 uur"
+
+#: logging_ui.py:63 logging_ui.py:91 logging_ui.py:100
+msgid "Start Logging"
+msgstr "Begin loggen"
+
+#: logging_ui.py:87
+msgid "Stop Logging"
+msgstr "Stop loggen"
+
+#: journal.py:182 journal.py:196
+msgid " logging sessions, from Measure Activity"
+msgstr " sessielogboeken, van Meten activiteit"
+
+#: journal.py:223
+msgid "Session: "
+msgstr "Sessie: "
+
+#: journal.py:224
+msgid "User: "
+msgstr "Gebruiker: "
+
+#: journal.py:225
+msgid "Interval: "
+msgstr "Interval: "
+
+#: journal.py:352
+msgid "Waveform "
+msgstr "Golfvorm "
+
+#~ msgid "Spectrum value"
+#~ msgstr "Spectrumwaarde"
+
+#~ msgid "RMS : "
+#~ msgstr "RMS : "
+
+#~ msgid "AVG : "
+#~ msgstr "Gemiddeld : "
+
+#~ msgid "Scale:"
+#~ msgstr "Schaal:"
+
+#~ msgid "X Axis: "
+#~ msgstr "X-as:"
+
+#~ msgid "Y Axis : "
+#~ msgstr "Y-as:"
+
+#~ msgid "Click for DC"
+#~ msgstr "Klik voor DC"
+
+#~ msgid "Click for Bias Off"
+#~ msgstr "Klik voor Bias Uit"
+
+#~ msgid "Click for Frequency base"
+#~ msgstr "Klik voor frequentieschaal"
+
+#~ msgid "Pause"
+#~ msgstr "Pauze"
+
+#~ msgid "Show values"
+#~ msgstr "Toon waarden"
+
+#~ msgid "Click for AC"
+#~ msgstr "Klik voor AC"
+
+#~ msgid "Click for Bias On"
+#~ msgstr "Klik voor Bias Aan"
+
+#~ msgid "Click for Time base"
+#~ msgstr "Klik voor tijdschaal"
+
+#~ msgid "Hide values"
+#~ msgstr "Verberg waarden"
+
+#~ msgid "Resume"
+#~ msgstr "Hervatten"
+
+#~ msgid "Snapshot"
+#~ msgstr "Momentopname"
+
+#~ msgid "Show Log"
+#~ msgstr "Toon logboek"
+
+#~ msgid "Remove Log"
+#~ msgstr "Verwijder logboek"
+
+#~ msgid "AVG : "
+#~ msgstr "Gemiddeld: "
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/pl.po b/po/pl.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/ps.po b/po/ps.po
new file mode 100644
index 0000000..d426a11
--- /dev/null
+++ b/po/ps.po
@@ -0,0 +1,146 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-03-12 04:24-0400\n"
+"Last-Translator: Usman Mansoor Ansari <jalalkut@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "اندازه کول"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "د سپكټرم ارزښت"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "مېچل:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "افقي محوور: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "عمودي محور: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "DC لپاره ټک وکړﺉ"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "د باېس بندولو لپاره ټک کړﺉ"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "د فرېكوېنسي بنسټ لپاره ټك وكړئ"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "ځنډ"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "ارزښت ښودنل"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "اې.سي لپاره ټك كړئ"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "باېس ان لپاره ټك كړئ"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "د وخت بنسټ لپاره ټك كړئ"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "ارزښتونه پټول"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "کارمخینه"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "سملاسي انځور"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "۱ ثانیه"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "۱ دقیقه"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "۱ ساعت"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "ننوتون پيلونه"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "خبرال وښاياست"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "ننوتون تمول"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "خبرال لر كړئ"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "ګراف او پاڼه ښودل"
+
+#~ msgid "Show waveform"
+#~ msgstr "د څپې فارم ښودل"
+
+#~ msgid "Time base"
+#~ msgstr "د وخت بنسټ"
+
+#~ msgid "Frequency base"
+#~ msgstr "د فرېکوېنسي بنسټ"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "د مخنیوي حس"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "د ولټېج حس"
+
+#~ msgid "Picture"
+#~ msgstr "انځور"
+
+#~ msgid "5 seconds"
+#~ msgstr "۵ ثانیې"
+
+#~ msgid "5 minutes"
+#~ msgstr "۵ دقیقې"
+
+#~ msgid "Spectral power"
+#~ msgstr "خیالي ځواک"
diff --git a/po/pseudo.po b/po/pseudo.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/pseudo.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/pt.po b/po/pt.po
new file mode 100644
index 0000000..0a5f9ee
--- /dev/null
+++ b/po/pt.po
@@ -0,0 +1,130 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-08-26 19:15-0400\n"
+"Last-Translator: Eduardo H. Silva <HoboPrimate@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Medir"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Valor de espectro"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Escala:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Eixo X: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Eixo Y: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Clicar para DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Clicar para Bias Off"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Clicar para Frequência base"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Pausar"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Mostrar valores"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Clicar para AC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Clicar para Bias On"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Clicar para Tempo base"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Esconder valores"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Continuar"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Fotografia"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 segundo"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 minuto"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 hora"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Começar a Registar"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Mostrar Registo"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Parar o Registo"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Remover Registo"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 segundo"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 minuto"
+
+#~ msgid "RMS: "
+#~ msgstr "RMS: "
+
+#~ msgid "AVG : "
+#~ msgstr "AVG : "
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..85f401c
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,151 @@
+# Portuguese translations for Measure package.
+# Copyright (C) 2007 Measure
+# This file is distributed under the same license as the Measure package.
+# Arjun Sarwal arjun@laptop.org, 2007
+msgid ""
+msgstr ""
+"Project-Id-Version: Measure\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-03-18 10:23-0300\n"
+"Last-Translator: Juliano Bittencourt <juliano@lec.ufrgs.br>\n"
+"Language-Team: Portuguese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Medir"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Escala:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Eixo X: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Eixo Y : "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 segundo"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 minuto"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 hora"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Iniciar Registro"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Parar Registro"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Mostrar régua e gráficos"
+
+#~ msgid "Show waveform"
+#~ msgstr "Mostrar forma da onda"
+
+#~ msgid "Time base"
+#~ msgstr "Tempo de base"
+
+#~ msgid "Frequency base"
+#~ msgstr "Freqüência de base"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "Sensor de Resistência"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "Sensor de Voltagem"
+
+#~ msgid "Picture"
+#~ msgstr "Imagem"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 segundos"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 minutos"
+
+#~ msgid "Spectral power"
+#~ msgstr "Potência Espectral "
+
+# msec is milliSeconds
+#~ msgid " msec"
+#~ msgstr " mseg"
diff --git a/po/qu.po b/po/qu.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/qu.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/po/ro.po b/po/ro.po
new file mode 100644
index 0000000..8eb3603
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,128 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-02-19 14:42-0500\n"
+"Last-Translator: Adi Roiban <adiroiban@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
+"20)) ? 1 : 2);;\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Măsurători"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Valoare spectrum"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Scară:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Axa X:_"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Axa Y:_"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+#, fuzzy
+msgid "Click for DC"
+msgstr "Clic pentru DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Pauză"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Afişează valori"
+
+#: electrical_ui.py:141
+#, fuzzy
+msgid "Click for AC"
+msgstr "Clic pentru DC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Ascunde valori"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Reia"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "o secundă"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "un minut"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "o oră"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Porneşte înregistrare"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Afişează înregistrarea"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Opreşte înregistrare"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Şterge înregistarea"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "o secundă"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "un minut"
diff --git a/po/ru.po b/po/ru.po
new file mode 100644
index 0000000..f4c9d17
--- /dev/null
+++ b/po/ru.po
@@ -0,0 +1,133 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2007-12-07 11:35+0000\n"
+"Last-Translator: Maxim Osipov <maxim.osipov@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Измерить"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Значение спектра"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "Среднее Квадратичное : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "Среднее : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Масштаб:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "Ось Х: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Ось Y: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Щелкните для Постоянного Тока"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Щелкните чтобы выключить Смещение"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Нажмите чтобы показать ось Частот"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Пауза"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Показать значения"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Щелкните для Переменного Тока"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Щелкните чтобы включить Смещение"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Щелкните для оси Времени"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "Спрятать значения"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Продолжить"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Снимок экрана"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 секунда"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 минута"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 час"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Начать Запись"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "Показать Запись"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Остановить Запись"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Удалить Запись"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 секунда"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 минута"
+
+#~ msgid "RMS: "
+#~ msgstr "Среднее Квадратичное: "
+
+# This is quite long, may abbreviate to "Сред." or even "Ср."
+#~ msgid "AVG : "
+#~ msgstr "Среднее: "
diff --git a/po/rw.po b/po/rw.po
new file mode 100644
index 0000000..7602da4
--- /dev/null
+++ b/po/rw.po
@@ -0,0 +1,119 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-08-27 11:49+0200\n"
+"Last-Translator: \n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "Gupima"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "Spectrum value"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG : "
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "Ihindurangano :"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X Axis: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y Axis : "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "Kanda kubwa DC"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "Click for Bias Off"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "Kanda kubwa ferekanse fatizo"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "Hagarika by`akanya gato"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "Erekana agaciro"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "Kanda kubwa AC"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "Click for Bias On"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "Kanda kubw`igihe fatizo"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "agaciro Gahishwe"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "Gusubukura"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "Snapshot"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "Isegonda rimwe"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "Umunota umwe"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "Isaha imwe"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "Tangira Winjire"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "erekana Log"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "Sigaho Kwinjira"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "Kuraho Log"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "Kwerekana urupapuro n'ibishushanyo"
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..487dc8d
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,137 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-07-24 14:34+0100\n"
+"Last-Translator: Satyanarayana Murthy Saladi <saladism@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "కొలువు"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "పటలము విలువ"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "అర్ ఎం ఎస్ : "
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "ఎవిజి :"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "కొలమానం:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "ఎక్స్(X) అక్షం: "
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "వై(Y) అక్షం: "
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "డిసీ (DC) కొరకై నొక్కుము"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "బయాస్ నిలుపు చేయుటకై నొక్కుము"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "ఫ్రీక్వెంసీ మూలం కొరకై నొక్కుము"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "నిలుపు"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "విలువలను చూపు"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "ఎసీ (AC) కొరకై నొక్కుము"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "బయాస్ ఆన్ చేయుటకై నొక్కుము"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "కాలం మూలం కొరకై నొక్కుము"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "విలువలను దాచు"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "పునరారంభించు"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "క్లుప్తంగా చూపు"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 సెకను"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 నిమిషము"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 గంట"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "గమనించు"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "గమనిక చూపు"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "గమనించటం నిలిపి వేయి"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "గమనిక తీసివేయి"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "గ్రాఫులు చూపు"
+
+#~ msgid "Show waveform"
+#~ msgstr "తరంగాన్నిచూపు"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "రెసిస్టాంశ్ శెన్​సర్"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "వోల్టేజీ శెన్​సర్"
+
+#~ msgid "Picture"
+#~ msgstr "బొమ్మ"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 సెకనులు"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 నిమిషములు"
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 0000000..d41ae45
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,131 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2007-12-11 16:45+0000\n"
+"Last-Translator: Hugh Thaweesak Koanantakool <htk999@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "วัดค่า"
+
+# correction
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "ค่าสเป็กตรัม"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "ค่าอาร์เอ็มเอส_ _ _: _"
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "ค่าเฉลี่ย_ _ _: _"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr "มาตราส่วน:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "แกน X: _"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "แกน Y: _"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "กดเพื่อใช้กระแสตรง"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "กดเพื่อปิดไบแอส"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "กดเพื่อใช้ฐานความถี่"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "พัก"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "แสดงค่า"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "กดเพื่อใช้กระแสสลับ"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "กดเพื่อเปิดไบแอส"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "กดเพื่อใช้ฐานเวลา"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "ซ่อนค่า"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "ทำต่อ"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "บันทึกภาพ"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 วินาที"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 นาที"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 ชั่วโมง"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "เริ่มบันทึกค่า"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "แสดงค่าที่บันทึกไว้"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "หยุดการบันทึกค่า"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "ลบค่าที่บันทึกไว้"
+
+#, fuzzy
+#~ msgid "5 seconds"
+#~ msgstr "1 วินาที"
+
+#, fuzzy
+#~ msgid "5 minutes"
+#~ msgstr "1 นาที"
+
+#~ msgid "RMS: "
+#~ msgstr "อาร์เอ็มเอส:_"
+
+#~ msgid "AVG : "
+#~ msgstr "ค่าเฉลี่ย :_"
diff --git a/po/ur.po b/po/ur.po
new file mode 100644
index 0000000..f3ca807
--- /dev/null
+++ b/po/ur.po
@@ -0,0 +1,153 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: 2008-04-14 02:15-0400\n"
+"Last-Translator: Huda Sarfraz <huda.sarfraz@nu.edu.pk>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.1.0rc2\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr "ناپیں"
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr "سپیکٹرم قدر"
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr "RMS _ _ _: _"
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr "AVG _ _ _: _"
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr " پيمانہ:"
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr "X محور: _"
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr "Y محور: _"
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr "DC کے لئے کلک کريں"
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr "بائيس بند کرنے کے ليے کلک کريں"
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr "تعدد اساس کے ليے کلک کريں"
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr "روکیں"
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr "قدر ديکھائيں"
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr "AC کے ليے کلک کريں"
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr "بائيس چلانے کے ليے کلک کريں"
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr "وقت اساس کے ليے کلک کريں"
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr "قدریں چھپائيں"
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr "دوبارہ سے شروع کریں"
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr "فوری تصوير"
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr "1 سيکنڈ"
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr "1 منٹ"
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr "1 گھنٹہ"
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr "لاگ کرنا شروع کريں"
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr "لاگ ديکھائيں"
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr "لاگ کرنا روک دیں"
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr "لاگ ہٹائيں"
+
+#~ msgid "Show sheet and graphs"
+#~ msgstr "شيٹ اور گراف دکھائيں"
+
+#~ msgid "Show waveform"
+#~ msgstr "ويو فارم دکھائيں"
+
+#~ msgid "Time base"
+#~ msgstr "وقت بيس"
+
+#~ msgid "Frequency base"
+#~ msgstr "تعدد بیس"
+
+#~ msgid "Resistance Sensor"
+#~ msgstr "رزسٹنس سینسر"
+
+#~ msgid "Voltage Sensor"
+#~ msgstr "وولٹیج سینسر"
+
+#~ msgid "Picture"
+#~ msgstr "تصویر"
+
+#~ msgid "5 seconds"
+#~ msgstr "5 سيکنڈ"
+
+#~ msgid "5 minutes"
+#~ msgstr "5 منٹ"
+
+#~ msgid "Spectral power"
+#~ msgstr "سپيکٹريل پاور"
+
+#~ msgid "RMS: "
+#~ msgstr "RMS:_ "
+
+#~ msgid "AVG : "
+#~ msgstr "AVG:_"
diff --git a/po/yo.po b/po/yo.po
new file mode 100644
index 0000000..f58cfdc
--- /dev/null
+++ b/po/yo.po
@@ -0,0 +1,117 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-21 00:30-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Measure"
+msgstr ""
+
+#: drawWaveform.py:205 drawWaveform.py:260
+msgid "Spectrum value"
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "RMS : "
+msgstr ""
+
+#: drawWaveform.py:330
+msgid "AVG : "
+msgstr ""
+
+#: drawWaveform.py:331
+msgid "Scale:"
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "X Axis: "
+msgstr ""
+
+#: drawWaveform.py:332
+msgid "Y Axis : "
+msgstr ""
+
+#: electrical_ui.py:38 electrical_ui.py:151
+msgid "Click for DC"
+msgstr ""
+
+#: electrical_ui.py:50 electrical_ui.py:172
+msgid "Click for Bias Off"
+msgstr ""
+
+#: electrical_ui.py:61 electrical_ui.py:192
+msgid "Click for Frequency base"
+msgstr ""
+
+#: electrical_ui.py:116 electrical_ui.py:256
+msgid "Pause"
+msgstr ""
+
+#: electrical_ui.py:126 electrical_ui.py:203
+msgid "Show values"
+msgstr ""
+
+#: electrical_ui.py:141
+msgid "Click for AC"
+msgstr ""
+
+#: electrical_ui.py:163
+msgid "Click for Bias On"
+msgstr ""
+
+#: electrical_ui.py:183
+msgid "Click for Time base"
+msgstr ""
+
+#: electrical_ui.py:212
+msgid "Hide values"
+msgstr ""
+
+#: electrical_ui.py:249
+msgid "Resume"
+msgstr ""
+
+#: logging_ui.py:44 logging_ui.py:50
+msgid "Snapshot"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 second"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 minute"
+msgstr ""
+
+#: logging_ui.py:44
+msgid "1 hour"
+msgstr ""
+
+#: logging_ui.py:68 logging_ui.py:144
+msgid "Start Logging"
+msgstr ""
+
+#: logging_ui.py:82 logging_ui.py:167
+msgid "Show Log"
+msgstr ""
+
+#: logging_ui.py:134
+msgid "Stop Logging"
+msgstr ""
+
+#: logging_ui.py:159
+msgid "Remove Log"
+msgstr ""
diff --git a/sensor_toolbar.py b/sensor_toolbar.py
new file mode 100644
index 0000000..6fa643e
--- /dev/null
+++ b/sensor_toolbar.py
@@ -0,0 +1,240 @@
+#! /usr/bin/python
+#
+# Author: Arjun Sarwal arjun@laptop.org
+# Copyright (C) 2007, OLPC
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import pygtk
+import gtk
+import time
+from gettext import gettext as _
+
+import config #This has all the globals
+
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.combobox import ComboBox
+from sugar.graphics.toolcombobox import ToolComboBox
+from sugar import profile
+
+# 'Sensor' toolbar class
+class SensorToolbar(gtk.Toolbar):
+
+ def __init__(self, audiograb, textbox, journal):
+
+ gtk.Toolbar.__init__(self)
+
+ self._STR_BASIC = _("Sensors, DC (connect sensor to pink 'Mic In' on left side of XO) ")
+ self._STR1 = _("Bias/Offset Enabled ")
+ self._STR2 = _("Bias/Offset Disabled ")
+
+ self.gain_state = None
+ self.boost_state = None
+
+ self.string_for_textbox = ""
+
+ self._LOG_SEPARATOR_DIST = 20
+
+
+ self.ag = audiograb
+ self.textbox_copy = textbox
+ self.ji = journal
+
+ self.logging_status = False
+
+ #######################Resistance#####################
+ self._resistance = ToolButton('bias-on2')
+ self.insert(self._resistance, -1)
+ self._resistance.show()
+ self._resistance.set_tooltip(_('Resistance Sensor'))
+ self._resistance.connect('clicked', self.set_resistance_voltage_mode, 'resistance')
+ ###################################################
+
+ #######################Voltage########################
+ self._voltage = ToolButton('bias-off')
+ self.insert(self._voltage, -1)
+ self._voltage.show()
+ self._voltage.set_tooltip(_('Voltage Sensor'))
+ self._voltage.connect('clicked', self.set_resistance_voltage_mode, 'voltage')
+ ####################################################
+
+
+ for seperator_count_temp in range( 1, self._LOG_SEPARATOR_DIST):
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ self.insert(separator, -1)
+
+ self.loginterval_img = gtk.Image()
+ self.loginterval_img.set_from_file(config.ICONS_DIR + '/sample_rate.svg')
+ self.loginterval_img_tool = gtk.ToolItem()
+ self.loginterval_img_tool.add(self.loginterval_img)
+ self.insert(self.loginterval_img_tool,-1)
+ self.loginterval_img.show()
+ self.loginterval_img_tool.show()
+
+
+ #######################Logging Interval#####################
+ self._loginterval_combo = ComboBox()
+ self.interval = [_('1 second') , _('30 seconds'), _('5 minutes'), _('30 minutes')]
+
+ self._interval_changed_id = self._loginterval_combo.connect("changed", self.loginterval_control)
+
+ for i, s in enumerate(self.interval):
+ self._loginterval_combo.append_item(i, s, None)
+ if s == _('1 second'):
+ self._loginterval_combo.set_active(i)
+
+ self._loginterval_tool = ToolComboBox(self._loginterval_combo)
+ self.insert(self._loginterval_tool,-1)
+ self._loginterval_tool.show()
+ self.logginginterval_status = '1second'
+ ############################################################
+
+ #######################Start Logging/Stop Logging#####################
+ self._record = ToolButton('media-record')
+ self.insert(self._record, -1)
+ self._record.show()
+ self._record.set_tooltip(_('Start Recording'))
+ self._record.connect('clicked', self.record_control)
+ ######################################################################
+
+
+ def record_control(self, data=None):
+ """Depending upon the selected interval, does either
+ a logging session, or just logs the current buffer"""
+
+ # config.LOGGING_IN_SESSION appears to be a duplicate of
+ # self.logging_status.
+ #
+ if config.LOGGING_IN_SESSION == False:
+ Xscale = (1.00/self.ag.get_sampling_rate())
+ Yscale = 0.0
+ interval = self.interval_convert()
+ username = profile.get_nick_name()
+ self.ji.start_new_session(username, Xscale, Yscale, self.logginginterval_status)
+ self.ag.set_logging_params(True, interval, False)
+ config.LOGGING_IN_SESSION = True
+ self.logging_status = True
+
+ self._record.set_icon('media-playback-stop')
+ self._record.show()
+ self._record.set_tooltip(_('Stop Recording'))
+ else:
+ if self.logging_status == True:
+ self.ag.set_logging_params(False)
+ time.sleep(0.2)
+ self.ji.stop_session()
+ config.LOGGING_IN_SESSION = False
+ self.logging_status = False
+
+ self._record.set_icon('media-record')
+ self._record.show()
+ self._record.set_tooltip(_('Start Recording'))
+
+
+ def interval_convert(self):
+ """Converts picture/1second/5seconds/1minute/5minutes to an integer
+ which denotes the number of times the audiograb buffer must be called before a value is written.
+ When set to 0, the whole of current buffer will be written"""
+ if self.logginginterval_status == '1second':
+ return 89
+ elif self.logginginterval_status == '30second':
+ return 2667
+ elif self.logginginterval_status == '5minute':
+ return 26667
+ elif self.logginginterval_status == '30minute':
+ return 160000
+
+
+
+ def loginterval_control(self, combobox):
+
+ if (self._loginterval_combo.get_active() != -1):
+ if (self._loginterval_combo.get_active() == 0):
+ self.logginginterval_status = '1second'
+ if (self._loginterval_combo.get_active() == 1):
+ self.logginginterval_status = '30second'
+ if (self._loginterval_combo.get_active() == 2):
+ self.logginginterval_status = '5minute'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = '30minute'
+
+
+
+ def set_resistance_voltage_mode(self, data=None, mode_to_set='resistance'):
+ if mode_to_set == 'resistance' and self.get_mode()=='voltage' :
+ self.set_mode('resistance')
+ self._resistance.set_icon('bias-on2')
+ self._voltage.set_icon('bias-off')
+ self._resistance.show()
+ self._voltage.show()
+ self._update_string_for_textbox()
+ return False
+
+ if mode_to_set == 'voltage' and self.get_mode()=='resistance' :
+ self.set_mode('voltage')
+ self._resistance.set_icon('bias-on')
+ self._voltage.set_icon('bias-off2')
+ self._resistance.show()
+ self._voltage.show()
+ self._update_string_for_textbox()
+ return False
+ return False
+
+
+ def get_mode(self):
+ if self.ag.get_bias()==False and self.ag.get_dc_mode()==True :
+ return 'voltage'
+ elif self.ag.get_bias()==True and self.ag.get_dc_mode()==True :
+ return 'resistance'
+ else:
+ return 'error'
+
+
+ def set_mode(self, mode='resistance'):
+ if mode=='resistance':
+ self.ag.set_bias(True)
+ else:
+ self.ag.set_bias(False)
+ return
+
+
+ def context_off(self):
+ self.ag.pause_grabbing()
+
+ def context_on(self):
+ self.ag.resume_grabbing()
+ self.ag.set_dc_mode(True)
+ self.ag.set_bias(True)
+ self._update_string_for_textbox()
+ #self.gain_state = self.ag.get_capture_gain()
+ #self.boost_state = self.ag.get_mic_boost()
+ self.ag.set_capture_gain(0)
+ self.ag.set_mic_boost(False)
+
+
+ def _update_string_for_textbox(self):
+ self.string_for_textbox = ""
+ self.string_for_textbox += (self._STR_BASIC + "\n")
+ if self.ag.get_bias() == True:
+ self.string_for_textbox += self._STR1
+ else:
+ self.string_for_textbox += self._STR2
+ self.textbox_copy.set_data_params(0, self.string_for_textbox)
+
+
+
diff --git a/sheet.py b/sheet.py
new file mode 100755
index 0000000..6194989
--- /dev/null
+++ b/sheet.py
@@ -0,0 +1,102 @@
+"""import gtk
+from gtk import gdk
+import pygtk
+import matplotlib
+matplotlib.use('GTKAgg') # or 'GTK'
+from matplotlib.backends.backend_gtk import FigureCanvasGTK as FigureCanvas
+from matplotlib.figure import Figure
+from numpy.random import random
+
+
+class Sheet(gtk.DrawingArea):
+
+ def __init__(self, filepath, journal):
+ gtk.DrawingArea.__init__(self)
+
+ self.filepath = filepath
+ self.ji = journal
+ self.numpy_arrays = []
+
+ self.numRows = 0
+ self.numCols = 0
+ self.set_rows_and_cols()
+
+ self.vbox = gtk.VBox(False, 8)
+
+ self.sw = gtk.ScrolledWindow()
+ self.sw.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+
+ model = self.create_model()
+ self.treeview = gtk.TreeView(model)
+ self.treeview.set_rules_hint(True)
+
+ # matplotlib stuff
+ fig = Figure(figsize=(6,4))
+ self.canvas = FigureCanvas(fig) # a gtk.DrawingArea
+ self.sw_canvas = gtk.ScrolledWindow()
+ self.sw_canvas.set_shadow_type(gtk.SHADOW_ETCHED_IN)
+ self.sw_canvas.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.sw_canvas.add_with_viewport(self.canvas)
+ self.vbox.pack_start(self.sw_canvas,True, True)
+
+
+ ax = fig.add_subplot(111)
+ self.line, = ax.plot(self.data[0,:], 'go') # plot the first row
+ self.treeview.connect('row-activated', self.plot_row)
+ self.sw.add_with_viewport(self.treeview)
+
+ label = gtk.Label('Double click a row to plot the data')
+ self.vbox.pack_start(label, False, False)
+
+ self.vbox.pack_start(self.sw, True, True)
+ self.sw.set_size_request(100,100)
+ self.treeview.set_size_request(100,100)
+
+ self.add_columns()
+
+ self.add_events(gdk.BUTTON_PRESS_MASK | gdk.KEY_PRESS_MASK | gdk.KEY_RELEASE_MASK)
+ self.show_all()
+
+
+
+ self.sw_canvas.set_size_request(100,100)
+
+
+ def set_rows_and_cols(self):
+ """Sets the rows and columns"""
+ self.numRows = self.ji.get_number_of_records()
+ self.numCols = self.ji.get_number_of_cols()
+
+
+
+ def plot_row(self, treeview, path, view_column):
+ ind, = path # get the index into data
+ points = self.data[ind,:]
+ self.line.set_ydata(points)
+ self.canvas.draw()
+
+
+ def add_columns(self):
+ for i in range(self.numCols):
+ column = gtk.TreeViewColumn('%d'%i, gtk.CellRendererText(), text=i)
+ self.treeview.append_column(column)
+
+
+ def create_model(self):
+ types = [float]*self.numCols
+ store = gtk.ListStore(*types)
+
+ for row in self.data:
+ store.append(row)
+ return store
+"""
+
+ def read_all_records(self):
+ """Reads the complete csv file into the gtk Tree view"""
+ self.data = self.ji.get_all_records() ##This, for now gets just all the numerical values
+
+
+ def draw_dotted_plot(self):
+ """Draws the dotted plot"""
+
diff --git a/sheet_ui.py b/sheet_ui.py
new file mode 100755
index 0000000..ce90e6b
--- /dev/null
+++ b/sheet_ui.py
@@ -0,0 +1,46 @@
+"""
+import pygtk
+import gtk
+import gobject
+from gettext import gettext as _
+
+
+import config #This has all the globals
+
+from sugar.activity.activity import ActivityToolbox, EditToolbar
+from sugar.graphics.toolcombobox import ToolComboBox
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.toggletoolbutton import ToggleToolButton
+from sugar.graphics.combobox import ComboBox
+from sugar.graphics.menuitem import MenuItem
+
+class SheetToolbar(gtk.Toolbar):
+
+ def __init__(self, sheet, activity):
+
+ gtk.Toolbar.__init__(self)
+
+ self.activity = activity
+
+ self._sheet_show = ToolButton('media-record')
+ self.insert(self._sheet_show, -1)
+ self._sheet_show.show()
+ self._sheet_show.set_tooltip(_('Show sheet and graphs'))
+ self._sheet_show.connect('clicked', self.sheet_show_control)
+ self.show_window = 'wave' #other is sheet
+
+ """
+ def sheet_show_control(self, data=None):
+ """Controls whether to show the real time waveform or the sheet+graph interface"""
+ if self.show_window=='sheet':
+ self.activity.set_show_hide_windows(0)
+ self._sheet_show.set_tooltip(_('Show sheet and graphs'))
+ self.show_window='wave'
+ return
+ elif self.show_window=='wave':
+ self.activity.set_show_hide_windows(1)
+ self._sheet_show.set_tooltip(_('Show waveform'))
+ self.show_window='sheet'
+ return
+
+
diff --git a/sound_toolbar.py b/sound_toolbar.py
new file mode 100644
index 0000000..589698e
--- /dev/null
+++ b/sound_toolbar.py
@@ -0,0 +1,355 @@
+#! /usr/bin/python
+#
+# Author: Arjun Sarwal arjun@laptop.org
+# Copyright (C) 2007, OLPC
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import pygst
+pygst.require("0.10")
+import pygtk
+import gtk
+import os
+import gobject
+from time import *
+from gettext import gettext as _
+
+import config #This has all the globals
+import audioop
+
+from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.combobox import ComboBox
+from sugar.graphics.toolcombobox import ToolComboBox
+
+
+class SoundToolbar(gtk.Toolbar):
+
+ def __init__(self, wave, audiograb, textbox, journal, activity):
+
+ gtk.Toolbar.__init__(self)
+
+ self.wave_copy = wave
+ self.audiograb_copy = audiograb
+ self.textbox_copy = textbox
+ self.ji = journal
+ self.activity = activity
+
+ self._LOG_SEPARATOR_DIST = 10
+
+ self._STR_BASIC = _("Sound ")
+ self._STR1 = _("Time Base ")
+ self._STR2 = _("Frequency Base ")
+ self._STR_SCALEX = ""
+ self._STR_XAXIS1 = _("X Axis Scale: 1 division = ")
+ self._STR_XAXIS2 = _("ms ")
+ self._STR_XAXIS3 = _("Hz ")
+
+
+ self.string_for_textbox = ""
+
+ self.g = 1.0
+ self.y_mag = 3.0
+ self.capture_gain = config.CAPTURE_GAIN
+ self.mic_boost = config.MIC_BOOST
+
+ self.logging_status = False
+
+ #######################time#########################
+ self._time = ToolButton('domain-time2')
+ self.insert(self._time, -1)
+ self._time.show()
+ self._time.set_tooltip(_('Time base'))
+ self._time.connect('clicked', self._timefreq_control_cb, True)
+ ###################################################
+
+ #######################frequency######################
+ self._freq = ToolButton('domain-freq')
+ self.insert(self._freq, -1)
+ self._freq.show()
+ self._freq.set_tooltip(_('Frequency base'))
+ self._freq.connect('clicked', self._timefreq_control_cb, False)
+ ####################################################
+
+ #self.time_freq_state = self.wave_copy.get_fft_mode()
+ #self._time.set_active(not(self.time_freq_state))
+ #self._freq.set_active(self.time_freq_state)
+
+ self.freq_low_img = gtk.Image()
+ self.freq_high_img = gtk.Image()
+
+ self.freq_low_img.set_from_file(config.ICONS_DIR + '/freq-high.svg')
+ self.freq_high_img.set_from_file(config.ICONS_DIR + '/freq-low.svg')
+
+ self.freq_low_img_tool = gtk.ToolItem()
+ self.freq_high_img_tool = gtk.ToolItem()
+
+ self.freq_low_img_tool.add(self.freq_low_img)
+ self.freq_high_img_tool.add(self.freq_high_img)
+
+
+ #######################frequency control#####################
+ self.adjustmentf = gtk.Adjustment(70, 10, 70 ,20, 20, 0.0)
+ self.adjustmentf.connect("value_changed", self.cb_page_sizef, self.adjustmentf)
+ self._freq_range = gtk.HScale(self.adjustmentf)
+ self._freq_range.set_draw_value(False)
+ self._freq_range.set_update_policy(gtk.UPDATE_CONTINUOUS)
+ self._freq_range.set_size_request(120,15)
+ self._freq_range_tool = gtk.ToolItem()
+ self._freq_range_tool.add(self._freq_range)
+ ############################################################
+
+ self.insert(self.freq_low_img_tool,-1)
+ self.insert(self._freq_range_tool, -1)
+ self.insert(self.freq_high_img_tool,-1)
+
+ self.freq_low_img.show()
+ self.freq_high_img.show()
+
+ self.freq_low_img_tool.show()
+ self.freq_high_img_tool.show()
+
+ #######################pause button######################
+ self._pause = ToolButton('media-playback-pause')
+ self.insert(self._pause, -1)
+ self._pause.show()
+ self._pause.set_tooltip(_('Freeze the display'))
+ self._pause.connect('clicked', self._pauseplay_control_cb)
+ ####################################################
+
+ for seperator_count_temp in range( 1, self._LOG_SEPARATOR_DIST):
+ separator = gtk.SeparatorToolItem()
+ separator.set_draw(False)
+ self.insert(separator, -1)
+
+
+ self.loginterval_img = gtk.Image()
+ self.loginterval_img.set_from_file(config.ICONS_DIR + '/sample_rate.svg')
+ self.loginterval_img_tool = gtk.ToolItem()
+ self.loginterval_img_tool.add(self.loginterval_img)
+ self.insert(self.loginterval_img_tool,-1)
+ self.loginterval_img.show()
+ self.loginterval_img_tool.show()
+
+
+ #######################Logging Interval#####################
+ self._loginterval_combo = ComboBox()
+ self.interval = [_('Now'), _('30 seconds') , _('2 minutes'), _('10 minutes') , _('30 minutes') ]
+
+ self._interval_changed_id = self._loginterval_combo.connect("changed", self.loginterval_control)
+
+ for i, s in enumerate(self.interval):
+ self._loginterval_combo.append_item(i, s, None)
+ if s == 'Now':
+ self._loginterval_combo.set_active(i)
+
+ self._loginterval_tool = ToolComboBox(self._loginterval_combo)
+ self.insert(self._loginterval_tool,-1)
+ self._loginterval_tool.show()
+ self.logginginterval_status = 'picture'
+ ############################################################
+
+ #######################Start Logging/Stop Logging#####################
+ self._record = ToolButton('media-record')
+ self.insert(self._record, -1)
+ self._record.show()
+ self._record.set_tooltip(_('Start Recording'))
+ self._record.connect('clicked', self.record_control)
+ ######################################################################
+
+
+
+ def record_control(self, data=None):
+ """Depending upon the selected interval, does either
+ a logging session, or just logs the current buffer"""
+ if config.LOGGING_IN_SESSION == False:
+ interval = self.interval_convert()
+ self.audiograb_copy.set_logging_params(True, interval, True)
+ config.LOGGING_IN_SESSION = True
+ self.logging_status = True
+ self._record.set_icon('media-playback-stop')
+ self._record.show()
+ self._record.set_tooltip(_('Stop Recording'))
+
+ if interval==0:
+ self._record.set_icon('media-record')
+ self._record.show()
+ self._record.set_tooltip(_('Start Recording'))
+ self.record_state = False
+ config.LOGGING_IN_SESSION = False
+ self.logging_status = False
+ else:
+ if self.logging_status == True:
+ self.audiograb_copy.set_logging_params(False)
+ config.LOGGING_IN_SESSION = False
+ self.logging_status = False
+ self._record.set_icon('media-record')
+ self._record.show()
+ self._record.set_tooltip(_('Start Recording'))
+
+
+ def interval_convert(self):
+ """Converts picture/time interval to an integer
+ which denotes the number of times the audiograb buffer must be called before a value is written.
+ When set to 0, the whole of current buffer will be written
+ 1second= about 66 ticks at 48khz sampling"""
+ if self.logginginterval_status == 'picture':
+ return 0
+ elif self.logginginterval_status == '30second':
+ return 2667
+ elif self.logginginterval_status == '2minute':
+ return 10668
+ elif self.logginginterval_status == '10minute':
+ return 53340
+ elif self.logginginterval_status == '30minute':
+ return 160000
+
+
+
+ def loginterval_control(self, combobox):
+
+ if (self._loginterval_combo.get_active() != -1):
+ if (self._loginterval_combo.get_active() == 0):
+ self.logginginterval_status = 'picture'
+ if (self._loginterval_combo.get_active() == 1):
+ self.logginginterval_status = '30second'
+ if (self._loginterval_combo.get_active() == 2):
+ self.logginginterval_status = '2minute'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = '10minute'
+ if (self._loginterval_combo.get_active() == 3):
+ self.logginginterval_status = '30minute'
+
+
+
+
+ def _pauseplay_control_cb(self, data=None):
+
+ if self.audiograb_copy.get_freeze_the_display()==True:
+ self.audiograb_copy.set_freeze_the_display(False)
+ self._pause.set_icon('media-playback-pause-insensitive')
+ self._pause.set_tooltip(_('Unfreeze the display'))
+ self._pause.show()
+ return False
+
+ if self.audiograb_copy.get_freeze_the_display()==False:
+ self.audiograb_copy.set_freeze_the_display(True)
+ self._pause.set_icon('media-playback-pause')
+ self._pause.set_tooltip(_('Freeze the display'))
+ self._pause.show()
+ return False
+
+ return False
+
+
+
+ def _timefreq_control_cb(self, data=None, time_state=True):
+
+ if time_state==True and self.wave_copy.get_fft_mode()==True:
+ self.wave_copy.set_fft_mode(False)
+ self._time.set_icon('domain-time2')
+ self._freq.set_icon('domain-freq')
+ self._time.show()
+ self._freq.show()
+ self._update_string_for_textbox()
+ return False
+
+ if time_state==False and self.wave_copy.get_fft_mode()==False:
+ self.wave_copy.set_fft_mode(True)
+ self._time.set_icon('domain-time')
+ self._freq.set_icon('domain-freq2')
+ self._time.show()
+ self._freq.show()
+ self._update_string_for_textbox()
+ return False
+
+ return False
+
+
+ def cb_page_sizef(self, get, data=None):
+
+ if(get.value>=10 and get.value<20):
+ self._freq_range.set_value(10)
+ self.audiograb_copy.set_sampling_rate(4000)
+ self.wave_copy.set_freq_range(1)
+
+ if(get.value>=20 and get.value<46):
+ self._freq_range.set_value(30)
+ self.audiograb_copy.set_sampling_rate(4000)
+ self.wave_copy.set_freq_range(2)
+
+ if(get.value>=46 and get.value<62):
+ self._freq_range.set_value(50)
+ self.audiograb_copy.set_sampling_rate(16000)
+ self.wave_copy.set_freq_range(3)
+
+ if(get.value>=62 and get.value<=70):
+ self._freq_range.set_value(70)
+ self.audiograb_copy.set_sampling_rate(48000)
+ self.wave_copy.set_freq_range(4)
+
+ self._update_string_for_textbox()
+
+ return True
+
+
+ def calculate_x_axis_scale(self):
+ sampling_rate = self.audiograb_copy.get_sampling_rate()
+ draw_interval = self.wave_copy.get_drawing_interval()
+
+ if self.wave_copy.get_fft_mode() == False:
+ scale = (50000.0/sampling_rate)/draw_interval
+ #TODO: fix this [:4] bad bad hack!
+ self._STR_SCALEX = self._STR_XAXIS1 + str(scale)[:4] + self._STR_XAXIS2
+ return
+ else:
+ #TODO: fix this [:4] bad bad hack!
+ scale = 1.04167/draw_interval
+ self._STR_SCALEX = self._STR_XAXIS1 + str(scale)[:4] + self._STR_XAXIS3
+ return
+
+
+ def context_off(self):
+ """When some other context is switched to and the sound context is switched off"""
+ self.g, self.y_mag = self.wave_copy.get_mag_params()
+ self.capture_gain = self.audiograb_copy.get_capture_gain()
+ self.mic_boost = self.audiograb_copy.get_mic_boost()
+ self.audiograb_copy.stop_sound_device()
+ self.wave_copy.set_fft_mode(False)
+
+
+ def context_on(self):
+ """When the sound context is switched on"""
+ self.audiograb_copy.start_sound_device()
+ self.audiograb_copy.set_dc_mode(False)
+ self.audiograb_copy.set_bias(True)
+ self.audiograb_copy.set_capture_gain(self.capture_gain)
+ self.audiograb_copy.set_mic_boost(self.mic_boost)
+ self.wave_copy.set_fft_mode(False)
+ self.wave_copy.set_mag_params(self.g, self.y_mag)
+ self._update_string_for_textbox()
+
+
+ def _update_string_for_textbox(self):
+ self.calculate_x_axis_scale()
+ self.string_for_textbox = ""
+ self.string_for_textbox += (self._STR_BASIC + "\t")
+ if self.wave_copy.get_fft_mode() == False:
+ self.string_for_textbox += self._STR1
+ else:
+ self.string_for_textbox += self._STR2
+ self.string_for_textbox += ("\n" + self._STR_SCALEX)
+ self.textbox_copy.set_data_params(0, self.string_for_textbox)
+
diff --git a/textbox.py b/textbox.py
new file mode 100644
index 0000000..7ee9885
--- /dev/null
+++ b/textbox.py
@@ -0,0 +1,81 @@
+import gtk
+import pygtk
+from gettext import gettext as _
+import gobject
+
+import config #This has all the globals
+
+from sugar.graphics.toolbutton import ToolButton
+
+
+# Textbox class
+class TextBox:
+
+ def __init__(self):
+ self.box_main = gtk.HBox()
+ self.text_buffer = gtk.TextBuffer()
+ self.text_box = gtk.TextView(self.text_buffer)
+ self.box_main.pack_start(self.text_box, False, True, 0)
+ self.box_main.show_all()
+ #gobject.timeout_add(300, self.refresh_text_box)
+
+
+ self._SIZE_X = 1200
+ self._SIZE_Y = 50
+
+ self._data_params = []
+ self._data_show_state = []
+
+ self._set_default_data_params()
+ self._set_default_data_show_state()
+
+
+ def _set_default_data_params(self):
+ self._data_params.append('Time Scale')
+
+
+
+ def _set_default_data_show_state(self):
+ self._data_show_state.append(True)
+
+
+ def write_text(self, text_to_show=''):
+ self.text_buffer.set_text(text_to_show)
+ self.text_box.set_size_request(self._SIZE_X, self._SIZE_Y)
+ self.text_box.realize()
+
+
+ def refresh_text_box(self):
+ print "within textbox.py refresh_textbox called"
+ self._set_final_string()
+ self.write_text(self._final_string)
+ return True
+
+
+ def _set_final_string(self):
+ self._final_string = self._data_params[0]
+
+
+
+ def set_data_params(self, param_id = 0 , value = None):
+ """
+ Updates the parameters to show within the textbox
+ Param_id String
+ 0 string from sensors toolbar
+
+ """
+ if param_id==0:
+ self._data_params[0] = value
+ else:
+ pass
+
+
+ self.refresh_text_box()
+
+
+
+ def set_data_show_state(self, param_id = 0 , state = True):
+ self._data_show_state[param_id] = state
+
+
+
diff --git a/toolbar_side.py b/toolbar_side.py
new file mode 100755
index 0000000..2766158
--- /dev/null
+++ b/toolbar_side.py
@@ -0,0 +1,65 @@
+#! /usr/bin/python
+import pygtk
+import gtk
+import os
+
+import config #This has all the globals
+
+
+class SideToolbar(gtk.DrawingArea):
+
+ def __init__(self, wave):
+ gtk.DrawingArea.__init__(self)
+
+ self.wave_copy = wave
+ self.show_toolbar = True
+
+ self.adjustmenty = gtk.Adjustment(3.0, 0.0, 4.0 ,0.1, 0.1, 0.0)
+ self.adjustmenty.connect("value_changed", self.cb_page_sizey,\
+ self.adjustmenty)
+ self.yscrollbar = gtk.VScale(self.adjustmenty)
+ self.yscrollbar.set_draw_value(False)
+ self.yscrollbar.set_inverted(True)
+ self.yscrollbar.set_update_policy(gtk.UPDATE_CONTINUOUS)
+
+ self.img_amphigh = gtk.Image()
+ self.img_amplow = gtk.Image()
+
+ self.img_amphigh.set_from_file(config.ICONS_DIR + '/amp-high.svg')
+ self.img_amplow.set_from_file(config.ICONS_DIR + '/amp-low.svg')
+
+ self.box1 = gtk.VBox(False,0)
+ self.box1.pack_start(self.img_amphigh, False, True, 0)
+ self.box1.pack_start(self.yscrollbar, True, True, 0)
+ self.box1.pack_start(self.img_amplow, False, True, 0)
+
+ ##test
+ self.set_show_hide(False)
+
+
+ def cb_page_sizey(self, get, data=None):
+ if(get.value<=1.5):
+ self.wave_copy.y_mag= get.value
+ os.system("amixer set 'Capture' 50%, 0% unmute captur")
+ self.wave_copy.g = 1 #0dB
+ if(get.value>1.5 and get.value<=2.5 ):
+ self.wave_copy.y_mag= (get.value*1.5)
+ os.system("amixer set 'Capture' 50%, 25% unmute captur")
+ self.wave_copy.g = 1.9952 #6dB
+ if(get.value>2.5 and get.value<=3.5 ):
+ self.wave_copy.y_mag= (get.value*3)
+ os.system("amixer set 'Capture' 50%, 50% unmute captur")
+ self.wave_copy.g = 3.981 #12dB
+ if(get.value>3.5 and get.value<=4.0 ):
+ self.wave_copy.y_mag= (get.value*4)
+ os.system("amixer set 'Capture' 50%, 100% unmute captur")
+ self.wave_copy.g = 13.335 #22.5dB
+ return True
+
+
+ def set_show_hide(self, show=True):
+ self.show_toolbar = show
+ #self.yscrollbar.show(self.show_toolbar)
+
+ def get_show_hide(self):
+ return self.show_toolbar
diff --git a/toolbar_top.py b/toolbar_top.py
new file mode 100755
index 0000000..f8996a6
--- /dev/null
+++ b/toolbar_top.py
@@ -0,0 +1,121 @@
+#! /usr/bin/python
+#
+# Author: Arjun Sarwal arjun@laptop.org
+# Copyright (C) 2007, OLPC
+#
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+import pygtk
+import gtk
+import time
+
+import config
+
+from sugar.activity.activity import ActivityToolbox
+
+from sound_toolbar import SoundToolbar
+from sensor_toolbar import SensorToolbar
+from logging_ui import LogToolbar
+from gettext import gettext as _
+
+class Toolbar(ActivityToolbox):
+
+ def __init__(self, activity, wave, audiograb, journal, textbox):
+
+ ActivityToolbox.__init__(self, activity)
+
+ self._SOUND_TOOLBAR = 1
+ self._SENSOR_TOOLBAR = 2
+
+ self._sound_toolbar = SoundToolbar(wave, audiograb, textbox, journal, activity)
+ self.add_toolbar(_('Sound'), self._sound_toolbar)
+ self._sound_toolbar.show()
+
+ self._sensors_toolbar = SensorToolbar(audiograb, textbox, journal)
+ self.add_toolbar(_('Sensors'), self._sensors_toolbar)
+ self._sensors_toolbar.show()
+
+ """
+ self._camera_toolbar = CameraToolbar(activity, camera_ui)
+ self.add_toolbar('Camera', self._camera_toolbar)
+ self._camera_toolbar.show()
+
+ self._wifi_toolbar = MeasureToolbar(wave, audiograb)
+ self.add_toolbar('Wireless', self._wifi_toolbar)
+ self._wifi_toolbar.show()
+
+ self._log_toolbar = LogToolbar(audiograb, journal, activity)
+ self.add_toolbar('Log View', self._log_toolbar)
+ self._log_toolbar.show()
+ """
+
+ self.connect("current-toolbar-changed", self._toolbar_changed_cb)
+ self.wave = wave
+ self.activity = activity
+ self.toolbar_active_id = 1
+ self.set_current_toolbar(self._SOUND_TOOLBAR)
+
+
+ def _toolbar_changed_cb(self, tbox, num):
+ if num==0: #Activity
+ pass
+
+ elif num==self._SOUND_TOOLBAR: #Sound
+ self.activity.set_show_hide_windows(self._SOUND_TOOLBAR)
+ self._sensors_toolbar.context_off()
+ time.sleep(0.5)
+ self._sound_toolbar.context_on()
+ config.CONTEXT = self._SOUND_TOOLBAR
+
+ elif num==self._SENSOR_TOOLBAR: #Sensor
+ self._sound_toolbar.context_off()
+ time.sleep(0.5)
+ self._sensors_toolbar.context_on()
+ self.activity.set_show_hide_windows(self._SENSOR_TOOLBAR)
+ config.CONTEXT = self._SENSOR_TOOLBAR
+
+ self.toolbar_active_id = num
+ """
+ elif num==3: #Camera
+ self.activity.set_show_hide_windows(1)
+ self._sound_toolbar.context_off()
+ self.wave.set_context_off()
+ time.sleep(0.5)
+ self._camera_toolbar.set_context_on()
+ elif num==4:
+ self.wave.set_context_off()
+ self._sound_toolbar.context_off()
+ self._camera_toolbar.set_context_off()
+ time.sleep(0.5)
+ elif num==5:
+ self.wave.set_context_off()
+ self._sound_toolbar.context_off()
+ self._camera_toolbar.set_context_off()
+ time.sleep(0.5)
+ """
+ return True
+
+
+ def get_which_toolbar_active(self):
+ """Returns which toolbar is active
+ Activity toolbar - 1
+ Sound toolbar - 2
+ Sensors toolbar - 3
+ """
+ return self.toolbar_active_id
+
+
+