/**
NSDataLinkPanel
Copyright (C) 1996, 2003, 2004 Free Software Foundation, Inc.
Author: Gregory John Casamento
Author: Scott Christley
Date: 1996, 2003, 2004
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 or write to the
Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#import "config.h"
#import
#import "AppKit/NSApplication.h"
#import "AppKit/NSDataLinkPanel.h"
#import "AppKit/NSDataLinkManager.h"
#import "AppKit/NSDataLink.h"
#import "AppKit/NSGraphics.h"
#import "AppKit/NSView.h"
#import "AppKit/NSNibLoading.h"
#import "GSGuiPrivate.h"
static NSDataLinkPanel *_sharedDataLinkPanel;
@interface GSDataLinkPanelController : NSObject
{
id panel;
}
- (id) panel;
@end
@implementation GSDataLinkPanelController
- (id) init
{
if ((self = [super init]) != nil)
{
if ([NSBundle loadNibNamed: @"GSDataLinkPanel" owner: self] == NO)
{
NSRunAlertPanel(@"Error", @"Could not load data link panel resource",
@"OK", NULL, NULL);
return nil;
}
}
return self;
}
- (id) panel
{
return panel;
}
- (void) dealloc
{
RELEASE(panel);
[super dealloc];
}
@end
@implementation NSApplication (NSDataLinkPanel)
/**
* Order the data link panel to the front. If it has not already
* been instantiated, instantiate it.
*/
- (void) orderFrontDataLinkPanel: sender
{
NSDataLinkPanel *dataLinkPanel = [NSDataLinkPanel sharedDataLinkPanel];
if (dataLinkPanel)
[dataLinkPanel orderFront: nil];
else
NSBeep();
}
@end
@implementation NSDataLinkPanel
+ (void)initialize
{
if (self == [NSDataLinkPanel class])
{
// Initial version
[self setVersion: 0];
}
}
/**
* Initializes and returns the shared panel.
*/
+ (NSDataLinkPanel *)sharedDataLinkPanel
{
if (_sharedDataLinkPanel == nil)
{
id controller = [[GSDataLinkPanelController alloc] init];
ASSIGN(_sharedDataLinkPanel, [controller panel]);
RELEASE(controller);
}
return _sharedDataLinkPanel;
}
/**
* Get the currently selected array of links and thier respective managers.
* Return the whether or not multiple links are selected in flag.
*/
+ (void)getLink:(NSDataLink **)link
manager:(NSDataLinkManager **)linkManager
isMultiple:(BOOL *)flag
{
[[NSDataLinkPanel sharedDataLinkPanel]
getLink: link
manager: linkManager
isMultiple: flag];
}
/**
* Set the currently selected array of links and their respective managers.
* If all of the given links should be selected flag should be YES.
*/
+ (void)setLink:(NSDataLink *)link
manager:(NSDataLinkManager *)linkManager
isMultiple:(BOOL)flag
{
[[NSDataLinkPanel sharedDataLinkPanel]
setLink: link
manager: linkManager
isMultiple: flag];
}
//
// Instance methods
//
/**
* Get the currently selected array of links and thier respective managers.
* Return the whether or not multiple links are selected in flag.
*/
- (void)getLink:(NSDataLink **)link
manager:(NSDataLinkManager **)linkManager
isMultiple:(BOOL *)flag
{
ASSIGN(*link, _currentDataLink);
ASSIGN(*linkManager, _currentDataLinkManager);
*flag = _multipleSelection;
}
/**
* Set the currently selected array of links and their respective managers.
* If all of the given links should be selected flag should be YES.
*/
- (void)setLink:(NSDataLink *)link
manager:(NSDataLinkManager *)linkManager
isMultiple:(BOOL)flag
{
ASSIGN(_currentDataLink, link);
ASSIGN(_currentDataLinkManager, linkManager);
_multipleSelection = flag;
}
//
// Customizing the Panel
//
/**
* Add an accessory view to the panel.
*/
- (NSView *)accessoryView
{
// not yet implemented.
return nil;
}
/**
* Get the accessory view.
*/
- (void)setAccessoryView:(NSView *)aView
{
// not yet implemented.
}
//
// Responding to User Input
//
/**
* Called when the user presses the Break All Links button.
* Invokes breakAllLinks on the current link manager.
*/
- (void)pickedBreakAllLinks:(id)sender
{
[_currentDataLinkManager breakAllLinks];
}
/**
* Called when the user presses the Break button.
* Invokes break on the current link.
*/
- (void)pickedBreakLink:(id)sender
{
[_currentDataLink break];
}
/**
* Called when the user presses the Open Source button.
* Invokes openSource on the current link.
*/
- (void)pickedOpenSource:(id)sender
{
[_currentDataLink openSource];
}
/**
* Called when the Update Destination button
* Invokes updateDestination on the current link.
*/
- (void)pickedUpdateDestination:(id)sender
{
[_currentDataLink updateDestination];
}
/**
* Called when the user selects an update mode from the pull down.
* Invokes setUpdateMode: on the current link.
*/
- (void)pickedUpdateMode:(id)sender
{
NSDataLinkUpdateMode mode = (NSDataLinkUpdateMode)[sender tag];
[_currentDataLink setUpdateMode: mode];
}
@end