libs-gscoredata/DataBuilder/FetchedPropertyEditor.m
H. Nikolaus Schaller 30c88829fc New Import
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep@25765 72102866-910b-0410-8b05-ffd578937521
2007-12-20 08:39:55 +00:00

185 lines
4.7 KiB
Objective-C

/*
FetchedPropertyEditor.m
Implementation of the FetchedPropertyEditor class for the DataBuilder
application.
Copyright (C) 2005 Saso Kiselkov
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#import "Private.h"
#import "FetchedPropertyEditor.h"
#import "Document.h"
@interface FetchedPropertyEditor (Private)
- (void) setControlsEnabled: (BOOL) flag;
@end
@implementation FetchedPropertyEditor (Private)
- (void) setControlsEnabled: (BOOL) flag
{
[name setEditable: flag];
[transient setEnabled: flag];
[optional setEnabled: flag];
}
@end
@implementation FetchedPropertyEditor
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver: self];
TEST_RELEASE(fetchedProperty);
TEST_RELEASE(entity);
TEST_RELEASE(configuration);
[super dealloc];
}
- (id) initWithModel: (NSManagedObjectModel *) aModel
document: (Document *) aDocument
{
if ((self = [super initWithModel: aModel document: aDocument]))
{
[NSBundle loadNibNamed: @"FetchedPropertyEditor" owner: self];
// watch for changes in the entity's property list - in case
// the attribute we're editing is removed, reset our display
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(notePropertiesChanged:)
name: PropertiesDidChangeNotification
object: model];
}
return self;
}
- (void) setupWithFetchedProperty: (NSFetchedPropertyDescription *)
aFetchedProperty
inEntity: (NSEntityDescription *) anEntity
configuration: (NSString *) aConfiguration
{
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
if (fetchedProperty != nil)
{
[nc removeObserver: self
name: PropertyDidChangeNotification
object: fetchedProperty];
}
ASSIGN(fetchedProperty, aFetchedProperty);
ASSIGN(entity, anEntity);
ASSIGN(configuration, aConfiguration);
[self refresh: nil];
if (fetchedProperty != nil)
{
[nc addObserver: self
selector: @selector(notePropertyChanged:)
name: PropertyDidChangeNotification
object: fetchedProperty];
[self setControlsEnabled: YES];
}
else
{
[self setControlsEnabled: NO];
}
}
- (void) refresh: sender
{
[name setStringValue: [fetchedProperty name]];
[transient setState: [fetchedProperty isTransient]];
[optional setState: [fetchedProperty isOptional]];
}
- (void) updateTransient: (id)sender
{
[[document undoManager] setActionName: [transient state] ?
_(@"Set Transient") : _(@"Unset Transient")];
[document setTransient: [transient state] ofProperty: fetchedProperty];
}
- (void) updateName: (id)sender
{
NSString * newName = [name stringValue];
if ([newName length] == 0)
{
NSRunAlertPanel(_(@"Invalid name"),
_(@"You must specify a name for the fetched property."),
nil, nil, nil);
return;
}
if ([[[entity propertiesByName] allKeys] containsObject: newName])
{
NSRunAlertPanel(_(@"Name already in use"),
_(@"The name you have entered is already in use."),
nil, nil, nil);
return;
}
[[document undoManager] setActionName: _(@"Rename Fetched Property")];
[document setName: newName
ofProperty: fetchedProperty
inEntity: entity
configuration: configuration];
}
- (void) updateOptional: (id)sender
{
[[document undoManager] setActionName: [optional state] ?
_(@"Set Optional") : _(@"Unset Optional")];
[document setOptional: [optional state] ofProperty: fetchedProperty];
}
- (void) notePropertyChanged: (NSNotification *) notif
{
if (fetchedProperty == [notif object])
{
[self refresh: nil];
}
}
- (void) notePropertiesChanged: (NSNotification *) notif
{
// reset our display if the attribute we've been editing has been removed
if (![[entity properties] containsObject: fetchedProperty])
{
[self setupWithFetchedProperty: nil
inEntity: nil
configuration: nil];
}
}
@end