Unit Name : QTVRControl Comment : QTVR player control for QT4Delphi Author : George Birbilis History : 19Sep1998 - first creation 20Oct1998 - added {$R *.DCR} to link an icon for design-time 29Nov1998 - adding QTVR manager intercept proc handling (Events) 17Dec1998 - now using the QTVREvents unit to expose QTVR manager events as our events - bug-fix: the set_filename method now checks if the inherited.set_filename just returned without doing anything (was caling QTVRGetQTVRTrack passing a nil movie instance!!!) 18Jan1999 - Added implementation for FOVChange and TriggerHotSpot events - now event handler uses the params passed by QT and doesn't ask QT again for what is the new value of the param that changed - event handler passes by reference the "cancel" param to user's handler, so that he can do cancel:=true to cancel the intercepted QTVR action (if he returns nothing cancel is false - initially set so by the QTVR Manager) 20Feb1999 - changed {$R *.DCR} to {$R *.RES} to link component's icon into the compiled code when having *.DCR files and removing a component from the package, when placing it back we get a {$R xxxComponent.DCR} in the package's source (.DPK) file... this results in a duplicate resource error message when linking the package, cause we import the resource for our unit and Delphi imports it again for the package (if we let the package to import it, the resource would be available only at the design package and not at runtime) 23Feb1999 - overriden CloseMovie to set 'myInstance' (qtvrInstance) field to nil, so that we won't try to access a destroyed qtvr instance - made property accessor methods safe: now they check for myInstance<>nil before using it - not overriding setFilename method any more, overriding setMovie - In destroy, we're now doing TerminateQTVR only when qtvrInited=true (we're also setting qtvrInited=false before calling TerminateQTVR) 7Mar1999 - not using the QuickTime unit any more, but using C_Types & qt_MacTypes 26Jul1999 - changed closeMovie() method accesibility to public from protected, since was overriding it from TQTControl and it had it as public 4Apr2000 - fixed type at "write" accessor for property "fieldOfView" (was setting the tiltAngle instead of the fieldOfView) 13Oct2001 - removed any not needed units from the "uses" clauses 7Nov2001 - added "getViewState" and "setViewState" utility methods - added "viewStateCount", "currentViewState", "defaultViewState" and "mouseDownViewState" properties - added "viewAnimation", "frameAnimation" properties - added PalindromeViewFrames, StartFirstViewFrame, DontLoopViewFrames, PlayEveryViewFrame, SyncViewToFrameRate, PalindromeViews, PlayStreamingViews properties - added WrapPan, WrapTilt, CanZoom, ReverseHControl, ReverseVControl, SwapHVControl, Translation properties 8Nov2001 - added ShowDefaultView method - added UseDefaultView property (default is false for backwards compatibility) 1Dec2001 - now calling RegisterClass too at the register procedure 5Dec2001 - renamed "minQTVRTrack" property to "MinQTVRTrack" - renamed method "setTheMovie" to "setMovie" - converted "var" cancel parameter of events to an "out" parameter - "setMovie" method is now protected, assignment to QTMovie property is suggested to be used instead of calling "setMovie" - "closeMovie" renamed to "CloseMovie" 6Dec2001 - now using "QTMovie" and "QTMovieController" properties of TQTControl instead of the now private field "FMovie" and "FMovieController" of that class 18Dec2001 - now AngularUnits are set correctly after loading from saved state 10Feb2002 - now AngularUnits property is set before PanAngle, TitleAngle and FieldOfView properties' values when loading a new movie 25Feb2002 - fixed-bug: at "setQTVRTrack" now installing an intercept proc for HotSpot triggering events - made "setQTVRTrack" method virtual so that an ancestor component can add more events' interception code - added "GetVRWorld" public method - added "NodeID" property and protected methods "getNodeID" and "setNodeID" - added "goToDefaultNode" and "goToPreviousNode" public methods - added "CurrentNodeType" property and protected method "getCurrentNodeType" - added "GetNodeInfo" public method - at "InterceptProc" calling "Editor.modified" if Editor<>nil (that is if we're in design mode inside the Delphi IDE) and if not in loading state - added "triggerHotSpot" function (returns boolean if successful) 13Apr2002 - removed {$R *.RES}, now using a .DCR file, linked into the delphi package, not into this unit - fixed TriggerHotSpotEvent, now working OK