diff options
author | erikb <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) |
commit | 1ab6b11c83d527bdd02f04cccc34ef00b0494912 (patch) | |
tree | 1e2f8b2046be9a64523f3aba46fb02d0d5291369 | |
parent | 6e20a3af2331fc524f356c981e308dd1373af112 (diff) |
refactoring
git-svn-id: http://mediamods.com/public-svn/camera-activity/Record.activity@785 574bc980-5f2d-0410-acbc-c8f9f0eb14e0
-rwxr-xr-x | RecordActivity.py | 133 | ||||
-rw-r--r-- | button.py | 10 | ||||
-rw-r--r-- | constants.py | 185 | ||||
-rw-r--r-- | glive.py | 30 | ||||
-rw-r--r-- | instance.py | 26 | ||||
-rw-r--r-- | model.py | 152 | ||||
-rw-r--r-- | recorded.py | 20 | ||||
-rw-r--r-- | serialize.py | 3 | ||||
-rw-r--r-- | ui.py | 389 | ||||
-rw-r--r-- | utils.py | 27 |
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) @@ -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 ) + @@ -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 @@ -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 @@ -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 @@ -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 |