def initTranslation(): global initTranslationCalled if not initTranslationCalled: try: gettext.install(AppVerName.split(None, 1), './locale', unicode=True) except: gettext.install(AppVerName.split(None, 1), './locale') initTranslationCalled = True
def initTranslation(): global initTranslationCalled if not initTranslationCalled: if six.PY2: gettext.install(AppVerName.split(None, 1), './locale', unicode=True) else: gettext.install(AppVerName.split(None, 1), './locale') initTranslationCalled = True
def make_inno_version(): setup = { 'AppName': AppVerName.split()[0], 'AppPublisher': "Edward Sitarski", 'AppContact': "Edward Sitarski", 'AppCopyright': "Copyright (C) 2004-{} Edward Sitarski".format(datetime.date.today().year), 'AppVerName': AppVerName, 'AppPublisherURL': "http://www.sites.google.com/site/crossmgrsoftware/", 'AppUpdatesURL': "http://www.sites.google.com/site/crossmgrsoftware/downloads/", 'VersionInfoVersion': AppVerName.split()[1], } with open('inno_setup.txt', 'w') as f: for k, v in setup.iteritems(): f.write( '{}={}\n'.format(k,v) )
def make_inno_version(): setup = { 'AppName': AppVerName.split()[0], 'AppPublisher': "Edward Sitarski", 'AppContact': "Edward Sitarski", 'AppCopyright': "Copyright (C) 2004-{} Edward Sitarski".format( datetime.date.today().year), 'AppVerName': AppVerName, 'AppPublisherURL': "http://www.sites.google.com/site/crossmgrsoftware/", 'AppUpdatesURL': "http://www.sites.google.com/site/crossmgrsoftware/downloads/", 'VersionInfoVersion': AppVerName.split()[1], } with open('inno_setup.txt', 'w') as f: for k, v in six.iteritems(setup): f.write('{}={}\n'.format(k, v))
#------------------------------------------------------------------------ reSpace = re.compile(r'\s') def approximateMatch( s1, s2 ): s1 = removeDiacritic(reSpace.sub('', s1).lower()) s2 = removeDiacritic(reSpace.sub('', s2).lower()) if s1[-1:].isdigit(): return 1.2 if s1 == s2 else 0.0 if s1.startswith(s2) or s2.startswith(s1): return 1.1 return len(set(s1) & set(s2)) / float(len(s1) + len(s2)) #------------------------------------------------------------------------ PlatformName = platform.system() from Version import AppVerName AppVer = 'v' + AppVerName.split(' ')[1] def writeLog( message ): try: dt = datetime.datetime.now() dt = dt.replace( microsecond = 0 ) msg = u'{} ({} {}) {}{}'.format( dt.isoformat(), AppVer, PlatformName, message, '\n' if not message or message[-1] != '\n' else '', ) sys.stdout.write( removeDiacritic(msg) ) sys.stdout.flush() except IOError: pass
def initTranslation(): global initTranslationCalled if not initTranslationCalled: gettext.install(AppVerName.split(None, 1), './locale', unicode=True) initTranslationCalled = True
#------------------------------------------------------------------------ reSpace = re.compile(r'\s') def approximateMatch( s1, s2 ): s1 = removeDiacritic(reSpace.sub('', s1).lower()) s2 = removeDiacritic(reSpace.sub('', s2).lower()) if s1[-1:].isdigit(): return 1.2 if s1 == s2 else 0.0 if s1.startswith(s2) or s2.startswith(s1): return 1.1 return len(set(s1) & set(s2)) / float(len(s1) + len(s2)) #------------------------------------------------------------------------ PlatformName = platform.system() from Version import AppVerName AppVer = 'v' + AppVerName.split(' ')[1] def writeLog( message ): try: dt = datetime.datetime.now() dt = dt.replace( microsecond = 0 ) sys.stdout.write( '{} ({} {}) {}{}'.format(dt.isoformat(), AppVer, PlatformName, message, '\n' if not message or message[-1] != '\n' else '' ) ) sys.stdout.flush() except IOError: pass def disable_stdout_buffering(): fileno = sys.stdout.fileno() temp_fd = os.dup(fileno) sys.stdout.close() os.dup2(temp_fd, fileno) os.close(temp_fd)
AppVerName.split()[1], } with open('inno_setup.txt', 'w') as f: for k, v in setup.items(): f.write('{}={}\n'.format(k, v)) make_inno_version() cmd = '"' + inno + '" ' + 'CrossMgrAlien.iss' print(cmd) os.system(cmd) # Create versioned executable. from Version import AppVerName vNum = AppVerName.split()[1] vNum = vNum.replace('.', '_') newExeName = 'CrossMgrAlien_Setup_v' + vNum + '.exe' try: os.remove(os.path.join('install', newExeName)) except: pass shutil.copy(os.path.join('install', 'CrossMgrAlien_Setup.exe'), os.path.join('install', newExeName)) print('executable copied to: ' + newExeName) # Create compressed executable. os.chdir('install') newExeName = os.path.basename(newExeName)
import biplist import os, sys sys.path.append(os.path.dirname('.')) from Version import AppVerName MacApp = AppVerName.split(' ')[0] MacAppVersion = AppVerName.split(' ')[1] MacAppFullName = MacApp + '_' + MacAppVersion print("Mac App Version:", MacAppVersion) # # Example settings file for dmgbuild # # Full docs are at http://dmgbuild.readthedocs.io/en/latest/ # Use like this: dmgbuild -s settings.py "Test Volume" test.dmg # You can actually use this file for your own application (not just TextEdit) # by doing e.g. # # dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg # .. Useful stuff .............................................................. application = defines.get('app', 'dist/' + MacApp + '.app') appname = os.path.basename(application) print("App:", application) def icon_from_app(app_path): plist_path = os.path.join(app_path, 'Contents', 'Info.plist')
#!/usr/bin/env python import shutil import os import io import sys import six import stat import glob import datetime import subprocess from Version import AppVerName pypiDir = 'pypi' version = AppVerName.split(' ')[1] six.print_( 'version=', version ) def removeTabs( buf, tabStop = 4 ): # Remove tabs from Python code and preserve formatting. lines = [] for line in buf.split( '\n' ): lineOut = [] for c in line: if c == '\t': lineOut.append( ' ' ) pad = tabStop - len(lineOut) % tabStop if pad != tabStop: lineOut.append( ' ' * pad ) else: lineOut.append( c )
platform = 'Linux' print 'Copying help, template and image files into the build folder...' resourceDirs = ['CrossMgrHtml', 'CrossMgrHtmlDoc', 'CrossMgrHelpIndex', 'CrossMgrImages'] dest = os.path.join('CrossMgrBuild', 'dist', 'CrossMgr') for d in resourceDirs: shutil.copytree( d, os.path.join(dest, d) ) if platform == 'OSX': dest = os.path.join('CrossMgrBuild', 'CrossMgr.app', 'Contents', 'Resources') for d in resourceDirs: shutil.copytree( d, os.path.join(dest, d) ) # Check if 32 or 64 bit. import struct bits = '{}bit'.format( struct.calcsize("P") * 8 ) from Version import AppVerName fname = platform + '_' + bits + '_' + AppVerName.replace(' ', '_') + '.tar.gz' fname = os.path.join( 'CrossMgrBuild', fname ) print 'Combining and compressing the build directory...' import tarfile tr = tarfile.open( fname, 'w:gz' ) tr.add( dest, 'CrossMgr' ) tr.close() print 'Created:', fname print 'Done.'
def __init__(self, parent, id=wx.ID_ANY, title='', size=(1000, 800)): wx.Frame.__init__(self, parent, id, title, size=size) self.fps = 25 self.frameDelay = 1.0 / self.fps self.bufferSecs = 10 self.tFrameCount = self.tLaunch = self.tLast = now() self.frameCount = 0 self.frameCountUpdate = self.fps * 2 self.fpsActual = 0.0 self.fpt = timedelta(seconds=0) self.fcb = FrameCircBuf(self.bufferSecs * self.fps) self.config = wx.Config( appName="CrossMgrCamera", vendorName="SmartCyclingSolutions", #style=wx.CONFIG_USE_LOCAL_FILE ) self.requestQ = Queue() # Select photos from photobuf. self.writerQ = Queue(400) # Selected photos waiting to be written out. self.ftpQ = Queue() # Photos waiting to be ftp'd. self.renamerQ = Queue( ) # Photos waiting to be renamed and possibly ftp'd. self.messageQ = Queue( ) # Collection point for all status/failure messages. self.SetBackgroundColour(wx.Colour(232, 232, 232)) mainSizer = wx.BoxSizer(wx.VERTICAL) self.primaryImage = ScaledImage(self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight)) self.beforeImage = ScaledImage(self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight)) self.afterImage = ScaledImage(self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight)) self.beforeAfterImages = [self.beforeImage, self.afterImage] #------------------------------------------------------------------------------------------------ headerSizer = wx.BoxSizer(wx.HORIZONTAL) self.logo = Utils.GetPngBitmap('CrossMgrHeader.png') headerSizer.Add(wx.StaticBitmap(self, wx.ID_ANY, self.logo)) self.title = wx.StaticText(self, label='CrossMgr Camera\nVersion {}'.format( AppVerName.split()[1]), style=wx.ALIGN_RIGHT) self.title.SetFont( wx.Font((0, 28), wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) headerSizer.Add(self.title, flag=wx.ALL, border=10) #------------------------------------------------------------------------------ self.cameraDeviceLabel = wx.StaticText(self, label='Camera Device:') self.cameraDevice = wx.StaticText(self) boldFont = self.cameraDevice.GetFont() boldFont.SetWeight(wx.BOLD) self.cameraDevice.SetFont(boldFont) self.cameraResolution = wx.StaticText(self) self.cameraResolution.SetFont(boldFont) bitmap = wx.Bitmap(clipboard_xpm) self.copyLogToClipboard = wx.BitmapButton(self, bitmap=bitmap) self.copyLogToClipboard.Bind(wx.EVT_BUTTON, self.onCopyLogToClipboard) self.reset = wx.Button(self, label="Reset Camera") self.reset.Bind(wx.EVT_BUTTON, self.resetCamera) cameraDeviceSizer = wx.BoxSizer(wx.HORIZONTAL) cameraDeviceSizer.Add(self.cameraDeviceLabel, flag=wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT) cameraDeviceSizer.Add(self.cameraDevice, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=8) cameraDeviceSizer.Add(self.cameraResolution, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=8) cameraDeviceSizer.Add(self.copyLogToClipboard, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=8) cameraDeviceSizer.Add(self.reset, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=24) #------------------------------------------------------------------------------ self.targetProcessingTimeLabel = wx.StaticText(self, label='Target Frames:') self.targetProcessingTime = wx.StaticText(self, label=u'{:.3f}'.format( self.fps)) self.targetProcessingTime.SetFont(boldFont) self.targetProcessingTimeUnit = wx.StaticText(self, label='per sec') self.framesPerSecondLabel = wx.StaticText(self, label='Actual Frames:') self.framesPerSecond = wx.StaticText(self, label='25.000') self.framesPerSecond.SetFont(boldFont) self.framesPerSecondUnit = wx.StaticText(self, label='per sec') self.availableMsPerFrameLabel = wx.StaticText( self, label='Available Time Per Frame:') self.availableMsPerFrame = wx.StaticText(self, label=u'{:.0f}'.format( 1000.0 * self.frameDelay)) self.availableMsPerFrame.SetFont(boldFont) self.availableMsPerFrameUnit = wx.StaticText(self, label='ms') self.frameProcessingTimeLabel = wx.StaticText( self, label='Actual Frame Processing:') self.frameProcessingTime = wx.StaticText(self, label='20') self.frameProcessingTime.SetFont(boldFont) self.frameProcessingTimeUnit = wx.StaticText(self, label='ms') pfgs = wx.FlexGridSizer(rows=0, cols=6, vgap=4, hgap=8) fRight = wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT fLeft = wx.ALIGN_CENTRE_VERTICAL #------------------- Row 1 ------------------------------ pfgs.Add(self.targetProcessingTimeLabel, flag=fRight) pfgs.Add(self.targetProcessingTime, flag=fRight) pfgs.Add(self.targetProcessingTimeUnit, flag=fLeft) pfgs.Add(self.availableMsPerFrameLabel, flag=fRight) pfgs.Add(self.availableMsPerFrame, flag=fRight) pfgs.Add(self.availableMsPerFrameUnit, flag=fLeft) #------------------- Row 2 ------------------------------ pfgs.Add(self.framesPerSecondLabel, flag=fRight) pfgs.Add(self.framesPerSecond, flag=fRight) pfgs.Add(self.framesPerSecondUnit, flag=fLeft) pfgs.Add(self.frameProcessingTimeLabel, flag=fRight) pfgs.Add(self.frameProcessingTime, flag=fRight) pfgs.Add(self.frameProcessingTimeUnit, flag=fLeft) statsSizer = wx.BoxSizer(wx.VERTICAL) statsSizer.Add(cameraDeviceSizer) statsSizer.Add(pfgs, flag=wx.TOP, border=8) headerSizer.Add(statsSizer, flag=wx.ALL, border=4) mainSizer.Add(headerSizer) self.messagesText = wx.TextCtrl(self, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.HSCROLL, size=(350, imageHeight)) self.messageManager = MessageManager(self.messagesText) border = 2 row1Sizer = wx.BoxSizer(wx.HORIZONTAL) row1Sizer.Add(self.primaryImage, flag=wx.ALL, border=border) row1Sizer.Add(self.messagesText, 1, flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND, border=border) mainSizer.Add(row1Sizer, 1, flag=wx.EXPAND) row2Sizer = wx.BoxSizer(wx.HORIZONTAL) row2Sizer.Add(self.beforeImage, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=border) row2Sizer.Add(self.afterImage, flag=wx.RIGHT | wx.BOTTOM, border=border) mainSizer.Add(row2Sizer) #------------------------------------------------------------------------------------------------ # Create a timer to update the frame loop. # self.timer = wx.Timer() self.timer.Bind(wx.EVT_TIMER, self.frameLoop) self.Bind(wx.EVT_CLOSE, self.onCloseWindow) self.readOptions() self.SetSizerAndFit(mainSizer) # Start the message reporting thread so we can see what is going on. self.messageThread = threading.Thread(target=self.showMessages) self.messageThread.daemon = True self.messageThread.start() self.grabFrameOK = False for i in [self.primaryImage, self.beforeImage, self.afterImage]: i.SetTestImage() # Start the frame loop. delayAdjustment = 0.80 if 'win' in sys.platform else 0.98 ms = int(1000 * self.frameDelay * delayAdjustment) self.timer.Start(ms, False)
def __init__( self, parent, id = wx.ID_ANY, title='', size=(1000,800) ): wx.Frame.__init__(self, parent, id, title, size=size) self.db = Database() self.bufferSecs = 10 self.setFPS( 30 ) self.xFinish = None self.tFrameCount = self.tLaunch = self.tLast = now() self.frameCount = 0 self.fpt = timedelta(seconds=0) self.iTriggerSelect = None self.triggerInfo = None self.tsMax = None self.captureTimer = wx.CallLater( 10, self.stopCapture ) self.tdCaptureBefore = tdCaptureBeforeDefault self.tdCaptureAfter = tdCaptureAfterDefault self.config = wx.Config() self.requestQ = Queue() # Select photos from photobuf. self.dbWriterQ = Queue() # Photos waiting to be written self.messageQ = Queue() # Collection point for all status/failure messages. self.SetBackgroundColour( wx.Colour(232,232,232) ) self.focusDialog = FocusDialog( self ) self.photoDialog = PhotoDialog( self ) self.autoCaptureDialog = AutoCaptureDialog( self ) self.triggerDialog = TriggerDialog( self ) mainSizer = wx.BoxSizer( wx.VERTICAL ) #------------------------------------------------------------------------------------------------ headerSizer = wx.BoxSizer( wx.HORIZONTAL ) self.logo = Utils.GetPngBitmap('CrossMgrHeader.png') headerSizer.Add( wx.StaticBitmap(self, wx.ID_ANY, self.logo) ) self.title = wx.StaticText(self, label='CrossMgr Video\nVersion {}'.format(AppVerName.split()[1]), style=wx.ALIGN_RIGHT ) self.title.SetFont( wx.Font( (0,28), wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL ) ) headerSizer.Add( self.title, flag=wx.ALL, border=10 ) clock = Clock( self, size=(90,90) ) clock.SetBackgroundColour( self.GetBackgroundColour() ) clock.Start() headerSizer.Add( clock, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border=4 ) #------------------------------------------------------------------------------ self.cameraDevice = wx.StaticText( self ) self.cameraResolution = wx.StaticText( self ) self.targetFPS = wx.StaticText( self, label='30 fps' ) self.actualFPS = wx.StaticText( self, label='30.0 fps' ) boldFont = self.cameraDevice.GetFont() boldFont.SetWeight( wx.BOLD ) for w in (self.cameraDevice, self.cameraResolution, self.targetFPS, self.actualFPS): w.SetFont( boldFont ) fgs = wx.FlexGridSizer( 2, 2, 2 ) # 2 Cols fgs.Add( wx.StaticText(self, label='Camera Device:'), flag=wx.ALIGN_RIGHT ) fgs.Add( self.cameraDevice ) fgs.Add( wx.StaticText(self, label='Resolution:'), flag=wx.ALIGN_RIGHT ) fgs.Add( self.cameraResolution ) fgs.Add( wx.StaticText(self, label='Target:'), flag=wx.ALIGN_RIGHT ) fgs.Add( self.targetFPS, flag=wx.ALIGN_RIGHT ) fgs.Add( wx.StaticText(self, label='Actual:'), flag=wx.ALIGN_RIGHT ) fgs.Add( self.actualFPS, flag=wx.ALIGN_RIGHT ) self.focus = wx.Button( self, label="Focus..." ) self.focus.Bind( wx.EVT_BUTTON, self.onFocus ) self.reset = wx.Button( self, label="Reset Camera" ) self.reset.Bind( wx.EVT_BUTTON, self.resetCamera ) self.manage = wx.Button( self, label="Manage Database" ) self.manage.Bind( wx.EVT_BUTTON, self.manageDatabase ) self.autoCaptureBtn = wx.Button( self, label="Config Auto Capture" ) self.autoCaptureBtn.Bind( wx.EVT_BUTTON, self.autoCaptureConfig ) self.help = wx.Button( self, wx.ID_HELP ) self.help.Bind( wx.EVT_BUTTON, self.onHelp ) self.snapshot, self.autoCapture, self.capture = CreateCaptureButtons( self ) self.snapshot.Bind( wx.EVT_LEFT_DOWN, self.onStartSnapshot ) self.focusDialog.snapshot.Bind( wx.EVT_LEFT_DOWN, self.onStartSnapshot ) self.autoCapture.Bind( wx.EVT_LEFT_DOWN, self.onStartAutoCapture ) self.focusDialog.autoCapture.Bind( wx.EVT_LEFT_DOWN, self.onStartAutoCapture ) self.capture.Bind( wx.EVT_LEFT_DOWN, self.onStartCapture ) self.capture.Bind( wx.EVT_LEFT_UP, self.onStopCapture ) self.focusDialog.capture.Bind( wx.EVT_LEFT_DOWN, self.onStartCapture ) self.focusDialog.capture.Bind( wx.EVT_LEFT_UP, self.onStopCapture ) headerSizer.Add( fgs, flag=wx.ALIGN_CENTER_VERTICAL ) fgs = wx.FlexGridSizer( rows=2, cols=0, hgap=8, vgap=4 ) fgs.Add( self.focus, flag=wx.EXPAND ) fgs.Add( self.reset, flag=wx.EXPAND ) fgs.Add( self.manage, flag=wx.EXPAND ) fgs.Add( self.autoCaptureBtn, flag=wx.EXPAND ) fgs.Add( self.help, flag=wx.EXPAND ) headerSizer.Add( fgs, flag=wx.ALIGN_CENTRE|wx.LEFT, border=4 ) headerSizer.AddStretchSpacer() headerSizer.Add( self.snapshot, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) headerSizer.Add( self.autoCapture, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) headerSizer.Add( self.capture, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT|wx.RIGHT, border=8 ) #------------------------------------------------------------------------------ mainSizer.Add( headerSizer, flag=wx.EXPAND ) #------------------------------------------------------------------------------------------------ self.finishStrip = FinishStripPanel( self, size=(-1,wx.GetDisplaySize()[1]//2) ) self.finishStrip.finish.Bind( wx.EVT_RIGHT_DOWN, self.onRightClick ) self.primaryBitmap = ScaledBitmap( self, style=wx.BORDER_SUNKEN, size=(int(imageWidth*0.75), int(imageHeight*0.75)) ) self.primaryBitmap.SetTestBitmap() self.primaryBitmap.Bind( wx.EVT_LEFT_UP, self.onFocus ) self.primaryBitmap.Bind( wx.EVT_RIGHT_UP, self.onFocus ) hsDate = wx.BoxSizer( wx.HORIZONTAL ) hsDate.Add( wx.StaticText(self, label='Show Triggers for'), flag=wx.ALIGN_CENTER_VERTICAL ) tQuery = now() self.date = wx.adv.DatePickerCtrl( self, dt=wx.DateTime.FromDMY( tQuery.day, tQuery.month-1, tQuery.year ), style=wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY ) self.date.Bind( wx.adv.EVT_DATE_CHANGED, self.onQueryDateChanged ) hsDate.Add( self.date, flag=wx.LEFT, border=2 ) self.dateSelect = wx.Button( self, label='Select Date' ) hsDate.Add( self.dateSelect, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=2 ) self.dateSelect.Bind( wx.EVT_BUTTON, self.onDateSelect ) hsDate.Add( wx.StaticText(self, label='Filter by Bib'), flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=12 ) self.bib = wx.lib.intctrl.IntCtrl( self, style=wx.TE_PROCESS_ENTER, size=(64,-1), min=1, allow_none=True, value=None ) self.bib.Bind( wx.EVT_TEXT_ENTER, self.onQueryBibChanged ) hsDate.Add( self.bib, flag=wx.LEFT, border=2 ) self.tsQueryLower = datetime(tQuery.year, tQuery.month, tQuery.day) self.tsQueryUpper = self.tsQueryLower + timedelta(days=1) self.bibQuery = None self.triggerList = AutoWidthListCtrl( self, style=wx.LC_REPORT|wx.BORDER_SUNKEN|wx.LC_SORT_ASCENDING|wx.LC_HRULES ) self.il = wx.ImageList(16, 16) self.sm_close = [] for bm in getCloseFinishBitmaps(): self.sm_close.append( self.il.Add(bm) ) self.sm_up = self.il.Add( Utils.GetPngBitmap('SmallUpArrow.png')) self.sm_up = self.il.Add( Utils.GetPngBitmap('SmallUpArrow.png')) self.sm_dn = self.il.Add( Utils.GetPngBitmap('SmallDownArrow.png')) self.triggerList.SetImageList(self.il, wx.IMAGE_LIST_SMALL) self.fieldCol = {f:c for c, f in enumerate('ts bib name team wave race_name note kmh mph frames'.split())} headers = ['Time', 'Bib', 'Name', 'Team', 'Wave', 'Race', 'Note', 'km/h', 'mph', 'Frames'] for i, h in enumerate(headers): self.triggerList.InsertColumn( i, h, wx.LIST_FORMAT_RIGHT if h in ('Bib','km/h','mph','Frames') else wx.LIST_FORMAT_LEFT ) self.itemDataMap = {} self.triggerList.Bind( wx.EVT_LIST_ITEM_SELECTED, self.onTriggerSelected ) self.triggerList.Bind( wx.EVT_LIST_ITEM_ACTIVATED, self.onTriggerEdit ) self.triggerList.Bind( wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onTriggerRightClick ) #self.triggerList.Bind( wx.EVT_LIST_DELETE_ITEM, self.onTriggerDelete ) vsTriggers = wx.BoxSizer( wx.VERTICAL ) vsTriggers.Add( hsDate ) vsTriggers.Add( self.triggerList, 1, flag=wx.EXPAND|wx.TOP, border=2) #------------------------------------------------------------------------------------------------ mainSizer.Add( self.finishStrip, 1, flag=wx.EXPAND ) border=2 row1Sizer = wx.BoxSizer( wx.HORIZONTAL ) row1Sizer.Add( self.primaryBitmap, flag=wx.ALL, border=border ) row1Sizer.Add( vsTriggers, 1, flag=wx.TOP|wx.BOTTOM|wx.RIGHT|wx.EXPAND, border=border ) mainSizer.Add( row1Sizer, flag=wx.EXPAND ) self.Bind(wx.EVT_CLOSE, self.onCloseWindow) self.readOptions() self.updateFPS( int(float(self.targetFPS.GetLabel().split()[0])) ) self.updateAutoCaptureLabel() self.SetSizerAndFit( mainSizer ) # Start the message reporting thread so we can see what is going on. self.messageThread = threading.Thread( target=self.showMessages ) self.messageThread.daemon = True self.messageThread.start() wx.CallLater( 300, self.refreshTriggers )
# -*- coding: utf-8 -*- from __future__ import unicode_literals from __future__ import print_function import biplist import os.path import os.path, sys sys.path.append(os.path.dirname('.')) from Version import AppVerName MacApp = AppVerName.split(' ')[0] MacAppVersion = AppVerName.split(' ')[1] MacAppFullName = MacApp + '_' + MacAppVersion print("Mac App Version:", MacAppVersion) # # Example settings file for dmgbuild # # Full docs are at http://dmgbuild.readthedocs.io/en/latest/ # Use like this: dmgbuild -s settings.py "Test Volume" test.dmg # You can actually use this file for your own application (not just TextEdit) # by doing e.g. # # dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg # .. Useful stuff .............................................................. application = defines.get('app', 'dist/' + MacApp + '.app') appname = os.path.basename(application)
def __init__( self, parent, id = wx.ID_ANY, title='', size=(1000,800) ): wx.Frame.__init__(self, parent, id, title, size=size) self.db = Database() self.fps = 25 self.frameDelay = 1.0 / self.fps self.bufferSecs = 10 self.xFinish = None self.tFrameCount = self.tLaunch = self.tLast = now() self.frameCount = 0 self.frameCountUpdate = int(self.fps * 2) self.fpsActual = 0.0 self.fpt = timedelta(seconds=0) self.iTriggerSelect = None self.triggerInfo = None self.captureTimer = wx.CallLater( 10, self.stopCapture ) self.fcb = FrameCircBuf( self.bufferSecs * self.fps ) self.config = wx.Config(appName="CrossMgrVideo", vendorName="SmartCyclingSolutions", style=wx.CONFIG_USE_LOCAL_FILE) self.requestQ = Queue() # Select photos from photobuf. self.dbWriterQ = Queue() # Photos waiting to be renamed and possibly ftp'd. self.dbReaderQ = Queue() # Photos read as requested from user. self.messageQ = Queue() # Collection point for all status/failure messages. self.SetBackgroundColour( wx.Colour(232,232,232) ) mainSizer = wx.BoxSizer( wx.VERTICAL ) #------------------------------------------------------------------------------------------------ headerSizer = wx.BoxSizer( wx.HORIZONTAL ) self.logo = Utils.GetPngBitmap('CrossMgrHeader.png') headerSizer.Add( wx.StaticBitmap(self, bitmap=self.logo) ) self.title = wx.StaticText(self, label='CrossMgr Video\nVersion {}'.format(AppVerName.split()[1]), style=wx.ALIGN_RIGHT ) self.title.SetFont( wx.FontFromPixelSize( wx.Size(0,28), wx.FONTFAMILY_SWISS, wx.NORMAL, wx.FONTWEIGHT_NORMAL ) ) headerSizer.Add( self.title, flag=wx.ALL, border=10 ) #------------------------------------------------------------------------------ self.cameraDeviceLabel = wx.StaticText(self, label='Camera Device:') self.cameraDevice = wx.StaticText( self ) boldFont = self.cameraDevice.GetFont() boldFont.SetWeight( wx.BOLD ) self.cameraDevice.SetFont( boldFont ) self.reset = wx.Button( self, label="Reset Camera" ) self.reset.Bind( wx.EVT_BUTTON, self.resetCamera ) self.manage = wx.Button( self, label="Manage Database" ) self.manage.Bind( wx.EVT_BUTTON, self.manageDatabase ) self.test = wx.Button( self, label="Test" ) self.test.Bind( wx.EVT_BUTTON, self.onTest ) cameraDeviceSizer = wx.BoxSizer( wx.HORIZONTAL ) cameraDeviceSizer.Add( self.cameraDeviceLabel, flag=wx.ALIGN_CENTRE_VERTICAL|wx.ALIGN_RIGHT ) cameraDeviceSizer.Add( self.cameraDevice, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) cameraDeviceSizer.Add( self.reset, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) cameraDeviceSizer.Add( self.manage, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=16 ) cameraDeviceSizer.Add( self.test, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=16 ) #------------------------------------------------------------------------------ self.targetProcessingTimeLabel = wx.StaticText(self, label='Target Frames:') self.targetProcessingTime = wx.StaticText(self, label=u'{:.3f}'.format(self.fps)) self.targetProcessingTime.SetFont( boldFont ) self.targetProcessingTimeUnit = wx.StaticText(self, label='/ sec') self.framesPerSecondLabel = wx.StaticText(self, label='Actual Frames:') self.framesPerSecond = wx.StaticText(self, label='25.000') self.framesPerSecond.SetFont( boldFont ) self.framesPerSecondUnit = wx.StaticText(self, label='/ sec') self.availableMsPerFrameLabel = wx.StaticText(self, label='Available Time Per Frame:') self.availableMsPerFrame = wx.StaticText(self, label=u'{:.0f}'.format(1000.0*self.frameDelay)) self.availableMsPerFrame.SetFont( boldFont ) self.availableMsPerFrameUnit = wx.StaticText(self, label='ms') self.frameProcessingTimeLabel = wx.StaticText(self, label='Frame Processing Time:') self.frameProcessingTime = wx.StaticText(self, label='20') self.frameProcessingTime.SetFont( boldFont ) self.frameProcessingTimeUnit = wx.StaticText(self, label='ms') pfgs = wx.FlexGridSizer( rows=0, cols=6, vgap=4, hgap=8 ) fRight = wx.ALIGN_CENTRE_VERTICAL|wx.ALIGN_RIGHT fLeft = wx.ALIGN_CENTRE_VERTICAL #------------------- Row 1 ------------------------------ pfgs.Add( self.targetProcessingTimeLabel, flag=fRight ) pfgs.Add( self.targetProcessingTime, flag=fRight ) pfgs.Add( self.targetProcessingTimeUnit, flag=fLeft ) pfgs.Add( self.availableMsPerFrameLabel, flag=fRight ) pfgs.Add( self.availableMsPerFrame, flag=fRight ) pfgs.Add( self.availableMsPerFrameUnit, flag=fLeft ) #------------------- Row 2 ------------------------------ pfgs.Add( self.framesPerSecondLabel, flag=fRight ) pfgs.Add( self.framesPerSecond, flag=fRight ) pfgs.Add( self.framesPerSecondUnit, flag=fLeft ) pfgs.Add( self.frameProcessingTimeLabel, flag=fRight ) pfgs.Add( self.frameProcessingTime, flag=fRight ) pfgs.Add( self.frameProcessingTimeUnit, flag=fLeft ) statsSizer = wx.BoxSizer( wx.VERTICAL ) statsSizer.Add( cameraDeviceSizer ) statsSizer.Add( pfgs, flag=wx.TOP, border=8 ) headerSizer.Add( statsSizer, flag=wx.ALL, border=4 ) mainSizer.Add( headerSizer ) #------------------------------------------------------------------------------------------------ self.finishStrip = FinishStripPanel( self, size=(-1,wx.GetDisplaySize()[1]//2) ) self.finishStrip.finish.Bind( wx.EVT_RIGHT_DOWN, self.onRightClick ) self.primaryImage = ScaledImage( self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight) ) self.primaryImage.SetTestImage() hsDate = wx.BoxSizer( wx.HORIZONTAL ) hsDate.Add( wx.StaticText(self, label='Show Triggers for'), flag=wx.ALIGN_CENTER_VERTICAL ) tQuery = now() self.date = wx.DatePickerCtrl( self, dt=wx.DateTimeFromDMY( tQuery.day, tQuery.month-1, tQuery.year ), style=wx.DP_DROPDOWN|wx.DP_SHOWCENTURY ) self.date.Bind( wx.EVT_DATE_CHANGED, self.onQueryDateChanged ) hsDate.Add( self.date, flag=wx.LEFT, border=2 ) hsDate.Add( wx.StaticText(self, label='Filter by Bib'), flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=12 ) self.bib = wx.lib.intctrl.IntCtrl( self, style=wx.TE_PROCESS_ENTER, size=(64,-1), min=1, allow_none=True, value=None ) self.bib.Bind( wx.EVT_TEXT_ENTER, self.onQueryBibChanged ) hsDate.Add( self.bib, flag=wx.LEFT, border=2 ) self.tsQueryLower = datetime(tQuery.year, tQuery.month, tQuery.day) self.tsQueryUpper = self.tsQueryLower + timedelta(days=1) self.bibQuery = None self.triggerList = AutoWidthListCtrl( self, style=wx.LC_REPORT|wx.BORDER_SUNKEN|wx.LC_SORT_ASCENDING ) self.il = wx.ImageList(16, 16) self.sm_check = self.il.Add( Utils.GetPngBitmap('check_icon.png')) self.sm_close = self.il.Add( Utils.GetPngBitmap('flame_icon.png')) self.sm_up = self.il.Add( Utils.GetPngBitmap('SmallUpArrow.png')) self.sm_dn = self.il.Add( Utils.GetPngBitmap('SmallDownArrow.png')) self.triggerList.SetImageList(self.il, wx.IMAGE_LIST_SMALL) headers = ['Time', 'Bib', 'Name', 'Team', 'Wave'] for i, h in enumerate(headers): self.triggerList.InsertColumn(i, h, wx.LIST_FORMAT_RIGHT if h == 'Bib' else wx.LIST_FORMAT_LEFT) self.itemDataMap = {} self.triggerList.Bind( wx.EVT_LIST_ITEM_SELECTED, self.onTriggerSelected ) self.messagesText = wx.TextCtrl( self, style=wx.TE_READONLY|wx.TE_MULTILINE|wx.HSCROLL, size=(250,-1) ) self.messageManager = MessageManager( self.messagesText ) vsTriggers = wx.BoxSizer( wx.VERTICAL ) vsTriggers.Add( hsDate ) vsTriggers.Add( self.triggerList, 1, flag=wx.EXPAND|wx.TOP, border=2) #------------------------------------------------------------------------------------------------ mainSizer.Add( self.finishStrip, 1, flag=wx.EXPAND ) border = 2 row1Sizer = wx.BoxSizer( wx.HORIZONTAL ) row1Sizer.Add( self.primaryImage, flag=wx.ALL, border=border ) row1Sizer.Add( vsTriggers, 1, flag=wx.TOP|wx.BOTTOM|wx.RIGHT|wx.EXPAND, border=border ) row1Sizer.Add( self.messagesText, flag=wx.TOP|wx.BOTTOM|wx.RIGHT|wx.EXPAND, border=border ) mainSizer.Add( row1Sizer, flag=wx.EXPAND ) #------------------------------------------------------------------------------------------------ # Create a timer to update the frame loop. # self.timer = wx.Timer() self.timer.Bind( wx.EVT_TIMER, self.frameLoop ) self.Bind(wx.EVT_CLOSE, self.onCloseWindow) self.readOptions() self.SetSizerAndFit( mainSizer ) # Start the message reporting thread so we can see what is going on. self.messageThread = threading.Thread( target=self.showMessages ) self.messageThread.daemon = True self.messageThread.start() self.grabFrameOK = False self.tsMax = None # Start the frame loop. delayAdjustment = 0.80 if 'win' in sys.platform else 0.98 ms = int(1000 * self.frameDelay * delayAdjustment) self.timer.Start( ms, False ) wx.CallLater( 300, self.refreshTriggers )
def __init__(self, parent, id=wx.ID_ANY, title='', size=(1000, 800)): wx.Frame.__init__(self, parent, id, title, size=size) self.db = Database() self.fps = 25 self.frameDelay = 1.0 / self.fps self.bufferSecs = 10 self.xFinish = None self.tFrameCount = self.tLaunch = self.tLast = now() self.frameCount = 0 self.frameCountUpdate = int(self.fps * 2) self.fpsActual = 0.0 self.fpt = timedelta(seconds=0) self.iTriggerSelect = None self.triggerInfo = None self.captureTimer = wx.CallLater(10, self.stopCapture) self.fcb = FrameCircBuf(self.bufferSecs * self.fps) self.config = wx.Config( appName="CrossMgrVideo", vendorName="SmartCyclingSolutions", #style=wx.CONFIG_USE_LOCAL_FILE ) self.requestQ = Queue() # Select photos from photobuf. self.dbWriterQ = Queue() # Photos waiting to be written self.dbReaderQ = Queue() # Photos read as requested from user. self.messageQ = Queue( ) # Collection point for all status/failure messages. self.SetBackgroundColour(wx.Colour(232, 232, 232)) mainSizer = wx.BoxSizer(wx.VERTICAL) #------------------------------------------------------------------------------------------------ headerSizer = wx.BoxSizer(wx.HORIZONTAL) self.logo = Utils.GetPngBitmap('CrossMgrHeader.png') headerSizer.Add(wx.StaticBitmap(self, wx.ID_ANY, self.logo)) self.title = wx.StaticText(self, label='CrossMgr Video\nVersion {}'.format( AppVerName.split()[1]), style=wx.ALIGN_RIGHT) self.title.SetFont( wx.Font((0, 28), wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) headerSizer.Add(self.title, flag=wx.ALL, border=10) #------------------------------------------------------------------------------ self.cameraDeviceLabel = wx.StaticText(self, label='Camera Device:') self.cameraDevice = wx.StaticText(self) boldFont = self.cameraDevice.GetFont() boldFont.SetWeight(wx.BOLD) self.cameraDevice.SetFont(boldFont) self.cameraResolution = wx.StaticText(self) self.cameraResolution.SetFont(boldFont) self.reset = wx.Button(self, label="Reset Camera") self.reset.Bind(wx.EVT_BUTTON, self.resetCamera) self.manage = wx.Button(self, label="Manage Database") self.manage.Bind(wx.EVT_BUTTON, self.manageDatabase) self.test = wx.Button(self, label="Test") self.test.Bind(wx.EVT_BUTTON, self.onTest) self.focus = wx.Button(self, label="Focus...") self.focus.Bind(wx.EVT_BUTTON, self.onFocus) cameraDeviceSizer = wx.BoxSizer(wx.HORIZONTAL) cameraDeviceSizer.Add(self.cameraDeviceLabel, flag=wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT) cameraDeviceSizer.Add(self.cameraDevice, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=8) cameraDeviceSizer.Add(self.cameraResolution, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=8) cameraDeviceSizer.Add(self.reset, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=32) cameraDeviceSizer.Add(self.manage, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=16) cameraDeviceSizer.Add(self.test, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=16) cameraDeviceSizer.Add(self.focus, flag=wx.ALIGN_CENTRE_VERTICAL | wx.LEFT, border=16) #------------------------------------------------------------------------------ self.targetProcessingTimeLabel = wx.StaticText(self, label='Target Frames:') self.targetProcessingTime = wx.StaticText(self, label=u'{:.3f}'.format( self.fps)) self.targetProcessingTime.SetFont(boldFont) self.targetProcessingTimeUnit = wx.StaticText(self, label='/ sec') self.framesPerSecondLabel = wx.StaticText(self, label='Actual Frames:') self.framesPerSecond = wx.StaticText(self, label='25.000') self.framesPerSecond.SetFont(boldFont) self.framesPerSecondUnit = wx.StaticText(self, label='/ sec') self.availableMsPerFrameLabel = wx.StaticText( self, label='Available Time Per Frame:') self.availableMsPerFrame = wx.StaticText(self, label=u'{:.0f}'.format( 1000.0 * self.frameDelay)) self.availableMsPerFrame.SetFont(boldFont) self.availableMsPerFrameUnit = wx.StaticText(self, label='ms') self.frameProcessingTimeLabel = wx.StaticText( self, label='Frame Processing Time:') self.frameProcessingTime = wx.StaticText(self, label='20') self.frameProcessingTime.SetFont(boldFont) self.frameProcessingTimeUnit = wx.StaticText(self, label='ms') pfgs = wx.FlexGridSizer(rows=0, cols=6, vgap=4, hgap=8) fRight = wx.ALIGN_CENTRE_VERTICAL | wx.ALIGN_RIGHT fLeft = wx.ALIGN_CENTRE_VERTICAL #------------------- Row 1 ------------------------------ pfgs.Add(self.targetProcessingTimeLabel, flag=fRight) pfgs.Add(self.targetProcessingTime, flag=fRight) pfgs.Add(self.targetProcessingTimeUnit, flag=fLeft) pfgs.Add(self.availableMsPerFrameLabel, flag=fRight) pfgs.Add(self.availableMsPerFrame, flag=fRight) pfgs.Add(self.availableMsPerFrameUnit, flag=fLeft) #------------------- Row 2 ------------------------------ pfgs.Add(self.framesPerSecondLabel, flag=fRight) pfgs.Add(self.framesPerSecond, flag=fRight) pfgs.Add(self.framesPerSecondUnit, flag=fLeft) pfgs.Add(self.frameProcessingTimeLabel, flag=fRight) pfgs.Add(self.frameProcessingTime, flag=fRight) pfgs.Add(self.frameProcessingTimeUnit, flag=fLeft) statsSizer = wx.BoxSizer(wx.VERTICAL) statsSizer.Add(cameraDeviceSizer) statsSizer.Add(pfgs, flag=wx.TOP, border=8) headerSizer.Add(statsSizer, flag=wx.ALL, border=4) mainSizer.Add(headerSizer) #------------------------------------------------------------------------------------------------ self.finishStrip = FinishStripPanel(self, size=(-1, wx.GetDisplaySize()[1] // 2)) self.finishStrip.finish.Bind(wx.EVT_RIGHT_DOWN, self.onRightClick) self.primaryImage = ScaledImage(self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight)) self.primaryImage.SetTestImage() self.focusDialog = FocusDialog(self) hsDate = wx.BoxSizer(wx.HORIZONTAL) hsDate.Add(wx.StaticText(self, label='Show Triggers for'), flag=wx.ALIGN_CENTER_VERTICAL) tQuery = now() self.date = wx.adv.DatePickerCtrl( self, dt=wx.DateTime.FromDMY(tQuery.day, tQuery.month - 1, tQuery.year), style=wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY) self.date.Bind(wx.adv.EVT_DATE_CHANGED, self.onQueryDateChanged) hsDate.Add(self.date, flag=wx.LEFT, border=2) hsDate.Add(wx.StaticText(self, label='Filter by Bib'), flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=12) self.bib = wx.lib.intctrl.IntCtrl(self, style=wx.TE_PROCESS_ENTER, size=(64, -1), min=1, allow_none=True, value=None) self.bib.Bind(wx.EVT_TEXT_ENTER, self.onQueryBibChanged) hsDate.Add(self.bib, flag=wx.LEFT, border=2) self.tsQueryLower = datetime(tQuery.year, tQuery.month, tQuery.day) self.tsQueryUpper = self.tsQueryLower + timedelta(days=1) self.bibQuery = None self.triggerList = AutoWidthListCtrl( self, style=wx.LC_REPORT | wx.BORDER_SUNKEN | wx.LC_SORT_ASCENDING) self.il = wx.ImageList(16, 16) self.sm_close = [] for bm in getCloseFinishBitmaps(): self.sm_close.append(self.il.Add(bm)) self.sm_up = self.il.Add(Utils.GetPngBitmap('SmallUpArrow.png')) self.sm_up = self.il.Add(Utils.GetPngBitmap('SmallUpArrow.png')) self.sm_dn = self.il.Add(Utils.GetPngBitmap('SmallDownArrow.png')) self.triggerList.SetImageList(self.il, wx.IMAGE_LIST_SMALL) headers = ['Time', 'Bib', 'Name', 'Team', 'Wave', 'km/h', 'mph'] for i, h in enumerate(headers): self.triggerList.InsertColumn( i, h, wx.LIST_FORMAT_RIGHT if h in ('Bib', 'km/h', 'mph') else wx.LIST_FORMAT_LEFT) self.itemDataMap = {} self.triggerList.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onTriggerSelected) self.messagesText = wx.TextCtrl(self, style=wx.TE_READONLY | wx.TE_MULTILINE | wx.HSCROLL, size=(250, -1)) self.messageManager = MessageManager(self.messagesText) vsTriggers = wx.BoxSizer(wx.VERTICAL) vsTriggers.Add(hsDate) vsTriggers.Add(self.triggerList, 1, flag=wx.EXPAND | wx.TOP, border=2) #------------------------------------------------------------------------------------------------ mainSizer.Add(self.finishStrip, 1, flag=wx.EXPAND) border = 2 row1Sizer = wx.BoxSizer(wx.HORIZONTAL) row1Sizer.Add(self.primaryImage, flag=wx.ALL, border=border) row1Sizer.Add(vsTriggers, 1, flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND, border=border) row1Sizer.Add(self.messagesText, flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND, border=border) mainSizer.Add(row1Sizer, flag=wx.EXPAND) #------------------------------------------------------------------------------------------------ # Create a timer to update the frame loop. # self.timer = wx.Timer() self.timer.Bind(wx.EVT_TIMER, self.frameLoop) self.Bind(wx.EVT_CLOSE, self.onCloseWindow) self.readOptions() self.SetSizerAndFit(mainSizer) # Start the message reporting thread so we can see what is going on. self.messageThread = threading.Thread(target=self.showMessages) self.messageThread.daemon = True self.messageThread.start() self.grabFrameOK = False self.tsMax = None # Start the frame loop. delayAdjustment = 0.80 if 'win' in sys.platform else 0.98 ms = int(1000 * self.frameDelay * delayAdjustment) self.timer.Start(ms, False) wx.CallLater(300, self.refreshTriggers)
'VersionInfoVersion': AppVerName.split()[1], } with open('inno_setup.txt', 'w') as f: for k, v in setup.iteritems(): f.write('{}={}\n'.format(k, v)) make_inno_version() cmd = '"' + inno + '" ' + 'CrossMgr.iss' print cmd subprocess.call(cmd, shell=True) # Create versioned executable. vNum = AppVerName.split()[1].replace('.', '_') newExeName = 'CrossMgr_Setup_v' + vNum + '.exe' try: os.remove('install\\' + newExeName) except: pass shutil.copy('install\\CrossMgr_Setup.exe', 'install\\' + newExeName) print 'executable copied to: ' + newExeName # Create compressed executable. os.chdir('install') newExeName = os.path.basename(newExeName) newZipName = newExeName.replace('.exe', '.zip')
platform = 'Linux' six.print_( 'Copying help, template and image files into the build folder...' ) resourceDirs = ['CrossMgrHtml', 'CrossMgrHtmlDoc', 'CrossMgrHelpIndex', 'CrossMgrImages'] dest = os.path.join('CrossMgrBuild', 'dist', 'CrossMgr') for d in resourceDirs: shutil.copytree( d, os.path.join(dest, d) ) if platform == 'OSX': dest = os.path.join('CrossMgrBuild', 'CrossMgr.app', 'Contents', 'Resources') for d in resourceDirs: shutil.copytree( d, os.path.join(dest, d) ) # Check if 32 or 64 bit. import struct bits = '{}bit'.format( struct.calcsize("P") * 8 ) from Version import AppVerName fname = platform + '_' + bits + '_' + AppVerName.replace(' ', '_') + '.tar.gz' fname = os.path.join( 'CrossMgrBuild', fname ) six.print_( 'Combining and compressing the build directory...' ) import tarfile tr = tarfile.open( fname, 'w:gz' ) tr.add( dest, 'CrossMgr' ) tr.close() six.print_( 'Created:', fname ) six.print_( 'Done.' )
# Create the installer inno = r'\Program Files\Inno Setup 5\ISCC.exe' # Find the drive it is installed on. for drive in ['C', 'D']: innoTest = drive + ':' + inno if os.path.exists( innoTest ): inno = innoTest break cmd = '"' + inno + '" ' + 'SeriesMgr.iss' print cmd os.system( cmd ) # Create versioned executable. from Version import AppVerName vNum = AppVerName.split()[1] vNum = vNum.replace( '.', '_' ) newExeName = 'SeriesMgr_Setup_v' + vNum + '.exe' try: os.remove( 'install\\' + newExeName ) except: pass shutil.copy( 'install\\SeriesMgr_Setup.exe', 'install\\' + newExeName ) print 'executable copied to: ' + newExeName # Create compressed executable. os.chdir( 'install' ) newExeName = os.path.basename( newExeName ) newZipName = newExeName.replace( '.exe', '.zip' )
def __init__( self, parent, id = wx.ID_ANY, title='', size=(1000,800) ): wx.Frame.__init__(self, parent, id, title, size=size) self.fps = 25 self.frameDelay = 1.0 / self.fps self.bufferSecs = 10 self.tFrameCount = self.tLaunch = self.tLast = now() self.frameCount = 0 self.frameCountUpdate = self.fps * 2 self.fpsActual = 0.0 self.fpt = timedelta(seconds=0) self.fcb = FrameCircBuf( self.bufferSecs * self.fps ) self.config = wx.Config(appName="CrossMgrCamera", vendorName="SmartCyclingSolutions", #style=wx.CONFIG_USE_LOCAL_FILE ) self.requestQ = Queue() # Select photos from photobuf. self.writerQ = Queue( 400 ) # Selected photos waiting to be written out. self.ftpQ = Queue() # Photos waiting to be ftp'd. self.renamerQ = Queue() # Photos waiting to be renamed and possibly ftp'd. self.messageQ = Queue() # Collection point for all status/failure messages. self.SetBackgroundColour( wx.Colour(232,232,232) ) mainSizer = wx.BoxSizer( wx.VERTICAL ) self.primaryImage = ScaledImage( self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight) ) self.beforeImage = ScaledImage( self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight) ) self.afterImage = ScaledImage( self, style=wx.BORDER_SUNKEN, size=(imageWidth, imageHeight) ) self.beforeAfterImages = [self.beforeImage, self.afterImage] #------------------------------------------------------------------------------------------------ headerSizer = wx.BoxSizer( wx.HORIZONTAL ) self.logo = Utils.GetPngBitmap('CrossMgrHeader.png') headerSizer.Add( wx.StaticBitmap(self, wx.ID_ANY, self.logo) ) self.title = wx.StaticText(self, label='CrossMgr Camera\nVersion {}'.format(AppVerName.split()[1]), style=wx.ALIGN_RIGHT ) self.title.SetFont( wx.Font( (0,28), wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL ) ) headerSizer.Add( self.title, flag=wx.ALL, border=10 ) #------------------------------------------------------------------------------ self.cameraDeviceLabel = wx.StaticText(self, label='Camera Device:') self.cameraDevice = wx.StaticText( self ) boldFont = self.cameraDevice.GetFont() boldFont.SetWeight( wx.BOLD ) self.cameraDevice.SetFont( boldFont ) self.cameraResolution = wx.StaticText( self ) self.cameraResolution.SetFont( boldFont ) bitmap = wx.Bitmap( clipboard_xpm ) self.copyLogToClipboard = wx.BitmapButton( self, bitmap=bitmap ) self.copyLogToClipboard.Bind( wx.EVT_BUTTON, self.onCopyLogToClipboard ) self.reset = wx.Button( self, label="Reset Camera" ) self.reset.Bind( wx.EVT_BUTTON, self.resetCamera ) cameraDeviceSizer = wx.BoxSizer( wx.HORIZONTAL ) cameraDeviceSizer.Add( self.cameraDeviceLabel, flag=wx.ALIGN_CENTRE_VERTICAL|wx.ALIGN_RIGHT ) cameraDeviceSizer.Add( self.cameraDevice, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) cameraDeviceSizer.Add( self.cameraResolution, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) cameraDeviceSizer.Add( self.copyLogToClipboard, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=8 ) cameraDeviceSizer.Add( self.reset, flag=wx.ALIGN_CENTRE_VERTICAL|wx.LEFT, border=24 ) #------------------------------------------------------------------------------ self.targetProcessingTimeLabel = wx.StaticText(self, label='Target Frames:') self.targetProcessingTime = wx.StaticText(self, label=u'{:.3f}'.format(self.fps)) self.targetProcessingTime.SetFont( boldFont ) self.targetProcessingTimeUnit = wx.StaticText(self, label='per sec') self.framesPerSecondLabel = wx.StaticText(self, label='Actual Frames:') self.framesPerSecond = wx.StaticText(self, label='25.000') self.framesPerSecond.SetFont( boldFont ) self.framesPerSecondUnit = wx.StaticText(self, label='per sec') self.availableMsPerFrameLabel = wx.StaticText(self, label='Available Time Per Frame:') self.availableMsPerFrame = wx.StaticText(self, label=u'{:.0f}'.format(1000.0*self.frameDelay)) self.availableMsPerFrame.SetFont( boldFont ) self.availableMsPerFrameUnit = wx.StaticText(self, label='ms') self.frameProcessingTimeLabel = wx.StaticText(self, label='Actual Frame Processing:') self.frameProcessingTime = wx.StaticText(self, label='20') self.frameProcessingTime.SetFont( boldFont ) self.frameProcessingTimeUnit = wx.StaticText(self, label='ms') pfgs = wx.FlexGridSizer( rows=0, cols=6, vgap=4, hgap=8 ) fRight = wx.ALIGN_CENTRE_VERTICAL|wx.ALIGN_RIGHT fLeft = wx.ALIGN_CENTRE_VERTICAL #------------------- Row 1 ------------------------------ pfgs.Add( self.targetProcessingTimeLabel, flag=fRight ) pfgs.Add( self.targetProcessingTime, flag=fRight ) pfgs.Add( self.targetProcessingTimeUnit, flag=fLeft ) pfgs.Add( self.availableMsPerFrameLabel, flag=fRight ) pfgs.Add( self.availableMsPerFrame, flag=fRight ) pfgs.Add( self.availableMsPerFrameUnit, flag=fLeft ) #------------------- Row 2 ------------------------------ pfgs.Add( self.framesPerSecondLabel, flag=fRight ) pfgs.Add( self.framesPerSecond, flag=fRight ) pfgs.Add( self.framesPerSecondUnit, flag=fLeft ) pfgs.Add( self.frameProcessingTimeLabel, flag=fRight ) pfgs.Add( self.frameProcessingTime, flag=fRight ) pfgs.Add( self.frameProcessingTimeUnit, flag=fLeft ) statsSizer = wx.BoxSizer( wx.VERTICAL ) statsSizer.Add( cameraDeviceSizer ) statsSizer.Add( pfgs, flag=wx.TOP, border=8 ) headerSizer.Add( statsSizer, flag=wx.ALL, border=4 ) mainSizer.Add( headerSizer ) self.messagesText = wx.TextCtrl( self, style=wx.TE_READONLY|wx.TE_MULTILINE|wx.HSCROLL, size=(350,imageHeight) ) self.messageManager = MessageManager( self.messagesText ) border = 2 row1Sizer = wx.BoxSizer( wx.HORIZONTAL ) row1Sizer.Add( self.primaryImage, flag=wx.ALL, border=border ) row1Sizer.Add( self.messagesText, 1, flag=wx.TOP|wx.BOTTOM|wx.RIGHT|wx.EXPAND, border=border ) mainSizer.Add( row1Sizer, 1, flag=wx.EXPAND ) row2Sizer = wx.BoxSizer( wx.HORIZONTAL ) row2Sizer.Add( self.beforeImage, flag=wx.LEFT|wx.RIGHT|wx.BOTTOM, border=border ) row2Sizer.Add( self.afterImage, flag=wx.RIGHT|wx.BOTTOM, border=border ) mainSizer.Add( row2Sizer ) #------------------------------------------------------------------------------------------------ # Create a timer to update the frame loop. # self.timer = wx.Timer() self.timer.Bind( wx.EVT_TIMER, self.frameLoop ) self.Bind(wx.EVT_CLOSE, self.onCloseWindow) self.readOptions() self.SetSizerAndFit( mainSizer ) # Start the message reporting thread so we can see what is going on. self.messageThread = threading.Thread( target=self.showMessages ) self.messageThread.daemon = True self.messageThread.start() self.grabFrameOK = False for i in [self.primaryImage, self.beforeImage, self.afterImage]: i.SetTestImage() # Start the frame loop. delayAdjustment = 0.80 if 'win' in sys.platform else 0.98 ms = int(1000 * self.frameDelay * delayAdjustment) self.timer.Start( ms, False )
#!/usr/bin/env python import shutil import os import sys import stat import glob import datetime import subprocess from Version import AppVerName pypiDir = 'pypi' version = AppVerName.split(' ')[1] print 'version=', version def removeTabs(buf, tabStop=4): # Remove tabs from Python code and preserve formatting. lines = [] for line in buf.split('\n'): lineOut = [] for c in line: if c == '\t': lineOut.append(' ') while len(lineOut) % tabStop != 0: lineOut.append(' ') else: lineOut.append(c) lines.append(''.join(lineOut)) return '\n'.join(lines) + '\n'
'AppVerName': AppVerName, 'AppPublisherURL': "http://www.sites.google.com/site/crossmgrsoftware/", 'AppUpdatesURL': "http://www.sites.google.com/site/crossmgrsoftware/downloads/", 'VersionInfoVersion': AppVerName.split()[1], } with open('inno_setup.txt', 'w') as f: for k, v in six.iteritems(setup): f.write( '{}={}\n'.format(k,v) ) make_inno_version() cmd = '"' + inno + '" ' + 'SeriesMgr.iss' six.print_( cmd ) os.system( cmd ) # Create versioned executable. from Version import AppVerName vNum = AppVerName.split()[1].replace( '.', '_' ) newExeName = 'SeriesMgr_Setup_v' + vNum + '.exe' try: os.remove( os.path.join('install',newExeName) ) except: pass shutil.copy( os.path.join('install', 'SeriesMgr_Setup.exe'), os.path.join('install', newExeName) ) six.print_( 'executable copied to: ' + newExeName ) # Create compressed executable. os.chdir( 'install' ) newExeName = os.path.basename( newExeName ) newZipName = newExeName.replace( '.exe', '.zip' )