Does anyone know how to get to use the NSwindow MyDocument.xib from the menu MainMen.xib.
Would i have to use the first responder to access it or what?
Thanks in advance again
Stephen
FirstDocument *firstNib = [[FirstDocument alloc] initWithNibName:@"MainMenu" bundle:[NSBundle mainBundle]];
SecondDocument *secondNib = [[SecondDocument alloc] initWithNibName:@"MyDocument" bundle:[NSBundle mainBundle]];
#import "FullScreenWindow.h"
#import "ControllerFromDocumentOne" //this allows things to be read, but not until you have my sample in.
- (void)awakeFromNib {
FirstDocument *firstNib = [[FirstDocument alloc] initWithNibName:@"MainMenu" bundle:[NSBundle mainBundle]];
SecondDocument *secondNib = [[SecondDocument alloc] initWithNibName:@"MyDocument" bundle:[NSBundle mainBundle]];
//In here, the code reads MyDocument.nib from your compiled App's bundle. Then, somewhere else along in your code you can reference to it or even copy it into the new window/control it from the source files you are working on.
}
- (IBAction)goFullScreen:(id)sender {
//do something here
}
@interface MyDocument : NSDocument
{
IBOutlet NSTextView *textView;
NSAttributedString *mString;
IBOutlet NSWindow *targetWindow;
BOOL fullScreen;
NSWindow *fullScreenWindow;
}
- (NSAttributedString *)string;
- (void)setString:(NSAttributedString *)value;
@end
@interface IWriteWindow : NSWindow {
}
@end
@implementation IWriteWindow
- (BOOL)canBecomeKeyWindow
{
return YES;
}
@end
@implementation MyDocument
- (id)init
{
self = [super init];
if (self) {
}
if (mString == nil) {
mString =[[NSAttributedString alloc] initWithString:@""];
}
return self;
}
- (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 @"MyDocument";
}
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];
fullScreen = NO;
[targetWindow setContentAspectRatio:NSMakeSize(4, 3)];
[textView setRulerVisible:YES];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *colorAsData;
colorAsData = [defaults objectForKey:BNRTextViewBgColorKey];
[textView setBackgroundColor:[NSKeyedUnarchiver unarchiveObjectWithData:colorAsData]];
NSUserDefaults *textDefaults = [NSUserDefaults standardUserDefaults];
NSData *textColorAsData;
textColorAsData = [textDefaults objectForKey:BNRTextViewTextColorKey];
[textView setTextColor:[NSKeyedUnarchiver unarchiveObjectWithData:textColorAsData]];
if ([self string] != nil) {
[[textView textStorage] setAttributedString:[self string]];
}
}
- (NSRect)getTargetFrameForScreen:(NSScreen *)screen
{
NSRect screenFrame = [screen frame];
int screenWidth = (int)screenFrame.size.width;
int screenHeight = (int)screenFrame.size.height;
int targetWidth, targetHeight;
if (screenWidth * 3 != screenHeight * 4)
{
if (screenWidth * 3 > screenHeight * 4)
{
targetWidth = (screenHeight *4)/3;
targetHeight = screenWidth;
}
}
else
{
targetWidth = screenWidth;
targetHeight = screenHeight;
}
NSRect targetFrmae;
targetFrmae.size.width = targetWidth;
targetFrmae.size.width = targetHeight;
targetFrmae.origin.x = (screenFrame.size.width - targetFrmae.size.width) * 0.5;
targetFrmae.origin.y = (screenFrame.size.height - targetFrmae.size.height) * 0.5;
return targetFrmae;
}
- (void)toggleFullScreen:(NSMenuItem *)menuItem
{
if (!fullScreen)
{
NSScreen *targetScreen = [targetWindow screen];
NSView *content = [targetWindow contentView];
fullScreenWindow = [[IWriteWindow alloc]
initWithContentRect:[targetWindow contentRectForFrameRect:[targetWindow frame]]
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO
screen:targetScreen];
[content retain];
[targetWindow setContentView:nil];
[fullScreenWindow setContentView:content];
[content release];
[fullScreenWindow makeKeyAndOrderFront:nil];
[fullScreenWindow setDelegate:self];
[targetWindow orderOut:nil];
int windowLevel = CGShieldingWindowLevel();
NSNumber *screenNumber = [[[targetWindow screen] deviceDescription] objectForKey:@"NSScreenNumber"];
CGDisplayCapture(screenNumber ? [screenNumber unsignedLongValue] : kCGDirectMainDisplay);
[fullScreenWindow setLevel:windowLevel];
[fullScreenWindow setFrame:[self getTargetFrameForScreen:targetScreen] display:YES animate:YES];
fullScreen = YES;
}
else
{
NSNumber *screenNumber = [[[fullScreenWindow screen] deviceDescription] objectForKey:@"NSScreenNumber"];
CGDisplayRelease(screenNumber ? [screenNumber unsignedLongValue] : kCGDirectMainDisplay);
[fullScreenWindow setFrame:[targetWindow contentRectForFrameRect:[targetWindow frame]] display:YES animate:YES];
NSView *content = [fullScreenWindow contentView];
[content retain];
[fullScreenWindow setContentView:nil];
[targetWindow setContentView:content];
[content release];
[targetWindow makeKeyAndOrderFront:nil];
[fullScreenWindow release];
fullScreenWindow = nil;
fullScreen = NO;
}
}
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError
{
NSData *data;
[self setString:[textView textStorage]];
data = [NSArchiver archivedDataWithRootObject:[self string]];
return data;
}
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError
{
NSAttributedString *tempString = [NSUnarchiver unarchiveObjectWithData:data];
[self setString:tempString];
return YES;
}
- (NSAttributedString *)string
{
return [[mString retain] autorelease];
}
- (void)setString:(NSAttributedString *)newValue
{
if (mString != newValue) {
if (mString) [mString release];
mString = [newValue copy];
}
}
- (void)textDidChange:(NSNotification *)notification
{
[self setString:[textView textStorage]];
}
@end
[fullScreenWindow setFrame: ... display:YES animate:YES]