28 - (BOOL)popoverShouldClose:(
CPPopover)aPopover;
29 - (void)popoverWillClose:(
CPPopover)aPopover;
30 - (void)popoverDidClose:(
CPPopover)aPopover;
31 - (void)popoverWillShow:(
CPPopover)aPopover;
32 - (void)popoverDidShow:(
CPPopover)aPopover;
71 _CPPopoverWindow _popoverWindow;
73 int _implementedDelegateMethods;
78 #pragma mark Initialization 87 if (
self = [super
init])
90 _appearance = CPPopoverAppearanceMinimal;
99 #pragma mark Getters / Setters 106 - (CGRect)positioningRect
108 if (![_popoverWindow isVisible])
109 return CGRectMakeZero();
111 return [_popoverWindow frame];
117 - (void)setPositioningRect:(CGRect)aRect
119 if (![_popoverWindow isVisible])
122 [_popoverWindow setFrame:aRect];
130 - (CGSize)contentSize
132 return [[_contentViewController view] frameSize];
140 - (void)setContentSize:(CGSize)aSize
143 [[_contentViewController view] setFrameSize:aSize];
145 [_popoverWindow updateFrameWithSize:aSize];
155 return [_popoverWindow isVisible];
163 - (void)setAnimates:(BOOL)shouldAnimate
165 if (_animates == shouldAnimate)
168 _animates = shouldAnimate;
169 [_popoverWindow setAnimates:_animates];
180 - (void)setBehavior:(
int)aBehavior
182 if (_behavior == aBehavior)
185 _behavior = aBehavior;
186 [_popoverWindow setStyleMask:[
self _styleMaskForBehavior]];
189 - (void)setDelegate:(
id <CPPopoverDelegate>)aDelegate
191 if (_delegate === aDelegate)
194 _delegate = aDelegate;
195 _implementedDelegateMethods = 0;
197 if ([_delegate respondsToSelector:
@selector(popoverWillShow:)])
200 if ([_delegate respondsToSelector:
@selector(popoverDidShow:)])
203 if ([_delegate respondsToSelector:
@selector(popoverShouldClose:)])
206 if ([_delegate respondsToSelector:
@selector(popoverWillClose:)])
209 if ([_delegate respondsToSelector:
@selector(popoverDidClose:)])
214 #pragma mark Positioning 223 - (void)showRelativeToRect:(CGRect)positioningRect ofView:(
CPView)positioningView preferredEdge:(CPRectEdge)preferredEdge
225 if (!positioningView)
228 if (!_contentViewController)
232 if ([_popoverWindow isClosing] || [_popoverWindow isOpening])
235 _positioningView = positioningView;
238 _popoverWindow = [[_CPPopoverWindow alloc] initWithContentRect:CGRectMakeZero() styleMask:[
self _styleMaskForBehavior]];
241 [_popoverWindow setAppearance:_appearance];
242 [_popoverWindow setAnimates:_animates];
243 [_popoverWindow setDelegate:self];
244 [_popoverWindow setMovableByWindowBackground:NO];
245 [_popoverWindow setFrame:[_popoverWindow frameRectForContentRect:[[_contentViewController view] frame]]];
246 [_popoverWindow setContentView:[_contentViewController view]];
249 [
self _popoverWillShow];
251 [_popoverWindow positionRelativeToRect:positioningRect ofView:positioningView preferredEdge:preferredEdge];
254 [
self _popoverWindowDidShow];
257 - (unsigned)_styleMaskForBehavior
262 return CPClosableOnBlurWindowMask
278 if ([_popoverWindow isClosing] || ![
self isShown])
281 [
self _popoverWillClose];
283 _positioningView = nil;
284 [_popoverWindow close];
299 - (IBAction)performClose:(
id)sender
301 if ([_popoverWindow isClosing])
304 if (![
self _popoverShouldClose])
312 #pragma mark Delegates 315 - (BOOL)_popoverWindowShouldClose
317 [
self performClose:self];
326 - (void)_popoverWindowDidClose
329 [_delegate popoverDidClose:self];
333 - (void)_popoverWindowDidShow
336 [_delegate popoverDidShow:self];
340 - (BOOL)_popoverShouldClose
343 return [_delegate popoverShouldClose:self];
349 - (void)_popoverWillClose
352 [_delegate popoverWillClose:self];
356 - (void)_popoverWillShow
359 [_delegate popoverWillShow:self];
366 - (void)setBehaviour:(
int)aBehavior
368 _CPReportLenientDeprecation(
self, _cmd,
@selector(setBehavior:));
390 _appearance = [aCoder decodeIntForKey:CPPopoverAppearanceKey];
391 _animates = [aCoder decodeBoolForKey:CPPopoverAnimatesKey];
392 _contentViewController = [aCoder decodeObjectForKey:CPPopoverContentViewControllerKey];
393 [
self setDelegate:[aCoder decodeObjectForKey:CPPopoverDelegateKey]];
394 [
self setBehavior:[aCoder decodeIntForKey:CPPopoverBehaviorKey]];
403 [aCoder encodeInt:_appearance forKey:CPPopoverAppearanceKey];
404 [aCoder encodeBool:_animates forKey:CPPopoverAnimatesKey];
405 [aCoder encodeObject:_contentViewController forKey:CPPopoverContentViewControllerKey];
406 [aCoder encodeObject:_delegate forKey:CPPopoverDelegateKey];
407 [aCoder encodeInt:_behavior forKey:CPPopoverBehaviorKey];
419 return _contentViewController;
427 _contentViewController = aValue;
449 - (void)setAppearance:(
int)aValue
451 _appearance = aValue;
Used to implement exception handling (creating & raising).
id initWithCoder:(CPCoder aCoder)
var CPPopoverContentViewControllerKey
var CPPopoverAppearanceKey
void raise:reason:(CPString aName, [reason] CPString aReason)
var CPPopoverDelegate_popover_didShow_
CPPopoverBehaviorTransient
void encodeWithCoder:(CPCoder aCoder)
void setDelegate:(id< CPPopoverDelegate > aDelegate)
outlet id< CPPopoverDelegate > _delegate accessors(getter=delegate)
var CPPopoverDelegate_popover_willClose_
var CPPopoverDelegate_popover_shouldClose_
var CPPopoverNeedsNewPopoverWindowKey
Defines methods for use when archiving & restoring (enc/decoding).
void setBehavior:(int aBehavior)
CPPopoverBehaviorApplicationDefined
var CPPopoverDelegate_popover_willShow_
var CPPopoverDelegate_popover_didClose_
CPPlatformWindow platformWindow()
CPPopoverBehaviorSemitransient