Thanks for testing.

I'll have to add a config option for the i2c bus. I also really need to check for the pressure0 file and pop up a dialog if it is missing.

For a while, there was an issue where elementary programs with toolbars did not load in shr-core. See if you can start test_toolbar.py (attached). If that works, try putting this replacement barom.py in /usr/lib/python2.7/site-packages/barom/ and tell me about the output.

Ben

Now I really did test it on my GTA04. The installation went smooth but the program does not start afterwards. I had to load the module manually (as expected) and the barometer works. But now it is connected to the second I2C bus and the path changes to 2-0077 instead of 0-0077 on the Freerunner. I changed this in the python file but it still does not start. Instead the pyton process uses all my cpu power. CTRL-C does not work but CTRL-Z does. The last (and only) message I see is 'Xlib: extension "DPMS" missing on display ":0".'



# -*- coding: utf-8 -*-

# Barom -- A utility for tracking altitude/predicting weather
#
# Copyright (C) 2011 Benjamin Deering <[email protected]>
# http://jeepingben.homelinux.net/barom/
#
# This file is part of Barom.
#
# Barom-chooser 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 3 of the
# License, or (at your option) any later version.
#
# Barom-chooser 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, see <http://www.gnu.org/licenses/>.
# 
import sys, os, signal, math
from time import time
import elementary, evas, ecore
import ConfigParser
from collections import deque
from threading import Lock
from const import *

class pressureGraphUpdater( ):
	def __init__ (self, getPressure, graphFrame, usingMetric):
		
		self.getPressure = getPressure
		self.graphFrame = graphFrame
		self.maxLabel = self.graphFrame.evas.Text(color=(25,25,25,255),font=("sans serif", 12))
		self.minLabel = self.graphFrame.evas.Text(color=(25,25,25,255),font=("sans serif", 12))
		
		self.enabled = 1
		self.daemon = False
		self.die = False
		self.lastPres = self.getPressure(self)
		self.maxPres = 1013.0
		self.minPres = 1000.0
		self.usingMetric = usingMetric
	
		#sizeY = self.graphFrame.data["bg"].size[1]
		
		self.bottomY = 550
		self.topY = 230
		self.sizeY = self.bottomY - self.topY
		self.numPts = 88 * 2
		self.numScreenPts = 88
		self.rightX = 460
		self.leftX = 15
		self.updatePeriod = 200
		self.Xdim = float((self.rightX - self.leftX)/self.numScreenPts)
		
		self.pressureVals	= deque(maxlen = self.numPts)	
		self.lines = [self.graphFrame.evas.Line(color=(255,0,0,255)) for i in range(self.numScreenPts)]
		
		self.setLabels()		
		self.maxLabel.move(self.leftX,self.topY)
		self.maxLabel.show()
		self.maxLabel.clip_set(self.graphFrame.data["bg"])		
		
		self.minLabel.move(self.leftX,self.bottomY)
		self.minLabel.show()
		self.minLabel.clip_set(self.graphFrame.data["bg"])
		self.durLabel = self.graphFrame.evas.Text(color=(25,25,25,255),font=("sans serif", 12))
		self.durLabel.text = "Past " + "{0:.2f}".format( self.updatePeriod * self.numScreenPts / 3600.0) + "hrs"
		self.durLabel.layer_set(3)
		self.durLabel.move((self.rightX - self.leftX)/2.0,self.topY)
		self.durLabel.show()
		self.durLabel.clip_set(self.graphFrame.data["bg"])
		for i in range(self.numScreenPts):
			self.lines[i].layer_set(2)	
			self.lines[i].clip_set(self.graphFrame.data["bg"])
		self.pressureVals.appendleft( self.lastPres )
		self.lastSampleTime = time()
	def pressureGraphUpdate(self):
		if time() - self.lastSampleTime < self.updatePeriod:
			return True
		lastline = self.lines[self.numScreenPts - 1]
		try:
			curPres = self.getPressure(self)
		
			self.pressureVals.appendleft( curPres )
			
			if curPres > self.maxPres or curPres <self.minPres:
				self.rerange()
				
						
			curTime = time() 
			x2 = self.rightX - (self.Xdim * round((curTime - self.lastSampleTime)/float(self.updatePeriod)))
			lastXdim = self.rightX - x2
			self.lastSampleTime = curTime	
			
			for i in range( self.numScreenPts - 1  ):
				try:
						j = self. numScreenPts - i
						#print str(i) + " " + str(j)+ " : " + str( self.pressureVals[j] )
						y2 = self.topY + (self.maxPres - self.pressureVals[j-1])/(self.maxPres - self.minPres)*self.sizeY 	
						y1 = self.topY + (self.maxPres - self.pressureVals[j])/(self.maxPres - self.minPres)*self.sizeY
						#print "y1: " + str(y1)
						#print "y2: " + str(y2)
						if self.lines[i+1 ].visible_get() == True:
							next_xys = self.lines[i+1].xy_get()
							#print "nextxys: " + str( next_xys )
						
							self.lines[i].xy_set( next_xys[0] - lastXdim  , y2, next_xys[2] - lastXdim, y1 )
							#print "new line[" + str(i) +"]: " + str(self.lines[i].xy_get())
							self.lines[i].show()
				
						else:
							self.lines[i].hide()				
				except:
						self.lines[i].hide()
		except:
				print "Failed to get pressure\n"
		y1 = self.topY + (self.maxPres - self.lastPres)/(self.maxPres - self.minPres)*self.sizeY 	
		y2 = self.topY + (self.maxPres - curPres)/(self.maxPres - self.minPres)*self.sizeY
		
		lastline.xy_set( self.rightX,y2, x2,y1)
		lastline.show()
		self.lastPres = curPres
		return True
	def rerange( self ):
		max = 0.0
		min = 3000.0
		for pres in self.pressureVals:
			if pres > max:
				max = pres
			if pres < min:
				min = pres
		self.maxPres = max + (max - min + 1)/3.0
		self.minPres = min - (max - min + 1)/3.0
		self.setLabels()
	def setUnits( self, usingMetric ):
		self.usingMetric = usingMetric
		self.setLabels()
	def setLabels(self):
		if( self.usingMetric ):
			self.maxLabel.text = "{0:.2f}".format(self.maxPres)
			self.minLabel.text = "{0:.2f}".format(self.minPres)
		else:
			self.maxLabel.text = "{0:.2f}".format(self.hpaToinHG(self.maxPres))
			self.minLabel.text = "{0:.2f}".format(self.hpaToinHG(self.minPres))
	def hpaToinHG(self, pressure):
		return (pressure / 33.86)
	def inHGtoHpa(self, pressure):
		return (pressure * 33.86)
	def enable( self ):
		self.enabled = 1
	def disable( self ):
		self.enabled = 0
	def terminate( self, *args, **kargs ):
		self.die = True	


