| 
									
										
										
										
											1999-01-30 22:39:17 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import Qd | 
					
						
							|  |  |  | import Win | 
					
						
							|  |  |  | import Qt, QuickTime | 
					
						
							|  |  |  | import W | 
					
						
							|  |  |  | import macfs | 
					
						
							|  |  |  | import Evt, Events | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _moviesinitialized = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def EnterMovies(): | 
					
						
							|  |  |  | 	global _moviesinitialized | 
					
						
							|  |  |  | 	if not _moviesinitialized: | 
					
						
							|  |  |  | 		Qt.EnterMovies() | 
					
						
							|  |  |  | 		_moviesinitialized = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Movie(W.Widget): | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def __init__(self, possize): | 
					
						
							|  |  |  | 		EnterMovies() | 
					
						
							|  |  |  | 		self.movie = None | 
					
						
							|  |  |  | 		self.running = 0 | 
					
						
							|  |  |  | 		W.Widget.__init__(self, possize) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def adjust(self, oldbounds): | 
					
						
							|  |  |  | 		self.SetPort() | 
					
						
							| 
									
										
										
										
											2001-01-23 14:58:20 +00:00
										 |  |  | 		self.GetWindow().InvalWindowRect(oldbounds) | 
					
						
							|  |  |  | 		self.GetWindow().InvalWindowRect(self._bounds) | 
					
						
							| 
									
										
										
										
											1999-01-30 22:39:17 +00:00
										 |  |  | 		self.calcmoviebox() | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def set(self, path_or_fss, start = 0): | 
					
						
							|  |  |  | 		self.SetPort() | 
					
						
							|  |  |  | 		if self.movie: | 
					
						
							| 
									
										
										
										
											2001-01-23 14:58:20 +00:00
										 |  |  | 			#self.GetWindow().InvalWindowRect(self.movie.GetMovieBox()) | 
					
						
							| 
									
										
										
										
											1999-01-30 22:39:17 +00:00
										 |  |  | 			Qd.PaintRect(self.movie.GetMovieBox()) | 
					
						
							|  |  |  | 		if type(path_or_fss) == type(''): | 
					
						
							|  |  |  | 			path = path_or_fss | 
					
						
							|  |  |  | 			fss = macfs.FSSpec(path) | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			path = path_or_fss.as_pathname() | 
					
						
							|  |  |  | 			fss = path_or_fss | 
					
						
							|  |  |  | 		self.movietitle = os.path.basename(path) | 
					
						
							|  |  |  | 		movieResRef = Qt.OpenMovieFile(fss, 1) | 
					
						
							|  |  |  | 		self.movie, dummy, dummy = Qt.NewMovieFromFile(movieResRef, 0, QuickTime.newMovieActive) | 
					
						
							|  |  |  | 		self.moviebox = self.movie.GetMovieBox() | 
					
						
							|  |  |  | 		self.calcmoviebox() | 
					
						
							|  |  |  | 		Qd.ObscureCursor()	# XXX does this work at all? | 
					
						
							|  |  |  | 		self.movie.GoToBeginningOfMovie() | 
					
						
							|  |  |  | 		if start: | 
					
						
							|  |  |  | 			self.movie.StartMovie() | 
					
						
							|  |  |  | 			self.running = 1 | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			self.running = 0 | 
					
						
							|  |  |  | 			self.movie.MoviesTask(0) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def get(self): | 
					
						
							|  |  |  | 		return self.movie | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def getmovietitle(self): | 
					
						
							|  |  |  | 		return self.movietitle | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def start(self): | 
					
						
							|  |  |  | 		if self.movie: | 
					
						
							|  |  |  | 			Qd.ObscureCursor() | 
					
						
							|  |  |  | 			self.movie.StartMovie() | 
					
						
							|  |  |  | 			self.running = 1 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def stop(self): | 
					
						
							|  |  |  | 		if self.movie: | 
					
						
							|  |  |  | 			self.movie.StopMovie() | 
					
						
							|  |  |  | 			self.running = 0 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def rewind(self): | 
					
						
							|  |  |  | 		if self.movie: | 
					
						
							|  |  |  | 			self.movie.GoToBeginningOfMovie() | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def calcmoviebox(self): | 
					
						
							|  |  |  | 		if not self.movie: | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		ml, mt, mr, mb = self.moviebox | 
					
						
							|  |  |  | 		wl, wt, wr, wb = widgetbox = self._bounds | 
					
						
							|  |  |  | 		mheight = mb - mt | 
					
						
							|  |  |  | 		mwidth = mr - ml | 
					
						
							|  |  |  | 		wheight = wb - wt | 
					
						
							|  |  |  | 		wwidth = wr - wl | 
					
						
							|  |  |  | 		if (mheight * 2 < wheight) and (mwidth * 2 < wwidth): | 
					
						
							|  |  |  | 			scale = 2 | 
					
						
							|  |  |  | 		elif mheight > wheight or mwidth > wwidth: | 
					
						
							|  |  |  | 			scale = min(float(wheight) / mheight, float(wwidth) / mwidth) | 
					
						
							|  |  |  | 		else: | 
					
						
							|  |  |  | 			scale = 1 | 
					
						
							|  |  |  | 		mwidth, mheight = mwidth * scale, mheight * scale | 
					
						
							|  |  |  | 		ml, mt = wl + (wwidth - mwidth) / 2, wt + (wheight - mheight) / 2 | 
					
						
							|  |  |  | 		mr, mb = ml + mwidth, mt + mheight | 
					
						
							|  |  |  | 		self.movie.SetMovieBox((ml, mt, mr, mb)) | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def idle(self, *args): | 
					
						
							|  |  |  | 		if self.movie: | 
					
						
							|  |  |  | 			if not self.movie.IsMovieDone() and self.running: | 
					
						
							|  |  |  | 				Qd.ObscureCursor() | 
					
						
							|  |  |  | 				while 1: | 
					
						
							|  |  |  | 					self.movie.MoviesTask(0) | 
					
						
							|  |  |  | 					gotone, event = Evt.EventAvail(Events.everyEvent) | 
					
						
							|  |  |  | 					if gotone or self.movie.IsMovieDone(): | 
					
						
							|  |  |  | 						break | 
					
						
							|  |  |  | 			elif self.running: | 
					
						
							|  |  |  | 				box = self.movie.GetMovieBox() | 
					
						
							|  |  |  | 				self.SetPort() | 
					
						
							| 
									
										
										
										
											2001-01-23 14:58:20 +00:00
										 |  |  | 				self.GetWindow().InvalWindowRect(box) | 
					
						
							| 
									
										
										
										
											1999-01-30 22:39:17 +00:00
										 |  |  | 				self.movie = None | 
					
						
							|  |  |  | 				self.running = 0 | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	def draw(self, visRgn = None): | 
					
						
							|  |  |  | 		if self._visible: | 
					
						
							|  |  |  | 			Qd.PaintRect(self._bounds) | 
					
						
							|  |  |  | 			if self.movie: | 
					
						
							|  |  |  | 				self.movie.UpdateMovie() | 
					
						
							|  |  |  | 				self.movie.MoviesTask(0) | 
					
						
							|  |  |  | 
 |