Refactoring for document based application

This commit is contained in:
michael starke
2013-05-09 14:02:30 +02:00
parent 35c92fbf0b
commit c7596d49fe
16 changed files with 100 additions and 223 deletions

View File

@@ -2,10 +2,10 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12C3103</string>
<string key="IBDocument.SystemVersion">12D78</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.34</string>
<string key="IBDocument.HIToolboxVersion">625.00</string>
<string key="IBDocument.AppKitVersion">1187.37</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
@@ -26,7 +26,7 @@
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPMainWindowController</string>
<string key="NSClassName">MPDocumentWindowController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
@@ -225,7 +225,7 @@
<boolean value="YES" key="1.IBNSWindowAutoPositionCentersVertical"/>
<string key="1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1.IBWindowTemplateEditedContentRect">{{357, 418}, {480, 270}}</string>
<integer value="1" key="1.NSWindowTemplate.visibleAtLaunch"/>
<boolean value="NO" key="1.NSWindowTemplate.visibleAtLaunch"/>
<string key="2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="603.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="605.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -241,8 +241,19 @@
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPMainWindowController</string>
<string key="className">MPDocumentWindowController</string>
<string key="superclassName">NSWindowController</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">editPassword:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">editPassword:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">editPassword:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="contentView">NSView</string>
<string key="inspectorView">NSView</string>
@@ -279,7 +290,7 @@
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPMainWindowController.h</string>
<string key="minorKey">./Classes/MPDocumentWindowController.h</string>
</object>
</object>
</array>

View File

@@ -22,7 +22,6 @@ typedef enum {
@property (retain) IBOutlet NSWindow *passwordCreatorWindow;
- (IBAction)showMainWindow:(id)sender;
- (IBAction)showPasswordCreator:(id)sender;
- (NSString *)applicationName;
@@ -33,7 +32,4 @@ typedef enum {
*/
- (NSArray *)contextMenuItemsWithItems:(MPContextMenuItemsFlags)flags;
- (void)openDocument:(id)sender;
- (void)newDocument:(id)sender;
@end

View File

@@ -8,8 +8,8 @@
#import "MPAppDelegate.h"
#import "MPMainWindowController.h"
#import "MPSettingsController.h"
#import "MPDocumentWindowController.h"
#import "MPSettingsWindowController.h"
#import "MPDatabaseController.h"
#import "MPPasswordCreatorViewController.h"
#import "MPActionHelper.h"
@@ -18,8 +18,7 @@
@interface MPAppDelegate ()
@property (retain, nonatomic) MPSettingsController *settingsController;
@property (retain, nonatomic) MPMainWindowController *mainWindowController;
@property (retain, nonatomic) MPSettingsWindowController *settingsController;
@property (retain, nonatomic) MPPasswordCreatorViewController *passwordCreatorController;
- (IBAction)showPreferences:(id)sender;
@@ -33,14 +32,11 @@
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.mainWindowController = [[[MPMainWindowController alloc] init] autorelease];
[self.mainWindowController showWindow:[self.mainWindowController window]];
}
- (void)dealloc {
[_settingsController release];
[_mainWindowController release];
[_passwordCreatorController release];
[super dealloc];
}
@@ -50,24 +46,9 @@
}
#pragma mark Menu Actions
- (void)showMainWindow:(id)sender {
[self.mainWindowController showMainWindow:sender];
}
- (void)newDocument:(id)sender {
[self.mainWindowController showMainWindow:sender];
[self.mainWindowController newDocument:sender];
}
- (void)openDocument:(id)sender {
[self.mainWindowController showMainWindow:sender];
[self.mainWindowController openDocument:sender];
}
- (void)showPreferences:(id)sender {
if(self.settingsController == nil) {
self.settingsController = [[[MPSettingsController alloc] init] autorelease];
self.settingsController = [[[MPSettingsWindowController alloc] init] autorelease];
}
[self.settingsController showSettings];
}

View File

