2013-04-21 13:45:20 +00:00
|
|
|
/*
|
|
|
|
NSPopover.h
|
|
|
|
|
|
|
|
The popover class
|
|
|
|
|
|
|
|
Copyright (C) 2013 Free Software Foundation, Inc.
|
|
|
|
|
|
|
|
Author: Gregory Casamento <greg.casamento@gmail.com>
|
|
|
|
Date: 2013
|
|
|
|
|
|
|
|
This file is part of the GNUstep GUI Library.
|
|
|
|
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU Lesser General Public
|
|
|
|
License as published by the Free Software Foundation; either
|
|
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
Lesser General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
|
|
License along with this library; see the file COPYING.LIB.
|
|
|
|
If not, see <http://www.gnu.org/licenses/> or write to the
|
|
|
|
Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
|
|
|
Boston, MA 02110-1301, USA.
|
|
|
|
*/
|
|
|
|
#ifndef _GNUstep_H_NSPopover
|
|
|
|
#define _GNUstep_H_NSPopover
|
|
|
|
|
2013-04-21 16:57:58 +00:00
|
|
|
#import <Foundation/NSGeometry.h>
|
|
|
|
#import <AppKit/NSNibDeclarations.h>
|
|
|
|
#import <AppKit/NSResponder.h>
|
2013-04-21 13:45:20 +00:00
|
|
|
|
2013-12-31 18:30:46 +00:00
|
|
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_7, GS_API_LATEST)
|
2013-04-21 13:45:20 +00:00
|
|
|
/* Keys */
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverCloseReasonKey;
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverCloseReasonStandard;
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverCloseReasonDetachToWindow;
|
|
|
|
|
|
|
|
/* Notifications */
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverWillShowNotification;
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverDidShowNotification;
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverWillCloseNotification;
|
|
|
|
APPKIT_EXPORT NSString *NSPopoverDidCloseNotification;
|
|
|
|
|
|
|
|
/* Constants and enums */
|
|
|
|
enum {
|
|
|
|
NSPopoverAppearanceMinimal = 0,
|
|
|
|
NSPopoverAppearanceHUD = 1
|
|
|
|
};
|
|
|
|
typedef NSInteger NSPopoverAppearance;
|
|
|
|
|
|
|
|
enum {
|
|
|
|
NSPopoverBehaviorApplicationDefined = 0,
|
|
|
|
NSPopoverBehaviorTransient = 1,
|
|
|
|
NSPopoverBehaviorSemitransient = 2
|
|
|
|
};
|
|
|
|
typedef NSInteger NSPopoverBehavior;
|
|
|
|
|
|
|
|
/* Forward declarations */
|
2021-10-02 21:28:24 +00:00
|
|
|
@class NSViewController, NSPanel, NSView, NSNotification;
|
2013-04-21 13:45:20 +00:00
|
|
|
@protocol NSPopoverDelegate;
|
|
|
|
|
|
|
|
/* Class */
|
2022-09-29 16:09:13 +00:00
|
|
|
APPKIT_EXPORT_CLASS
|
2013-04-21 13:45:20 +00:00
|
|
|
@interface NSPopover : NSResponder
|
|
|
|
{
|
|
|
|
BOOL _animates;
|
|
|
|
NSPopoverAppearance _appearance;
|
|
|
|
NSPopoverBehavior _behavior;
|
|
|
|
NSSize _contentSize;
|
|
|
|
IBOutlet NSViewController *_contentViewController;
|
2013-04-24 09:25:56 +00:00
|
|
|
id _delegate;
|
2013-04-21 13:45:20 +00:00
|
|
|
NSRect _positioningRect;
|
|
|
|
BOOL _shown;
|
|
|
|
|
2021-10-02 21:28:24 +00:00
|
|
|
NSPanel *_realPanel;
|
2013-04-21 13:45:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/* Properties */
|
2021-10-03 08:54:35 +00:00
|
|
|
/**
|
|
|
|
* Sets the animate flag. If YES then the popover will animate when it appears or disappears.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setAnimates:(BOOL)flag;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns current value of the animate flag.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (BOOL)animates;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets ths appearance of the popover. Minimal is the default. HUD is not supported.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setAppearance: (NSPopoverAppearance)value;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the current appearance setting.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSPopoverAppearance)appearance;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets current popup behavior. Valid settings are:
|
|
|
|
* NSPopupBehaviorApplicationDefined, NSPopupBehaviorTransient,
|
|
|
|
* NSPopupBehaviorSemiTransient.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setBehavior:(NSPopoverBehavior)value;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns current behavior setting
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSPopoverBehavior)behavior;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Accepts an NSSize value for the current content size.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setContentSize:(NSSize)value;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns an NSSize representing the size of the NSPopover content view.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSSize)contentSize;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the contentViewController. If in a storyboard this is automatically set
|
|
|
|
* but if this is in a model that is NOT a storyboard (nib, xib, gorm, etc) then there must be
|
|
|
|
* a model with the same name as the class name of the contentViewController. Also,
|
|
|
|
* This model must have the "view" outlet set to the view that will be shown
|
|
|
|
* in the popup, if both of these conditions are not met, then the code will
|
|
|
|
* throw an NSInternalInconsistency exception to report the issue back to the
|
|
|
|
* user.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setContentViewController:(NSViewController *)controller;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns the current contentViewController.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSViewController *)contentViewController;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set delegate
|
|
|
|
*/
|
2013-04-24 09:25:56 +00:00
|
|
|
- (void)setDelegate:(id)value;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return delegate
|
|
|
|
*/
|
2013-04-24 09:25:56 +00:00
|
|
|
- (id)delegate;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Set relative position of the popup to the view it is associated with.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)setPositioningRect:(NSRect)value;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the NSRect.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSRect)positioningRect;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Is the popover being shown.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (BOOL)isShown;
|
|
|
|
|
|
|
|
/* Methods */
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Close the popover.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)close;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Close the popover as an IBAction.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (IBAction)performClose:(id)sender;
|
2021-10-03 08:54:35 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Show the popover relative to the specified rect on the edge specified.
|
|
|
|
*/
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)showRelativeToRect:(NSRect)positioningRect
|
|
|
|
ofView:(NSView *)positioningView
|
|
|
|
preferredEdge:(NSRectEdge)preferredEdge;
|
|
|
|
@end
|
|
|
|
|
|
|
|
/* Delegate */
|
|
|
|
@protocol NSPopoverDelegate
|
2013-12-31 18:30:46 +00:00
|
|
|
#if GS_PROTOCOLS_HAVE_OPTIONAL
|
2013-04-21 13:45:20 +00:00
|
|
|
@optional
|
2013-04-21 21:32:36 +00:00
|
|
|
#else
|
|
|
|
@end
|
|
|
|
@interface NSObject (NSPopoverDelegate)
|
|
|
|
#endif
|
2013-04-21 13:45:20 +00:00
|
|
|
- (NSWindow *)detachableWindowForPopover:(NSPopover *)popover;
|
|
|
|
- (void)popoverDidClose:(NSNotification *)notification;
|
|
|
|
- (void)popoverDidShow:(NSNotification *)notification;
|
2013-04-24 09:25:56 +00:00
|
|
|
- (BOOL)popoverShouldClose:(NSPopover *)popover;
|
2013-04-21 13:45:20 +00:00
|
|
|
- (void)popoverWillClose:(NSNotification *)notification;
|
|
|
|
- (void)popoverWillShow:(NSNotification *)notification;
|
|
|
|
@end
|
|
|
|
|
|
|
|
#endif
|
2013-12-31 18:30:46 +00:00
|
|
|
#endif
|