mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-08-25 13:07:02 +00:00
167 lines
8.6 KiB
Plaintext
167 lines
8.6 KiB
Plaintext
/*
|
|
* CPFormatter.j
|
|
* Foundation
|
|
*
|
|
* Created by Randall Luecke
|
|
* Copyright 2010, RCLConcepts, LLC.
|
|
*
|
|
* 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.1 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; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
/*!
|
|
@class CPFormatter
|
|
@ingroup foundation
|
|
@brief CPFormatter is an abstract class that declares an interface for objects that create, interpret,
|
|
and validate the textual representation of cell contents. The Foundation framework provides two
|
|
concrete subclasses of CPFormatter to generate these objects: CPNumberFormatter and CPDateFormatter.
|
|
|
|
CPFormatter is intended for subclassing. A custom formatter can restrict the input and enhance the
|
|
display of data in novel ways. For example, you could have a custom formatter that ensures that serial
|
|
numbers entered by a user conform to predefined formats. Before you decide to create a custom formatter,
|
|
make sure that you cannot configure the public subclasses CPDateFormatter and CPNumberFormatter to satisfy your requirements.
|
|
*/
|
|
|
|
@import <Foundation/CPObject.j>
|
|
|
|
@implementation CPFormatter : CPObject
|
|
|
|
/*!
|
|
The default implementation of this method raises an exception.
|
|
|
|
When implementing a subclass, return the CPString object that textually represents
|
|
the view's object for display andÑif editingStringForObjectValue: is unimplementedÑfor editing.
|
|
First test the passed-in object to see if itÕs of the correct class. If it isnÕt, return nil;
|
|
but if it is of the right class, return a properly formatted and, if necessary, localized string.
|
|
(See the specification of the CPString class for formatting and localizing details.)
|
|
|
|
@param anObject The object for which a textual representation is returned
|
|
@return CPSting a formatted string
|
|
*/
|
|
- (CPString)stringForObjectValue:(id)anObject
|
|
{
|
|
_CPRaiseInvalidAbstractInvocation(self, @selector(stringForObjectValue:));
|
|
return nil;
|
|
}
|
|
|
|
|
|
/*- (CPAttributedString)attributedStringForObjectValue:(id)anObject withDefaultAttributes:(CPDictionary)attributes
|
|
{
|
|
|
|
}*/
|
|
|
|
|
|
/*!
|
|
The default implementation of this method invokes stringForObjectValue:.
|
|
|
|
When implementing a subclass, override this method only when the string that users see and the string
|
|
that they edit are different. In your implementation, return an CPString object that is used for editing,
|
|
following the logic recommended for implementing stringForObjectValue:. As an example, you would implement
|
|
this method if you want the dollar signs in displayed strings removed for editing.
|
|
|
|
@param anObject the object for which to return an editing string
|
|
@return CPString object that is used for editing the textual represntation of an object
|
|
*/
|
|
- (CPString)editingStringForObjectValue:(id)anObject
|
|
{
|
|
return [self stringForObjectValue:anObject];
|
|
}
|
|
|
|
|
|
/*!
|
|
The default implementation of this method raises an exception.
|
|
|
|
When implementing a subclass, return by reference the object anObject after creating it from string.
|
|
Return YES if the conversion is successful. If you return NO, also return by indirection (in error)
|
|
a localized user-presentable CPString object that explains the reason why the conversion failed; the delegate
|
|
(if any) of the CPControl object managing the cell can then respond to the failure in
|
|
control:didFailToFormatString:errorDescription:. However, if error is nil, the sender is not interested in
|
|
the error description, and you should not attempt to assign one.
|
|
|
|
@param anObject if conversion is successful, upon return contains the object created from the string
|
|
@param aString the string to parse.
|
|
@param anError if non-nil, if there is an error durring the conversion, upon return contains an CPString object that describes the problem.
|
|
@return BOOL YES if the conversion from the string to a view content object was successful, otherwise NO.
|
|
*/
|
|
- (BOOL)getObjectValue:(id)anObject forString:(CPString)aString errorDescription:(CPString)anError
|
|
{
|
|
_CPRaiseInvalidAbstractInvocation(self, @selector(getObjectValue:forString:errorDescription:));
|
|
return NO;
|
|
}
|
|
|
|
|
|
/*!
|
|
Returns a Boolean value that indicates whether a partial string is valid.
|
|
|
|
This method is invoked each time the user presses a key while the cell has the keyboard focusÑit lets you verify and
|
|
edit the cell text as the user types it.
|
|
|
|
In a subclass implementation, evaluate partialString according to the context, edit the text if necessary, and return
|
|
by reference any edited string in newString. Return YES if partialString is acceptable and NO if partialString is unacceptable.
|
|
If you return NO and newString is nil, the cell displays partialString minus the last character typed. If you return NO, you can
|
|
also return by indirection an CPString object (in error) that explains the reason why the validation failed; the delegate (if any)
|
|
of the CPControl object managing the cell can then respond to the failure in control:didFailToValidatePartialString:errorDescription:.
|
|
The selection range will always be set to the end of the text if replacement occurs.
|
|
|
|
This method is a compatibility method. If a subclass overrides this method and does not override
|
|
isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:, this method will be called as before
|
|
(isPartialStringValid:proposedSelectedRange:originalString:originalSelectedRange:errorDescription: just calls this one by default).
|
|
|
|
@param aPartialString the text currently in the view.
|
|
@param aNewString if aPartialString needs to be modified, upon return contains the replacement string.
|
|
@param anError if non-nil, if validation fails contains a CPString object that desibes the problem.
|
|
@return YES if aPartialString is an acceptable value, otherwise NO.
|
|
*/
|
|
- (BOOL)isPartialStringValid:(CPString)aPartialString newEditingString:(CPString)aNewString errorDescription:(CPString)anError
|
|
{
|
|
_CPRaiseInvalidAbstractInvocation(self, @selector(isPartialStringValid:newEditingString:errorDescription:));
|
|
return NO;
|
|
}
|
|
|
|
/*!
|
|
This method should be implemented in subclasses that want to validate user changes to a string in a field, where the user changes are
|
|
not necessarily at the end of the string, and preserve the selection (or set a different one, such as selecting the erroneous part of
|
|
the string the user has typed).
|
|
|
|
In a subclass implementation, evaluate partialString according to the context. Return YES if partialStringPtr is acceptable and NO if partialStringPtr
|
|
is unacceptable. Assign a new string to partialStringPtr and a new range to proposedSelRangePtr and return NO if you want to replace the string and
|
|
change the selection range. If you return NO, you can also return by indirection an CPString object (in error) that explains the reason why the
|
|
validation failed; the delegate (if any) of the CPControl object managing the cell can then respond to the failure in
|
|
control:didFailToValidatePartialString:errorDescription:.
|
|
|
|
@param aPartialString The new string to validate.
|
|
@param aProposedSelectedRange The selection range that will be used if the string is accepted or replaced.
|
|
@param originalString The original string, before the proposed change.
|
|
@param originalSelectedRange The selection range over which the change is to take place.
|
|
@param error If non-nil, if validation fails contains an CPString object that descibes the problem.
|
|
@return YES if aPartialString is acceptable, otherwise NO.
|
|
|
|
*/
|
|
- (BOOL)isPartialStringValue:(CPString)aPartialString proposedSelectedRange:(CPRange)aProposedSelectedRange originalString:(CPString)originalString originalSelectedRange:(CPRange)originalSelectedRange errorDescription:(CPString)anError
|
|
{
|
|
_CPRaiseInvalidAbstractInvocation(self, @selector(isPartialStringValue:proposedSelectedRange:originalString:originalSelectedRange:errorDescription:));
|
|
return NO;
|
|
}
|
|
|
|
- (id)initWithCoder:(CPCoder)aCoder
|
|
{
|
|
return [self init];
|
|
}
|
|
|
|
- (void)encodeWithCoder:(CPCoder)aCoder
|
|
{
|
|
|
|
}
|
|
|
|
@end |