@@ -7,6 +7,7 @@
//
#import "MPDocument.h"
#import "MPDocumentWindowController.h"
#import "KdbLib.h"
#import "Kdb3Node.h"
#import "Kdb4Node.h"
@@ -51,14 +52,9 @@
}
- (void) makeWindowControllers {
}
- (NSString *)windowNibName
{
// Override returning the nib file name of the document
// If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead.
return @"MainWindow";
//return @"MPDocument";
MPDocumentWindowController *windowController = [[MPDocumentWindowController alloc] init];
[self addWindowController:windowController];
}
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
@@ -85,6 +81,29 @@
- (BOOL)readFromURL:(NSURL *)url ofType:(NSString *)typeName error:(NSError **)outError {
self.file = url;
return YES;
// tell The window controller to display decrypt view
// - (void)openDocument:(id)sender {
//
// if(!self.passwordInputController) {
// self.passwordInputController = [[[MPPasswordInputController alloc] init] autorelease];
// }
//
// NSOpenPanel *openPanel = [NSOpenPanel openPanel];
// [openPanel setCanChooseDirectories:NO];
// [openPanel setCanChooseFiles:YES];
// [openPanel setCanCreateDirectories:NO];
// [openPanel setAllowsMultipleSelection:NO];
// [openPanel setAllowedFileTypes:@[ @"kdbx", @"kdb"]];
// [openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
// if(result == NSFileHandlingPanelOKButton) {
// NSURL *file = [[openPanel URLs] lastObject];
// self.passwordInputController.fileURL = file;
// [self _setContentViewController:self.passwordInputController];
// }
// }];
// }
//
}
- (BOOL)decryptWithPassword:(NSString *)password keyFileURL:(NSURL *)keyFileURL {

View File

@@ -17,7 +17,7 @@
@class MPCreationViewController;
@interface MPMainWindowController : NSWindowController
@interface MPDocumentWindowController : NSWindowController
@property (readonly, retain) MPPasswordInputController *passwordInputController;
@property (readonly, retain) MPPasswordEditViewController *passwordEditController;
@@ -27,11 +27,6 @@
@property (readonly, retain) MPCreationViewController *creationViewController;
/* Document handling */
- (void)newDocument:(id)sender;
- (void)openDocument:(id)sender;
- (void)showEntries;
- (void)showMainWindow:(id)sender;
- (void)performFindPanelAction:(id)sender;

View File

@@ -6,7 +6,7 @@
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
//
#import "MPMainWindowController.h"
#import "MPDocumentWindowController.h"
#import "MPDatabaseController.h"
#import "MPDatabaseDocument.h"
#import "MPPasswordInputController.h"
@@ -18,7 +18,7 @@
#import "MPInspectorTabViewController.h"
#import "MPAppDelegate.h"
@interface MPMainWindowController ()
@interface MPDocumentWindowController ()
@property (assign) IBOutlet NSView *outlineView;
@property (assign) IBOutlet NSSplitView *splitView;
@@ -47,7 +47,7 @@
@end
@implementation MPMainWindowController
@implementation MPDocumentWindowController
-(id)init {
self = [super initWithWindowNibName:@"MainWindow" owner:self];
@@ -226,26 +226,6 @@
//[self showWindow:self.window];
}
- (void)openDocument:(id)sender {
if(!self.passwordInputController) {
self.passwordInputController = [[[MPPasswordInputController alloc] init] autorelease];
}
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseDirectories:NO];
[openPanel setCanChooseFiles:YES];
[openPanel setCanCreateDirectories:NO];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setAllowedFileTypes:@[ @"kdbx", @"kdb"]];
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
if(result == NSFileHandlingPanelOKButton) {
NSURL *file = [[openPanel URLs] lastObject];
self.passwordInputController.fileURL = file;
[self _setContentViewController:self.passwordInputController];
}
}];
}
- (void)clearOutlineSelection:(id)sender {
[self.outlineViewController clearSelection];
}
@@ -257,32 +237,6 @@
[self _setContentViewController:self.passwordEditController];
}
- (void)newDocument:(id)sender {
// if (!self.creationViewController) {
// self.creationViewController = [[[MPCreationViewController alloc] init] autorelease];
// }
//
// NSSavePanel *savePanel = [NSSavePanel savePanel];
// [savePanel setAllowedFileTypes:@[@"kdbx", @"kdb"]];
// [savePanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
// if (result == NSFileHandlingPanelOKButton) {
// NSURL *file = [savePanel URL];
// NSLog(@"Will create file at: %@", file);
// self.creationViewController.fileURL = file;
// [self _setContentViewController:self.creationViewController];
// }
// }];
}
- (void)saveDocument:(id)sender
{
NSLog(@"Attempting to save document");
if ([[MPDatabaseController defaultController].database save])
NSLog(@"Save successful");
else
NSLog(@"Save failed");
}
#pragma mark Helper
- (NSSearchField *)locateToolbarSearchField {

View File

@@ -12,7 +12,7 @@
#import "MPDatabaseController.h"
#import "MPDatabaseDocument.h"
#import "MPIconHelper.h"
#import "MPMainWindowController.h"
#import "MPDocumentWindowController.h"
#import "MPPasteBoardController.h"
#import "MPOverlayWindowController.h"
#import "KdbGroup+MPAdditions.h"
@@ -325,7 +325,7 @@ NSString *const _toggleFilterUsernameButton = @"SearchUsername";
return; // nothign to to
}
[((MPMainWindowController *)[[self.view window] windowController]) clearOutlineSelection:nil];
[((MPDocumentWindowController *)[[self.view window] windowController]) clearOutlineSelection:nil];
self.isStatusBarVisible = YES;
self.tableToTop.constant = [self.filterBar frame].size.height;

