Implement dragging out of tag window

This commit is contained in:
Matthias Neeracher 2011-08-21 15:51:43 +02:00
parent 54cf82b9c6
commit fa93720c12
8 changed files with 243 additions and 18 deletions

View File

@ -33,6 +33,7 @@
95CB69711400112A005A0346 /* MATagWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB69701400112A005A0346 /* MATagWindow.mm */; }; 95CB69711400112A005A0346 /* MATagWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB69701400112A005A0346 /* MATagWindow.mm */; };
95CB6975140012FE005A0346 /* MATag.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95CB6973140012FE005A0346 /* MATag.xib */; }; 95CB6975140012FE005A0346 /* MATag.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95CB6973140012FE005A0346 /* MATag.xib */; };
95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB697714001F26005A0346 /* MAColorForTag.mm */; }; 95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95CB697714001F26005A0346 /* MAColorForTag.mm */; };
95D8038B14012D7A000C0779 /* MADragging.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95D8038A14012D7A000C0779 /* MADragging.mm */; };
95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */; }; 95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */; };
95E2028113FE9C6C00369B31 /* MAMovie.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95E2027F13FE9C6C00369B31 /* MAMovie.xib */; }; 95E2028113FE9C6C00369B31 /* MAMovie.xib in Resources */ = {isa = PBXBuildFile; fileRef = 95E2027F13FE9C6C00369B31 /* MAMovie.xib */; };
95E8C26713FD72D2004E9839 /* MAColorForURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */; }; 95E8C26713FD72D2004E9839 /* MAColorForURL.mm in Sources */ = {isa = PBXBuildFile; fileRef = 95E8C26613FD72D2004E9839 /* MAColorForURL.mm */; };
@ -80,6 +81,8 @@
95CB6974140012FE005A0346 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MATag.xib; sourceTree = "<group>"; }; 95CB6974140012FE005A0346 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MATag.xib; sourceTree = "<group>"; };
95CB697614001F26005A0346 /* MAColorForTag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAColorForTag.h; sourceTree = "<group>"; }; 95CB697614001F26005A0346 /* MAColorForTag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAColorForTag.h; sourceTree = "<group>"; };
95CB697714001F26005A0346 /* MAColorForTag.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MAColorForTag.mm; sourceTree = "<group>"; }; 95CB697714001F26005A0346 /* MAColorForTag.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MAColorForTag.mm; sourceTree = "<group>"; };
95D8038914012D7A000C0779 /* MADragging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MADragging.h; sourceTree = "<group>"; };
95D8038A14012D7A000C0779 /* MADragging.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MADragging.mm; sourceTree = "<group>"; };
95E2027B13FE9BF500369B31 /* MAMovieWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAMovieWindow.h; sourceTree = "<group>"; }; 95E2027B13FE9BF500369B31 /* MAMovieWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MAMovieWindow.h; sourceTree = "<group>"; };
95E2027C13FE9BF500369B31 /* MAMovieWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MAMovieWindow.m; sourceTree = "<group>"; }; 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MAMovieWindow.m; sourceTree = "<group>"; };
95E2028013FE9C6C00369B31 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MAMovie.xib; sourceTree = "<group>"; }; 95E2028013FE9C6C00369B31 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = Medianno/en.lproj/MAMovie.xib; sourceTree = "<group>"; };
@ -206,6 +209,8 @@
95CB697714001F26005A0346 /* MAColorForTag.mm */, 95CB697714001F26005A0346 /* MAColorForTag.mm */,
95E2027B13FE9BF500369B31 /* MAMovieWindow.h */, 95E2027B13FE9BF500369B31 /* MAMovieWindow.h */,
95E2027C13FE9BF500369B31 /* MAMovieWindow.m */, 95E2027C13FE9BF500369B31 /* MAMovieWindow.m */,
95D8038914012D7A000C0779 /* MADragging.h */,
95D8038A14012D7A000C0779 /* MADragging.mm */,
); );
name = Classes; name = Classes;
sourceTree = "<group>"; sourceTree = "<group>";
@ -297,6 +302,7 @@
95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */, 95E2027D13FE9BF500369B31 /* MAMovieWindow.m in Sources */,
95CB69711400112A005A0346 /* MATagWindow.mm in Sources */, 95CB69711400112A005A0346 /* MATagWindow.mm in Sources */,
95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */, 95CB697814001F26005A0346 /* MAColorForTag.mm in Sources */,
95D8038B14012D7A000C0779 /* MADragging.mm in Sources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -18,6 +18,7 @@
#import "MAMovieWindow.h" #import "MAMovieWindow.h"
#import "MATagWindow.h" #import "MATagWindow.h"
#import "MAAppController.h" #import "MAAppController.h"
#import "MADragging.h"
static const char * kMADocWindowObserver = "MADocWindowObserver"; static const char * kMADocWindowObserver = "MADocWindowObserver";
@ -43,6 +44,7 @@ static const char * kMADocWindowObserver = "MADocWindowObserver";
[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateMovieTime:) userInfo:nil repeats:YES]; [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateMovieTime:) userInfo:nil repeats:YES];
[mediaController addObserver:self forKeyPath:@"selection.media" options:0 context:&kMADocWindowObserver]; [mediaController addObserver:self forKeyPath:@"selection.media" options:0 context:&kMADocWindowObserver];
[mediaController addObserver:self forKeyPath:@"selection.name" options:0 context:&kMADocWindowObserver]; [mediaController addObserver:self forKeyPath:@"selection.name" options:0 context:&kMADocWindowObserver];
[self registerOurDragTypes];
} }
- (void)dealloc - (void)dealloc

23
Medianno/MADragging.h Normal file
View File

@ -0,0 +1,23 @@
//
// MADragging.h
// Medianno
//
// Created by Matthias Neeracher on 8/21/11.
// Copyright 2011 Matthias Neeracher. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "MADocWindow.h"
#import "MATagWindow.h"
@interface MADocWindow (Dragging)
- (void)registerOurDragTypes;
@end
@interface MATagWindow (Dragging) <NSTableViewDataSource>
- (void)registerOurDragTypes;
@end

92
Medianno/MADragging.mm Normal file
View File

@ -0,0 +1,92 @@
//
// MADragging.mm
// Medianno
//
// Created by Matthias Neeracher on 8/21/11.
// Copyright 2011 Matthias Neeracher. All rights reserved.
//
#import "MADragging.h"
#import "MATagDescription.h"
#import "MAAnno.h"
#import "MAMedia.h"
#define kMADragType @"org.aereperennius.medianno"
@interface MAPasteboardData : NSObject <NSPasteboardWriting> {
NSArray * contents;
}
- (id)initWithArray:(NSArray *)array;
+ (id)pasteboardDataWithArray:(NSArray *)array;
@end
@implementation MAPasteboardData
- (id)initWithArray:(NSArray *)array
{
self = [super init];
contents = array;
return self;
}
+ (id)pasteboardDataWithArray:(NSArray *)array
{
return [[[MAPasteboardData alloc] initWithArray:array] autorelease];
}
- (NSArray *)writableTypesForPasteboard:(NSPasteboard *)pasteboard
{
return [NSArray arrayWithObjects:kMADragType, kUTTypeUTF8PlainText, nil];
}
- (NSPasteboardWritingOptions)writingOptionsForType:(NSString *)type pasteboard:(NSPasteboard *)pasteboard
{
return NSPasteboardWritingPromised;
}
- (id)pasteboardPropertyListForType:(NSString *)type
{
if ([type isEqual:kMADragType]) {
return contents;
} else if ([type isEqual:(NSString *)kUTTypeUTF8PlainText]) {
NSMutableString * stringBuffer = [NSMutableString string];
for (id obj in contents)
[stringBuffer appendFormat:@"%@\n", [obj exportText]];
return stringBuffer;
}
return nil;
}
@end
@implementation MADocWindow (Dragging)
- (void)registerOurDragTypes
{
}
@end
@implementation MATagWindow (Dragging)
- (void)registerOurDragTypes
{
[tagTable setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
[tagTable setVerticalMotionCanBeginDrag:NO];
[tagTable registerForDraggedTypes:
[NSArray arrayWithObjects:kMADragType, NSStringPboardType, nil]];
}
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
NSArray * objects = [[tagController arrangedObjects] objectsAtIndexes:rowIndexes];
[pboard clearContents];
[pboard writeObjects:[NSArray arrayWithObject:[MAPasteboardData pasteboardDataWithArray:objects]]];
return YES;
}
@end

View File

@ -9,6 +9,8 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
@interface MATagWindow : NSWindowController { @interface MATagWindow : NSWindowController {
IBOutlet NSTableView * tagTable;
IBOutlet NSArrayController *tagController;
} }
@property (assign) NSDocument * currentDocument; @property (assign) NSDocument * currentDocument;

View File

@ -7,6 +7,7 @@
// //
#import "MATagWindow.h" #import "MATagWindow.h"
#import "MADragging.h"
@implementation MATagWindow @implementation MATagWindow
@ -22,8 +23,7 @@
- (void)windowDidLoad - (void)windowDidLoad
{ {
[super windowDidLoad]; [super windowDidLoad];
[self registerOurDragTypes];
// Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
} }
- (IBAction)toggleWindow:(id)sender - (IBAction)toggleWindow:(id)sender

View File

@ -99,7 +99,7 @@
<string key="NSFrameSize">{1279, 183}</string> <string key="NSFrameSize">{1279, 183}</string>
<reference key="NSSuperview" ref="204692115"/> <reference key="NSSuperview" ref="204692115"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="502749411"/> <reference key="NSNextKeyView" ref="332479500"/>
<string key="NSReuseIdentifierKey">_NS:1197</string> <string key="NSReuseIdentifierKey">_NS:1197</string>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="117432108"> <object class="NSTableHeaderView" key="NSHeaderView" id="117432108">
@ -339,7 +339,7 @@
<string key="NSFrameSize">{1281, 201}</string> <string key="NSFrameSize">{1281, 201}</string>
<reference key="NSSuperview" ref="196617426"/> <reference key="NSSuperview" ref="196617426"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="204692115"/> <reference key="NSNextKeyView" ref="502749411"/>
<string key="NSReuseIdentifierKey">_NS:1193</string> <string key="NSReuseIdentifierKey">_NS:1193</string>
<int key="NSsFlags">133682</int> <int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="332479500"/> <reference key="NSVScroller" ref="332479500"/>
@ -401,7 +401,7 @@
<string key="NSFrameSize">{1278, 565}</string> <string key="NSFrameSize">{1278, 565}</string>
<reference key="NSSuperview" ref="51131752"/> <reference key="NSSuperview" ref="51131752"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="794153134"/> <reference key="NSNextKeyView" ref="742629842"/>
<string key="NSReuseIdentifierKey">_NS:1197</string> <string key="NSReuseIdentifierKey">_NS:1197</string>
<bool key="NSEnabled">YES</bool> <bool key="NSEnabled">YES</bool>
<object class="NSTableHeaderView" key="NSHeaderView" id="995480265"> <object class="NSTableHeaderView" key="NSHeaderView" id="995480265">
@ -548,6 +548,7 @@
<string key="NSFrame">{{1, 566}, {1279, 15}}</string> <string key="NSFrame">{{1, 566}, {1279, 15}}</string>
<reference key="NSSuperview" ref="1054473103"/> <reference key="NSSuperview" ref="1054473103"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:1216</string> <string key="NSReuseIdentifierKey">_NS:1216</string>
<int key="NSsFlags">1</int> <int key="NSsFlags">1</int>
<reference key="NSTarget" ref="1054473103"/> <reference key="NSTarget" ref="1054473103"/>
@ -573,7 +574,7 @@
<string key="NSFrameSize">{1280, 583}</string> <string key="NSFrameSize">{1280, 583}</string>
<reference key="NSSuperview" ref="1058980817"/> <reference key="NSSuperview" ref="1058980817"/>
<reference key="NSWindow"/> <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="51131752"/> <reference key="NSNextKeyView" ref="794153134"/>
<string key="NSReuseIdentifierKey">_NS:1193</string> <string key="NSReuseIdentifierKey">_NS:1193</string>
<int key="NSsFlags">133682</int> <int key="NSsFlags">133682</int>
<reference key="NSVScroller" ref="715872882"/> <reference key="NSVScroller" ref="715872882"/>
@ -1331,6 +1332,22 @@
</object> </object>
<int key="connectionID">100248</int> <int key="connectionID">100248</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="215129609"/>
<reference key="destination" ref="512844837"/>
</object>
<int key="connectionID">100261</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="620291245"/>
<reference key="destination" ref="512844837"/>
</object>
<int key="connectionID">100262</int>
</object>
</object> </object>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects"> <object class="NSArray" key="orderedObjects">
@ -1877,7 +1894,7 @@
<reference key="dict.values" ref="0"/> <reference key="dict.values" ref="0"/>
</object> </object>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">100260</int> <int key="maxID">100262</int>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"> <object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions"> <object class="NSMutableArray" key="referencedPartialClassDescriptions">
@ -1897,7 +1914,6 @@
<string>mediaSkipBackward:</string> <string>mediaSkipBackward:</string>
<string>mediaSkipForward:</string> <string>mediaSkipForward:</string>
<string>toggleMediaPlay:</string> <string>toggleMediaPlay:</string>
<string>toggleMoviePanel:</string>
</object> </object>
<object class="NSMutableArray" key="dict.values"> <object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool> <bool key="EncodedWithXMLCoder">YES</bool>
@ -1909,7 +1925,6 @@
<string>id</string> <string>id</string>
<string>id</string> <string>id</string>
<string>id</string> <string>id</string>
<string>id</string>
</object> </object>
</object> </object>
<object class="NSMutableDictionary" key="actionInfosByName"> <object class="NSMutableDictionary" key="actionInfosByName">
@ -1924,7 +1939,6 @@
<string>mediaSkipBackward:</string> <string>mediaSkipBackward:</string>
<string>mediaSkipForward:</string> <string>mediaSkipForward:</string>
<string>toggleMediaPlay:</string> <string>toggleMediaPlay:</string>
<string>toggleMoviePanel:</string>
</object> </object>
<object class="NSMutableArray" key="dict.values"> <object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool> <bool key="EncodedWithXMLCoder">YES</bool>
@ -1960,10 +1974,6 @@
<string key="name">toggleMediaPlay:</string> <string key="name">toggleMediaPlay:</string>
<string key="candidateClassName">id</string> <string key="candidateClassName">id</string>
</object> </object>
<object class="IBActionInfo">
<string key="name">toggleMoviePanel:</string>
<string key="candidateClassName">id</string>
</object>
</object> </object>
</object> </object>
<object class="NSMutableDictionary" key="outlets"> <object class="NSMutableDictionary" key="outlets">
@ -2049,6 +2059,17 @@
<object class="IBPartialClassDescription"> <object class="IBPartialClassDescription">
<string key="className">MAMovieWindow</string> <string key="className">MAMovieWindow</string>
<string key="superclassName">NSWindowController</string> <string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">toggleWindow:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">toggleWindow:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">toggleWindow:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets"> <object class="NSMutableDictionary" key="outlets">
<string key="NS.key.0">panelMovieView</string> <string key="NS.key.0">panelMovieView</string>
<string key="NS.object.0">QTMovieView</string> <string key="NS.object.0">QTMovieView</string>

View File

@ -37,7 +37,7 @@
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000"> <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool> <bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="1001"> <object class="NSCustomObject" id="1001">
<string key="NSClassName">NSObject</string> <string key="NSClassName">MATagWindow</string>
</object> </object>
<object class="NSCustomObject" id="1003"> <object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string> <string key="NSClassName">FirstResponder</string>
@ -282,7 +282,7 @@
<reference key="NSNextKeyView" ref="296418393"/> <reference key="NSNextKeyView" ref="296418393"/>
<string key="NSReuseIdentifierKey">_NS:2837</string> <string key="NSReuseIdentifierKey">_NS:2837</string>
</object> </object>
<string key="NSScreenRect">{{0, 0}, {2560, 1418}}</string> <string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
<string key="NSMinSize">{250, 116}</string> <string key="NSMinSize">{250, 116}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string> <string key="NSMaxSize">{10000000000000, 10000000000000}</string>
<bool key="NSWindowIsRestorable">YES</bool> <bool key="NSWindowIsRestorable">YES</bool>
@ -411,6 +411,30 @@
</object> </object>
<int key="connectionID">37</int> <int key="connectionID">37</int>
</object> </object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">dataSource</string>
<reference key="source" ref="212334909"/>
<reference key="destination" ref="1001"/>
</object>
<int key="connectionID">38</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">tagTable</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="212334909"/>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">tagController</string>
<reference key="source" ref="1001"/>
<reference key="destination" ref="800890361"/>
</object>
<int key="connectionID">40</int>
</object>
</object> </object>
<object class="IBMutableOrderedSet" key="objectRecords"> <object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects"> <object class="NSArray" key="orderedObjects">
@ -587,9 +611,64 @@
<reference key="dict.values" ref="0"/> <reference key="dict.values" ref="0"/>
</object> </object>
<nil key="sourceID"/> <nil key="sourceID"/>
<int key="maxID">37</int> <int key="maxID">40</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">MATagWindow</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">toggleWindow:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">toggleWindow:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">toggleWindow:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>tagController</string>
<string>tagTable</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSArrayController</string>
<string>NSTableView</string>
</object>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>tagController</string>
<string>tagTable</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBToOneOutletInfo">
<string key="name">tagController</string>
<string key="candidateClassName">NSArrayController</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">tagTable</string>
<string key="candidateClassName">NSTableView</string>
</object>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MATagWindow.h</string>
</object>
</object>
</object>
</object> </object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int> <int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies"> <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">