예제 #1
0
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
예제 #2
0
파일: Utils.py 프로젝트: esitarski/CrossMgr
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
예제 #3
0
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) )
예제 #4
0
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))
예제 #5
0
#------------------------------------------------------------------------

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
예제 #6
0
def initTranslation():
    global initTranslationCalled
    if not initTranslationCalled:
        gettext.install(AppVerName.split(None, 1), './locale', unicode=True)
        initTranslationCalled = True
예제 #7
0
#------------------------------------------------------------------------

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)
예제 #8
0
        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)
예제 #9
0
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')
예제 #10
0
파일: pypi.py 프로젝트: esitarski/CrossMgr
#!/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 )
예제 #11
0
	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.'
예제 #12
0
    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)
예제 #13
0
	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 )
예제 #14
0
# -*- 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)
예제 #15
0
	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 )
예제 #16
0
    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)
예제 #17
0
        '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')
예제 #18
0
	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.' )
예제 #19
0
# 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' )
예제 #20
0
	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 )
예제 #21
0
파일: pypi.py 프로젝트: Adefx/CrossMgr
#!/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'
예제 #22
0
		'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' )