View File

@@ -8,7 +8,7 @@
#import "MPPasswordEditViewController.h"
#import "MPKeyfilePathControlDelegate.h"
#import "MPMainWindowController.h"
#import "MPDocumentWindowController.h"
#import "MPDatabaseController.h"
#import "MPDatabaseDocument.h"
@@ -54,13 +54,13 @@
database.key = [self.keyfilePathControl URL];
database.password = [self.passwordTextField stringValue];
[database save];
MPMainWindowController *mainWindowController = (MPMainWindowController *)[[[self view] window] windowController];
MPDocumentWindowController *mainWindowController = (MPDocumentWindowController *)[[[self view] window] windowController];
[mainWindowController showEntries];
// save automatically?
}
- (IBAction)_cancel:(id)sender {
MPMainWindowController *mainWindowController = (MPMainWindowController *)[[[self view] window] windowController];
MPDocumentWindowController *mainWindowController = (MPDocumentWindowController *)[[[self view] window] windowController];
[mainWindowController showEntries];
}
@end

View File

@@ -10,7 +10,7 @@
@protocol MPSettingsTab;
@interface MPSettingsController : NSWindowController <NSToolbarDelegate>
@interface MPSettingsWindowController : NSWindowController <NSToolbarDelegate>
- (void)showSettings;
- (void)showSettingsTabWithIdentifier:(NSString *)identifier;

View File

