From 54cf82b9c64a597b5277c1215129f9eadc087738 Mon Sep 17 00:00:00 2001 From: Matthias Neeracher Date: Sun, 21 Aug 2011 00:20:38 +0200 Subject: [PATCH] Implement Tag (Annotation) panel --- Medianno.xcodeproj/project.pbxproj | 24 ++ Medianno/MAAnno.mm | 60 ++- Medianno/MAAppController.h | 8 +- Medianno/MAAppController.mm | 2 +- Medianno/MAColorForTag.h | 13 + Medianno/MAColorForTag.mm | 32 ++ Medianno/MADocWindow.mm | 12 + Medianno/MATagDescription.mm | 10 + Medianno/MATagWindow.h | 18 + Medianno/MATagWindow.mm | 38 ++ Medianno/en.lproj/MAMovie.xib | 11 +- Medianno/en.lproj/MATag.xib | 602 +++++++++++++++++++++++++++++ Medianno/en.lproj/MainMenu.xib | 98 ++++- 13 files changed, 911 insertions(+), 17 deletions(-) create mode 100644 Medianno/MAColorForTag.h create mode 100644 Medianno/MAColorForTag.mm create mode 100644 Medianno/MATagWindow.h create mode 100644 Medianno/MATagWindow.mm create mode 100644 Medianno/en.lproj/MATag.xib diff --git a/Medianno.xcodeproj/project.pbxproj b/Medianno.xcodeproj/project.pbxproj index 8d297f9..8448ee2 100644 --- a/Medianno.xcodeproj/project.pbxproj +++ b/Medianno.xcodeproj/project.pbxproj @@ -30,6 +30,9 @@ 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 */; }; + 95CB69711400112A005A0346 /* MATagWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB69701400112A005A0346 /* MATagWindow.mm */; }; + 95CB6975140012FE005A0346 /* MATag.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95CB6973140012FE005A0346 /* MATag.xib */; }; + 95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB697714001F26005A0346 /* MAColorForTag.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 */; }; @@ -72,6 +75,11 @@ 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 = ""; }; + 95CB696F1400112A005A0346 /* MATagWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MATagWindow.h; sourceTree = ""; }; + 95CB69701400112A005A0346 /* MATagWindow.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MATagWindow.mm; sourceTree = ""; }; + 95CB6974140012FE005A0346 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MATag.xib; sourceTree = ""; }; + 95CB697614001F26005A0346 /* MAColorForTag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAColorForTag.h; sourceTree = ""; }; + 95CB697714001F26005A0346 /* MAColorForTag.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MAColorForTag.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 = ""; }; @@ -153,6 +161,7 @@ 950BB7A513F467A400D8E669 /* MAAddMedia.xib */, 950BB68213F1F26200D8E669 /* MainMenu.xib */, 95E2027F13FE9C6C00369B31 /* MAMovie.xib */, + 95CB6973140012FE005A0346 /* MATag.xib */, ); name = Resources; path = ..; @@ -187,10 +196,14 @@ 950BB7AC13F46ECF00D8E669 /* MAAppController.mm */, 950BB78413F2D95500D8E669 /* MADocWindow.h */, 950BB78513F2D95500D8E669 /* MADocWindow.mm */, + 95CB696F1400112A005A0346 /* MATagWindow.h */, + 95CB69701400112A005A0346 /* MATagWindow.mm */, 95BCFA2C13F8A3AD000F650F /* MAShortenQTTime.h */, 95BCFA2D13F8A3AD000F650F /* MAShortenQTTime.mm */, 95E8C26513FD72D2004E9839 /* MAColorForURL.h */, 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */, + 95CB697614001F26005A0346 /* MAColorForTag.h */, + 95CB697714001F26005A0346 /* MAColorForTag.mm */, 95E2027B13FE9BF500369B31 /* MAMovieWindow.h */, 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */, ); @@ -257,6 +270,7 @@ 95BCFA2113F76A04000F650F /* app.icns in Resources */, 95BCFA2213F76A04000F650F /* doc.icns in Resources */, 95E2028113FE9C6C00369B31 /* MAMovie.xib in Resources */, + 95CB6975140012FE005A0346 /* MATag.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -281,6 +295,8 @@ 95CA841113FC149B00AE5AC4 /* MATokenFieldCell.mm in Sources */, 95E8C26713FD72D2004E9839 /* MAColorForURL.mm in Sources */, 95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */, + 95CB69711400112A005A0346 /* MATagWindow.mm in Sources */, + 95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -338,6 +354,14 @@ name = Localizable.strings; sourceTree = ""; }; + 95CB6973140012FE005A0346 /* MATag.xib */ = { + isa = PBXVariantGroup; + children = ( + 95CB6974140012FE005A0346 /* en */, + ); + name = MATag.xib; + sourceTree = ""; + }; 95E2027F13FE9C6C00369B31 /* MAMovie.xib */ = { isa = PBXVariantGroup; children = ( diff --git a/Medianno/MAAnno.mm b/Medianno/MAAnno.mm index 0383d31..4d9894e 100644 --- a/Medianno/MAAnno.mm +++ b/Medianno/MAAnno.mm @@ -12,6 +12,62 @@ #import +// +// Due to a bug in NSTokenField bindings, key value changes in tag descriptions don't +// propagate properly, because the token arrays are compared, rather than their display strings. +// our solution is to wrap the token arrays in a proxy class that will only compare equal by +// identity, never by structure. +// +@interface MANotAnArray : NSProxy { + NSArray * contents; +} + +- (id)initWithArray:(NSArray *)array; ++ (id)arrayWithArray:(NSArray *)array; +- (void)forwardInvocation:(NSInvocation *)invocation; + +@end + +@implementation MANotAnArray + +- (id)initWithArray:(NSArray *)array +{ + contents = [array retain]; + + return self; +} + +- (void)dealloc +{ + [contents release]; +} + ++ (id)arrayWithArray:(NSArray *)array +{ + return [[[MANotAnArray alloc] initWithArray:array] autorelease]; +} + +- (BOOL)isEqual:(id)object +{ + // + // This is the only purpose of this class + // + return self==object; +} + +- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel +{ + return [contents methodSignatureForSelector:sel]; +} + +- (void)forwardInvocation:(NSInvocation *)invocation +{ + [invocation setTarget:contents]; + [invocation invoke]; +} + +@end + @implementation MAAnno @dynamic location; @dynamic notes; @@ -30,8 +86,8 @@ for (MATag * tag in tags) descs[[tag seqNo]] = [tag tag]; - return [NSArray arrayWithObjects:&descs[0] count:descs.size()]; -} + return [MANotAnArray arrayWithArray:[NSArray arrayWithObjects:&descs[0] count:descs.size()]]; + } - (void)setTagDescriptions:(NSArray *)tagDescriptions { diff --git a/Medianno/MAAppController.h b/Medianno/MAAppController.h index 367bb5f..0e36201 100644 --- a/Medianno/MAAppController.h +++ b/Medianno/MAAppController.h @@ -7,7 +7,10 @@ // #import -#import "MAMovieWindow.h" + + +@class MAMovieWindow; +@class MATagWindow; typedef void (^MASheetBlock)(NSInteger returnCode); @@ -20,6 +23,7 @@ typedef void (^MASheetBlock)(NSInteger returnCode); @interface MAAppController : NSObject { } -@property (assign) IBOutlet MAMovieWindow * moviePanel; +@property (assign) IBOutlet MAMovieWindow * moviePanel; +@property (assign) IBOutlet MATagWindow * tagPanel; @end diff --git a/Medianno/MAAppController.mm b/Medianno/MAAppController.mm index 3141814..10f3d86 100644 --- a/Medianno/MAAppController.mm +++ b/Medianno/MAAppController.mm @@ -10,7 +10,7 @@ @implementation MAAppController -@synthesize moviePanel; +@synthesize moviePanel, tagPanel; - (void)applicationDidFinishLaunching:(NSNotification *)notification { diff --git a/Medianno/MAColorForTag.h b/Medianno/MAColorForTag.h new file mode 100644 index 0000000..94bc99d --- /dev/null +++ b/Medianno/MAColorForTag.h @@ -0,0 +1,13 @@ +// +// MAColorForTag.h +// Medianno +// +// Created by Matthias Neeracher on 8/20/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import + +@interface MAColorForTag : NSValueTransformer + +@end diff --git a/Medianno/MAColorForTag.mm b/Medianno/MAColorForTag.mm new file mode 100644 index 0000000..7df16a5 --- /dev/null +++ b/Medianno/MAColorForTag.mm @@ -0,0 +1,32 @@ +// +// MAColorForTag.mm +// Medianno +// +// Created by Matthias Neeracher on 8/20/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import "MAColorForTag.h" +#import "MATagDescription.h" + +@implementation MAColorForTag + ++ (Class)transformedValueClass +{ + return [NSColor class]; +} + ++ (BOOL)allowsReverseTransformation +{ + return NO; +} + +- (id)transformedValue:(id)value +{ + if ([[value uses] count] > 0) + return [NSColor blackColor]; + else + return [NSColor lightGrayColor]; +} + +@end diff --git a/Medianno/MADocWindow.mm b/Medianno/MADocWindow.mm index 43a2d57..276c5a0 100644 --- a/Medianno/MADocWindow.mm +++ b/Medianno/MADocWindow.mm @@ -16,6 +16,7 @@ #import "MATag.h" #import "MATagDescription.h" #import "MAMovieWindow.h" +#import "MATagWindow.h" #import "MAAppController.h" static const char * kMADocWindowObserver = "MADocWindowObserver"; @@ -44,11 +45,20 @@ static const char * kMADocWindowObserver = "MADocWindowObserver"; [mediaController addObserver:self forKeyPath:@"selection.name" options:0 context:&kMADocWindowObserver]; } +- (void)dealloc +{ +} + - (MAMovieWindow *)moviePanel { return [[NSApp delegate] moviePanel]; } +- (MATagWindow *)tagPanel +{ + return [[NSApp delegate] tagPanel]; +} + - (void)moviePanelDidAppear { [movieView setMovie:nil]; @@ -59,6 +69,7 @@ static const char * kMADocWindowObserver = "MADocWindowObserver"; - (void)windowDidBecomeMain:(NSNotification *)notification { [self moviePanelDidAppear]; + [[self tagPanel] setCurrentDocument:[self document]]; } - (void)moviePanelDidClose @@ -70,6 +81,7 @@ static const char * kMADocWindowObserver = "MADocWindowObserver"; - (void)windowDidResignMain:(NSNotification *)notification { [self moviePanelDidClose]; + [[self tagPanel] setCurrentDocument:[[NSDocumentController sharedDocumentController] currentDocument]]; } - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context diff --git a/Medianno/MATagDescription.mm b/Medianno/MATagDescription.mm index 24daad8..ed47b9b 100644 --- a/Medianno/MATagDescription.mm +++ b/Medianno/MATagDescription.mm @@ -20,4 +20,14 @@ return [NSString stringWithFormat:@"%@\t%@", self.name, self.notes]; } +- (void)setName:(NSString *)name +{ + [self willChangeValueForKey:@"name"]; + for (MATag * tag in self.uses) + [tag.annotation willChangeValueForKey:@"tags"]; + [self setPrimitiveValue:name forKey:@"name"]; + for (MATag * tag in self.uses) + [tag.annotation didChangeValueForKey:@"tags"]; + [self didChangeValueForKey:@"name"]; +} @end diff --git a/Medianno/MATagWindow.h b/Medianno/MATagWindow.h new file mode 100644 index 0000000..3a9fec4 --- /dev/null +++ b/Medianno/MATagWindow.h @@ -0,0 +1,18 @@ +// +// MATagWindow.h +// Medianno +// +// Created by Matthias Neeracher on 8/20/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import + +@interface MATagWindow : NSWindowController { +} + +@property (assign) NSDocument * currentDocument; + +- (IBAction)toggleWindow:(id)sender; + +@end diff --git a/Medianno/MATagWindow.mm b/Medianno/MATagWindow.mm new file mode 100644 index 0000000..d4c90e9 --- /dev/null +++ b/Medianno/MATagWindow.mm @@ -0,0 +1,38 @@ +// +// MATagWindow.mm +// Medianno +// +// Created by Matthias Neeracher on 8/20/11. +// Copyright 2011 Matthias Neeracher. All rights reserved. +// + +#import "MATagWindow.h" + +@implementation MATagWindow + +@synthesize currentDocument; + +- (id)init +{ + self = [super initWithWindowNibName:@"MATag"]; + + return self; +} + +- (void)windowDidLoad +{ + [super windowDidLoad]; + + // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file. +} + +- (IBAction)toggleWindow:(id)sender +{ + if ([self isWindowLoaded] && [[self window] isVisible]) { + [self close]; + } else { + [[self window] orderFront:sender]; + } +} + +@end diff --git a/Medianno/en.lproj/MAMovie.xib b/Medianno/en.lproj/MAMovie.xib index 641713b..eeb9582 100644 --- a/Medianno/en.lproj/MAMovie.xib +++ b/Medianno/en.lproj/MAMovie.xib @@ -52,8 +52,8 @@ 95 2 - {{272, 172}, {640, 496}} - -1535638528 + {{1887, 836}, {640, 496}} + -1540357120 Window MAMovieWin @@ -78,8 +78,6 @@ {640, 496} - - _NS:46 3 @@ -93,7 +91,6 @@ {640, 496} - _NS:2837 @@ -191,6 +188,8 @@ -1.IBPluginDependency -2.IBPluginDependency -3.IBPluginDependency + 3.IBNSWindowAutoPositionCentersHorizontal + 3.IBNSWindowAutoPositionCentersVertical 3.IBPluginDependency 3.NSWindowTemplate.visibleAtLaunch 4.IBPluginDependency @@ -201,6 +200,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin diff --git a/Medianno/en.lproj/MATag.xib b/Medianno/en.lproj/MATag.xib new file mode 100644 index 0000000..0ac6be5 --- /dev/null +++ b/Medianno/en.lproj/MATag.xib @@ -0,0 +1,602 @@ + + + + 1070 + 11B26 + 1617 + 1138 + 566.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1617 + + + YES + NSView + NSTableView + NSScrollView + NSWindowTemplate + NSArrayController + NSTextFieldCell + NSTableHeaderView + NSTableColumn + NSScroller + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + + + YES + + NSObject + + + FirstResponder + + + NSApplication + + + 31 + 2 + {{1636, 136}, {800, 450}} + -1538259968 + Window + NSPanel + + + {250, 100} + + + 256 + + YES + + + 274 + + YES + + + 2304 + + YES + + + 256 + {806, 432} + + + + _NS:1197 + YES + + + 256 + {806, 17} + + + + _NS:1199 + + + + + -2147483392 + {{224, 0}, {16, 17}} + _NS:1202 + + + YES + + 300 + 150 + 1000 + + 75628096 + 2048 + Name + + LucidaGrande + 11 + 3100 + + + 3 + MC4zMzMzMzI5ODU2AA + + + 6 + System + headerTextColor + + 3 + MAA + + + + + 337772096 + 2048 + Text Cell + + LucidaGrande + 13 + 1044 + + + + 6 + System + controlBackgroundColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + + + 3 + YES + YES + + + + 500 + 100 + 100000 + + 75628096 + 2048 + Notes + + + + + + 337772096 + 2048 + Text Cell + + + + + + 3 + YES + YES + + + + 3 + 2 + + 3 + MQA + + + 6 + System + gridColor + + 3 + MC41AA + + + 17 + -18841600 + + + 1 + 1 + 15 + 0 + YES + 0 + 1 + + + {{1, 17}, {798, 432}} + + + + _NS:1195 + + + 4 + + + + -2147483392 + {{224, 17}, {15, 102}} + + + + _NS:1214 + + _doScroller: + 37 + 0.1947367936372757 + + + + 256 + {{1, 434}, {798, 15}} + + + + _NS:1216 + YES + 1 + + _doScroller: + 0.99007444168734493 + + + + 2304 + + YES + + + {{1, 0}, {798, 17}} + + + + _NS:1200 + + + 4 + + + {800, 450} + + + + _NS:1193 + 133810 + + + + + QSAAAEEgAABBmAAAQZgAAA + + + {800, 450} + + + + _NS:2837 + + {{0, 0}, {2560, 1418}} + {250, 116} + {10000000000000, 10000000000000} + YES + + + YES + YES + + MATagDescription + + YES + YES + YES + YES + YES + + + + + YES + + + value: arrangedObjects.name + + + + + + value: arrangedObjects.name + value + arrangedObjects.name + 2 + + + 16 + + + + value: arrangedObjects.notes + + + + + + value: arrangedObjects.notes + value + arrangedObjects.notes + 2 + + + 18 + + + + displayPatternTitle1: currentDocument.displayName + + + + + + displayPatternTitle1: currentDocument.displayName + displayPatternTitle1 + currentDocument.displayName + + NSDisplayPattern + Annotations for %{title1}@ + + 2 + + + 31 + + + + managedObjectContext: currentDocument.managedObjectContext + + + + + + managedObjectContext: currentDocument.managedObjectContext + managedObjectContext + currentDocument.managedObjectContext + 2 + + + 32 + + + + textColor: arrangedObjects.self + + + + + + textColor: arrangedObjects.self + textColor + arrangedObjects.self + + NSValueTransformerName + MAColorForTag + + 2 + + + 34 + + + + textColor: arrangedObjects.self + + + + + + textColor: arrangedObjects.self + textColor + arrangedObjects.self + + NSValueTransformerName + MAColorForTag + + 2 + + + 37 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 3 + + + YES + + + + + + 4 + + + YES + + + + + + 5 + + + TagController + + + 7 + + + YES + + + + + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + YES + + + + + + + 12 + + + YES + + + + + + 13 + + + YES + + + + + + 14 + + + + + 15 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 10.IBPluginDependency + 11.IBPluginDependency + 12.IBPluginDependency + 13.IBPluginDependency + 14.IBPluginDependency + 15.IBPluginDependency + 3.IBNSWindowAutoPositionCentersHorizontal + 3.IBNSWindowAutoPositionCentersVertical + 3.IBPluginDependency + 3.NSWindowTemplate.visibleAtLaunch + 4.IBPluginDependency + 5.IBPluginDependency + 7.IBPluginDependency + 8.IBPluginDependency + 9.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 37 + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + diff --git a/Medianno/en.lproj/MainMenu.xib b/Medianno/en.lproj/MainMenu.xib index 2dec51c..23145ae 100644 --- a/Medianno/en.lproj/MainMenu.xib +++ b/Medianno/en.lproj/MainMenu.xib @@ -898,6 +898,15 @@ + + + Annotation Panel + t + 262144 + 2147483647 + + + Bring All to Front @@ -948,6 +957,9 @@ MAMovieWindow + + MATagWindow + @@ -1424,6 +1436,22 @@ 610 + + + toggleWindow: + + + + 614 + + + + tagPanel + + + + 615 + @@ -1840,6 +1868,7 @@ + @@ -2152,6 +2181,17 @@ Movie Panel + + 611 + + + + + 613 + + + Tag Panel + @@ -2253,6 +2293,8 @@ 596.IBPluginDependency 600.IBPluginDependency 602.IBPluginDependency + 611.IBPluginDependency + 613.IBPluginDependency 72.IBPluginDependency 73.IBPluginDependency 74.IBPluginDependency @@ -2373,6 +2415,8 @@ com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin @@ -2387,7 +2431,7 @@ - 610 + 615 @@ -2414,14 +2458,35 @@ MAAppController NSObject - moviePanel - MAMovieWindow + YES + + YES + moviePanel + tagPanel + + + YES + MAMovieWindow + MATagWindow + - moviePanel - - moviePanel - MAMovieWindow + YES + + YES + moviePanel + tagPanel + + + YES + + moviePanel + MAMovieWindow + + + tagPanel + MATagWindow + @@ -2615,6 +2680,25 @@ ./Classes/MAMovieWindow.h + + MATagWindow + NSWindowController + + toggleWindow: + id + + + toggleWindow: + + toggleWindow: + id + + + + IBProjectSource + ./Classes/MATagWindow.h + + 0