From c8b70d0a379fe25a1862e3fddac8fb7e265bd8de Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Sat, 20 Aug 2011 00:03:36 +0200 Subject: [PATCH] Implement movie panel --- Medianno.xcodeproj/project.pbxproj | 18 ++ Medianno/MADocWindow.h | 8 +- Medianno/MADocWindow.mm | 65 +++++-- Medianno/MAMedia.h | 4 +- Medianno/MAMedia.mm | 10 - Medianno/MAMovieWindow.h | 29 +++ Medianno/MAMovieWindow.m | 69 +++++++ Medianno/en.lproj/MADocument.xib | 133 ++++++++++--- Medianno/en.lproj/MAMovie.xib | 300 +++++++++++++++++++++++++++++ Medianno/en.lproj/MainMenu.xib | 62 +++++- 10 files changed, 643 insertions(+), 55 deletions(-) create mode 100644 Medianno/MAMovieWindow.h create mode 100644 Medianno/MAMovieWindow.m create mode 100644 Medianno/en.lproj/MAMovie.xib diff --git a/Medianno.xcodeproj/project.pbxproj b/Medianno.xcodeproj/project.pbxproj index a7b576c..8d297f9 100644 --- a/Medianno.xcodeproj/project.pbxproj +++ b/Medianno.xcodeproj/project.pbxproj @@ -30,6 +30,8 @@ 95BCFA2E13F8A3AD000F650F /* MAShortenQTTime.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95BCFA2D13F8A3AD000F650F /* MAShortenQTTime.mm */; }; 95C534E013F732A200A07932 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 95C534DE13F732A200A07932 /* Localizable.strings */; }; 95CA841113FC149B00AE5AC4 /* MATokenFieldCell.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CA841013FC149B00AE5AC4 /* MATokenFieldCell.mm */; }; + 95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */; }; + 95E2028113FE9C6C00369B31 /* MAMovie.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95E2027F13FE9C6C00369B31 /* MAMovie.xib */; }; 95E8C26713FD72D2004E9839 /* MAColorForURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */; }; /* End PBXBuildFile section */ @@ -70,6 +72,9 @@ 95C534DF13F732A200A07932 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 95CA840F13FC149B00AE5AC4 /* MATokenFieldCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MATokenFieldCell.h; sourceTree = ""; }; 95CA841013FC149B00AE5AC4 /* MATokenFieldCell.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MATokenFieldCell.mm; sourceTree = ""; }; + 95E2027B13FE9BF500369B31 /* MAMovieWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAMovieWindow.h; sourceTree = ""; }; + 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MAMovieWindow.m; sourceTree = ""; }; + 95E2028013FE9C6C00369B31 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MAMovie.xib; sourceTree = ""; }; 95E8C26513FD72D2004E9839 /* MAColorForURL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAColorForURL.h; sourceTree = ""; }; 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MAColorForURL.mm; sourceTree = ""; }; /* End PBXFileReference section */ @@ -147,6 +152,7 @@ 950BB67F13F1F26200D8E669 /* MADocument.xib */, 950BB7A513F467A400D8E669 /* MAAddMedia.xib */, 950BB68213F1F26200D8E669 /* MainMenu.xib */, + 95E2027F13FE9C6C00369B31 /* MAMovie.xib */, ); name = Resources; path = ..; @@ -185,6 +191,8 @@ 95BCFA2D13F8A3AD000F650F /* MAShortenQTTime.mm */, 95E8C26513FD72D2004E9839 /* MAColorForURL.h */, 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */, + 95E2027B13FE9BF500369B31 /* MAMovieWindow.h */, + 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */, ); name = Classes; sourceTree = ""; @@ -248,6 +256,7 @@ 95C534E013F732A200A07932 /* Localizable.strings in Resources */, 95BCFA2113F76A04000F650F /* app.icns in Resources */, 95BCFA2213F76A04000F650F /* doc.icns in Resources */, + 95E2028113FE9C6C00369B31 /* MAMovie.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -271,6 +280,7 @@ 95BCFA2E13F8A3AD000F650F /* MAShortenQTTime.mm in Sources */, 95CA841113FC149B00AE5AC4 /* MATokenFieldCell.mm in Sources */, 95E8C26713FD72D2004E9839 /* MAColorForURL.mm in Sources */, + 95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -328,6 +338,14 @@ name = Localizable.strings; sourceTree = ""; }; + 95E2027F13FE9C6C00369B31 /* MAMovie.xib */ = { + isa = PBXVariantGroup; + children = ( + 95E2028013FE9C6C00369B31 /* en */, + ); + name = MAMovie.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ diff --git a/Medianno/MADocWindow.h b/Medianno/MADocWindow.h index 23baadb..64562f4 100644 --- a/Medianno/MADocWindow.h +++ b/Medianno/MADocWindow.h @@ -7,14 +7,19 @@ // #import +#import -@interface MADocWindow : NSWindowController { +@class MAMovieWindow; + +@interface MADocWindow : NSWindowController { IBOutlet NSArrayController* mediaController; IBOutlet NSArrayController* annotationController; IBOutlet QTMovieView * movieView; IBOutlet NSTableView * mediaTable; IBOutlet NSTableView * annotationTable; IBOutlet NSView * textExportAccessoryView; + IBOutlet MAMovieWindow * moviePanel; + QTMovie * currentMovie; QTTime lastMovieTime; } @@ -30,6 +35,7 @@ - (IBAction)mediaSkipBackward:(id)sender; - (IBAction)mediaSkipForward:(id)sender; - (IBAction)toggleMediaPlay:(id)sender; +- (IBAction)toggleMoviePanel:(id)sender; - (QTTime)currentMovieTime; @end diff --git a/Medianno/MADocWindow.mm b/Medianno/MADocWindow.mm index ec0eaf9..e7859c9 100644 --- a/Medianno/MADocWindow.mm +++ b/Medianno/MADocWindow.mm @@ -15,6 +15,9 @@ #import "MAAnno.h" #import "MATag.h" #import "MATagDescription.h" +#import "MAMovieWindow.h" + +static const char * kMADocWindowObserver = "MADocWindowObserver"; @implementation MADocWindow @@ -35,18 +38,39 @@ [mediaController setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]]; [annotationController setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"location" ascending:YES]]]; [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateMovieTime:) userInfo:nil repeats:YES]; + [mediaController addObserver:self forKeyPath:@"selection.media" options:0 context:&kMADocWindowObserver]; + [moviePanel addObserver:self forKeyPath:@"showMovieInPanel" options:0 context:&kMADocWindowObserver]; +} + +- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context +{ + if (context == &kMADocWindowObserver) { + if (object == mediaController) { + // + // Current movie changed + // + MAMedia * currentMedia = [mediaController selection]; + currentMovie = [[QTMovie alloc] initWithFile:[currentMedia valueForKey:@"media"] error:nil]; + } + [moviePanel setMovie:currentMovie]; + } +} + +- (void)windowDidBecomeMain:(NSNotification *)notification +{ + [moviePanel setMainWindowIsFront:YES]; +} + +- (void)windowDidResignMain:(NSNotification *)notification +{ + [moviePanel setMainWindowIsFront:NO]; } #pragma mark Media management -- (QTMovie *)currentMovie -{ - return [movieView movie]; -} - - (QTTime)currentMovieTime { - return [[movieView movie] currentTime]; + return [currentMovie currentTime]; } - (void)updateMovieTime:(NSTimer *)timer @@ -111,7 +135,6 @@ - (void)exportMediaToURL:(NSURL *)url { - QTMovie * currentMovie = [self currentMovie]; NSIndexSet * selection = [annotationController selectionIndexes]; NSArray * annotations = [annotationController arrangedObjects]; // @@ -161,7 +184,6 @@ - (IBAction)exportMedia:(id)sender { - QTMovie * currentMovie = [self currentMovie]; NSSavePanel * savePanel = [NSSavePanel savePanel]; NSDictionary *attrs = [currentMovie movieAttributes]; BOOL hasVideo = [[attrs objectForKey:QTMovieHasVideoAttribute] boolValue]; @@ -195,10 +217,15 @@ - (IBAction)toggleMediaPlay:(id)sender { - if ([[self currentMovie] rate] > 0.0f) - [movieView pause:sender]; + if ([currentMovie rate] > 0.0f) + [currentMovie stop]; else - [movieView play:sender]; + [currentMovie play]; +} + +- (IBAction)toggleMoviePanel:(id)sender +{ + [moviePanel setMoviePanelEnabled:![moviePanel moviePanelEnabled]]; } - (BOOL)validateUserInterfaceItem:(id )item @@ -208,10 +235,15 @@ || [item action] == @selector(importText:) ) return YES; - + + NSMenuItem * menuItem = (NSMenuItem *)item; + if ([item action] == @selector(toggleMoviePanel:)) { + [menuItem setState:[moviePanel moviePanelEnabled]]; + + return YES; + } if ([item action] == @selector(toggleMediaPlay:)) { - NSMenuItem * menuItem = (NSMenuItem *)item; - if ([[self currentMovie] rate] > 0.0f) + if ([currentMovie rate] > 0.0f) [menuItem setTitle:NSLocalizedString(@"Pause", @"Pause playback")]; else [menuItem setTitle:NSLocalizedString(@"Play", @"Start playback")]; @@ -230,7 +262,6 @@ static NSTimeInterval sLastSkip = 0.0; - (void)skipTimeInterval { - QTMovie * currentMovie = [self currentMovie]; QTTime interval = QTMakeTimeWithTimeInterval(abs(sLastSkip)); QTTime current = [currentMovie currentTime]; if (sLastSkip > 0) @@ -301,13 +332,13 @@ static NSTimeInterval sLastSkip = 0.0; NSArray * selection = [annotationController selectedObjects]; if ([selection count]) if (MAAnno * firstSelectedAnno = [selection objectAtIndex:0]) - [[self currentMovie] setCurrentTime:[firstSelectedAnno qtLocation]]; + [currentMovie setCurrentTime:[firstSelectedAnno qtLocation]]; } - (IBAction)addAnnotation:(id)sender { [movieView pause:sender]; - QTTime location = [[self currentMovie] currentTime]; + QTTime location = [self currentMovieTime]; MAAnno * anno = [[self document] addAnnotationForMedia:[[mediaController selectedObjects] objectAtIndex:0] location:location]; [annotationController setSelectedObjects:[NSArray arrayWithObject:anno]]; [annotationTable editColumn:[annotationTable columnWithIdentifier:@"tags"] diff --git a/Medianno/MAMedia.h b/Medianno/MAMedia.h index e3c7b6f..2b0db1b 100644 --- a/Medianno/MAMedia.h +++ b/Medianno/MAMedia.h @@ -14,6 +14,7 @@ @interface MAMedia : NSManagedObject { @private + QTMovie * cachedMovie; } @property (nonatomic, retain) NSString * media; @property (nonatomic, retain) NSString * name; @@ -22,9 +23,6 @@ @property (nonatomic, retain) NSSet *annotations; @property (nonatomic) int64_t size; -- (QTMovie *)movie; -+ (NSSet *)keyPathsForValuesAffectingMovie; - @end @interface MAMedia (CoreDataGeneratedAccessors) diff --git a/Medianno/MAMedia.mm b/Medianno/MAMedia.mm index 7a7f527..e8a18b4 100644 --- a/Medianno/MAMedia.mm +++ b/Medianno/MAMedia.mm @@ -16,14 +16,4 @@ @dynamic annotations; @dynamic size; -+ (NSSet *)keyPathsForValuesAffectingMovie -{ - return [NSSet setWithObject:@"media"]; -} - -- (QTMovie *)movie -{ - return [QTMovie movieWithFile:self.media error:nil]; -} - @end diff --git a/Medianno/MAMovieWindow.h b/Medianno/MAMovieWindow.h new file mode 100644 index 0000000..f53d1f7 --- /dev/null +++ b/Medianno/MAMovieWindow.h @@ -0,0 +1,29 @@ +// +// MAMovieWindow.h +// Medianno +// +// Created by Matthias Neeracher on 8/19/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import +#import + +@interface MAMovieWindow : NSWindowController { + IBOutlet NSWindow * mainWindow; + IBOutlet QTMovieView * mainMovieView; + IBOutlet QTMovieView * panelMovieView; +} + +@property BOOL mainWindowIsFront, moviePanelEnabled; + +- (BOOL)showMovieInPanel; ++ (NSSet *)keyPathsForValuesAffectingShowMovieInPanel; +- (void)setMovie:(QTMovie *)movie; + +@end + +@interface MAMovieWin : NSPanel { +} + +@end diff --git a/Medianno/MAMovieWindow.m b/Medianno/MAMovieWindow.m new file mode 100644 index 0000000..202451b --- /dev/null +++ b/Medianno/MAMovieWindow.m @@ -0,0 +1,69 @@ +// +// MAMovieWindow.m +// Medianno +// +// Created by Matthias Neeracher on 8/19/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import "MAMovieWindow.h" + +@implementation MAMovieWindow + +@synthesize moviePanelEnabled, mainWindowIsFront; + +- (id)init +{ + self = [super initWithWindowNibName:@"MAMovie"]; + + return self; +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; +} + +- (void)setMoviePanelEnabled:(BOOL)enabled +{ + if ((self->moviePanelEnabled = enabled)) + [self loadWindow]; + + [self setMainWindowIsFront:[mainWindow isMainWindow]]; +} + +- (BOOL)showMovieInPanel +{ + return moviePanelEnabled && mainWindowIsFront; +} + +- (void)setShowMovieInPanel:(BOOL)showIt +{ + moviePanelEnabled = showIt; +} + ++ (NSSet *)keyPathsForValuesAffectingShowMovieInPanel +{ + return [NSSet setWithObjects:@"moviePanelEnabled", @"mainWindowIsFront", nil]; +} + +- (void)setMovie:(QTMovie *)movie +{ + if ([self showMovieInPanel]) { + [panelMovieView setMovie:movie]; + [mainMovieView setMovie:nil]; + } else { + [mainMovieView setMovie:movie]; + [panelMovieView setMovie:nil]; + } +} +@end + +@implementation MAMovieWin + +- (BOOL)canBecomeKeyWindow +{ + return NO; +} + +@end \ No newline at end of file diff --git a/Medianno/en.lproj/MADocument.xib b/Medianno/en.lproj/MADocument.xib index bc00196..e5db017 100644 --- a/Medianno/en.lproj/MADocument.xib +++ b/Medianno/en.lproj/MADocument.xib @@ -376,9 +376,12 @@ _NS:46 - + + 1 + MSAxIDEgMAA + - + @@ -693,7 +696,7 @@ YES - + 34 YES @@ -737,7 +740,6 @@ 268 {{16, 20}, {98, 18}} - _NS:239 YES @@ -765,7 +767,6 @@ {166, 65} - _NS:630 {0, 0} @@ -786,6 +787,9 @@ 0 NO + + MAMovieWindow + @@ -858,22 +862,6 @@ 100093 - - - movie: selection.movie - - - - - - movie: selection.movie - movie - selection.movie - 2 - - - 100104 - contentSet: selection.annotations @@ -1347,6 +1335,38 @@ 100248 + + + moviePanel + + + + 100250 + + + + mainWindow + + + + 100252 + + + + mediaController + + + + 100255 + + + + mainMovieView + + + + 100260 + @@ -1735,6 +1755,12 @@ + + 100249 + + + Movie Panel + @@ -1799,6 +1825,7 @@ 100237.IBPluginDependency 100238.IBPluginDependency 100239.IBPluginDependency + 100249.IBPluginDependency 5.IBNSWindowAutoPositionCentersHorizontal 5.IBNSWindowAutoPositionCentersVertical 5.IBPluginDependency @@ -1874,6 +1901,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -1893,7 +1921,7 @@ - 100248 + 100260 @@ -1913,6 +1941,7 @@ mediaSkipBackward: mediaSkipForward: toggleMediaPlay: + toggleMoviePanel: YES @@ -1924,6 +1953,7 @@ id id id + id @@ -1938,6 +1968,7 @@ mediaSkipBackward: mediaSkipForward: toggleMediaPlay: + toggleMoviePanel: YES @@ -1973,6 +2004,10 @@ toggleMediaPlay: id + + toggleMoviePanel: + id + @@ -1983,6 +2018,7 @@ annotationTable mediaController mediaTable + moviePanel movieView textExportAccessoryView @@ -1992,6 +2028,7 @@ NSTableView NSArrayController NSTableView + MAMovieWindow QTMovieView NSView @@ -2004,6 +2041,7 @@ annotationTable mediaController mediaTable + moviePanel movieView textExportAccessoryView @@ -2025,6 +2063,10 @@ mediaTable NSTableView + + moviePanel + MAMovieWindow + movieView QTMovieView @@ -2048,6 +2090,53 @@ ./Classes/MADocumentWindow.h + + MAMovieWindow + NSWindowController + + YES + + YES + mainMovieView + mainWindow + panelMovieView + + + YES + QTMovieView + NSWindow + QTMovieView + + + + YES + + YES + mainMovieView + mainWindow + panelMovieView + + + YES + + mainMovieView + QTMovieView + + + mainWindow + NSWindow + + + panelMovieView + QTMovieView + + + + + IBProjectSource + ./Classes/MAMovieWindow.h + + MATokenFieldCell NSTokenFieldCell diff --git a/Medianno/en.lproj/MAMovie.xib b/Medianno/en.lproj/MAMovie.xib new file mode 100644 index 0000000..cae23af --- /dev/null +++ b/Medianno/en.lproj/MAMovie.xib @@ -0,0 +1,300 @@ + + + + 1070 + 11B26 + 1617 + 1138 + 566.00 + + YES + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.QTKitIBPlugin + + + YES + 1617 + 518 + + + + YES + NSWindowTemplate + NSView + QTMovieView + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.QTKitIBPlugin + + + YES + + YES + + + + + YES + + MAMovieWindow + + + FirstResponder + + + NSApplication + + + 95 + 2 + {{272, 172}, {640, 496}} + -1535638528 + Window + MAMovieWin + + + + + 256 + + YES + + + 274 + + YES + + YES + Apple URL pasteboard type + CorePasteboardFlavorType 0x6D6F6F76 + NSFilenamesPboardType + QTMoviePasteboardType + + + {640, 496} + + + + _NS:46 + + 3 + MAA + + + + + + + + {640, 496} + + + + _NS:2837 + + {{0, 0}, {2560, 1418}} + {10000000000000, 10000000000000} + YES + + + + + YES + + + window + + + + 5 + + + + visible: showMovieInPanel + + + + + + visible: showMovieInPanel + visible + showMovieInPanel + 2 + + + 9 + + + + panelMovieView + + + + 12 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 3 + + + YES + + + + + + 4 + + + YES + + + + + + 6 + + + Movie View + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 3.IBPluginDependency + 3.NSWindowTemplate.visibleAtLaunch + 4.IBPluginDependency + 6.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.QTKitIBPlugin + + + + YES + + + + + + YES + + + + + 12 + + + + YES + + MAMovieWin + NSPanel + + IBProjectSource + ./Classes/MAMovieWin.h + + + + MAMovieWindow + NSWindowController + + YES + + YES + mainMovieView + mainWindow + panelMovieView + + + YES + QTMovieView + NSWindow + QTMovieView + + + + YES + + YES + mainMovieView + mainWindow + panelMovieView + + + YES + + mainMovieView + QTMovieView + + + mainWindow + NSWindow + + + panelMovieView + QTMovieView + + + + + IBProjectSource + ./Classes/MAMovieWindow.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + diff --git a/Medianno/en.lproj/MainMenu.xib b/Medianno/en.lproj/MainMenu.xib index 362b37d..767816e 100644 --- a/Medianno/en.lproj/MainMenu.xib +++ b/Medianno/en.lproj/MainMenu.xib @@ -889,6 +889,15 @@ + + + Movie Panel + m + 262144 + 2147483647 + + + Bring All to Front @@ -1396,6 +1405,14 @@ 598 + + + toggleMoviePanel: + + + + 601 + @@ -1433,9 +1450,9 @@ - + @@ -1811,6 +1828,7 @@ + @@ -2112,6 +2130,11 @@ + + 600 + + + @@ -2211,6 +2234,7 @@ 590.IBPluginDependency 593.IBPluginDependency 596.IBPluginDependency + 600.IBPluginDependency 72.IBPluginDependency 73.IBPluginDependency 74.IBPluginDependency @@ -2329,6 +2353,7 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2343,7 +2368,7 @@ - 598 + 601 @@ -2389,6 +2414,7 @@ mediaSkipBackward: mediaSkipForward: toggleMediaPlay: + toggleMoviePanel: YES @@ -2400,6 +2426,7 @@ id id id + id @@ -2414,6 +2441,7 @@ mediaSkipBackward: mediaSkipForward: toggleMediaPlay: + toggleMoviePanel: YES @@ -2449,6 +2477,10 @@ toggleMediaPlay: id + + toggleMoviePanel: + id + @@ -2459,6 +2491,7 @@ annotationTable mediaController mediaTable + moviePanel movieView textExportAccessoryView @@ -2468,6 +2501,7 @@ NSTableView NSArrayController NSTableView + MAMovieWindow QTMovieView NSView @@ -2480,6 +2514,7 @@ annotationTable mediaController mediaTable + moviePanel movieView textExportAccessoryView @@ -2501,6 +2536,10 @@ mediaTable NSTableView + + moviePanel + MAMovieWindow + movieView QTMovieView @@ -2516,6 +2555,25 @@ ./Classes/MADocWindow.h + + MAMovieWindow + NSWindowController + + mainMovieView + QTMovieView + + + mainMovieView + + mainMovieView + QTMovieView + + + + IBProjectSource + ./Classes/MAMovieWindow.h + + 0