Commit 453ced57 authored by Jack Jansen's avatar Jack Jansen

still untested (but it compiles)

parent 8b13703f
This diff is collapsed.
This diff is collapsed.
...@@ -6,7 +6,7 @@ from scantools import Scanner ...@@ -6,7 +6,7 @@ from scantools import Scanner
LONG = "QuickTime" LONG = "QuickTime"
SHORT = "qt" SHORT = "qt"
OBJECT = "Movie" OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase")
def main(): def main():
input = "Movies.h" input = "Movies.h"
...@@ -26,52 +26,75 @@ class MyScanner(Scanner): ...@@ -26,52 +26,75 @@ class MyScanner(Scanner):
listname = "functions" listname = "functions"
if arglist: if arglist:
t, n, m = arglist[0] t, n, m = arglist[0]
if t == OBJECT and m == "InMode": if t in OBJECTS and m == "InMode":
classname = "Method" classname = "Method"
listname = "methods" listname = t + "_methods"
return classname, listname return classname, listname
def makeblacklistnames(self): def makeblacklistnames(self):
return [ return [
"DisposeMovie", # Done on python-object disposal "DisposeMovie", # Done on python-object disposal
"DisposeMovieTrack", # ditto
"DisposeTrackMedia", # ditto
"DisposeUserData", # ditto
"DisposeTimeBase", # ditto
"GetMovieCreationTime", # type "unsigned long" in C, inparseable "GetMovieCreationTime", # type "unsigned long" in C, inparseable
"GetMovieModificationTime", # Ditto "GetMovieModificationTime", # Ditto
"GetTrackCreationTime", # ditto
"GetTrackModificationTime", # Ditto
"GetMediaCreationTime", # ditto
"GetMediaModificationTime", # Ditto
# The following 4 use 'void *' in an uncontrolled way
# TBD when I've read the manual...
"GetUserDataItem",
"SetUserDataItem",
"SetTextSampleData",
"MCDoAction",
# bgen gets the argument in/out wrong..
"AddTextSample",
"AddTESample",
"AddHiliteSample",
"HiliteTextSample",
] ]
def makeblacklisttypes(self): def makeblacklisttypes(self):
return [ return [
"MoviesErrorUPP", # I don't think we want to do these
"Track", # XXXX To be done in the future "QTSyncTaskPtr",
"Media", # We dont do callbacks yet, so no need for these
"UserData",
"TimeBase",
"QTCallBack", "QTCallBack",
"Component", # Skipped for now, due to laziness
"TimeRecord", "TimeRecord",
"TimeRecord_ptr", "TimeRecord_ptr",
"TrackEditState", "TrackEditState",
"MovieEditState", "MovieEditState",
"MoviePreviewCallOutUPP", "MatrixRecord",
"MatrixRecord_ptr",
"SampleReferencePtr",
# "SampleDescription",
# "SoundDescription",
# "TextDescription",
# "MusicDescription",
# I dont know yet how to do these.
"CGrafPtr", "CGrafPtr",
"GDHandle", "GDHandle",
# Routine pointers, not yet.
"MoviesErrorUPP",
"MoviePreviewCallOutUPP",
"MovieDrawingCompleteUPP", "MovieDrawingCompleteUPP",
"PixMapHandle",
"MatrixRecord",
"MatrixRecord_ptr",
"QTCallBackUPP", "QTCallBackUPP",
"TextMediaUPP", "TextMediaUPP",
"MovieProgressUPP", "MovieProgressUPP",
"MovieRgnCoverUPP", "MovieRgnCoverUPP",
"MCActionFilterUPP", "MCActionFilterUPP",
"MCActionFilterWithRefConUPP", "MCActionFilterWithRefConUPP",
"SampleDescription", "GetMovieUPP",
"SoundDescription", "ModalFilterUPP",
"TextDescription",
"MusicDescription",
] ]
def makerepairinstructions(self): def makerepairinstructions(self):
return [ return [
([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
] ]
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -7,7 +7,7 @@ import string ...@@ -7,7 +7,7 @@ import string
# Declarations that change for each manager # Declarations that change for each manager
MACHEADERFILE = 'Movies.h' # The Apple header file MACHEADERFILE = 'Movies.h' # The Apple header file
MODNAME = 'qt' # The name of the module MODNAME = 'Qt' # The name of the module
OBJECTNAME = 'Movie' # The basic name of the objects used here OBJECTNAME = 'Movie' # The basic name of the objects used here
# The following is *usually* unchanged but may still require tuning # The following is *usually* unchanged but may still require tuning
...@@ -23,9 +23,59 @@ from macsupport import * ...@@ -23,9 +23,59 @@ from macsupport import *
includestuff = includestuff + """ includestuff = includestuff + """
#include <%s>""" % MACHEADERFILE + """ #include <%s>""" % MACHEADERFILE + """
/* Exported by Cmmodule.c: */
extern PyObject *CmpObj_New(Component);
extern int CmpObj_Convert(PyObject *, Component *);
extern PyObject *CmpInstObj_New(ComponentInstance);
extern int CmpInstObj_Convert(PyObject *, ComponentInstance *);
/* Exported by Qdmodule.c: */
extern PyObject *QdRGB_New(RGBColor *);
extern int QdRGB_Convert(PyObject *, RGBColor *);
/* Our own, used before defined: */
staticforward PyObject *TrackObj_New(Track);
staticforward int TrackObj_Convert(PyObject *, Track *);
staticforward PyObject *MovieObj_New(Movie);
staticforward int MovieObj_Convert(PyObject *, Movie *);
""" """
Movie = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX) # Our (opaque) objects
Movie = OpaqueByValueType('Movie', 'MovieObj')
Track = OpaqueByValueType('Track', 'TrackObj')
Media = OpaqueByValueType('Media', 'MediaObj')
UserData = OpaqueByValueType('UserData', 'UserDataObj')
TimeBase = OpaqueByValueType('TimeBase', 'TimeBaseObj')
# Other opaque objects
Component = OpaqueByValueType('Component', 'CmpObj')
MediaHandlerComponent = OpaqueByValueType('MediaHandlerComponent', 'CmpObj')
DataHandlerComponent = OpaqueByValueType('DataHandlerComponent', 'CmpObj')
ComponentInstance = OpaqueByValueType('ComponentInstance', 'CmpInstObj')
MediaHandler = OpaqueByValueType('MediaHandler', 'CmpInstObj')
DataHandler = OpaqueByValueType('DataHandler', 'CmpInstObj')
# XXXX The next one should really be a full-fledged object here, but the
# type is sometimes specified as MovieController and some times as
# ComponentInstance.
MovieController = OpaqueByValueType('MovieController', 'CmpInstObj')
RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
PicHandle = OpaqueByValueType("PicHandle", "ResObj")
CTabHandle = OpaqueByValueType("CTabHandle", "ResObj")
PixMapHandle = OpaqueByValueType("PixMapHandle", "ResObj")
SampleDescriptionHandle = OpaqueByValueType("SampleDescriptionHandle", "ResObj")
TEHandle = OpaqueByValueType("TEHandle", "ResObj")
# Silly Apple, passing an OStype by reference...
OSType_ptr = OpaqueType("OSType", "PyMac_BuildOSType", "PyMac_GetOSType")
RGBColor = OpaqueType("RGBColor", "QdRGB")
RGBColor_ptr = OpaqueType("RGBColor", "QdRGB")
# Non-opaque types, mostly integer-ish
TimeValue = Type("TimeValue", "l") TimeValue = Type("TimeValue", "l")
TimeScale = Type("TimeScale", "l") TimeScale = Type("TimeScale", "l")
TimeBaseFlags = Type("TimeBaseFlags", "l") TimeBaseFlags = Type("TimeBaseFlags", "l")
...@@ -38,12 +88,13 @@ movieFlattenFlagsEnum = Type("movieFlattenFlagsEnum", "l") ...@@ -38,12 +88,13 @@ movieFlattenFlagsEnum = Type("movieFlattenFlagsEnum", "l")
dataRefAttributesFlags = Type("dataRefAttributesFlags", "l") dataRefAttributesFlags = Type("dataRefAttributesFlags", "l")
playHintsEnum = Type("playHintsEnum", "l") playHintsEnum = Type("playHintsEnum", "l")
mediaHandlerFlagsEnum = Type("mediaHandlerFlagsEnum", "l") mediaHandlerFlagsEnum = Type("mediaHandlerFlagsEnum", "l")
ComponentResult = Type("ComponentResult", "l")
RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") HandlerError = Type("HandlerError", "l")
PicHandle = OpaqueByValueType("PicHandle", "ResObj") Ptr = InputOnlyType("Ptr", "s")
StringPtr = InputOnlyType("StringPtr", "s")
class MyObjectDefinition(GlobalObjectDefinition): class MovieObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self): def outputCheckNewArg(self):
Output("""if (itself == NULL) { Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null Movie"); PyErr_SetString(Qt_Error,"Cannot create null Movie");
...@@ -52,26 +103,79 @@ class MyObjectDefinition(GlobalObjectDefinition): ...@@ -52,26 +103,79 @@ class MyObjectDefinition(GlobalObjectDefinition):
def outputFreeIt(self, itselfname): def outputFreeIt(self, itselfname):
Output("DisposeMovie(%s);", itselfname) Output("DisposeMovie(%s);", itselfname)
class TrackObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null Track");
return NULL;
}""")
def outputFreeIt(self, itselfname):
Output("DisposeMovieTrack(%s);", itselfname)
class MediaObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null Media");
return NULL;
}""")
def outputFreeIt(self, itselfname):
Output("DisposeTrackMedia(%s);", itselfname)
class UserDataObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null UserData");
return NULL;
}""")
def outputFreeIt(self, itselfname):
Output("DisposeUserData(%s);", itselfname)
class TimeBaseObjectDefinition(GlobalObjectDefinition):
def outputCheckNewArg(self):
Output("""if (itself == NULL) {
PyErr_SetString(Qt_Error,"Cannot create null TimeBase");
return NULL;
}""")
def outputFreeIt(self, itselfname):
Output("DisposeTimeBase(%s);", itselfname)
# From here on it's basically all boiler plate... # From here on it's basically all boiler plate...
# Create the generator groups and link them # Create the generator groups and link them
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) Movie_object = MovieObjectDefinition('Movie', 'MovieObj', 'Movie')
module.addobject(object) Track_object = TrackObjectDefinition('Track', 'TrackObj', 'Track')
Media_object = MediaObjectDefinition('Media', 'MediaObj', 'Media')
UserData_object = UserDataObjectDefinition('UserData', 'UserDataObj', 'UserData')
TimeBase_object = TimeBaseObjectDefinition('TimeBase', 'TimeBaseObj', 'TimeBase')
module.addobject(TimeBase_object)
module.addobject(UserData_object)
module.addobject(Media_object)
module.addobject(Track_object)
module.addobject(Movie_object)
# Create the generator classes used to populate the lists # Create the generator classes used to populate the lists
Function = FunctionGenerator Function = OSErrFunctionGenerator
Method = MethodGenerator Method = OSErrMethodGenerator
# Create and populate the lists # Create and populate the lists
functions = [] functions = []
methods = [] TimeBase_methods = []
UserData_methods = []
Media_methods = []
Track_methods = []
Movie_methods = []
execfile(INPUTFILE) execfile(INPUTFILE)
# add the populated lists to the generator groups # add the populated lists to the generator groups
# (in a different wordl the scan program would generate this) # (in a different wordl the scan program would generate this)
for f in functions: module.add(f) for f in functions: module.add(f)
for f in methods: object.add(f) for f in TimeBase_methods: TimeBase_object.add(f)
for f in UserData_methods: UserData_object.add(f)
for f in Media_methods: Media_object.add(f)
for f in Track_methods: Track_object.add(f)
for f in Movie_methods: Movie_object.add(f)
# generate output (open the output file as late as possible) # generate output (open the output file as late as possible)
SetOutputFileName(OUTPUTFILE) SetOutputFileName(OUTPUTFILE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment