home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / C / Utilities / QuickTime VCR 3.5 / MP Source / myQuickTime.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-08-04  |  11.6 KB  |  489 lines  |  [TEXT/KAHL]

  1. /*---------------------------------------------------------------------
  2.     File: myQuickTime.c
  3.     Purpose: Contains stuff to manage quicktime stuff such as openning
  4.     files, setting rates, and such.
  5.     
  6.     Created by: Geoffrey Slinker
  7.     Date: 10:58:03 AM  6/13/92
  8.     Modified: 
  9. ---------------------------------------------------------------------*/
  10. #include <GestaltEqu.h>
  11. #include <Movies.h>
  12. #include <MoviesFormat.h>
  13. #include <FixMath.h>
  14.  
  15. #include <oops.h>
  16.  
  17. #include "myQuickTime.h"
  18. #include "Alert_Class.h"
  19. #include "Dlog.h"
  20. #include "vcr.h"
  21.  
  22. extern Alert_Class *myAlert;
  23. extern VCR *vcr;
  24. extern Boolean opened;
  25.  
  26. /*...................................................................*/
  27. void QT::QT()
  28. {
  29.     movieWindow = NULL;
  30.     moviePosterWindow = NULL;
  31.     myMovie = NULL;
  32. }
  33. /*...................................................................*/
  34. void QT::~QT()
  35. {
  36.     CWindowPtr movieWindow,moviePosterWindow;
  37.     Movie myMovie;
  38.     
  39.     movieWindow = (*this).movieWindow;
  40.     moviePosterWindow = (*this).moviePosterWindow;
  41.     myMovie = (*this).myMovie;
  42.     
  43.     
  44.     if (movieWindow != NULL) {
  45.         DisposeWindow((WindowPtr)movieWindow);
  46.     }
  47.     
  48.     if (moviePosterWindow != NULL) {
  49.         DisposeWindow(moviePosterWindow);
  50.     }
  51.     
  52.     
  53.     if (myMovie != NULL) {
  54.         DisposeMovie(myMovie);
  55.     }
  56.     (*this).movieWindow = movieWindow;
  57.     (*this).moviePosterWindow = moviePosterWindow;
  58.     (*this).myMovie = myMovie;
  59. }
  60. /*...................................................................*/
  61. void QT::MovieCheck()
  62. {
  63.     long    version;
  64.     
  65.     
  66.     if (Gestalt( gestaltQuickTime, &version ) != noErr){
  67.         (*myAlert).AlertStop("\pFatal Error!",
  68.                                 "\pQuickTime not installed",
  69.                                 "\pPlease Install QuickTime",
  70.                                 "\pSorry.");
  71.     }
  72.     
  73.     if(EnterMovies() != noErr)    {
  74.         (*myAlert).AlertStop("\pFatal Error!",
  75.                                 "\pUnable to Enter Movies",
  76.                                 "\p",
  77.                                 "\pSorry.");
  78.     }
  79. }
  80. /*...................................................................*/
  81. void QT::LoadResources()
  82. {
  83.     CWindowPtr movieWindow, moviePosterWindow;
  84.     
  85.     movieWindow = (CWindowPtr)GetNewCWindow(MOVIE_WIND,(Ptr)0L,(CWindowPtr)(-1L));
  86.     if (movieWindow == NULL) {
  87.         SysBeep(7);
  88.         (*myAlert).AlertStop("\pFatal Error",
  89.                             "\pUnable to allocate new color window",
  90.                             "\pQT::LoadResources",NULL);
  91.     }
  92.     
  93.     moviePosterWindow = (CWindowPtr)GetNewCWindow(MOVIE_POSTER_WIND,(Ptr)0L,(CWindowPtr)(-1L));
  94.     if (moviePosterWindow == NULL) {
  95.         SysBeep(7);
  96.         (*myAlert).AlertStop("\pFatal Error",
  97.                             "\pUnable to allocate new color window",
  98.                             "\pQT::LoadResources",NULL);
  99.     }
  100.     
  101.     (*this).origBounds = (*movieWindow).portRect;
  102.     (*this).movieWindow = movieWindow;
  103.     (*this).moviePosterWindow = moviePosterWindow;
  104. }
  105. /*...................................................................*/
  106. /*
  107. FUNCTION OpenMovieFile (fileSpec: FSSpec; VAR resRefNum: Integer; perms: SignedByte): OSErr;
  108. fileSpec    Contains a pointer to the file system specification for the movie
  109.             file to be opened.
  110. resRefNum    Contains a pointer to a field that is to receive the file reference 
  111.             number for the opened movie file. Your application must use this value 
  112.             when calling other Movie Toolbox routines that work with movie files.
  113. perms        Specifies the permission level for the file. If your application is 
  114.             only going to play the movie that is stored in the file, you can open 
  115.             the file with read permission. If you plan to add data to the file or 
  116.             change data in the file, you should open the file with write permission. 
  117.             Supply avalid File Manager permission value. See Inside Macintosh, 
  118.             VolumeĀ II for valid values
  119. */
  120. /*...................................................................*/
  121. int QT::OpenMovie()
  122. {    
  123.     PicHandle poster;
  124.     Movie myMovie;
  125.     CWindowPtr movieWindow,moviePosterWindow;
  126.     StandardFileReply        sfr;
  127.     SFTypeList    types =    {'MooV'};
  128.     short    resRefNum;
  129.     short numTypes = 1;
  130.     int w,h;
  131.     
  132.     // Shadow variables because the class are handles
  133.     // and therefore purgeable.
  134.     
  135.     myMovie = (*this).myMovie;
  136.     movieWindow = (*this).movieWindow;
  137.     moviePosterWindow = (*this).moviePosterWindow;
  138.     
  139.     
  140.     StandardGetFilePreview(0, numTypes, types, &sfr);
  141.     if (!sfr.sfGood) return(0);                /* Return if no selection */
  142.     
  143.     if (OpenMovieFile(&(sfr.sfFile), &resRefNum, 0) != noErr) {
  144.         (*myAlert).AlertCaution("\pUnable to open movie","\p","\p","\p");
  145.         return(0);
  146.     }
  147.     
  148.     SetWTitle(movieWindow,sfr.sfFile.name);
  149.     
  150.     if (NewMovieFromFile( &myMovie,resRefNum, nil, nil,0, nil ) != noErr) {
  151.         SysBeep(7);
  152.         (*myAlert).AlertStop("\pFatal Error",
  153.                             "\pUnable to get NewMovieFromFile",
  154.                             "\pQT::OpenMovie",NULL);
  155.     }
  156.     if (CloseMovieFile( resRefNum ) != noErr) {
  157.         SysBeep(7);
  158.         (*myAlert).AlertStop("\pFatal Error",
  159.                             "\pUnable to CloseMovieFile",
  160.                             "\pQT::OpenMovie",NULL);
  161.     }    
  162.                                     
  163.     /* Get movie box and place movie at 0,0 */
  164.     GetMovieBox( myMovie, &dispBounds);
  165.     OffsetRect(&dispBounds,-dispBounds.left,-dispBounds.top);
  166.     SetMovieBox(myMovie, &dispBounds);        
  167.  
  168.     SetPort(movieWindow);
  169.     SetMovieGWorld(myMovie,nil,nil);
  170.     
  171.     GoToBeginningOfMovie(myMovie);
  172.     PrerollMovie(myMovie,0,0);                
  173.     SetMovieActive(myMovie,true);
  174.     
  175.     w = dispBounds.right - dispBounds.left;
  176.     h = dispBounds.bottom - dispBounds.top;
  177.     
  178.     SizeWindow( (WindowPtr)movieWindow,w,h,true);
  179.     SizeWindow( (WindowPtr)moviePosterWindow,w,h,true);
  180.     
  181.     poster = GetMoviePosterPict( myMovie );
  182.  
  183.         if (poster != nil)
  184.         {
  185.             GrafPtr oldPort;
  186.             Rect rect;
  187.             
  188.             GetPort(&oldPort);
  189.             SetPort(moviePosterWindow);
  190.             rect = (*moviePosterWindow).portRect;
  191.                     
  192.             DrawPicture( poster, &rect );
  193.             KillPicture( poster );
  194.             
  195.             SetPort(oldPort);
  196.         }
  197.     
  198.     (*this).myMovie = myMovie;
  199.     return(1);
  200.  
  201. }
  202. /*...................................................................*/
  203. void QT::PlayMovie()
  204. {
  205.     Movie myMovie;
  206.     CWindowPtr movieWindow;
  207.     
  208.     myMovie = (*this).myMovie;
  209.     movieWindow = (*this).movieWindow;
  210.     
  211.     
  212.     StartMovie(myMovie);                    
  213.  
  214.  
  215. }
  216. /*...................................................................*/
  217. void QT::CloseMovie()
  218. {
  219.     Movie myMovie;
  220.     int w,h;
  221.     CWindowPtr movieWindow, moviePosterWindow;
  222.     GrafPtr oldPort;
  223.     Rect origBounds;
  224.     
  225.     GetPort(&oldPort);
  226.     myMovie = (*this).myMovie;
  227.     
  228.     if (myMovie != NULL) {
  229.         DisposeMovie(myMovie);
  230.     }
  231.     myMovie = NULL;  // This has to be here, apparently DisposeMovie didn't set
  232.                   // the myMovie variable to NULL
  233.     (*this).myMovie = myMovie;
  234.     
  235.     movieWindow = (*this).movieWindow;
  236.     moviePosterWindow = (*this).moviePosterWindow;
  237.     origBounds = (*this).origBounds;
  238.     
  239.     
  240.     w = origBounds.right - origBounds.left;
  241.     h = origBounds.bottom - origBounds.top;
  242.     
  243.     SizeWindow( (WindowPtr)movieWindow,w,h,true);
  244.     SizeWindow( (WindowPtr)moviePosterWindow,w,h,true);
  245.     
  246.     SetPort(movieWindow);
  247.     SetWTitle(movieWindow, "\pMovie Window");
  248.     EraseRect(&origBounds);
  249.     
  250.     SetPort(moviePosterWindow);
  251.     EraseRect(&origBounds);
  252.     
  253.     SetPort(oldPort);
  254.     
  255.     (*this).movieWindow = movieWindow;
  256.     (*this).moviePosterWindow = moviePosterWindow;
  257.     
  258.     (*vcr).ClearAllButtons();
  259.     
  260. }
  261. /*...................................................................*/
  262. void QT::MyMoviesTask(void)
  263. {    
  264.     Movie myMovie;
  265.     
  266.     myMovie = (*this).myMovie;
  267.     if ((myMovie != NULL) && (opened))
  268.     {
  269.         
  270.         MoviesTask(myMovie,0);
  271.         if (IsMovieDone(myMovie))    // Have we reached the end yet?        
  272.         {    
  273.             if ( (*vcr).vcr_mode == playing) {
  274.                 GoToBeginningOfMovie( myMovie );
  275.             }
  276.             else {
  277.                 (*vcr).ClearAllButtons();
  278.                 //(*vcr).RedrawButtons();
  279.                 //GoToBeginningOfMovie( myMovie );
  280.             }
  281.         }
  282.     }
  283. }
  284. /*...................................................................*/
  285. void QT::StopMyMovie(void)
  286. {
  287.     Movie myMovie;
  288.     
  289.     myMovie = (*this).myMovie;
  290.     
  291.     if(myMovie != NULL) {
  292.         StopMovie( myMovie );
  293.     }
  294.     (*this).myMovie = myMovie;
  295. }
  296. /*...................................................................*/
  297. void QT::FFMyMovie(void)
  298. {
  299.     Movie myMovie;
  300.     
  301.     myMovie = (*this).myMovie;
  302.     if (myMovie != NULL) {
  303.         SetMovieRate( myMovie, Long2Fix( 2L ) );
  304.     }
  305.     
  306.     (*this).myMovie = myMovie;
  307. }
  308. /*...................................................................*/
  309. void QT::RWMyMovie(void)
  310. {    
  311.     Movie myMovie;
  312.     
  313.     myMovie = (*this).myMovie;
  314.     if (myMovie != NULL) {
  315.         SetMovieRate( myMovie, Long2Fix( -2L) );
  316.     }
  317.     
  318.     (*this).myMovie = myMovie;
  319. }
  320. /*...................................................................*/        
  321. void QT::GoStartMyMovie(void)
  322. {
  323.     Movie myMovie;
  324.     
  325.     myMovie = (*this).myMovie;
  326.     if (myMovie != NULL) {
  327.         StopMovie(myMovie);
  328.         GoToBeginningOfMovie(myMovie);
  329.     }
  330.     
  331.     (*this).myMovie = myMovie;
  332. }
  333. /*...................................................................*/
  334. void QT::GoEndMyMovie(void)
  335. {
  336.     Movie myMovie;
  337.     
  338.     myMovie = (*this).myMovie;
  339.     if (myMovie != NULL) {
  340.         StopMovie(myMovie);
  341.         GoToEndOfMovie(myMovie);
  342.     }
  343.     
  344.     (*this).myMovie = myMovie;
  345.  
  346. }
  347. /*...................................................................*/
  348. void QT::RedrawPoster()
  349. {
  350.     PicHandle poster;
  351.     CWindowPtr moviePosterWindow;
  352.     GrafPtr oldPort;
  353.     Movie myMovie;
  354.     
  355.     GetPort(&oldPort);
  356.     
  357.     moviePosterWindow = (*this).moviePosterWindow;
  358.     myMovie = (*this).myMovie;
  359.     
  360.     if (myMovie != NULL) {
  361.         poster = GetMoviePosterPict( myMovie );
  362.  
  363.         if (poster != nil)
  364.         {
  365.             GrafPtr oldPort;
  366.             Rect rect;
  367.             
  368.             GetPort(&oldPort);
  369.             SetPort(moviePosterWindow);
  370.             rect = (*moviePosterWindow).portRect;
  371.             
  372.             //SetWindowPic( (WindowPtr)moviePosterWindow,poster);
  373.             //InsetRect( &rect, 3, 3 );
  374.             
  375.             DrawPicture( poster, &rect );
  376.             KillPicture( poster );
  377.             
  378.             SetPort(oldPort);
  379.         }
  380.     }
  381.     SetPort(oldPort);
  382. }
  383. /*...................................................................*/
  384. void QT::HandleVolume(int direction)
  385. {
  386.     long volume;
  387.     Movie myMovie = (*this).myMovie;
  388.     volume = GetMovieVolume(myMovie);
  389.         
  390.     switch (direction) {
  391.         case UP:
  392.             volume += 50;
  393.             break;
  394.         case DOWN:
  395.             volume -= 50;
  396.             break;
  397.             
  398.         default : break;
  399.     
  400.     }
  401.     
  402.     if (volume > 255) volume = 255;
  403.     if (volume < 0) volume = 0;
  404.     SetMovieVolume(myMovie, (int)volume );
  405.     (*this).myMovie = myMovie;
  406.  
  407. }
  408. /*...................................................................*/
  409. int QT::OpenMovieFSSpec(FSSpec mySpec)
  410. {    
  411.     PicHandle poster;
  412.     Movie myMovie;
  413.     CWindowPtr movieWindow,moviePosterWindow;
  414.     short    resRefNum;
  415.     short numTypes = 1;
  416.     int w,h;
  417.     
  418.     // Shadow variables because the class are handles
  419.     // and therefore purgeable.
  420.     
  421.     myMovie = (*this).myMovie;
  422.     movieWindow = (*this).movieWindow;
  423.     moviePosterWindow = (*this).moviePosterWindow;
  424.     
  425.     
  426.     if (OpenMovieFile(&mySpec, &resRefNum, 0) != noErr) {
  427.         (*myAlert).AlertCaution("\pUnable to open movie","\p","\p","\p");
  428.         return(0);
  429.     }
  430.     
  431.     SetWTitle(movieWindow,mySpec.name);
  432.     
  433.     if (NewMovieFromFile( &myMovie,resRefNum, nil, nil,0, nil ) != noErr) {
  434.         SysBeep(7);
  435.         (*myAlert).AlertStop("\pFatal Error",
  436.                             "\pUnable to get NewMovieFromFile",
  437.                             "\pQT::OpenMovie",NULL);
  438.     }
  439.     if (CloseMovieFile( resRefNum ) != noErr) {
  440.         SysBeep(7);
  441.         (*myAlert).AlertStop("\pFatal Error",
  442.                             "\pUnable to CloseMovieFile",
  443.                             "\pQT::OpenMovie",NULL);
  444.     }    
  445.                                     
  446.     /* Get movie box and place movie at 0,0 */
  447.     GetMovieBox( myMovie, &dispBounds);
  448.     OffsetRect(&dispBounds,-dispBounds.left,-dispBounds.top);
  449.     SetMovieBox(myMovie, &dispBounds);        
  450.  
  451.     SetPort(movieWindow);
  452.     SetMovieGWorld(myMovie,nil,nil);
  453.     
  454.     GoToBeginningOfMovie(myMovie);
  455.     PrerollMovie(myMovie,0,0);                
  456.     SetMovieActive(myMovie,true);
  457.     
  458.     w = dispBounds.right - dispBounds.left;
  459.     h = dispBounds.bottom - dispBounds.top;
  460.     
  461.     SizeWindow( (WindowPtr)movieWindow,w,h,true);
  462.     SizeWindow( (WindowPtr)moviePosterWindow,w,h,true);
  463.     
  464.     poster = GetMoviePosterPict( myMovie );
  465.  
  466.         if (poster != nil)
  467.         {
  468.             GrafPtr oldPort;
  469.             Rect rect;
  470.             
  471.             GetPort(&oldPort);
  472.             SetPort(moviePosterWindow);
  473.             rect = (*moviePosterWindow).portRect;
  474.                     
  475.             DrawPicture( poster, &rect );
  476.             KillPicture( poster );
  477.             
  478.             SetPort(oldPort);
  479.         }
  480.     
  481.     (*this).myMovie = myMovie;
  482.     return(1);
  483.  
  484. }
  485. /*...................................................................*/
  486. /*...................................................................*/
  487. /*...................................................................*/
  488. /*...................................................................*/
  489.