@@ -6,10 +6,10 @@
// Copyright (c) 2012 HicknHack Software GmbH. All rights reserved.
//
#import "MPSettingsController.h"
#import "MPSettingsWindowController.h"
#import "MPGeneralSettingsController.h"
@interface MPSettingsController ()
@interface MPSettingsWindowController ()
@property (retain, nonatomic) NSToolbar *toolbar;
@property (retain, nonatomic) NSMutableDictionary *settingsController;
@@ -21,7 +21,7 @@
@end
@implementation MPSettingsController
@implementation MPSettingsWindowController
-(id)init {
self = [super initWithWindowNibName:@"SettingsWindow"];

View File

@@ -8,7 +8,7 @@
#import <Foundation/Foundation.h>
@class MPMainWindowController;
@class MPDocumentWindowController;
@interface MPToolbarDelegate : NSObject <NSToolbarDelegate>

View File

@@ -15,6 +15,8 @@
<string>KeePass2 Database </string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>NSDocumentClass</key>
<string>MPDocument</string>
</dict>
<dict>
<key>CFBundleTypeExtensions</key>
@@ -44,7 +46,7 @@
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>63C</string>
<string>647</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>

View File

@@ -24,7 +24,7 @@
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPSettingsController</string>
<string key="NSClassName">MPSettingsWindowController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
@@ -42,12 +42,10 @@
<nil key="NSViewClass"/>
<nil key="NSUserInterfaceItemIdentifier"/>
<object class="NSView" key="NSWindowView" id="1006">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<array class="NSMutableArray" key="NSSubviews"/>
<string key="NSFrameSize">{350, 200}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
<string key="NSMaxSize">{10000000000000, 10000000000000}</string>
@@ -122,18 +120,7 @@
<nil key="sourceID"/>
<int key="maxID">89</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPSettingsController</string>
<string key="superclassName">NSWindowController</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPSettingsController.h</string>
</object>
</object>
</array>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes"/>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>

View File

@@ -2,10 +2,10 @@
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
<data>
<int key="IBDocument.SystemTarget">1080</int>
<string key="IBDocument.SystemVersion">12C60</string>
<string key="IBDocument.SystemVersion">12D78</string>
<string key="IBDocument.InterfaceBuilderVersion">3084</string>
<string key="IBDocument.AppKitVersion">1187.34</string>
<string key="IBDocument.HIToolboxVersion">625.00</string>
<string key="IBDocument.AppKitVersion">1187.37</string>
<string key="IBDocument.HIToolboxVersion">626.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">3084</string>
@@ -26,7 +26,7 @@
</object>
<array class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<object class="NSCustomObject" id="1001">
<string key="NSClassName">MPMainWindowController</string>
<string key="NSClassName">MPDocumentWindowController</string>
</object>
<object class="NSCustomObject" id="1003">
<string key="NSClassName">FirstResponder</string>
@@ -35,7 +35,7 @@
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomView" id="1005">
<reference key="NSNextResponder"/>
<nil key="NSNextResponder"/>
<int key="NSvFlags">268</int>
<array class="NSMutableArray" key="NSSubviews">
<object class="NSTextField" id="86698766">
@@ -43,8 +43,6 @@
<int key="NSvFlags">268</int>
<string key="NSFrame">{{223, 214}, {152, 29}}</string>
<reference key="NSSuperview" ref="1005"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="NSReuseIdentifierKey">_NS:1535</string>
<bool key="NSEnabled">YES</bool>
<object class="NSTextFieldCell" key="NSCell" id="726130946">
@@ -81,8 +79,6 @@
</object>
</array>
<string key="NSFrameSize">{597, 456}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="86698766"/>
<string key="NSClassName">NSView</string>
</object>
@@ -227,43 +223,6 @@
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<array class="NSMutableArray" key="referencedPartialClassDescriptions">
<object class="IBPartialClassDescription">
<string key="className">MPMainWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="contentView">NSView</string>
<string key="outlineView">NSView</string>
<string key="splitView">NSSplitView</string>
<string key="welcomeText">NSTextField</string>
<string key="welcomeView">NSView</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="toOneOutletInfosByName">
<object class="IBToOneOutletInfo" key="contentView">
<string key="name">contentView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="outlineView">
<string key="name">outlineView</string>
<string key="candidateClassName">NSView</string>
</object>
<object class="IBToOneOutletInfo" key="splitView">
<string key="name">splitView</string>
<string key="candidateClassName">NSSplitView</string>
</object>
<object class="IBToOneOutletInfo" key="welcomeText">
<string key="name">welcomeText</string>
<string key="candidateClassName">NSTextField</string>
</object>
<object class="IBToOneOutletInfo" key="welcomeView">
<string key="name">welcomeView</string>
<string key="candidateClassName">NSView</string>
</object>
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPMainWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSLayoutConstraint</string>
<string key="superclassName">NSObject</string>

View File

@@ -519,15 +519,6 @@
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="174162306">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Show Main Window</string>
<string key="NSKeyEquiv">0</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="523956698">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Show Password Creator</string>
@@ -845,14 +836,6 @@
</object>
<int key="connectionID">1175</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showMainWindow:</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="174162306"/>
</object>
<int key="connectionID">1178</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showPasswordCreator:</string>
@@ -1190,7 +1173,6 @@
<reference ref="575023229"/>
<reference ref="1011231497"/>
<reference ref="964160035"/>
<reference ref="174162306"/>
<reference ref="523956698"/>
</array>
<reference key="parent" ref="713487014"/>
@@ -1280,11 +1262,6 @@
<reference key="object" ref="964160035"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1177</int>
<reference key="object" ref="174162306"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">1179</int>
<reference key="object" ref="43915532"/>
@@ -1313,7 +1290,6 @@
<string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="112.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1176.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1177.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1179.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1181.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="1200.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string>
@@ -1442,22 +1418,19 @@
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">MPMainWindowController</string>
<string key="className">MPDocumentWindowController</string>
<string key="superclassName">NSWindowController</string>
<dictionary class="NSMutableDictionary" key="actions">
<string key="changedFileType:">id</string>
<string key="editPassword:">id</string>
</dictionary>
<dictionary class="NSMutableDictionary" key="actionInfosByName">
<object class="IBActionInfo" key="changedFileType:">
<string key="name">changedFileType:</string>
<string key="candidateClassName">id</string>
</object>
<object class="IBActionInfo" key="editPassword:">
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">editPassword:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">editPassword:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">editPassword:</string>
<string key="candidateClassName">id</string>
</object>
</dictionary>
</object>
<dictionary class="NSMutableDictionary" key="outlets">
<string key="contentView">NSView</string>
<string key="inspectorView">NSView</string>
@@ -1494,7 +1467,7 @@
</dictionary>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MPMainWindowController.h</string>
<string key="minorKey">./Classes/MPDocumentWindowController.h</string>
</object>
</object>
</array>