Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorerikb <erikb@574bc980-5f2d-0410-acbc-c8f9f0eb14e0>2007-10-31 16:27:45 (GMT)
committer erikb <erikb@574bc980-5f2d-0410-acbc-c8f9f0eb14e0>2007-10-31 16:27:45 (GMT)
commit1ab6b11c83d527bdd02f04cccc34ef00b0494912 (patch)
tree1e2f8b2046be9a64523f3aba46fb02d0d5291369
parent6e20a3af2331fc524f356c981e308dd1373af112 (diff)
refactoring
git-svn-id: http://mediamods.com/public-svn/camera-activity/Record.activity@785 574bc980-5f2d-0410-acbc-c8f9f0eb14e0
-rwxr-xr-xRecordActivity.py133
-rw-r--r--button.py10
-rw-r--r--constants.py185
-rw-r--r--glive.py30
-rw-r--r--instance.py26
-rw-r--r--model.py152
-rw-r--r--recorded.py20
-rw-r--r--serialize.py3
-rw-r--r--ui.py389
-rw-r--r--utils.py27
10 files changed, 500 insertions, 475 deletions
diff --git a/RecordActivity.py b/RecordActivity.py
index 3bef691..270d619 100755
--- a/RecordActivity.py
+++ b/RecordActivity.py
@@ -25,19 +25,17 @@ import shutil
import telepathy
import telepathy.client
import logging
+import cStringIO
+
import xml.dom.minidom
from xml.dom.minidom import getDOMImplementation
from xml.dom.minidom import parse
-from gettext import gettext as _
-import cStringIO
-from sugar import util
from sugar.activity import activity
-from sugar import profile
from sugar.datastore import datastore
from sugar.presence import presenceservice
from sugar.presence.tubeconn import TubeConnection
-SERVICE = "org.laptop.RecordActivity"
+from sugar import util
from model import Model
from ui import UI
@@ -46,7 +44,8 @@ from glive import Glive
from gplay import Gplay
from greplay import Greplay
from recorded import Recorded
-
+from constants import Constants
+from instance import Instance
class RecordActivity(activity.Activity):
@@ -63,100 +62,16 @@ class RecordActivity(activity.Activity):
def _initme( self, userdata=None ):
- self.istrActivityName = _('Record')
- self.istrPhoto = _('Photo')
- self.istrVideo = _('Video')
- self.istrAudio = _('Audio')
- self.istrTimelapse = _('Time Lapse')
- self.istrAnimation = _('Animation')
- self.istrPanorama = _('Panorama')
- #TRANS: photo by photographer, e.g., "Photo by Mary"
- self.istrBy = _("%(1)s by %(2)s")
- self.istrTitle = _('Title:')
- self.istrRecorder = _('Recorder:')
- self.istrDate = _('Date:')
- self.istrTags = _('Tags:')
- self.istrSaving = _('Saving')
- self.istrFinishedRecording = _("Finished recording")
- self.istrMinutesSecondsRemaining = _("%(1)s minutes, %(1)s seconds remaining")
- self.istrSecondsRemaining = _("%(1)s seconds remaining")
- self.istrRemove = _("Remove")
- self.istrStoppedRecording = _("Stopped recording")
- self.istrCopyToClipboard = _("Copy to clipboard")
- self.istrTimer = _("Timer:")
- self.istrDuration = _("Duration:")
- self.istrNow = _("Immediate")
- self.istrSeconds = _("%(1)s seconds")
- self.istrMinutes = _("%(1)s minutes")
- self.istrPlay = _("Play")
- self.istrPause = _("Pause")
- self.istrAddFrame = _("Add frame")
- self.istrRemoveFrame = _("Remove frame")
- self.istrFramesPerSecond = _("%(1)s frames per second")
- self.istrQuality = _("Quality:")
- self.istrBestQuality = _("Best quality")
- self.istrHighQuality = _("High quality")
- self.istrLowQuality = _("Low quality")
- self.istrLargeFile = _("Large file")
- self.istrSmallFile = _("Small file")
- self.istrSilent = _("Silent")
- self.istrRotate = _("Rotate")
- self.istrClickToTakePicture = _("Click to take picture")
- self.istrClickToAddPicture = _("Click to add picture")
- #TRANS: Downloading Photo from Mary
- self.istrDownloadingFrom = _("Downloading %(1)s from %(2)s")
- #TRANS: Cannot download this Photo
- self.istrCannotDownload = _("Cannot download this %(1)s")
-
- self.recdTitle = "title"
- self.recdTime = "time"
- self.recdRecorderName = "photographer"
- self.recdRecorderHash = "recorderHash"
- self.recdColorStroke = "colorStroke"
- self.recdColorFill = "colorFill"
- self.recdHashKey = "hashKey"
- self.recdBuddy = "buddy"
- self.recdMediaMd5 = "mediaMd5"
- self.recdThumbMd5 = "thumbMd5"
- self.recdMediaBytes = "mediaBytes"
- self.recdThumbBytes = "thumbBytes"
- self.recdBuddyThumb = "buddyThumb"
- self.recdDatastoreId = "datastoreId"
- self.recdAudioImage = "audioImage"
- self.recdAlbum = "album"
- self.recdType = "type"
- self.recdRecd = "recd"
- #self.recdThumb = "thumb"
- self.keyName = "name"
- self.keyMime = "mime"
- self.keyExt = "ext"
- self.keyIstr = "istr"
-
- #these are all created here in case we have a crash at boot (e.g., pservice not working)
- self.m = Model( self )
- self.ui = None
- self.gplay = None
- self.glive = None
- self.greplay = None
-
- #whoami?
- key = profile.get_pubkey()
- keyHash = util._sha_data(key)
- self.hashedKey = util.printable_hash(keyHash)
- self.instanceId = self._activity_id
- self.nickName = profile.get_nick_name()
+ Instance(self)
+ Constants(self)
#totally tubular
self.meshTimeoutTime = 10000
self.recTube = None
self.connect( "shared", self._sharedCb )
- #paths
- self.basePath = activity.get_bundle_path()
- self.gfxPath = os.path.join(self.basePath, "gfx")
- self.recreateTemp()
-
#the main classes
+ self.m = Model( self )
self.glive = Glive( self )
self.gplay = Gplay( self )
self.greplay = Greplay( self )
@@ -183,14 +98,14 @@ class RecordActivity(activity.Activity):
xmlFile = open( file, "w" )
impl = getDOMImplementation()
- album = impl.createDocument(None, self.recdAlbum, None)
+ album = impl.createDocument(None, Constants.recdAlbum, None)
root = album.documentElement
atLeastOne = False
#flag everything for saving...
for type,value in self.m.mediaTypes.items():
- typeName = value[self.keyName]
+ typeName = value[Constants.keyName]
hash = self.m.mediaHashs[type]
for i in range (0, len(hash)):
recd = hash[i]
@@ -201,7 +116,7 @@ class RecordActivity(activity.Activity):
#and if there is anything to save, save it
if (atLeastOne):
for type,value in self.m.mediaTypes.items():
- typeName = value[self.keyName]
+ typeName = value[Constants.keyName]
hash = self.m.mediaHashs[type]
for i in range (0, len(hash)):
@@ -217,7 +132,7 @@ class RecordActivity(activity.Activity):
def getRecdXmlMeshString( self, recd ):
impl = getDOMImplementation()
- recdXml = impl.createDocument(None, self.recdRecd, None)
+ recdXml = impl.createDocument(None, Constants.recdRecd, None)
root = recdXml.documentElement
self.addRecdXmlAttrs( root, recd, True )
@@ -233,7 +148,7 @@ class RecordActivity(activity.Activity):
def addRecdXmlAttrs( self, el, recd, forMeshTransmit ):
el.setAttribute(self.recdType, str(recd.type))
- if ((recd.type == self.m.TYPE_AUDIO) and (not forMeshTransmit)):
+ if ((recd.type == constants.TYPE_AUDIO) and (not forMeshTransmit)):
aiPixbuf = recd.getAudioImagePixbuf( )
aiPixbufString = str( self._get_base64_pixbuf_data(aiPixbuf) )
el.setAttribute(self.recdAudioImage, aiPixbufString)
@@ -383,16 +298,6 @@ class RecordActivity(activity.Activity):
self.ui.doMouseListener( True )
- def recreateTemp( self ):
- # #4422
-# self.tempPath = os.path.join("tmp", "Record_"+str(self.instanceId))
- self.tempPath = os.path.join( self.get_activity_root(), "tmp" )
- self.tempPath = os.path.join( self.tempPath, str(self.instanceId))
- if (os.path.exists(self.tempPath)):
- shutil.rmtree( self.tempPath )
- os.makedirs(self.tempPath)
-
-
def close( self ):
self.I_AM_CLOSING = True
#quicker we look like we're gone, the better
@@ -697,7 +602,7 @@ class RecordActivity(activity.Activity):
recd.meshDownloading = False
recd.meshDownlodingPercent = 1.0
recd.downloadedFromBuddy = True
- if (recd.type == self.ca.m.TYPE_AUDIO):
+ if (recd.type == constants.TYPE_AUDIO):
self.connect(greplay.getAlbumArt, recd, _getAlbumArtCb)
else:
self.ui.showMeshRecd( recd )
@@ -708,7 +613,7 @@ class RecordActivity(activity.Activity):
def _getAlbumArtCb( self, recd, pixbuf ):
if (pixbuf == None):
return False
- imagePath = os.path.join(self.tempPath, "audioPicture.png")
+ imagePath = os.path.join(Instance.tmpPath, "audioPicture.png")
imagePath = self.m.getUniqueFilepath( imagePath, 0 )
pixbuf.save( imagePath, "png", {} )
recd.audioImageFilename = os.path.basename(imagePath)
@@ -733,4 +638,10 @@ class RecordActivity(activity.Activity):
self._logger.debug('_recdUnavailableCb: we arent asking you for a copy now. slow response, pbly.')
return
- self.meshNextRoundRobinBuddy( recd ) \ No newline at end of file
+ self.meshNextRoundRobinBuddy( recd )
+
+
+ def recreateTmp(self):
+ if (os.path.exists(instance.tmpPath)):
+ shutil.rmtree(instance.tmpPath)
+ os.makedirs(instance.tmpPath)
diff --git a/button.py b/button.py
index 97512a1..425b589 100644
--- a/button.py
+++ b/button.py
@@ -29,7 +29,7 @@ class RecdButton(TrayButton, gobject.GObject):
xoff = 0
yoff = 0
pb = None
- if (self.recd.type == self.ui.ca.m.TYPE_PHOTO):
+ if (self.recd.type == constants.TYPE_PHOTO):
xoff = 8
yoff = 8
if (self.recd.buddy):
@@ -38,7 +38,7 @@ class RecdButton(TrayButton, gobject.GObject):
else:
pb = self.ui.thumbPhotoSvg.get_pixbuf()
- elif (self.recd.type == self.ui.ca.m.TYPE_VIDEO):
+ elif (self.recd.type == constants.TYPE_VIDEO):
xoff = 8
yoff = 22
if (self.recd.buddy):
@@ -47,7 +47,7 @@ class RecdButton(TrayButton, gobject.GObject):
else:
pb = self.ui.thumbVideoSvg.get_pixbuf()
- elif (self.recd.type == self.ui.ca.m.TYPE_AUDIO):
+ elif (self.recd.type == constants.TYPE_AUDIO):
xoff = 8
yoff = 22
if (self.recd.buddy):
@@ -78,7 +78,7 @@ class RecdButton(TrayButton, gobject.GObject):
palette = Palette(info)
self.set_palette(palette)
- self.rem_menu_item = gtk.MenuItem( self.ui.ca.istrRemove )
+ self.rem_menu_item = gtk.MenuItem( Constants.istrRemove )
self.ACTIVATE_REMOVE_ID = self.rem_menu_item.connect('activate', self._itemRemoveCb)
palette.menu.append(self.rem_menu_item)
self.rem_menu_item.show()
@@ -92,7 +92,7 @@ class RecdButton(TrayButton, gobject.GObject):
if (self.ACTIVATE_COPY_ID != 0):
return
- self.copy_menu_item = gtk.MenuItem( self.ui.ca.istrCopyToClipboard )
+ self.copy_menu_item = gtk.MenuItem( Constants.istrCopyToClipboard )
self.ACTIVATE_COPY_ID = self.copy_menu_item.connect('activate', self._itemCopyToClipboardCb)
self.get_palette().menu.append(self.copy_menu_item)
self.copy_menu_item.show()
diff --git a/constants.py b/constants.py
new file mode 100644
index 0000000..18387a6
--- /dev/null
+++ b/constants.py
@@ -0,0 +1,185 @@
+import os
+import gtk
+from gettext import gettext as _
+
+import sugar.graphics.style
+from sugar.activity import activity
+
+from instance import Instance
+from sugar import profile
+from color import Color
+import utils
+
+class Constants:
+
+ SERVICE = "org.laptop.RecordActivity"
+
+ recdTitle = "title"
+ recdTime = "time"
+ recdRecorderName = "photographer"
+ recdRecorderHash = "recorderHash"
+ recdColorStroke = "colorStroke"
+ recdColorFill = "colorFill"
+ recdHashKey = "hashKey"
+ recdBuddy = "buddy"
+ recdMediaMd5 = "mediaMd5"
+ recdThumbMd5 = "thumbMd5"
+ recdMediaBytes = "mediaBytes"
+ recdThumbBytes = "thumbBytes"
+ recdBuddyThumb = "buddyThumb"
+ recdDatastoreId = "datastoreId"
+ recdAudioImage = "audioImage"
+ recdAlbum = "album"
+ recdType = "type"
+ recdRecd = "recd"
+
+ keyName = "name"
+ keyMime = "mime"
+ keyExt = "ext"
+ keyIstr = "istr"
+
+ MODE_PHOTO = 0
+ MODE_VIDEO = 1
+ MODE_AUDIO = 2
+ TYPE_PHOTO = MODE_PHOTO
+ TYPE_VIDEO = MODE_VIDEO
+ TYPE_AUDIO = MODE_AUDIO
+
+ TIMER_0 = 0
+ TIMER_5 = 5
+ TIMER_10 = 10
+ TIMERS = []
+ TIMERS.append(TIMER_0)
+ TIMERS.append(TIMER_5)
+ TIMERS.append(TIMER_10)
+
+ DURATION_15 = 15
+ DURATION_30 = 30
+ DURATION_45 = 45
+ DURATIONS = []
+ DURATIONS.append(DURATION_15)
+ DURATIONS.append(DURATION_30)
+ DURATIONS.append(DURATION_45)
+
+ colorBlack = Color()
+ colorBlack.init_rgba( 0, 0, 0, 255 )
+ colorWhite = Color()
+ colorWhite.init_rgba( 255, 255, 255, 255 )
+ colorRed = Color()
+ colorRed.init_rgba( 255, 0, 0, 255)
+ colorGreen = Color()
+ colorGreen.init_rgba( 0, 255, 0, 255)
+ colorBlue = Color()
+ colorBlue.init_rgba( 0, 0, 255, 255)
+ colorHilite = Color()
+ colorHilite.init_gdk( sugar.graphics.style.COLOR_BUTTON_GREY )
+
+ gfxPath = os.path.join(activity.get_bundle_path(), "gfx")
+ soundClick = os.path.join(gfxPath, 'photoShutter.wav')
+
+ istrActivityName = _('Record')
+ istrPhoto = _('Photo')
+ istrVideo = _('Video')
+ istrAudio = _('Audio')
+ istrTimelapse = _('Time Lapse')
+ istrAnimation = _('Animation')
+ istrPanorama = _('Panorama')
+ #TRANS: photo by photographer, e.g., "Photo by Mary"
+ istrBy = _("%(1)s by %(2)s")
+ istrTitle = _('Title:')
+ istrRecorder = _('Recorder:')
+ istrDate = _('Date:')
+ istrTags = _('Tags:')
+ istrSaving = _('Saving')
+ istrFinishedRecording = _("Finished recording")
+ istrMinutesSecondsRemaining = _("%(1)s minutes, %(1)s seconds remaining")
+ istrSecondsRemaining = _("%(1)s seconds remaining")
+ istrRemove = _("Remove")
+ istrStoppedRecording = _("Stopped recording")
+ istrCopyToClipboard = _("Copy to clipboard")
+ istrTimer = _("Timer:")
+ istrDuration = _("Duration:")
+ istrNow = _("Immediate")
+ istrSeconds = _("%(1)s seconds")
+ istrMinutes = _("%(1)s minutes")
+ istrPlay = _("Play")
+ istrPause = _("Pause")
+ istrAddFrame = _("Add frame")
+ istrRemoveFrame = _("Remove frame")
+ istrFramesPerSecond = _("%(1)s frames per second")
+ istrQuality = _("Quality:")
+ istrBestQuality = _("Best quality")
+ istrHighQuality = _("High quality")
+ istrLowQuality = _("Low quality")
+ istrLargeFile = _("Large file")
+ istrSmallFile = _("Small file")
+ istrSilent = _("Silent")
+ istrRotate = _("Rotate")
+ istrClickToTakePicture = _("Click to take picture")
+ istrClickToAddPicture = _("Click to add picture")
+ #TRANS: Downloading Photo from Mary
+ istrDownloadingFrom = _("Downloading %(1)s from %(2)s")
+ #TRANS: Cannot download this Photo
+ istrCannotDownload = _("Cannot download this %(1)s")
+
+ thumbPhotoSvgData = None
+ thumbPhotoSvg = None
+ thumbVideoSvg = None
+ maxEnlargeSvg = None
+ maxReduceSvg = None
+ infoOnSvg = None
+ xoGuySvgData = None
+ camImg = None
+ micImg = None
+
+ def __init__( self, ca ):
+ thumbPhotoSvgPath = os.path.join(self.__class__.gfxPath, 'thumb_photo.svg')
+ thumbPhotoSvgFile = open(thumbPhotoSvgPath, 'r')
+ self.__class__.thumbPhotoSvgData = thumbPhotoSvgFile.read()
+ self.__class__.thumbPhotoSvg = utils.loadSvg(self.__class__.thumbPhotoSvgData, Instance.colorStroke.hex, Instance.colorFill.hex)
+ thumbPhotoSvgFile.close()
+
+ thumbVideoSvgPath = os.path.join(self.__class__.gfxPath, 'thumb_video.svg')
+ thumbVideoSvgFile = open(thumbVideoSvgPath, 'r')
+ self.__class__.thumbVideoSvgData = thumbVideoSvgFile.read()
+ self.__class__.thumbVideoSvg = utils.loadSvg(self.__class__.thumbVideoSvgData, Instance.colorStroke.hex, Instance.colorFill.hex)
+ thumbVideoSvgFile.close()
+
+ maxEnlargeSvgPath = os.path.join(self.__class__.gfxPath, 'max-enlarge.svg')
+ maxEnlargeSvgFile = open(maxEnlargeSvgPath, 'r')
+ maxEnlargeSvgData = maxEnlargeSvgFile.read()
+ self.__class__.maxEnlargeSvg = utils.loadSvg(maxEnlargeSvgData, None, None )
+ maxEnlargeSvgFile.close()
+
+ maxReduceSvgPath = os.path.join(self.__class__.gfxPath, 'max-reduce.svg')
+ maxReduceSvgFile = open(maxReduceSvgPath, 'r')
+ maxReduceSvgData = maxReduceSvgFile.read()
+ self.__class__.maxReduceSvg = utils.loadSvg(maxReduceSvgData, None, None )
+ maxReduceSvgFile.close()
+
+ infoOnSvgPath = os.path.join(self.__class__.gfxPath, 'info-on.svg')
+ infoOnSvgFile = open(infoOnSvgPath, 'r')
+ infoOnSvgData = infoOnSvgFile.read()
+ self.__class__.infoOnSvg = utils.loadSvg(infoOnSvgData, None, None )
+ infoOnSvgFile.close()
+
+ #todo: load from sugar, query its size for my purposes
+ #handle = self._load_svg(icon_info.file_name)
+ #dimensions = handle.get_dimension_data()
+ #icon_width = int(dimensions[0])
+ #icon_height = int(dimensions[1])
+ xoGuySvgPath = os.path.join(self.__class__.gfxPath, 'xo-guy.svg')
+ xoGuySvgFile = open(xoGuySvgPath, 'r')
+ self.__class__.xoGuySvgData = xoGuySvgFile.read()
+ xoGuySvgFile.close()
+
+ camImgFile = os.path.join(self.__class__.gfxPath, 'device-camera.png')
+ camImgPixbuf = gtk.gdk.pixbuf_new_from_file(camImgFile)
+ self.__class__.camImg = gtk.Image()
+ self.__class__.camImg.set_from_pixbuf( camImgPixbuf )
+
+ micImgFile = os.path.join(self.__class__.gfxPath, 'device-microphone.png')
+ micImgPixbuf = gtk.gdk.pixbuf_new_from_file(micImgFile)
+ self.__class__.micImg = gtk.Image()
+ self.__class__.micImg.set_from_pixbuf( micImgPixbuf )
+
diff --git a/glive.py b/glive.py
index 08c0ae5..e7cbb8a 100644
--- a/glive.py
+++ b/glive.py
@@ -33,6 +33,8 @@ import threading
import gobject
gobject.threads_init()
+from instance import Instance
+
class Glive:
def __init__(self, pca):
self.window = None
@@ -160,11 +162,11 @@ class Glive:
movieQueue = pipeline.get_by_name("movieQueue_"+n)
movieFilesink = pipeline.get_by_name("movieFilesink_"+n)
- movieFilepath = os.path.join(self.ca.tempPath, "output.ogg" ) #ogv
+ movieFilepath = os.path.join(Instance.tmpPath, "output.ogg" ) #ogv
movieFilesink.set_property("location", movieFilepath )
audioFilesink = pipeline.get_by_name('audioFilesink_'+n)
- audioFilepath = os.path.join(self.ca.tempPath, "output.wav")
+ audioFilepath = os.path.join(Instance.tmpPath, "output.wav")
audioFilesink.set_property("location", audioFilepath )
audioTee = pipeline.get_by_name('audioTee_'+n)
audioWavenc = pipeline.get_by_name('audioWavenc_'+n)
@@ -196,7 +198,7 @@ class Glive:
videoTee.unlink(picQueue)
audioFilesink = pipeline.get_by_name('audioFilesink_'+n)
- audioFilepath = os.path.join(self.ca.tempPath, "output.wav")
+ audioFilepath = os.path.join(Instance.tmpPath, "output.wav")
audioFilesink.set_property("location", audioFilepath )
elif (self._PIPETYPE == self.PIPETYPE_SUGAR_JHBUILD):
@@ -240,7 +242,7 @@ class Glive:
n = str(len(self.thumbPipes))
f = str(len(self.pipes)-2)
- oggFilepath = os.path.join(self.ca.tempPath, "output.ogg" ) #ogv
+ oggFilepath = os.path.join(Instance.tmpPath, "output.ogg" ) #ogv
if (not os.path.exists(oggFilepath)):
self.record = False
self.ca.m.cannotSaveVideo()
@@ -292,7 +294,7 @@ class Glive:
vorbisEnc.merge_tags(taglist, gst.TAG_MERGE_KEEP)
audioFilesink = audioline.get_by_name('audioFilesink_'+n)
- audioOggFilepath = os.path.join(self.ca.tempPath, "output.ogg")
+ audioOggFilepath = os.path.join(Instance.tmpPath, "output.ogg")
audioFilesink.set_property("location", audioOggFilepath )
audioBus = audioline.get_bus()
@@ -388,15 +390,15 @@ class Glive:
n = str(len(self.muxPipes))
f = str(len(self.pipes)-2)
- oggFilepath = os.path.join(self.ca.tempPath, "output.ogg") #ogv
+ oggFilepath = os.path.join(Instance.tmpPath, "output.ogg") #ogv
if (self.audio):
if ( len(self.muxPipes) > 0 ):
self.muxPipe().get_bus().disable_sync_message_emission()
self.muxPipe().get_bus().disconnect(self.MUX_MESSAGE_ID)
self.muxPipe().get_bus().remove_signal_watch()
- wavFilepath = os.path.join(self.ca.tempPath, "output.wav")
- muxFilepath = os.path.join(self.ca.tempPath, "mux.ogg") #ogv
+ wavFilepath = os.path.join(Instnace.tmpPath, "output.wav")
+ muxFilepath = os.path.join(Instance.tmpPath, "mux.ogg") #ogv
muxline = gst.parse_launch('filesrc location=' + str(oggFilepath) + ' name=muxVideoFilesrc_'+n+' ! oggdemux name=muxOggdemux_'+n+' ! theoradec name=muxTheoradec_'+n+' ! theoraenc name=muxTheoraenc_'+n+' ! oggmux name=muxOggmux_'+n+' ! filesink location=' + str(muxFilepath) + ' name=muxFilesink_'+n+' filesrc location=' + str(wavFilepath) + ' name=muxAudioFilesrc_'+n+' ! wavparse name=muxWavparse_'+n+' ! audioconvert name=muxAudioconvert_'+n+' ! vorbisenc name=muxVorbisenc_'+n+' ! muxOggmux_'+n+'.')
taglist = self.getTags()
@@ -422,7 +424,7 @@ class Glive:
if position != gst.CLOCK_TIME_NONE:
value = position * 100.0 / duration
value = value/100.0
- self.ca.ui.progressWindow.updateProgress( value, self.ca.istrSaving )
+ self.ca.ui.progressWindow.updateProgress(value, Constants.istrSaving)
return True
@@ -453,9 +455,9 @@ class Glive:
n = str(len(self.muxPipes)-1)
f = str(len(self.pipes)-2)
- wavFilepath = os.path.join(self.ca.tempPath, "output.wav")
- oggFilepath = os.path.join(self.ca.tempPath, "output.ogg") #ogv
- muxFilepath = os.path.join(self.ca.tempPath, "mux.ogg") #ogv
+ wavFilepath = os.path.join(Instance.tmpPath, "output.wav")
+ oggFilepath = os.path.join(Instance.tmpPath, "output.ogg") #ogv
+ muxFilepath = os.path.join(Instance.tmpPath, "mux.ogg") #ogv
os.remove( wavFilepath )
os.remove( oggFilepath )
self.ca.m.saveVideo(self.thumbBuf, str(muxFilepath), self.VIDEO_WIDTH_SMALL, self.VIDEO_HEIGHT_SMALL)
@@ -472,8 +474,8 @@ class Glive:
self.audioPipe().set_state(gst.STATE_NULL)
#todo: make output.ogg a variable
- wavFilepath = os.path.join(self.ca.tempPath, "output.wav")
- oggFilepath = os.path.join(self.ca.tempPath, "output.ogg")
+ wavFilepath = os.path.join(Instance.tmpPath, "output.wav")
+ oggFilepath = os.path.join(Instance.tmpPath, "output.ogg")
os.remove( wavFilepath )
self.ca.m.saveAudio(oggFilepath, self.audioPixbuf)
diff --git a/instance.py b/instance.py
new file mode 100644
index 0000000..92403ab
--- /dev/null
+++ b/instance.py
@@ -0,0 +1,26 @@
+import os
+
+from sugar import profile
+from sugar import util
+from sugar.activity import activity
+
+from color import Color
+
+class Instance:
+ key = profile.get_pubkey()
+ keyHash = util._sha_data(key)
+ hashedKey = util.printable_hash(keyHash)
+ nickName = profile.get_nick_name()
+
+ colorFill = Color()
+ colorFill.init_hex( profile.get_color().get_fill_color() )
+ colorStroke = Color()
+ colorStroke.init_hex( profile.get_color().get_stroke_color() )
+
+ instanceId = None
+ tmpPath = None
+
+ def __init__( self, ca ):
+ self.__class__.instanceId = ca._activity_id
+ tmpPath = os.path.join( ca.get_activity_root(), "tmp" )
+ self.__class__.tmpPath = os.path.join( tmpPath, str(self.__class__.instanceId)) \ No newline at end of file
diff --git a/model.py b/model.py
index 99c77bf..1f6ee5e 100644
--- a/model.py
+++ b/model.py
@@ -26,40 +26,43 @@ import os
import random
import cairo
import gtk
+import gtk.gdk
import pygtk
pygtk.require('2.0')
import shutil
import gc
import math
-import gtk.gdk
import time
from time import strftime
import gobject
-import xml.dom.minidom
-from xml.dom.minidom import getDOMImplementation
-from xml.dom.minidom import parse
from hashlib import md5
import operator
-from recorded import Recorded
-from color import Color
+import xml.dom.minidom
+from xml.dom.minidom import getDOMImplementation
+from xml.dom.minidom import parse
from sugar import util
from sugar.datastore import datastore
import sugar.env
+from constants import Constants
+from recorded import Recorded
+from color import Color
import _camera
class Model:
def __init__( self, pca ):
self.ca = pca
- self.setConstants()
+ self.MODE = Constants.MODE_PHOTO
+ self.UPDATING = True
+ self.RECORDING = False
self.mediaTypes = {}
- self.mediaTypes[self.TYPE_PHOTO] = {self.ca.keyName:"photo", self.ca.keyMime:"image/jpeg", self.ca.keyExt:"jpg", self.ca.keyIstr:self.ca.istrPhoto}
- self.mediaTypes[self.TYPE_VIDEO] = {self.ca.keyName:"video", self.ca.keyMime:"video/ogg", self.ca.keyExt:"ogg", self.ca.keyIstr:self.ca.istrVideo}
- self.mediaTypes[self.TYPE_AUDIO] = {self.ca.keyName:"audio", self.ca.keyMime:"audio/ogg", self.ca.keyExt:"ogg", self.ca.keyIstr:self.ca.istrAudio}
+ self.mediaTypes[Constants.TYPE_PHOTO] = {Constants.keyName:"photo", Constants.keyMime:"image/jpeg", Constants.keyExt:"jpg", Constants.keyIstr:Constants.istrPhoto}
+ self.mediaTypes[Constants.TYPE_VIDEO] = {Constants.keyName:"video", Constants.keyMime:"video/ogg", Constants.keyExt:"ogg", Constants.keyIstr:Constants.istrVideo}
+ self.mediaTypes[Constants.TYPE_AUDIO] = {Constants.keyName:"audio", Constants.keyMime:"audio/ogg", Constants.keyExt:"ogg", Constants.keyIstr:Constants.istrAudio}
self.mediaHashs = {}
for key,value in self.mediaTypes.items():
@@ -160,7 +163,7 @@ class Model:
bt = el.getAttributeNode(self.ca.recdBuddyThumb)
if (not bt == None):
try:
- thumbPath = os.path.join(self.ca.tempPath, "datastoreThumb.jpg")
+ thumbPath = os.path.join(Instance.tmpPath, "datastoreThumb.jpg")
thumbPath = self.getUniqueFilepath( thumbPath, 0 )
thumbImg = recd.pixbufFromString( bt.nodeValue )
thumbImg.save(thumbPath, "jpeg", {"quality":"85"} )
@@ -172,7 +175,7 @@ class Model:
if (not ai == None):
try:
audioImg = recd.pixbufFromString( ai.nodeValue )
- audioImagePath = os.path.join(self.ca.tempPath, "audioImage.png")
+ audioImagePath = os.path.join(Instance.tmpPath, "audioImage.png")
audioImagePath = self.getUniqueFilepath( audioImagePath, 0 )
audioImg.save(audioImagePath, "png", {} )
recd.audioImageFilename = os.path.basename(audioImagePath)
@@ -222,11 +225,11 @@ class Model:
def isVideoMode( self ):
- return self.MODE == self.MODE_VIDEO
+ return self.MODE == Constants.MODE_VIDEO
def isPhotoMode( self ):
- return self.MODE == self.MODE_PHOTO
+ return self.MODE == Constants.MODE_PHOTO
def displayThumb( self, type, forceUpdating ):
@@ -296,12 +299,12 @@ class Model:
def getHash( self ):
type = -1
- if (self.MODE == self.MODE_PHOTO):
- type = self.TYPE_PHOTO
- if (self.MODE == self.MODE_VIDEO):
- type = self.TYPE_VIDEO
- if (self.MODE == self.MODE_AUDIO):
- type = self.TYPE_AUDIO
+ if (self.MODE == Constants.MODE_PHOTO):
+ type = Constants.TYPE_PHOTO
+ if (self.MODE == Constants.MODE_VIDEO):
+ type = Constants.TYPE_VIDEO
+ if (self.MODE == Constants.MODE_AUDIO):
+ type = Constants.TYPE_AUDIO
if (type != -1):
return self.mediaHashs[type]
@@ -313,16 +316,16 @@ class Model:
if (self.UPDATING):
return
- if (self.MODE == self.MODE_PHOTO):
+ if (self.MODE == Constants.MODE_PHOTO):
self.startTakingPhoto()
- elif (self.MODE == self.MODE_VIDEO):
+ elif (self.MODE == Constants.MODE_VIDEO):
if (not self.RECORDING):
self.startRecordingVideo()
else:
#post-processing begins now, so queue up this gfx
self.ca.ui.showPostProcessGfx(True)
self.stopRecordingVideo()
- elif (self.MODE == self.MODE_AUDIO):
+ elif (self.MODE == Constants.MODE_AUDIO):
if (not self.RECORDING):
self.startRecordingAudio()
else:
@@ -344,15 +347,15 @@ class Model:
def saveAudio( self, tempPath, pixbuf ):
self.setUpdating( True )
- recd = self.createNewRecorded( self.TYPE_AUDIO )
- os.rename( tempPath, os.path.join(self.ca.tempPath,recd.mediaFilename))
+ recd = self.createNewRecorded( Constants.TYPE_AUDIO )
+ os.rename( tempPath, os.path.join(Instance.tmpPath,recd.mediaFilename))
- thumbPath = os.path.join(self.ca.tempPath, recd.thumbFilename)
+ thumbPath = os.path.join(Instance.tmpPath, recd.thumbFilename)
scale = float((self.ca.ui.tw+0.0)/(pixbuf.get_width()+0.0))
thumbImg = self.generateThumbnail(pixbuf, scale)
thumbImg.write_to_png(thumbPath)
- imagePath = os.path.join(self.ca.tempPath, "audioPicture.png")
+ imagePath = os.path.join(Instance.tmpPath, "audioPicture.png")
imagePath = self.getUniqueFilepath( imagePath, 0 )
pixbuf.save( imagePath, "png", {} )
recd.audioImageFilename = os.path.basename(imagePath)
@@ -360,9 +363,9 @@ class Model:
#at this point, we have both audio and thumb sapath, so we can save the recd
self.createNewRecordedMd5Sums( recd )
- audioHash = self.mediaHashs[self.TYPE_AUDIO]
+ audioHash = self.mediaHashs[Constants.TYPE_AUDIO]
audioHash.append( recd )
- gobject.idle_add(self.displayThumb, self.TYPE_AUDIO, True)
+ gobject.idle_add(self.displayThumb, Constants.TYPE_AUDIO, True)
self.doPostSaveVideo()
self.meshShareRecd( recd )
@@ -407,19 +410,19 @@ class Model:
def saveVideo( self, pixbuf, tempPath, wid, hit ):
- recd = self.createNewRecorded( self.TYPE_VIDEO )
- os.rename( tempPath, os.path.join(self.ca.tempPath,recd.mediaFilename))
+ recd = self.createNewRecorded( Constants.TYPE_VIDEO )
+ os.rename( tempPath, os.path.join(Instance.tmpPath,recd.mediaFilename))
- thumbPath = os.path.join(self.ca.tempPath, recd.thumbFilename)
+ thumbPath = os.path.join(Instance.tmpPath, recd.thumbFilename)
scale = float((self.ca.ui.tw+0.0)/(wid+0.0))
thumbImg = self.generateThumbnail(pixbuf, scale )
thumbImg.write_to_png(thumbPath)
self.createNewRecordedMd5Sums( recd )
- videoHash = self.mediaHashs[self.TYPE_VIDEO]
+ videoHash = self.mediaHashs[Constants.TYPE_VIDEO]
videoHash.append( recd )
- gobject.idle_add(self.displayThumb, self.TYPE_VIDEO, True)
+ gobject.idle_add(self.displayThumb, Constants.TYPE_VIDEO, True)
self.doPostSaveVideo()
self.meshShareRecd( recd )
@@ -467,12 +470,12 @@ class Model:
def savePhoto( self, pixbuf ):
- recd = self.createNewRecorded( self.TYPE_PHOTO )
+ recd = self.createNewRecorded( Constants.TYPE_PHOTO )
- imgpath = os.path.join(self.ca.tempPath, recd.mediaFilename)
+ imgpath = os.path.join(Instance.tmpPath, recd.mediaFilename)
pixbuf.save( imgpath, "jpeg" )
- thumbpath = os.path.join(self.ca.tempPath, recd.thumbFilename)
+ thumbpath = os.path.join(Instance.tmpPath, recd.thumbFilename)
scale = float((self.ca.ui.tw+0.0)/(pixbuf.get_width()+0.0))
thumbImg = self.generateThumbnail(pixbuf, scale)
thumbImg.write_to_png(thumbpath)
@@ -480,9 +483,9 @@ class Model:
#now that we've saved both the image and its pixbuf, we get their md5s
self.createNewRecordedMd5Sums( recd )
- photoHash = self.mediaHashs[self.TYPE_PHOTO]
+ photoHash = self.mediaHashs[Constants.TYPE_PHOTO]
photoHash.append( recd )
- gobject.idle_add(self.displayThumb, self.TYPE_PHOTO, True)
+ gobject.idle_add(self.displayThumb, Constants.TYPE_PHOTO, True)
self.meshShareRecd( recd )
@@ -548,44 +551,34 @@ class Model:
mediaThumbFilename = str(recd.recorderHash) + "_" + str(recd.time)
mediaFilename = mediaThumbFilename
mediaFilename = mediaFilename + "." + self.mediaTypes[type][self.ca.keyExt]
- mediaFilepath = os.path.join( self.ca.tempPath, mediaFilename )
+ mediaFilepath = os.path.join( Instance.tmpPath, mediaFilename )
mediaFilepath = self.getUniqueFilepath( mediaFilepath, 0 )
recd.mediaFilename = os.path.basename( mediaFilepath )
thumbFilename = mediaThumbFilename + "_thumb.jpg"
- thumbFilepath = os.path.join( self.ca.tempPath, thumbFilename )
+ thumbFilepath = os.path.join( Instance.tmpPath, thumbFilename )
thumbFilepath = self.getUniqueFilepath( thumbFilepath, 0 )
recd.thumbFilename = os.path.basename( thumbFilepath )
stringType = self.mediaTypes[type][self.ca.keyIstr]
- recd.title = self.ca.istrBy % {"1":stringType, "2":str(recd.recorderName)}
+ recd.title = Constants.istrBy % {"1":stringType, "2":str(recd.recorderName)}
- recd.colorStroke = self.ca.ui.colorStroke
- recd.colorFill = self.ca.ui.colorFill
+ recd.colorStroke = Instance.colorStroke
+ recd.colorFill = Instance.colorFill
return recd
- def getUniqueFilepath( self, path, i ):
- pathOb = os.path.abspath( path )
- if (os.path.exists(pathOb)):
- i = i+1
- newPath = os.path.join( os.path.dirname(pathOb), str( str(i) + os.path.basename(pathOb) ) )
- return self.getUniqueFilepath( str(newPath), i )
- else:
- return os.path.abspath( path )
-
-
def createNewRecordedMd5Sums( self, recd ):
#load the thumbfile
- thumbFile = os.path.join(self.ca.tempPath, recd.thumbFilename)
+ thumbFile = os.path.join(Instance.tmpPath, recd.thumbFilename)
thumbMd5 = self.md5File( thumbFile )
recd.thumbMd5 = thumbMd5
tBytes = os.stat(thumbFile)[7]
recd.thumbBytes = tBytes
#load the mediafile
- mediaFile = os.path.join(self.ca.tempPath, recd.mediaFilename)
+ mediaFile = os.path.join(Instance.tmpPath, recd.mediaFilename)
mediaMd5 = self.md5File( mediaFile )
recd.mediaMd5 = mediaMd5
mBytes = os.stat(mediaFile)[7]
@@ -644,60 +637,27 @@ class Model:
def doVideoMode( self ):
- if (self.MODE == self.MODE_VIDEO):
+ if (self.MODE == Constants.MODE_VIDEO):
return
- self.MODE = self.MODE_VIDEO
+ self.MODE = Constants.MODE_VIDEO
self.setUpdating(True)
gobject.idle_add( self.setupMode, self.MODE, True )
def doPhotoMode( self ):
- if (self.MODE == self.MODE_PHOTO):
+ if (self.MODE == Constants.MODE_PHOTO):
return
- self.MODE = self.MODE_PHOTO
+ self.MODE = Constants.MODE_PHOTO
self.setUpdating(True)
gobject.idle_add( self.setupMode, self.MODE, True )
def doAudioMode( self ):
- if (self.MODE == self.MODE_AUDIO):
+ if (self.MODE == Constants.MODE_AUDIO):
return
- self.MODE = self.MODE_AUDIO
+ self.MODE = Constants.MODE_AUDIO
self.setUpdating(True)
- gobject.idle_add( self.setupMode, self.MODE, True )
-
-
- def setConstants( self ):
- #pics or vids?
- self.MODE_PHOTO = 0
- self.MODE_VIDEO = 1
- self.MODE_AUDIO = 2
- self.MODE = self.MODE_PHOTO
-
- self.TYPE_PHOTO = 0
- self.TYPE_VIDEO = 1
- self.TYPE_AUDIO = 2
-
- self.UPDATING = True
- self.RECORDING = False
-
- self.TIMER_0 = 0
- self.TIMER_5 = 5
- self.TIMER_10 = 10
- self.TIMER = self.TIMER_0
- self.TIMERS = []
- self.TIMERS.append(self.TIMER_0)
- self.TIMERS.append(self.TIMER_5)
- self.TIMERS.append(self.TIMER_10)
-
- self.DURATION_15 = 15
- self.DURATION_30 = 30
- self.DURATION_45 = 45
- self.DURATION = self.DURATION_15
- self.DURATIONS = []
- self.DURATIONS.append(self.DURATION_15)
- self.DURATIONS.append(self.DURATION_30)
- self.DURATIONS.append(self.DURATION_45) \ No newline at end of file
+ gobject.idle_add( self.setupMode, self.MODE, True ) \ No newline at end of file
diff --git a/recorded.py b/recorded.py
index 48a670c..0346e9a 100644
--- a/recorded.py
+++ b/recorded.py
@@ -22,6 +22,8 @@ import os
import gtk
from gtk import gdk
+from instance import Instance
+
class Recorded:
def __init__( self, pca ):
@@ -99,7 +101,7 @@ class Recorded:
#just taken, so it is in the tempSessionDir
#so load file, convert to pixbuf, and return it here...
thumbPixbuf = None
- thumbFilepath = os.path.join(self.ca.tempPath, self.thumbFilename)
+ thumbFilepath = os.path.join(Instance.tmpPath, self.thumbFilename)
if ( os.path.isfile(thumbFilepath) ):
thumbPixbuf = gtk.gdk.pixbuf_new_from_file(thumbFilepath)
return thumbPixbuf
@@ -118,7 +120,7 @@ class Recorded:
#just taken, so it is in the tempSessionDir
#so load file, convert to pixbuf, and return it here...
thumbPixbuf = None
- thumbFilepath = os.path.join(self.ca.tempPath, self.thumbFilename)
+ thumbFilepath = os.path.join(Instance.tmpPath, self.thumbFilename)
if ( os.path.isfile(thumbFilepath) ):
return thumbFilepath
else:
@@ -129,7 +131,7 @@ class Recorded:
return None
img = self.pixbufFromString( self.datastoreOb.metadata['preview'] )
- thumbFilepath = os.path.join( self.ca.tempPath, "thumb.png")
+ thumbFilepath = os.path.join( Instance.tmpPath, "thumb.png")
thumbFilepath = self.ca.m.getUniqueFilepath(thumbFilepath, 0)
img.save(thumbFilepath, "png", {} )
return thumbFilepath
@@ -152,7 +154,7 @@ class Recorded:
def getAudioImageFilepath( self ):
if (self.audioImageFilename != None):
- audioFilepath = os.path.join(self.ca.tempPath, self.audioImageFilename)
+ audioFilepath = os.path.join(Instance.tmpPath, self.audioImageFilename)
return os.path.abspath(audioFilepath)
else:
return self.getThumbFilepath()
@@ -162,12 +164,12 @@ class Recorded:
if (self.datastoreId == None):
if (not self.buddy):
#just taken by you, so it is in the tempSessionDir
- mediaFilepath = os.path.join(self.ca.tempPath, self.mediaFilename)
+ mediaFilepath = os.path.join(Instance.tmpPath, self.mediaFilename)
return os.path.abspath(mediaFilepath)
else:
if (self.downloadedFromBuddy):
#the user has requested the high-res version, and it has downloaded
- mediaFilepath = os.path.join(self.ca.tempPath, self.mediaFilename)
+ mediaFilepath = os.path.join(Instance.tmpPath, self.mediaFilename)
return os.path.abspath(mediaFilepath)
else:
if (meshRequired):
@@ -185,13 +187,13 @@ class Recorded:
else:
if self.mediaFilename == None:
ext = self.ca.m.mediaTypes[self.type][self.ca.keyExt]
- recdPath = os.path.join(self.ca.tempPath, "recdFile_"+self.mediaMd5+"."+ext)
+ recdPath = os.path.join(Instance.tmpPath, "recdFile_"+self.mediaMd5+"."+ext)
recdPath = self.ca.m.getUniqueFilepath(recdPath, 0)
self.mediaFilename = os.path.basename(recdPath)
- mediaFilepath = os.path.join(self.ca.tempPath, self.mediaFilename)
+ mediaFilepath = os.path.join(Instance.tmpPath, self.mediaFilename)
return os.path.abspath(mediaFilepath)
else:
- mediaFilepath = os.path.join(self.ca.tempPath, self.mediaFilename)
+ mediaFilepath = os.path.join(Instance.tmpPath, self.mediaFilename)
return os.path.abspath(mediaFilepath)
else: #pulling from the datastore, regardless of who took it, cause we got it
diff --git a/serialize.py b/serialize.py
index e69de29..a1eddfe 100644
--- a/serialize.py
+++ b/serialize.py
@@ -0,0 +1,3 @@
+import xml.dom.minidom
+from xml.dom.minidom import getDOMImplementation
+from xml.dom.minidom import parse
diff --git a/ui.py b/ui.py
index 94206ca..341a126 100644
--- a/ui.py
+++ b/ui.py
@@ -28,10 +28,6 @@ import pygst
pygst.require('0.10')
import gst
import gst.interfaces
-#parse svg
-import rsvg
-#parse svg xml with regex
-import re
import time
from time import strftime
import math
@@ -40,10 +36,13 @@ import time
from sugar.graphics.toolcombobox import ToolComboBox
from sugar.graphics.toolbutton import ToolButton
+from sugar.graphics.tray import HTray
from sugar import profile
from sugar import util
from sugar.activity import activity
+from instance import Instance
+from constants import Constants
from color import Color
from p5 import P5
from p5_button import P5Button
@@ -59,8 +58,28 @@ class UI:
def __init__( self, pca ):
self.ca = pca
- self.loadColors()
- self.loadGfx()
+
+ #sizes
+ #thumb dimensions:
+ self.thumbTrayHt = 150 #todo: get sugar constant here
+ self.tw = 107
+ self.th = 80
+ self.thumbSvgW = 124
+ self.thumbSvgH = 124
+ #pip size:
+ self.pipw = 160
+ self.piph = 120
+ self.pipBorder = 4
+ self.pgdw = self.pipw + (self.pipBorder*2)
+ self.pgdh = self.piph + (self.pipBorder*2)
+ #maximize size:
+ self.maxw = 49
+ self.maxh = 49
+ #component spacing
+ self.inset = 10
+ #height of the record button, progress bar, etc.
+ self.controlBarHt = 49
+ self.recordButtWd = 75
#ui modes
self.FULLSCREEN = False
@@ -85,27 +104,6 @@ class UI:
self.centered = False
self.setup = False
- #thumb dimensions:
- self.thumbTrayHt = 150
- self.tw = 107
- self.th = 80
- self.thumbSvgW = 124
- self.thumbSvgH = 124
- #pip size:
- self.pipw = 160
- self.piph = 120
- self.pipBorder = 4
- self.pgdw = self.pipw + (self.pipBorder*2)
- self.pgdh = self.piph + (self.pipBorder*2)
- #maximize size:
- self.maxw = 49
- self.maxh = 49
- #component spacing
- self.inset = 10
- #height of the record button, progress bar, etc.
- self.controlBarHt = 49
- self.recordButtWd = 75
-
#prep for when to show
self.shownRecd = None
@@ -116,14 +114,14 @@ class UI:
self.ca.set_toolbox(self.toolbox)
self.photoToolbar = PhotoToolbar(self)
self.photoToolbar.set_sensitive( False )
- self.toolbox.add_toolbar( self.ca.istrPhoto, self.photoToolbar )
+ self.toolbox.add_toolbar( Constants.istrPhoto, self.photoToolbar )
self.videoToolbar = VideoToolbar(self)
self.videoToolbar.set_sensitive( False )
- self.toolbox.add_toolbar( self.ca.istrVideo, self.videoToolbar )
+ self.toolbox.add_toolbar( Constants.istrVideo, self.videoToolbar )
self.audioToolbar = AudioToolbar(self)
self.audioToolbar.set_sensitive( False )
- self.toolbox.add_toolbar( self.ca.istrAudio, self.audioToolbar )
- self.tbars = {self.ca.m.MODE_PHOTO:self.photoToolbar,self.ca.m.MODE_VIDEO:self.videoToolbar,self.ca.m.MODE_AUDIO:self.audioToolbar}
+ self.toolbox.add_toolbar( Constants.istrAudio, self.audioToolbar )
+ self.tbars = {Constants.MODE_PHOTO:self.photoToolbar,Constants.MODE_VIDEO:self.videoToolbar,Constants.MODE_AUDIO:self.audioToolbar}
self.toolbox.set_current_toolbar(self.ca.m.MODE+1)
self.toolbox.connect("current-toolbar-changed", self._toolbarChangeCb)
self.TOOLBOX_SIZE_ALLOCATE_ID = self.toolbox.connect_after("size-allocate", self._toolboxSizeAllocateCb)
@@ -158,30 +156,31 @@ class UI:
leftFill = gtk.VBox()
leftFill.set_size_request( self.letterBoxW, -1 )
self.leftFillBox = gtk.EventBox( )
- self.leftFillBox.modify_bg( gtk.STATE_NORMAL, self.colorBlack.gColor )
+ self.leftFillBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor )
leftFill.add( self.leftFillBox )
+
topBox.pack_start( leftFill, expand=True )
centerVBox = gtk.VBox()
- centerVBox.modify_bg(gtk.STATE_NORMAL, self.colorBlack.gColor)
+ centerVBox.modify_bg(gtk.STATE_NORMAL, Constants.colorBlack.gColor)
topBox.pack_start( centerVBox, expand=True )
self.centerBox = gtk.EventBox()
self.centerBox.set_size_request(self.vw, -1)
- self.centerBox.modify_bg(gtk.STATE_NORMAL, self.colorBlack.gColor)
+ self.centerBox.modify_bg(gtk.STATE_NORMAL, Constants.colorBlack.gColor)
centerVBox.pack_start( self.centerBox, expand=True )
centerSizer = gtk.VBox()
centerSizer.set_size_request(self.vw, -1)
- centerSizer.modify_bg(gtk.STATE_NORMAL, self.colorBlack.gColor)
+ centerSizer.modify_bg(gtk.STATE_NORMAL, Constants.colorBlack.gColor)
self.centerBox.add(centerSizer)
self.bottomCenter = gtk.EventBox()
- self.bottomCenter.modify_bg(gtk.STATE_NORMAL, self.colorWhite.gColor)
+ self.bottomCenter.modify_bg(gtk.STATE_NORMAL, Constants.colorWhite.gColor)
self.bottomCenter.set_size_request(self.vw, self.controlBarHt)
centerVBox.pack_start( self.bottomCenter, expand=False )
#into the center box we can put this guy...
self.backgdCanvasBox = gtk.VBox()
- self.backgdCanvasBox.modify_bg(gtk.STATE_NORMAL, self.colorWhite.gColor)
+ self.backgdCanvasBox.modify_bg(gtk.STATE_NORMAL, Constants.colorWhite.gColor)
self.backgdCanvasBox.set_size_request(self.vw, -1)
self.backgdCanvas = BackgroundCanvas(self)
self.backgdCanvas.set_size_request(self.vw, self.vh)
@@ -189,7 +188,7 @@ class UI:
#or this guy...
self.infoBox = gtk.EventBox()
- self.infoBox.modify_bg( gtk.STATE_NORMAL, self.colorHilite.gColor )
+ self.infoBox.modify_bg( gtk.STATE_NORMAL, Constants.colorHilite.gColor )
iinfoBox = gtk.VBox(spacing=self.inset)
self.infoBox.add( iinfoBox )
iinfoBox.set_size_request(self.vw, -1)
@@ -198,7 +197,7 @@ class UI:
rightFill = gtk.VBox()
rightFill.set_size_request( self.letterBoxW, -1 )
rightFillBox = gtk.EventBox()
- rightFillBox.modify_bg( gtk.STATE_NORMAL, self.colorBlack.gColor )
+ rightFillBox.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor )
rightFill.add( rightFillBox )
topBox.pack_start( rightFill, expand=True )
@@ -214,17 +213,17 @@ class UI:
self.namePanel = gtk.HBox()
leftInfBalance = gtk.VBox()
leftInfBalance.set_size_request( self.controlBarHt, -1 )
- leftInfBalance.modify_bg( gtk.STATE_NORMAL, self.colorWhite.gColor )
+ leftInfBalance.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
self.namePanel.pack_start( leftInfBalance, expand=False )
leftNamePanel = gtk.VBox()
leftNamePanel.set_size_request( 10, -1 )
self.namePanel.pack_start( leftNamePanel, expand=True )
- self.nameLabel = gtk.Label("<b>"+self.ca.istrTitle+"</b>")
+ self.nameLabel = gtk.Label("<b>"+Constants.istrTitle+"</b>")
self.nameLabel.set_use_markup( True )
self.namePanel.pack_start( self.nameLabel, expand=False, padding=self.inset )
self.nameLabel.set_alignment(0, .5)
self.nameTextfield = gtk.Entry(80)
- self.nameTextfield.modify_bg( gtk.STATE_INSENSITIVE, self.colorWhite.gColor )
+ self.nameTextfield.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorWhite.gColor )
self.nameTextfield.connect('changed', self._nameTextfieldEditedCb )
self.nameTextfield.set_alignment(0)
self.nameTextfield.set_size_request( -1, self.controlBarHt-self.inset )
@@ -244,7 +243,7 @@ class UI:
self.photographerPanel = gtk.VBox(spacing=self.inset)
self.infoBoxTopLeft.pack_start(self.photographerPanel, expand=False)
- photographerLabel = gtk.Label("<b>" + self.ca.istrRecorder + "</b>")
+ photographerLabel = gtk.Label("<b>" + Constants.istrRecorder + "</b>")
photographerLabel.set_use_markup( True )
self.photographerPanel.pack_start(photographerLabel, expand=False)
photographerLabel.set_alignment(0, .5)
@@ -261,7 +260,7 @@ class UI:
self.datePanel = gtk.HBox(spacing=self.inset)
self.infoBoxTopLeft.pack_start(self.datePanel, expand=False)
- dateLabel = gtk.Label("<b>"+self.ca.istrDate+"</b>")
+ dateLabel = gtk.Label("<b>"+Constants.istrDate+"</b>")
dateLabel.set_use_markup(True)
self.datePanel.pack_start(dateLabel, expand=False)
self.dateDateLabel = gtk.Label("")
@@ -269,7 +268,7 @@ class UI:
self.datePanel.pack_start(self.dateDateLabel)
self.tagsPanel = gtk.VBox(spacing=self.inset)
- tagsLabel = gtk.Label("<b>"+self.ca.istrTags+"</b>")
+ tagsLabel = gtk.Label("<b>"+Constants.istrTags+"</b>")
tagsLabel.set_use_markup(True)
tagsLabel.set_alignment(0, .5)
self.tagsPanel.pack_start(tagsLabel, expand=False)
@@ -287,7 +286,6 @@ class UI:
thumbnailsBox = gtk.HBox( )
thumbnailsEventBox.add( thumbnailsBox )
- from sugar.graphics.tray import HTray
self.thumbTray = HTray()
self.hackDisplayOfThumbtray(self.thumbTray)
self.thumbTray.set_size_request( -1, self.thumbTrayHt )
@@ -365,14 +363,14 @@ class UI:
self.pipBgdWindow = PipWindow(self)
self.addToWindowStack( self.pipBgdWindow, self.windowStack[len(self.windowStack)-1] )
- self.liveVideoWindow = LiveVideoWindow(self.colorBlack.gColor)
+ self.liveVideoWindow = LiveVideoWindow(Constants.colorBlack.gColor)
self.addToWindowStack( self.liveVideoWindow, self.windowStack[len(self.windowStack)-1] )
self.liveVideoWindow.set_glive(self.ca.glive)
self.liveVideoWindow.set_events(gtk.gdk.BUTTON_RELEASE_MASK)
self.liveVideoWindow.connect("button_release_event", self._liveButtonReleaseCb)
#video playback windows
- self.playOggWindow = PlayVideoWindow(self.colorBlack.gColor)
+ self.playOggWindow = PlayVideoWindow(Constants.colorBlack.gColor)
self.addToWindowStack( self.playOggWindow, self.windowStack[len(self.windowStack)-1] )
self.playOggWindow.set_gplay(self.ca.gplay)
self.playOggWindow.set_events(gtk.gdk.BUTTON_RELEASE_MASK)
@@ -382,7 +380,7 @@ class UI:
self.pipBgdWindow2 = PipWindow(self)
self.addToWindowStack( self.pipBgdWindow2, self.windowStack[len(self.windowStack)-1] )
- self.playLiveWindow = LiveVideoWindow(self.colorBlack.gColor)
+ self.playLiveWindow = LiveVideoWindow(Constants.colorBlack.gColor)
self.addToWindowStack( self.playLiveWindow, self.windowStack[len(self.windowStack)-1] )
self.playLiveWindow.set_events(gtk.gdk.BUTTON_RELEASE_MASK)
self.playLiveWindow.connect("button_release_event", self._playLiveButtonReleaseCb)
@@ -432,11 +430,11 @@ class UI:
self.toolbox.set_current_toolbar( self.ca.m.MODE+1 )
else:
num = num - 1 #offset the default activity tab
- if (num == self.ca.m.MODE_PHOTO) and (self.ca.m.MODE != self.ca.m.MODE_PHOTO):
+ if (num == Constants.MODE_PHOTO) and (self.ca.m.MODE != Constants.MODE_PHOTO):
self.ca.m.doPhotoMode()
- elif(num == self.ca.m.MODE_VIDEO) and (self.ca.m.MODE != self.ca.m.MODE_VIDEO):
+ elif(num == Constants.MODE_VIDEO) and (self.ca.m.MODE != Constants.MODE_VIDEO):
self.ca.m.doVideoMode()
- elif(num == self.ca.m.MODE_AUDIO) and (self.ca.m.MODE != self.ca.m.MODE_AUDIO):
+ elif(num == Constants.MODE_AUDIO) and (self.ca.m.MODE != Constants.MODE_AUDIO):
self.ca.m.doAudioMode()
@@ -485,13 +483,13 @@ class UI:
self.moveWinOffscreen( self.progressWindow )
self.moveWinOffscreen( self.scrubWindow )
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
if (not self.LIVEMODE):
self.moveWinOffscreen( self.liveVideoWindow )
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
if (not self.LIVEMODE):
self.moveWinOffscreen( self.playLiveWindow )
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
if (not self.LIVEMODE):
self.moveWinOffscreen( self.liveVideoWindow )
self.LAST_MODE = -1
@@ -529,7 +527,7 @@ class UI:
def mouseInWidget( self, mx, my ):
- if (self.ca.m.MODE != self.ca.m.MODE_AUDIO):
+ if (self.ca.m.MODE != Constants.MODE_AUDIO):
if (self.inWidget( mx, my, self.getLoc("max", self.FULLSCREEN), self.getDim("max", self.FULLSCREEN))):
return True
@@ -550,7 +548,7 @@ class UI:
def _mediaClickedForPlayback(self, widget, event):
if (not self.LIVEMODE):
if (self.shownRecd != None):
- if (self.ca.m.MODE != self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE != Constants.MODE_PHOTO):
self.showThumbSelection( self.shownRecd )
@@ -583,7 +581,7 @@ class UI:
if (not self.ca.m.UPDATING):
self.doShutter()
else:
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
self.resumeLiveVideo()
else:
self.resumePlayLiveVideo()
@@ -731,7 +729,7 @@ class UI:
self.ca.ui.setDefaultCursor( self.windowStack[i].window )
if (self.ca.m.RECORDING):
- self.recordWindow.shutterButton.modify_bg( gtk.STATE_NORMAL, self.colorRed.gColor )
+ self.recordWindow.shutterButton.modify_bg( gtk.STATE_NORMAL, Constants.colorRed.gColor )
else:
self.recordWindow.shutterButton.modify_bg( gtk.STATE_NORMAL, None )
@@ -829,21 +827,21 @@ class UI:
passedTime = time.time() - self.recTime
duration = 10.0
- if (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ if (self.ca.m.MODE == Constants.MODE_VIDEO):
duration = self.videoToolbar.getDuration()+0.0
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
duration = self.audioToolbar.getDuration()+0.0
if (passedTime >= duration ):
gobject.source_remove( self.UPDATE_DURATION_ID )
- self.progressWindow.updateProgress( 1, self.ca.istrFinishedRecording )
+ self.progressWindow.updateProgress( 1, Constants.istrFinishedRecording )
if (self.ca.m.RECORDING):
gobject.idle_add( self.doShutter )
return False
else:
secsRemaining = duration - passedTime
- self.progressWindow.updateProgress( passedTime/duration, self.ca.istrDuration + " " + self.ca.istrSecondsRemaining % {"1":str(int(secsRemaining))} )
+ self.progressWindow.updateProgress( passedTime/duration, Constants.istrDuration + " " + Constants.istrSecondsRemaining % {"1":str(int(secsRemaining))} )
return True
@@ -855,11 +853,11 @@ class UI:
#set up the x & xv x-ition (if need be)
self.ca.gplay.stop()
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
self.startLiveVideo( self.liveVideoWindow, self.ca.glive.PIPETYPE_XV_VIDEO_DISPLAY_RECORD, True )
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
self.startLiveVideo( self.playLiveWindow, self.ca.glive.PIPETYPE_XV_VIDEO_DISPLAY_RECORD, True )
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
self.startLiveVideo( self.liveVideoWindow, self.ca.glive.PIPETYPE_AUDIO_RECORD, True )
bottomKid = self.bottomCenter.get_child()
@@ -1019,7 +1017,7 @@ class UI:
def getEyeLoc( self, full ):
if (not full):
- if (self.ca.m.MODE != self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE != Constants.MODE_PHOTO):
return [self.centerBoxPos[0], self.centerBoxPos[1]+self.vh]
else:
return [(self.centerBoxPos[0]+(self.vw/2))-self.recordButtWd/2, self.centerBoxPos[1]+self.vh]
@@ -1031,7 +1029,7 @@ class UI:
if (not full):
return [self.recordButtWd, self.controlBarHt]
else:
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
return [gtk.gdk.screen_width()-(self.inset*2), self.controlBarHt]
else:
return [self.recordButtWd, self.controlBarHt]
@@ -1146,7 +1144,7 @@ class UI:
thumbButton.set_size_request(80, -1)
- def shutterClickCb( self, arg ):
+ def _shutterClickCb( self, arg ):
self.doShutter()
@@ -1155,11 +1153,11 @@ class UI:
if (not self.ca.m.RECORDING):
#there is no update timer running, so we need to find out if there is a timer needed
timerTime = 0
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
timerTime = self.photoToolbar.getTimer()
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
timerTime = self.videoToolbar.getTimer()
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
timerTime = self.audioToolbar.getTimer()
if (timerTime > 0):
@@ -1191,11 +1189,11 @@ class UI:
passedTime = nowTime - self.timerStartTime
timerTime = 0
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
timerTime = self.photoToolbar.getTimer()
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
timerTime = self.videoToolbar.getTimer()
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
timerTime = self.audioToolbar.getTimer()
if (passedTime >= timerTime):
@@ -1203,7 +1201,7 @@ class UI:
return False
else:
secsRemaining = timerTime-passedTime
- self.progressWindow.updateProgress( passedTime/timerTime, self.ca.istrTimer + " " + self.ca.istrSecondsRemaining % {"1":str(int(secsRemaining))} )
+ self.progressWindow.updateProgress( passedTime/timerTime, Constants.istrTimer + " " + Constants.istrSecondsRemaining % {"1":str(int(secsRemaining))} )
return True
@@ -1221,7 +1219,7 @@ class UI:
def updateCountdownComponents( self ):
- if (not self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (not self.ca.m.MODE == Constants.MODE_PHOTO):
return
if (self.LAST_COUNTINGDOWN != self.COUNTINGDOWN):
@@ -1251,20 +1249,20 @@ class UI:
pos = []
if (self.RECD_INFO_ON and not self.TRANSCODING):
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
pos.append({"position":"pgd", "window":self.pipBgdWindow} )
pos.append({"position":"pip", "window":self.liveVideoWindow} )
pos.append({"position":"inb", "window":self.livePhotoWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
pos.append({"position":"pgd", "window":self.pipBgdWindow2} )
pos.append({"position":"pip", "window":self.playLiveWindow} )
pos.append({"position":"inb", "window":self.playOggWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
pos.append({"position":"pgd", "window":self.pipBgdWindow} )
pos.append({"position":"pip", "window":self.liveVideoWindow} )
pos.append({"position":"inb", "window":self.livePhotoWindow} )
elif (not self.RECD_INFO_ON and not self.TRANSCODING):
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
if (self.LIVEMODE):
if (not self.COUNTINGDOWN):
pos.append({"position":"img", "window":self.liveVideoWindow} )
@@ -1279,7 +1277,7 @@ class UI:
pos.append({"position":"pgd", "window":self.pipBgdWindow} )
pos.append({"position":"pip", "window":self.liveVideoWindow} )
pos.append({"position":"max", "window":self.maxWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
if (self.LIVEMODE):
pos.append({"position":"img", "window":self.playLiveWindow} )
pos.append({"position":"max", "window":self.maxWindow} )
@@ -1291,7 +1289,7 @@ class UI:
pos.append({"position":"pgd", "window":self.pipBgdWindow2} )
pos.append({"position":"pip", "window":self.playLiveWindow} )
pos.append({"position":"scr", "window":self.scrubWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
if (self.LIVEMODE):
pos.append({"position":"img", "window":self.liveVideoWindow} )
pos.append({"position":"eye", "window":self.recordWindow} )
@@ -1327,7 +1325,7 @@ class UI:
def showWidgets( self ):
pos = []
- if (self.ca.m.MODE == self.ca.m.MODE_PHOTO):
+ if (self.ca.m.MODE == Constants.MODE_PHOTO):
if (not self.LIVEMODE):
pos.append({"position":"pgd", "window":self.pipBgdWindow} )
pos.append({"position":"pip", "window":self.liveVideoWindow} )
@@ -1335,7 +1333,7 @@ class UI:
else:
pos.append({"position":"max", "window":self.maxWindow} )
pos.append({"position":"eye", "window":self.recordWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_VIDEO):
+ elif (self.ca.m.MODE == Constants.MODE_VIDEO):
if (not self.LIVEMODE):
pos.append({"position":"max", "window":self.maxWindow} )
pos.append({"position":"pgd", "window":self.pipBgdWindow2} )
@@ -1345,7 +1343,7 @@ class UI:
pos.append({"position":"max", "window":self.maxWindow} )
pos.append({"position":"eye", "window":self.recordWindow} )
pos.append({"position":"prg", "window":self.progressWindow} )
- elif (self.ca.m.MODE == self.ca.m.MODE_AUDIO):
+ elif (self.ca.m.MODE == Constants.MODE_AUDIO):
if (not self.LIVEMODE):
pos.append({"position":"pgd", "window":self.pipBgdWindow} )
pos.append({"position":"pip", "window":self.liveVideoWindow} )
@@ -1473,11 +1471,11 @@ class UI:
lastRecd = self.shownRecd
#do we need to know the type, since we're showing based on the mode of the app?
- if (recd.type == self.ca.m.TYPE_PHOTO):
+ if (recd.type == Constants.TYPE_PHOTO):
self.showPhoto( recd )
- elif (recd.type == self.ca.m.TYPE_VIDEO):
+ elif (recd.type == Constants.TYPE_VIDEO):
self.showVideo( recd )
- elif (recd.type == self.ca.m.TYPE_AUDIO):
+ elif (recd.type == Constants.TYPE_AUDIO):
self.showAudio( recd )
if (recd != lastRecd):
@@ -1487,9 +1485,9 @@ class UI:
if (bottomKid != None):
self.bottomCenter.remove( bottomKid )
- if (recd.type == self.ca.m.TYPE_PHOTO):
+ if (recd.type == Constants.TYPE_PHOTO):
self.bottomCenter.add( self.namePanel )
- elif (recd.type == self.ca.m.TYPE_VIDEO or recd.type == self.ca.m.TYPE_AUDIO):
+ elif (recd.type == Constants.TYPE_VIDEO or recd.type == Constants.TYPE_AUDIO):
if (not self.RECD_INFO_ON):
self.bottomCenter.add( self.scrubberPanel )
else:
@@ -1560,12 +1558,12 @@ class UI:
if (recd == self.shownRecd):
#todo: should be using modes here to check which mode to switch to
- if (recd.type == self.ca.m.TYPE_PHOTO):
+ if (recd.type == Constants.TYPE_PHOTO):
self.livePhotoCanvas.setImage( None )
- elif (recd.type == self.ca.m.TYPE_VIDEO):
+ elif (recd.type == Constants.TYPE_VIDEO):
self.ca.gplay.stop()
self.startLiveVideo( self.playLiveWindow, self.ca.glive.PIPETYPE_XV_VIDEO_DISPLAY_RECORD, False )
- elif (recd.type == self.ca.m.TYPE_AUDIO):
+ elif (recd.type == Constants.TYPE_AUDIO):
self.livePhotoCanvas.setImage( None )
self.startLiveAudio()
@@ -1597,6 +1595,7 @@ class UI:
self.photographerNameLabel.set_label( recd.recorderName )
self.nameTextfield.set_text( recd.title )
self.nameTextfield.set_sensitive( True )
+ #todo: internationalize the date
self.dateDateLabel.set_label( strftime( "%a, %b %d, %I:%M:%S %p", time.localtime(recd.time) ) )
self.photographerPanel.show()
@@ -1614,101 +1613,13 @@ class UI:
win.set_cursor( None )
- def loadGfx( self ):
- thumbPhotoSvgFile = open(os.path.join(self.ca.gfxPath, 'thumb_photo.svg'), 'r')
- self.thumbPhotoSvgData = thumbPhotoSvgFile.read()
- self.thumbPhotoSvg = self.loadSvg(self.thumbPhotoSvgData, self.colorStroke.hex, self.colorFill.hex)
- thumbPhotoSvgFile.close()
-
- thumbVideoSvgFile = open(os.path.join(self.ca.gfxPath, 'thumb_video.svg'), 'r')
- self.thumbVideoSvgData = thumbVideoSvgFile.read()
- self.thumbVideoSvg = self.loadSvg(self.thumbVideoSvgData, self.colorStroke.hex, self.colorFill.hex)
- thumbVideoSvgFile.close()
-
- maxEnlargeSvgFile = open(os.path.join(self.ca.gfxPath, 'max-enlarge.svg'), 'r')
- maxEnlargeSvgData = maxEnlargeSvgFile.read()
- self.maxEnlargeSvg = self.loadSvg(maxEnlargeSvgData, None, None )
- maxEnlargeSvgFile.close()
-
- maxReduceSvgPath = os.path.join(self.ca.gfxPath, 'max-reduce.svg')
- maxReduceSvgFile = open(maxReduceSvgPath, 'r')
- maxReduceSvgData = maxReduceSvgFile.read()
- self.maxReduceSvg = self.loadSvg(maxReduceSvgData, None, None )
- maxReduceSvgFile.close()
-
- infoOnSvgFile = open(os.path.join(self.ca.gfxPath, 'info-on.svg'), 'r')
- infoOnSvgData = infoOnSvgFile.read()
- self.infoOnSvg = self.loadSvg(infoOnSvgData, None, None )
- infoOnSvgFile.close()
-
- #todo: load from sugar, query its size for my purposes
- #handle = self._load_svg(icon_info.file_name)
- #dimensions = handle.get_dimension_data()
- #icon_width = int(dimensions[0])
- #icon_height = int(dimensions[1])
- xoGuySvgFile = open(os.path.join(self.ca.gfxPath, 'xo-guy.svg'), 'r')
- self.xoGuySvgData = xoGuySvgFile.read()
- xoGuySvgFile.close()
-
- camImgFile = os.path.join(self.ca.gfxPath, 'device-camera.png')
- camImgPixbuf = gtk.gdk.pixbuf_new_from_file(camImgFile)
- self.camImg = gtk.Image()
- self.camImg.set_from_pixbuf( camImgPixbuf )
-
- micImgFile = os.path.join(self.ca.gfxPath, 'device-microphone.png')
- micImgPixbuf = gtk.gdk.pixbuf_new_from_file(micImgFile)
- self.micImg = gtk.Image()
- self.micImg.set_from_pixbuf( micImgPixbuf )
-
- self.clickWav = os.path.join(self.ca.gfxPath, 'photoShutter.wav')
-
-
- def loadColors( self ):
- profileColor = profile.get_color()
- self.colorFill = Color()
- self.colorFill.init_hex( profileColor.get_fill_color() )
- self.colorStroke = Color()
- self.colorStroke.init_hex( profileColor.get_stroke_color() )
- self.colorBlack = Color()
- self.colorBlack.init_rgba( 0, 0, 0, 255 )
- self.colorWhite = Color()
- self.colorWhite.init_rgba( 255, 255, 255, 255 )
- self.colorTray = Color()
- self.colorTray.init_rgba( 77, 77, 79, 255 )
- self.colorRed = Color()
- self.colorRed.init_rgba( 255, 0, 0, 255)
- self.colorGreen = Color()
- self.colorGreen.init_rgba( 0, 255, 0, 255)
- self.colorBlue = Color()
- self.colorBlue.init_rgba( 0, 0, 255, 255)
-
- import sugar.graphics.style
- self.colorBg = Color()
- self.colorBg.init_gdk( sugar.graphics.style.COLOR_PANEL_GREY )
- self.colorHilite = Color()
- self.colorHilite.init_gdk( sugar.graphics.style.COLOR_BUTTON_GREY ) #"#808384" )
-
-
- def loadSvg( self, data, stroke, fill ):
- if ((stroke == None) or (fill == None)):
- return rsvg.Handle( data=data )
-
- entity = '<!ENTITY fill_color "%s">' % fill
- data = re.sub('<!ENTITY fill_color .*>', entity, data)
-
- entity = '<!ENTITY stroke_color "%s">' % stroke
- data = re.sub('<!ENTITY stroke_color .*>', entity, data)
-
- return rsvg.Handle( data=data )
-
-
class BackgroundCanvas(P5):
def __init__(self, ui):
P5.__init__(self)
self.ui = ui
def draw(self, ctx, w, h):
- self.background( ctx, self.ui.colorBlack, w, h )
+ self.background( ctx, Constants.colorBlack, w, h )
#todo: b&w image for compression
#ctx.translate( (w/2)-(h/2), 0 )
#self.ui.modWaitSvg.render_cairo( ctx )
@@ -1719,8 +1630,8 @@ class PhotoCanvasWindow(gtk.Window):
gtk.Window.__init__(self)
self.ui = ui
self.photoCanvas = None
- self.modify_bg( gtk.STATE_NORMAL, self.ui.colorBlack.gColor )
- self.modify_bg( gtk.STATE_INSENSITIVE, self.ui.colorBlack.gColor )
+ self.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor )
+ self.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorBlack.gColor )
def setPhotoCanvas( self, photoCanvas ):
@@ -1736,12 +1647,12 @@ class PhotoCanvas(P5):
self.drawImg = None
self.SCALING_IMG_ID = 0
self.cacheWid = -1
- self.modify_bg( gtk.STATE_NORMAL, self.ui.colorBlack.gColor )
- self.modify_bg( gtk.STATE_INSENSITIVE, self.ui.colorBlack.gColor )
+ self.modify_bg( gtk.STATE_NORMAL, Constants.colorBlack.gColor )
+ self.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorBlack.gColor )
def draw(self, ctx, w, h):
- self.background( ctx, self.ui.colorBlack, w, h )
+ self.background( ctx, Constants.colorBlack, w, h )
if (self.img != None):
@@ -1801,7 +1712,7 @@ class PipCanvas(P5):
self.ui = ui
def draw(self, ctx, w, h):
- self.background( ctx, self.ui.colorWhite, w, h )
+ self.background( ctx, Constants.colorWhite, w, h )
class xoPanel(P5):
@@ -1831,7 +1742,7 @@ class xoPanel(P5):
def draw(self, ctx, w, h):
#todo: 2x buffer
- self.background( ctx, self.ui.colorHilite, w, h )
+ self.background( ctx, Constants.colorHilite, w, h )
if (self.xoGuy != None):
#todo: scale mr xo
@@ -1851,8 +1762,8 @@ class ScrubberWindow(gtk.Window):
self.p_duration = gst.CLOCK_TIME_NONE
self.hbox = gtk.HBox()
- self.hbox.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
- self.hbox.modify_bg( gtk.STATE_INSENSITIVE, self.ui.colorWhite.gColor )
+ self.hbox.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
+ self.hbox.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorWhite.gColor )
self.add( self.hbox )
self.pause_image = gtk.image_new_from_stock(gtk.STOCK_MEDIA_PAUSE, gtk.ICON_SIZE_BUTTON)
@@ -1861,7 +1772,7 @@ class ScrubberWindow(gtk.Window):
self.button = gtk.Button()
buttBox = gtk.EventBox()
buttBox.add(self.button)
- buttBox.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ buttBox.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
self.button.set_image(self.play_image)
self.button.set_property('can-default', True)
self.button.set_size_request( self.ui.controlBarHt, self.ui.controlBarHt )
@@ -1877,7 +1788,7 @@ class ScrubberWindow(gtk.Window):
self.hscale.set_draw_value(False)
self.hscale.set_update_policy(gtk.UPDATE_CONTINUOUS)
hscaleBox = gtk.EventBox()
- hscaleBox.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ hscaleBox.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
hscaleBox.add( self.hscale )
self.hscale.connect('button-press-event', self._scaleButtonPressCb)
self.hscale.connect('button-release-event', self._scaleButtonReleaseCb)
@@ -2021,9 +1932,9 @@ class MaxButton(P5Button):
def draw(self, ctx, w, h):
if (self.ui.FULLSCREEN):
- self.ui.maxEnlargeSvg.render_cairo( ctx )
+ Constants.maxEnlargeSvg.render_cairo( ctx )
else:
- self.ui.maxReduceSvg.render_cairo( ctx )
+ Constants.maxReduceSvg.render_cairo( ctx )
def fireButton(self, actionCommand):
@@ -2057,7 +1968,7 @@ class InfButton(P5Button):
def draw(self, ctx, w, h):
- self.background( ctx, self.ui.colorWhite, w, h )
+ self.background( ctx, Constants.colorWhite, w, h )
self.ui.infoOnSvg.render_cairo( ctx )
@@ -2073,19 +1984,19 @@ class RecordWindow(gtk.Window):
self.shutterButton = gtk.Button()
self.shutterButton.set_size_request( self.ui.recordButtWd, self.ui.controlBarHt )
- self.shutterButton.set_image( self.ui.camImg )
- self.shutterButton.connect("clicked", self.ui.shutterClickCb)
+ self.shutterButton.set_image( Constants.camImg )
+ self.shutterButton.connect("clicked", self.ui._shutterClickCb)
self.shutterButton.set_sensitive(False)
shutterBox = gtk.EventBox()
shutterBox.set_size_request( self.ui.recordButtWd, self.ui.controlBarHt )
- shutterBox.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ shutterBox.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
self.shutterButton.set_border_width( self.ui.inset )
hbox = gtk.HBox()
self.add( hbox )
leftPanel = gtk.VBox()
leftEvent = gtk.EventBox()
- leftEvent.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ leftEvent.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
leftEvent.add( leftPanel )
hbox.pack_start( leftEvent, expand=True )
shutterBox.add( self.shutterButton )
@@ -2093,18 +2004,18 @@ class RecordWindow(gtk.Window):
rightPanel = gtk.VBox()
rightEvent = gtk.EventBox()
- rightEvent.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ rightEvent.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
rightEvent.add( rightPanel )
hbox.pack_start( rightEvent, expand=True )
def updateGfx( self ):
- if (self.ui.ca.m.MODE == self.ui.ca.m.MODE_AUDIO):
- if (self.shutterButton.get_image() != self.ui.micImg):
- self.shutterButton.set_image( self.ui.micImg )
+ if (self.ui.ca.m.MODE == Constants.MODE_AUDIO):
+ if (self.shutterButton.get_image() != Constants.micImg):
+ self.shutterButton.set_image( Constants.micImg )
else:
- if (self.shutterButton.get_image() != self.ui.camImg):
- self.shutterButton.set_image( self.ui.camImg )
+ if (self.shutterButton.get_image() != Constants.camImg):
+ self.shutterButton.set_image( Constants.camImg )
class ProgressWindow(gtk.Window):
@@ -2114,8 +2025,8 @@ class ProgressWindow(gtk.Window):
self.str = None
eb = gtk.EventBox()
- eb.modify_fg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
- eb.modify_bg( gtk.STATE_NORMAL, self.ui.colorWhite.gColor )
+ eb.modify_fg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
+ eb.modify_bg( gtk.STATE_NORMAL, Constants.colorWhite.gColor )
self.add( eb )
vb = gtk.VBox()
@@ -2123,7 +2034,7 @@ class ProgressWindow(gtk.Window):
eb.add(vb)
self.progBar = gtk.ProgressBar()
- self.progBar.modify_bg( gtk.STATE_INSENSITIVE, self.ui.colorWhite.gColor )
+ self.progBar.modify_bg( gtk.STATE_INSENSITIVE, Constants.colorWhite.gColor )
vb.add( self.progBar )
@@ -2143,8 +2054,8 @@ class PhotoToolbar(gtk.Toolbar):
img = ToolButton('media-photo')
img.connect('clicked', self._shutterClickCb)
- img.get_icon_widget().set_property( 'fill-color', self.ui.colorFill.hex )
- img.get_icon_widget().set_property( 'stroke-color', self.ui.colorStroke.hex )
+ img.get_icon_widget().set_property( 'fill-color', Instance.colorFill.hex )
+ img.get_icon_widget().set_property( 'stroke-color', Instance.colorStroke.hex )
self.insert(img, -1)
img.show()
@@ -2155,12 +2066,12 @@ class PhotoToolbar(gtk.Toolbar):
separator.show()
timerCbb = gtk.combo_box_new_text()
- self.timerCb = ToolComboBox(combo=timerCbb, label_text=self.ui.ca.istrTimer)
- for i in range (0, len(self.ui.ca.m.TIMERS)):
+ self.timerCb = ToolComboBox(combo=timerCbb, label_text=Constants.istrTimer)
+ for i in range (0, len(Constants.TIMERS)):
if (i == 0):
- self.timerCb.combo.append_text( self.ui.ca.istrNow )
+ self.timerCb.combo.append_text( Constants.istrNow )
else:
- self.timerCb.combo.append_text( self.ui.ca.istrSeconds % {"1":(str(self.ui.ca.m.TIMERS[i]))} )
+ self.timerCb.combo.append_text( Constants.istrSeconds % {"1":(str(Constants.TIMERS[i]))} )
self.timerCb.combo.set_active(0)
self.insert( self.timerCb, -1 )
@@ -2170,7 +2081,7 @@ class PhotoToolbar(gtk.Toolbar):
def getTimer(self):
- return self.ui.ca.m.TIMERS[self.timerCb.combo.get_active()]
+ return Constants.TIMERS[self.timerCb.combo.get_active()]
class VideoToolbar(gtk.Toolbar):
@@ -2180,8 +2091,8 @@ class VideoToolbar(gtk.Toolbar):
img = ToolButton('media-video')
img.connect('clicked', self._shutterClickCb)
- img.get_icon_widget().set_property( 'fill-color', self.ui.colorFill.hex )
- img.get_icon_widget().set_property( 'stroke-color', self.ui.colorStroke.hex )
+ img.get_icon_widget().set_property( 'fill-color', Instance.colorFill.hex )
+ img.get_icon_widget().set_property( 'stroke-color', Instance.colorStroke.hex )
self.insert(img, -1)
img.show()
@@ -2192,12 +2103,12 @@ class VideoToolbar(gtk.Toolbar):
separator.show()
timerCbb = gtk.combo_box_new_text()
- self.timerCb = ToolComboBox(combo=timerCbb, label_text=self.ui.ca.istrTimer)
- for i in range (0, len(self.ui.ca.m.TIMERS)):
+ self.timerCb = ToolComboBox(combo=timerCbb, label_text=Constants.istrTimer)
+ for i in range (0, len(Constants.TIMERS)):
if (i == 0):
- self.timerCb.combo.append_text( self.ui.ca.istrNow )
+ self.timerCb.combo.append_text( Constants.istrNow )
else:
- self.timerCb.combo.append_text( self.ui.ca.istrSeconds % {"1":(str(self.ui.ca.m.TIMERS[i]))} )
+ self.timerCb.combo.append_text( Constants.istrSeconds % {"1":(str(Constants.TIMERS[i]))} )
self.timerCb.combo.set_active(0)
self.insert( self.timerCb, -1 )
@@ -2208,9 +2119,9 @@ class VideoToolbar(gtk.Toolbar):
self.insert( separator2, -1 )
durCbb = gtk.combo_box_new_text()
- self.durCb = ToolComboBox(combo=durCbb, label_text=self.ui.ca.istrDuration)
- for i in range (0, len(self.ui.ca.m.DURATIONS)):
- self.durCb.combo.append_text( self.ui.ca.istrSeconds % {"1":(str(self.ui.ca.m.DURATIONS[i]))} )
+ self.durCb = ToolComboBox(combo=durCbb, label_text=Constants.istrDuration)
+ for i in range (0, len(Constants.DURATIONS)):
+ self.durCb.combo.append_text( Constants.istrSeconds % {"1":(str(Constants.DURATIONS[i]))} )
self.durCb.combo.set_active(0)
self.insert(self.durCb, -1 )
@@ -2220,11 +2131,11 @@ class VideoToolbar(gtk.Toolbar):
def getTimer(self):
- return self.ui.ca.m.TIMERS[self.timerCb.combo.get_active()]
+ return Constants.TIMERS[self.timerCb.combo.get_active()]
def getDuration(self):
- return self.ui.ca.m.DURATIONS[self.durCb.combo.get_active()]
+ return Constants.DURATIONS[self.durCb.combo.get_active()]
class AudioToolbar(gtk.Toolbar):
@@ -2234,8 +2145,8 @@ class AudioToolbar(gtk.Toolbar):
img = ToolButton('media-audio')
img.connect('clicked', self._shutterClickCb)
- img.get_icon_widget().set_property( 'fill-color', self.ui.colorFill.hex )
- img.get_icon_widget().set_property( 'stroke-color', self.ui.colorStroke.hex )
+ img.get_icon_widget().set_property( 'fill-color', Instance.colorFill.hex )
+ img.get_icon_widget().set_property( 'stroke-color', Instance.colorStroke.hex )
self.insert(img, -1)
img.show()
@@ -2246,12 +2157,12 @@ class AudioToolbar(gtk.Toolbar):
separator.show()
timerCbb = gtk.combo_box_new_text()
- self.timerCb = ToolComboBox(combo=timerCbb, label_text=self.ui.ca.istrTimer)
- for i in range (0, len(self.ui.ca.m.TIMERS)):
+ self.timerCb = ToolComboBox(combo=timerCbb, label_text=Constants.istrTimer)
+ for i in range (0, len(Constants.TIMERS)):
if (i == 0):
- self.timerCb.combo.append_text( self.ui.ca.istrNow )
+ self.timerCb.combo.append_text( Constants.istrNow )
else:
- self.timerCb.combo.append_text( self.ui.ca.istrSeconds % {"1":(str(self.ui.ca.m.TIMERS[i]))} )
+ self.timerCb.combo.append_text( Constants.istrSeconds % {"1":(str(Constants.TIMERS[i]))} )
self.timerCb.combo.set_active(0)
self.insert( self.timerCb, -1 )
@@ -2262,9 +2173,9 @@ class AudioToolbar(gtk.Toolbar):
self.insert( separator2, -1 )
durCbb = gtk.combo_box_new_text()
- self.durCb = ToolComboBox(combo=durCbb, label_text=self.ui.ca.istrDuration)
- for i in range (0, len(self.ui.ca.m.DURATIONS)):
- self.durCb.combo.append_text( self.ui.ca.istrSeconds % {"1":(str(self.ui.ca.m.DURATIONS[i]))} )
+ self.durCb = ToolComboBox(combo=durCbb, label_text=Constants.istrDuration)
+ for i in range (0, len(Constants.DURATIONS)):
+ self.durCb.combo.append_text( Constants.istrSeconds % {"1":(str(Constants.DURATIONS[i]))} )
self.durCb.combo.set_active(0)
self.insert(self.durCb, -1 )
@@ -2274,8 +2185,8 @@ class AudioToolbar(gtk.Toolbar):
def getTimer(self):
- return self.ui.ca.m.TIMERS[self.timerCb.combo.get_active()]
+ return Constants.TIMERS[self.timerCb.combo.get_active()]
def getDuration(self):
- return self.ui.ca.m.DURATIONS[self.durCb.combo.get_active()] \ No newline at end of file
+ return Constants.DURATIONS[self.durCb.combo.get_active()] \ No newline at end of file
diff --git a/utils.py b/utils.py
index c683dc8..591c436 100644
--- a/utils.py
+++ b/utils.py
@@ -1,4 +1,6 @@
import base64
+import rsvg
+import re
def getStringFromPixbuf(pixbuf):
@@ -17,4 +19,27 @@ def getPixbufFromString(str):
data = base64.b64decode( str )
pbl.write(data)
pbl.close()
- return pbl.get_pixbuf() \ No newline at end of file
+ return pbl.get_pixbuf()
+
+
+def loadSvg( data, stroke, fill ):
+ if ((stroke == None) or (fill == None)):
+ return rsvg.Handle( data=data )
+
+ entity = '<!ENTITY fill_color "%s">' % fill
+ data = re.sub('<!ENTITY fill_color .*>', entity, data)
+
+ entity = '<!ENTITY stroke_color "%s">' % stroke
+ data = re.sub('<!ENTITY stroke_color .*>', entity, data)
+
+ return rsvg.Handle( data=data )
+
+
+def getUniqueFilepath( path, i ):
+ pathOb = os.path.abspath( path )
+ if (os.path.exists(pathOb)):
+ i = i+1
+ newPath = os.path.join( os.path.dirname(pathOb), str( str(i) + os.path.basename(pathOb) ) )
+ return getUniqueFilepath( str(newPath), i )
+ else:
+ return os.path.abspath( path ) \ No newline at end of file