📄 appcontroller.m
字号:
// AppController.m -- application controller, handler of all the buttons.// Copyright (C) 2003 Borkware// We use the BSD License. Check out http://borkware.com/license#import "AppController.h"#import <Quicktime/Quicktime.h>@implementation AppController// initialize our controller object- (id) init{ if (self = [super init]) { // apple docs say to call EnterMovies before using the C API // from Cocoa-land, so here it is OSErr result; result = EnterMovies (); if (result != noErr) { NSLog (@"could not enterMovies: error code %d", result); } } return (self);} // init// clean up our mess- (void) dealloc{ [qtmovie release]; [super dealloc];} // dealloc// button action handler. Slurp in the mp3 file as a quicktime movie- (IBAction) loadMp3File: (id) sender{ // use an open panel file chooser modal sheeting thingie NSOpenPanel *fileChooser; fileChooser = [NSOpenPanel openPanel]; // just load one file at a time. and no directories! [fileChooser setAllowsMultipleSelection: NO]; [fileChooser setCanChooseDirectories: NO]; // kick off the sheet [fileChooser beginSheetForDirectory: @"" file: @"" types: [NSArray arrayWithObject: @"mp3"] // only mp3 files modalForWindow: window modalDelegate: self didEndSelector: @selector(openPanelDidEnd:returnCode:context:) contextInfo: nil];} // loadMP3FIle// sheet delegate handler. This gets invoked by the file chooser open file// thingie when the user selects an item, or cancels it- (void) openPanelDidEnd: (NSOpenPanel *) chooser returnCode: (int) returnCode context: (id) context{ // only look at stuff on an OK click if (returnCode == NSOKButton) { // get the item selected NSString *filename; filename = [[chooser filenames] objectAtIndex: 0]; // get rid of any currently loaded sound [qtmovie release]; // get the new movie qtmovie = [[NSMovie alloc] initWithURL: [NSURL fileURLWithPath: filename] byReference: NO]; // (the by reference is really only used when using // encodeWithCoder: on the sound) if (qtmovie != nil) { [titleField setStringValue: [filename lastPathComponent]]; } else { [titleField setStringValue: @""]; } // enable/disable the button based on success of loading [playButton setEnabled: (qtmovie != nil)]; }} // openPanelDidEnd// button action handler. Start the movie playing- (IBAction) play: (id) sender{ // this is kind of gross. // It looks like The Way to play movies is a loop like // while (!IsMovieDone(movie)) moviesTask (movie, 0); // so schedule a timer so we can poll when the movie (our mp3) // has stopped playing pollTimer = [NSTimer scheduledTimerWithTimeInterval: 0.25 // 4x second target: self selector: @selector(pollMovie:) userInfo: nil repeats: YES]; // update the UI accordingly [stopButton setEnabled: YES]; [playButton setEnabled: NO]; // set our progress indicator to show how far we've gone through the // movie [progressIndicator setMinValue: 0.0]; [progressIndicator setMaxValue: GetMovieDuration([qtmovie QTMovie])]; // start the movie from the very beginning GoToBeginningOfMovie ([qtmovie QTMovie]); StartMovie ([qtmovie QTMovie]);} // play// timer handler. We poll to see when the movie has stopped// also update the progress indicator with how far we've gotten- (void) pollMovie: (NSTimer *) timer{ if (IsMovieDone([qtmovie QTMovie])) { [stopButton setEnabled: NO]; [playButton setEnabled: YES]; [timer invalidate]; timer = nil; } [progressIndicator setDoubleValue: GetMovieTime ([qtmovie QTMovie], NULL)];} // pollMovie// button action handler. stop the sound- (IBAction) stop: (id) sender{ StopMovie ([qtmovie QTMovie]); [playButton setEnabled: YES];} // stop@end // AppController
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -