1//
2//  PXLayerDetailsView.m
3//  Pixen-XCode
4//
5//  Created by Joe Osborn on Thu Feb 05 2004.
6//  Copyright (c) 2004 Open Sword Group. All rights reserved.
7//
8
9#import "PXLayerDetailsView.h"
10#import "PXLayer.h"
11#import "PXCanvas.h"
12#import "PXCanvasController.h"
13#ifndef __COCOA__
14#import "PXLayerDetailsSubView.h"
15#endif
16
17
18@implementation PXLayerDetailsView
19
20- initWithLayer:aLayer
21{
22	[super init];
23	[NSBundle loadNibNamed:@"PXLayerDetailsView" owner:self];
24#ifndef __COCOA__
25
26  id myView = [[window contentView] retain];
27  view = [[PXLayerDetailsSubView alloc] initWithFrame:[myView frame]];
28  [view addSubview:myView];
29#endif
30
31	[self addSubview:view];
32	[self setLayer:aLayer];
33	NSLog(@"****************** thumbnail %@",thumbnail);
34	[thumbnail setImage:image];
35	[thumbnail setEditable:NO];
36	isHidden = YES;
37	changedRect = NSZeroRect;
38	return self;
39}
40
41- opacityText
42{
43	return opacityText;
44}
45
46- (void)dealloc
47{
48	[self invalidateTimer];
49	[[NSNotificationCenter defaultCenter] removeObserver:self];
50	[super dealloc];
51}
52
53- (void)setLayer:aLayer
54{
55  [self invalidateTimer];
56  //set preview, name field, and other state
57  [[NSNotificationCenter defaultCenter] removeObserver:self];
58  layer = aLayer;
59  [image release];
60  image = [[NSImage alloc] initWithSize:[layer size]];
61  [name setStringValue:[layer name]];
62  [opacity setFloatValue:[layer opacity]];
63  [opacityField setFloatValue:[layer opacity]];
64  [self updatePreview:nil];
65  [visibility setState:[layer visible]];
66  [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updatePreview:) name:PXCanvasChangedNotificationName object:nil];
67  timer = [[NSTimer scheduledTimerWithTimeInterval:0.8 target:self selector:@selector(shouldRedraw:) userInfo:nil repeats:YES] retain];
68  [self setNeedsDisplay:YES];
69  [view setLayer:layer];
70}
71
72- (void)updatePreview:notification
73{
74#ifdef __COCOA__
75  if(((notification != nil)
76      && (layer != [[notification userInfo] objectForKey:@"activeLayer"]))
77     || [self isHidden])
78    {
79
80      return;
81    }
82#endif
83  changedRect = NSUnionRect(changedRect, (notification == nil) ? NSMakeRect(0,0,[layer size].width,[layer size].height) : [[[notification userInfo] objectForKey:@"changedRect"] rectValue]);
84}
85
86- (IBAction)visibilityDidChange:sender
87{
88	[layer setVisible:([sender state] == NSOnState) ? YES : NO];
89	[[NSNotificationCenter defaultCenter] postNotificationName:@"PXCanvasShouldRedrawNotificationName" object:layer];
90}
91
92- (void)shouldRedraw:timer
93{
94#ifdef __COCOA__
95  if (NSIsEmptyRect(changedRect))
96    {
97      return;
98    }
99#endif
100  NSLog(@"thumbnail %@",thumbnail);
101  [image lockFocus];
102  BOOL oldVisibility = [layer visible];
103  int oldOpacity = [layer opacity];
104  [layer setVisible:YES];
105  [layer setOpacity:100];
106  [[NSColor clearColor] set];
107  NSRectFill(changedRect);
108  [layer drawRect:changedRect fixBug:YES];
109  [layer setVisible:oldVisibility];
110  [layer setOpacity:oldOpacity];
111  [image unlockFocus];
112  [thumbnail setImage:nil];
113  [thumbnail setImage:image];
114  [thumbnail setNeedsDisplay:YES];
115  changedRect = NSZeroRect;
116}
117
118- (void)invalidateTimer
119{
120	if((timer != nil) && [timer isValid])
121	{
122		[timer invalidate];
123		[timer release];
124		timer = nil;
125	}
126}
127
128- (BOOL)isHidden
129{
130#ifdef __COCOA__
131  if([super respondsToSelector:@selector(isHidden)])
132    {
133      return [super isHidden];
134    }
135  return isHidden;
136#else
137  return NO;
138#endif
139}
140
141- (void)setHidden:(BOOL)newHidden
142{
143#ifdef __COCOA__
144	if([self isHidden] == newHidden) { return; }
145	if([super respondsToSelector:@selector(setHidden:)]) { [super setHidden:newHidden]; }
146	isHidden = newHidden;
147	[self updatePreview:nil];
148#endif
149}
150
151- (IBAction)opacityDidChange:sender
152{
153  [opacity setFloatValue:[sender floatValue]];
154  [opacityField setFloatValue:[sender floatValue]];
155  [layer setOpacity:[sender floatValue]];
156  [[NSNotificationCenter defaultCenter] postNotificationName:@"PXCanvasShouldRedrawNotificationName" object:layer];
157}
158
159- (IBAction)nameDidChange:sender
160{
161  [(PXLayer *)layer setName:[name stringValue]];
162}
163
164@end
165