class baromGUI(object ):
	def __init__ (self):
		self.usingMetric = False
		self.seaLevelPressure = 0
		self.altitudeLock = Lock()
		self.pressureLock = Lock()
		self.configfile = os.path.expanduser ('~/.barom.cfg')
		print "Attempting to load config"
		self.config = ConfigParser.SafeConfigParser ()
		self.LoadConfig (self.configfile)
		print "loaded config"
		self.widgets = self.build_gui()
		print "built gui succesfully"
		self.widgets['mainwin'].show ()
		elementary.init()     
		elementary.run()                                            
		elementary.shutdown()   
	
	def interrupted (self, signal, frame):
		self.pressureLabelTimer.delete()
		self.altitudeLabelTimer.delete()
		self.pressureGraphTimer.delete()
		self.SaveConfig (self.configfile)
		elementary.exit ()
	def build_gui (self):

		def destroy (obj, *args, **kargs):
			try:
				self.pressureLabelTimer.delete()
				self.altitudeLabelTimer.delete()
				self.pressureGraphTimer.delete()
				self.SaveConfig (self.configfile)	
			except:
				print "Exception occured on exit"
			elementary.exit ()

		gui_items = dict ()

		

		# Create main window
		gui_items['mainwin'] = elementary.Window ("Barom", elementary.ELM_WIN_BASIC)
		gui_items['mainwin'].title_set ("Barom")
		gui_items['mainwin'].callback_destroy_add (destroy)

		# Create background
		bg = elementary.Background (gui_items['mainwin'])
		bg.size_hint_weight_set (1.0, 1.0)
		#bg.size_hint_min_set (200,300)
		gui_items['mainwin'].resize_object_add (bg)
		bg.show ()

		# Create main box (vertical by default)
		gui_items['mainbox'] = elementary.Box (gui_items['mainwin'])
		gui_items['mainbox'].size_hint_weight_set (1.0, 1.0)
		gui_items['mainbox'].size_hint_align_set (-1.0, -1.0)
		gui_items['mainwin'].resize_object_add (gui_items['mainbox'])
		gui_items['mainbox'].show ()
				
		#Create top toolbar
		toptoolbar = elementary.Toolbar(gui_items['mainwin'])
		toptoolbar.menu_parent_set(gui_items['mainwin'])
		toptoolbar.homogenous_set(False)			
		#toptoolbar.icon_size_set( 64 )                                          
		#toptoolbar.size_hint_align_set (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
		#toptoolbar.size_hint_weight_set (1.0, 1.0)                                                            
		toptoolbar.size_hint_align_set (-1.0, 0.0)
		toptoolbar.item_append(os.path.join(IMAGE_DIR, 'altitude.png'), "Altitude", self.altitudeDialog)
		toptoolbar.item_append(os.path.join(IMAGE_DIR, "weather.png"), "Weather", self.weatherDialog)		
		toptoolbar.item_append(os.path.join(IMAGE_DIR, 'calibrate.png'), "Calibrate", self.calibrateDialog)
		toptoolbar.item_append(os.path.join(IMAGE_DIR, "about.png"), "About", self.aboutDialog)
		gui_items['mainbox'].pack_end( toptoolbar )
		toptoolbar.show()

		gui_items['pager'] = elementary.Pager (gui_items['mainwin'])
		gui_items['pager'].size_hint_weight_set (1.0, 1.0)
		gui_items['pager'].size_hint_align_set (-1.0, -1.0)
		
		
		
		# Create weather box (vertical by default)
		gui_items['weatherbox'] = elementary.Box (gui_items['mainwin'])
		gui_items['weatherbox'].size_hint_weight_set (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
		gui_items['weatherbox'].size_hint_align_set (-1.0, -1.0)
		gui_items['pressureLabel'] = elementary.Label(gui_items['mainwin'])
		gui_items['pressureLabel'].text_set('weather')
		
		gui_items['pressureLabel'].scale_set(3.5)
		gui_items['pressureLabel'].size_hint_weight_set (1.0, 0.0)
		gui_items['pressureLabel'].size_hint_align_set (0.5, -1.0)
		gui_items['weatherbox'].pack_end( gui_items['pressureLabel'])
		gui_items['pressureLabel'].show()	
		
			
		# Include the graph of past pressures
		gui_items['graphframe'] = elementary.Frame(gui_items['mainwin'])
		
		sc = elementary.Scroller(gui_items['mainwin'])
		sc.bounce_set(0, 0)
		sc.size_hint_weight_set(evas.EVAS_HINT_EXPAND, 1.0)
		sc.size_hint_align_set(-1.0,-1.0)
		#gui_items['weatherbox'].pack_end(sc)
		gui_items['mainwin'].resize_object_add (sc)
		sc.show()

		gui_items['graphframe'].size_hint_weight_set (1.0, 1.0 )
		gui_items['graphframe'].size_hint_align_set (-1.0,-1.0)
		gui_items['graphframe'].show()
		
		graphcanvas = gui_items['graphframe'].evas
	
		bg = graphcanvas.Rectangle(color=(255,255,255,255))
		bg.size = (460, 380)
		bg.layer_set(1)
		gui_items['graphframe'].data["bg"] = bg
		#print "FrameSize: " + str(gui_items['graphframe'].size)
		bg.show()
		
		gui_items['graphframe'].content_set(bg)
		sc.content_set(gui_items['graphframe'] )
		#gb.pack_end(gui_items['graphframe'])
		gui_items['weatherbox'].pack_end(sc)
		
		self.pressureGraphThread = pressureGraphUpdater(self.getPressureFromSensor,gui_items['graphframe'],self.usingMetric )
		
		self.pressureLabelTimer = ecore.timer_add(2, self.PressureLabelUpdate)
		self.pressureGraphTimer = ecore.timer_add(2, self.pressureGraphThread.pressureGraphUpdate)
		
		gui_items['mainwin'].resize_object_add (gui_items['weatherbox'])
		gui_items['pager'].content_push (gui_items['weatherbox'])
		#####
		# Create calibrate box (vertical by default)
		gui_items['calibratebox'] = elementary.Box (gui_items['mainwin'])
		
		gui_items['calibratebox'].size_hint_weight_set (1.0, 1.0)
		gui_items['calibratebox'].size_hint_align_set (-1.0,-1.0)
		
				
		# Create scroller to hold calibrate toggles items
		sc2 = elementary.Scroller(gui_items['mainwin'])
		sc2.bounce_set(0, 0)
		sc2.size_hint_weight_set(1.0, 1.0)
		sc2.size_hint_align_set(-1.0,-1.0)
		gui_items['calibratebox'].pack_end(sc2)
		gui_items['mainwin'].resize_object_add (sc2)
		sc2.show()
		
		tb = 	elementary.Box(gui_items['calibratebox'])
		tb.size_hint_weight_set(1.0, 1.0)
		tb.size_hint_align_set(-1.0,-1.0)
		
		ut = elementary.Toggle (gui_items['mainwin'])
		ut.text_set('Units')
		ut.states_labels_set( 'Metric', 'Imperial' )
		ut.size_hint_weight_set (1.0, 1.0)
		ut.size_hint_align_set (-1.0, 0.0)
		tb.pack_end( ut )
		ut.state_set(self.usingMetric)
		ut._callback_add('changed',self.setUnits)
		ut.show()

		al = elementary.Label(gui_items['mainwin'])
		al.text_set("Known current altitude")
		al.size_hint_align_set (-1.0, 0.0)
		al.show()
		tb.pack_end(al)
		
		tbAlt = 	elementary.Box(gui_items['mainwin'])
		tbAlt.horizontal_set(1)
		gui_items['calibrateAltnumber'] = elementary.Entry(gui_items['mainwin'])            
		gui_items['calibrateAltnumber'].single_line_set(True)                     
		gui_items['calibrateAltnumber'].entry_set('XX')   
		gui_items['calibrateAltnumber'].scale_set(2.0)            
		gui_items['calibrateAltnumber'].size_hint_weight_set(1, 1)          
		gui_items['calibrateAltnumber'].callback_activated_add(self.calibrate) 
		                     
		tbAlt.pack_end(gui_items['calibrateAltnumber'])               
		gui_items['calibrateAltnumber'].show()
		
		gui_items['unitaltlabel'] = elementary.Label(gui_items['mainwin'])
					
		gui_items['unitaltlabel'].show()		
		tbAlt.pack_end(gui_items['unitaltlabel'])
		tbAlt.show()		
		tb.pack_end(tbAlt)
		
		pl = elementary.Label(gui_items['mainwin'])
		pl.text_set("Known current pressure at sea level")
		pl.show()
		tb.pack_end(pl)
		
		tbPres = 	elementary.Box(gui_items['mainwin'])
		tbPres.horizontal_set(1)
		
		gui_items['calibratePresnumber'] = elementary.Entry(gui_items['mainwin'])            
		gui_items['calibratePresnumber'].single_line_set(True)                     
		gui_items['calibratePresnumber'].entry_set('XX')   
		gui_items['calibratePresnumber'].scale_set(2.0)            
		gui_items['calibratePresnumber'].size_hint_weight_set(1, 1)          
		gui_items['calibratePresnumber'].callback_activated_add(self.calibrate)                      
		tbPres.pack_end(gui_items['calibratePresnumber'])               
		gui_items['calibratePresnumber'].show()
		
		gui_items['unitpreslabel'] = elementary.Label(gui_items['mainwin'])
					
		gui_items['unitpreslabel'].show()		
		tbPres.pack_end(gui_items['unitpreslabel'])
		tbPres.show()
		tb.pack_end(tbPres)
		
		if self.usingMetric:
		 	 gui_items['unitaltlabel'].text_set('m')
		 	 gui_items['unitpreslabel'].text_set('hpa')
		else:
		 	 gui_items['unitaltlabel'].text_set('ft')
		 	 gui_items['unitpreslabel'].text_set('in hg')	 	 
		 	 
		# Create the calibrate button
		bt = elementary.Button (gui_items['mainwin'])
		bt.text_set ('Calibrate')
		bt._callback_add ('clicked', self.calibrate)
		bt.size_hint_weight_set (1.0, 1.0)
		bt.size_hint_align_set (-1.0, 0.0)
		tb.pack_end (bt)
		bt.show ()		
		
		sc2.content_set( tb )
		gui_items['mainwin'].resize_object_add (gui_items['calibratebox'])
		gui_items['pager'].content_push(gui_items['calibratebox'])
		#####
		# Create about box (vertical by default)
		gui_items['aboutbox'] = elementary.Box (gui_items['mainwin'])
		gui_items['aboutbox'].size_hint_weight_set (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
		gui_items['aboutbox'].size_hint_align_set (-1.0,-1.0)
		al = elementary.Label(gui_items['mainwin'])
		al.size_hint_weight_set (evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)
		al.size_hint_align_set (0.5, -1.0)
		al.text_set("About Barom")
		gui_items['aboutbox'].pack_end(al)
		al.show()
		
		# Create scroller to hold the author's picture
		sc2 = elementary.Scroller(gui_items['mainwin'])
		sc2.bounce_set(0, 0)
		sc2.size_hint_weight_set(1.0, 1.0)
		sc2.size_hint_align_set(evas.EVAS_HINT_FILL,-1.0)
		gui_items['aboutbox'].pack_end(sc2)
		gui_items['mainwin'].resize_object_add (sc2)
		sc2.show()
		
		ib = 	elementary.Box(gui_items['aboutbox'])
		ic = elementary.Icon(gui_items['aboutbox'])
		gui_items['mainwin'].resize_object_add (ic)
		ic.size_hint_weight_set(0.5, 0.5)
		ic.scale_set(0.5, 0.5) 
		ic.size_hint_align_set(0.5, 0.0)
		ic.file_set(os.path.join(IMAGE_DIR, "author.png"))
		ib.size_hint_weight_set(0.5, 0.5)
		ib.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)		
		ib.pack_end(ic)
		
		sc2.content_set(ib)
		ic.show()
		
		# Create text box with 'about' info
		at = elementary.AnchorBlock( gui_items['aboutbox'] )
		at.size_hint_weight_set(1.0, 0.0)
		at.size_hint_align_set(evas.EVAS_HINT_FILL, 0.0)
		at.scale_set(1)
		info = self.infoadd("Barom " + APP_VERSION)
		info += self.infoadd("Copyright (c) 2011 Benjamin Deering")
		info += self.infoadd("<[email protected]>" )
		at.text_set( info )	
		gui_items['aboutbox'].pack_end(at)
		at.show()
		gui_items['mainwin'].resize_object_add (gui_items['aboutbox'])
		gui_items['pager'].content_push(gui_items['aboutbox'])
		
		#####
		# Create altitude box (vertical by default)
		gui_items['altitudebox'] = elementary.Box (gui_items['mainwin'])
		gui_items['altitudebox'].size_hint_weight_set (1.0, 1.0)
		gui_items['altitudebox'].size_hint_align_set (-1.0, -1.0)
		gui_items['altitudeLabel'] = elementary.Label(gui_items['mainwin'])
		gui_items['altitudeLabel'].text_set('altitude')
		
		gui_items['altitudeLabel'].scale_set(3.5)
		gui_items['altitudeLabel'].size_hint_weight_set (1.0, 1.0)
		gui_items['altitudeLabel'].size_hint_align_set (0.5, -1.0)
		gui_items['altitudebox'].pack_end( gui_items['altitudeLabel'])
		gui_items['altitudeLabel'].show()
		self.altitudeLabelTimer = ecore.timer_add(2, self.AltitudeLabelUpdate)
		gui_items['mainwin'].resize_object_add (gui_items['altitudebox'])
		gui_items['pager'].content_push (gui_items['altitudebox'])
		gui_items['pager'].show()
		gui_items['mainbox'].pack_end( gui_items['pager'] )
		
		gui_items['pager'].content_promote(gui_items['altitudebox'])
			
		return gui_items
	def getPressureFromSensor(self, obj, *args, **kargs):
		 self.pressureLock.acquire()
		 print( "attempting to read pressure from file" )
		 presfile = open( '/sys/bus/i2c/devices/0-0077/pressure0_input','r' )
		 presx100 = int(presfile.read())
		 pres = presx100 / 100.0
		 print "read pressure from file: " + str(pres)
		 self.pressureLock.release()
		 return pres
	def getTemperatureFromSensor(self, obj, *args, **kargs):
		 print( "attempting to read temperature from file" )
		 tempfile = open( '/sys/bus/i2c/devices/0-0077/temp0_input','r' )
		 tempx10 = int(tempfile.read())
		 tempfile.close()
		 print "read temperature from file: " + tempx10 / 10.0
		 return tempx10 / 10.0
	def getAltitudeString(self, obj, *args, **kargs):
		unit = "m"
		if not self.usingMetric:
			unit = "ft"
		return "{0:.2f}".format(self.getAltitudeFromSensor(self)) + " " + unit
	def getPressureString(self, obj, *args, **kargs):
		unit = "hpa"
		pressure = self.getPressureFromSensor(self)
		if not self.usingMetric:
			unit = "in hg"
			pressure = self.hpaToinHG(pressure)
		return "{0:.2f}".format(pressure) + " " + unit
	def getAltitudeFromSensor(self, obj, *args, **kargs):
		 self.altitudeLock.acquire()
		 p0 = self.seaLevelPressure
		 p = self.getPressureFromSensor(self)
		 
		 rlgm = (R*L)/(g*M)
		 		 
		 alt = (1.0/L) * (-1 * (pow( p / p0 ,rlgm) - 1 ) * pow(p0 / p, rlgm) * Tb )	 	
		 self.altitudeLock.release()		 
		 if self.usingMetric:
		 	return alt
		 else:
		 	return self.MtoF( alt ) 
	def altitudeDialog (self, *args, **kargs):
		self.widgets['pager'].content_promote(self.widgets['altitudebox'])
	def weatherDialog (self, *args, **kargs):
		self.widgets['pager'].content_promote(self.widgets['weatherbox'])	
	def aboutDialog(self, *args, **kargs):
		self.widgets['pager'].content_promote(self.widgets['aboutbox'])
	def calibrateDialog(self, *args, **kargs):
		self.widgets['pager'].content_promote(self.widgets['calibratebox'])
	

	def AltitudeLabelUpdate(self):
		self.widgets['altitudeLabel'].text_set( self.getAltitudeString(self))
		return True
		
	def PressureLabelUpdate(self):
		self.widgets['pressureLabel'].text_set( self.getPressureString(self))
		return True
	def MtoF (self, distance):
		return (distance / 0.3048)
	def hpaToinHG(self, pressure):
		return (pressure / 33.86)
	def inHGtoHpa(self, pressure):
		return (pressure * 33.86)
	def FtoM (self, distance):
		return (distance * 0.3048)
	def infoadd(self, text):                               
		 return elementary.Entry.utf8_to_markup(text)+'<br>'
	def setUnits(self, obj, *args, **kargs):
		 self.usingMetric = obj.state_get()
		 self.pressureGraphThread.setUnits( self.usingMetric )
		 if self.usingMetric:
		 	 self.widgets['unitaltlabel'].text_set('m')
		 	 self.widgets['unitpreslabel'].text_set('hpa')
		 else:
		 	 self.widgets['unitaltlabel'].text_set('ft')
		 	 self.widgets['unitpreslabel'].text_set('in hg')	 
	def calibrateWithKnownPres(self, pres ):
		if self.usingMetric:
			self.seaLevelPressure = pres
		else:
			 self.seaLevelPressure = self.inHGtoHpa(pres)
	def calibrateWithKnownAlt(self, alt):
		absPres = self.getPressureFromSensor(self) 
		if not self.usingMetric:
			alt = self.FtoM( alt )
				
		slPres = self.normalizePressure(absPres, alt) 
		self.seaLevelPressure = slPres 
	def normalizePressure( self, absPressure, alt ):
		if alt == -9999:
			alt = self.getAltitudeFromSensor(self)
		return( absPressure * pow( Tb /(Tb + L * alt ), (-1 * g * M) / ( L * R)) )
	def calibrate (self, cfpath):
		#Not sure which calibration is in use, try both		
		try:
			alt = float(self.widgets['calibrateAltnumber'].entry_get())
			self.calibrateWithKnownAlt(alt)
		except:
			try:
				pres = float(self.widgets['calibratePresnumber'].entry_get())
				self.calibrateWithKnownPres(pres)
			except:
				print "Incorrect calibration"
	def LoadConfig (self, cfpath):
		"""
		Load configuration file, create a default if it doesn't exist.
		"""
		self.config.read (cfpath)
		if not self.config.has_section ('Main'):
			self.config.add_section ('Main')
		if not self.config.has_option( 'Main', 'units' ):
			self.config.set ('Main', 'units', 'metric')
		self.usingMetric = self.config.get ('Main', 'units', 0) == 'metric'
		if not self.config.has_option( 'Main', 'base pressure' ):
			self.config.set ('Main', 'base pressure', '1013.25')
		self.seaLevelPressure = float( self.config.get('Main', 'base pressure', 0))
		self.SaveConfig (cfpath)
	def SaveConfig (self, cfpath):
		'''
		Save config file.
		'''
		if self.usingMetric:
			self.config.set ('Main', 'units', 'metric')
		else:
			self.config.set ('Main', 'units', 'imperial')
		self.config.set( 'Main', 'base pressure', str( self.seaLevelPressure ) )
		with open(cfpath, 'wb') as configfile:
			self.config.write (configfile)
			configfile.close ()
if __name__ == '__main__':
    app = baromGUI()


	
#!/usr/bin/env python
import os
import elementary
import edje
import ecore
import evas

#----- Toolbar -{{{-
def tb_1(obj, it, ph):
    ph.file_set("images/panel_01.jpg")

def tb_2(obj, it, ph):
    ph.file_set("images/rock_01.jpg")

def tb_3(obj, it, ph):
    ph.file_set("images/wood_01.jpg")

def tb_4(obj, it, ph):
    ph.file_set("images/sky_03.jpg")

def tb_5(obj, it, ph):
    ph.file_set(None)

def toolbar_clicked(obj, it):
    win = elementary.Window("entry-scrolled", elementary.ELM_WIN_BASIC)
    win.title_set("Entry Scrolled")
    win.autodel_set(True)

    bg = elementary.Background(win)
    win.resize_object_add(bg)
    bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    bg.show()

    bx = elementary.Box(win)
    win.resize_object_add(bx)
    bx.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    bx.show()

    tb = elementary.Toolbar(win)
    tb.homogeneous = False
    tb.size_hint_weight_set(0.0, 0.0)
    tb.size_hint_align_set(evas.EVAS_HINT_FILL, 0.0)

    ph1 = elementary.Photo(win)
    ph2 = elementary.Photo(win)
    ph3 = elementary.Photo(win)
    ph4 = elementary.Photo(win)

    item = tb.item_append("document-print", "Hello", tb_1)
    item.disabled = True

    item = tb.item_append("clock", "World,", tb_2, ph2)
    item.selected_set(True)

    tb.item_append("folder-new", "here", tb_3, ph4)

    tb.item_append("clock", "comes", tb_4, ph4)

    tb.item_append("folder-new", "python-elementary!", tb_5, ph4)

    item = tb.item_append("clock", "Menu", tb_5, ph4)
    item.menu_set(True)
    tb.menu_parent_set(win)
    menu = item.menu_get()

    menu.item_add(None, "Here", "clock", tb_3, ph4)

    menu_item = menu.item_add(None, "Comes", "refresh", tb_4, ph4)

    menu.item_add(menu_item, "hey ho", "folder-new", tb_4, ph4)

    menu.item_add(None, "python-elementary", "document-print", tb_5, ph4)

    bx.pack_end(tb)
    tb.show()

    tb = elementary.Table(win)
    tb.size_hint_weight_set(0.0, evas.EVAS_HINT_EXPAND)
    tb.size_hint_align_set(evas.EVAS_HINT_FILL, evas.EVAS_HINT_FILL)

    ph1.size_set(40)
    ph1.file_set("images/plant_01.jpg")
    ph1.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    ph1.size_hint_align_set(0.5, 0.5)
    tb.pack(ph1, 0, 0, 1, 1)
    ph1.show()

    ph2.size_set(80)
    ph2.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    ph2.size_hint_align_set(0.5, 0.5)
    tb.pack(ph2, 1, 0, 1, 1)
    ph2.show()

    ph3.size_set(40)
    ph3.file_set("images/sky_01.jpg")
    ph3.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    ph3.size_hint_align_set(0.5, 0.5)
    tb.pack(ph3, 0, 1, 1, 1)
    ph3.show()

    ph4.size_set(60)
    ph4.file_set("images/sky_02.jpg")
    ph4.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
    ph4.size_hint_align_set(0.5, 0.5)
    tb.pack(ph4, 1, 1, 1, 1)
    ph4.show()

    bx.pack_end(tb)
    tb.show()

    win.resize(320, 300)
    win.show()
# }}}

#----- Main -{{{-
if __name__ == "__main__":
    elementary.init()

    toolbar_clicked(None, None)

    elementary.run()
    elementary.shutdown()
# }}}
# vim:foldmethod=marker
_______________________________________________
Shr-User mailing list
[email protected]
http://lists.shr-project.org/mailman/listinfo/shr-user

Reply via email to