More correct NSComboBoxCell implementation

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@20446 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Quentin Mathe 2004-12-13 02:18:32 +00:00
parent 843814c42c
commit da59460004
2 changed files with 246 additions and 136 deletions

View file

@ -1,3 +1,21 @@
2004-12-13 Quentin Mathe <qmathe@club-internet.fr>
* Source/NSComboBoxCell.m: Modified the code to be clearer
Renamed internal class GSFirstMouseTableView to GSComboBoxTableView
Removed GSComboWindow _localSelection ivar which is not needed, because
the user selection is now handled in -clickItem and not in
-tableViewSelectionDidChange: which is now reserved to the internal (aka
local) selection support.
(-[GSComboWindow selectItem:]) Renamed the method name to -clickItem:
(-[GSComboWindow clickItem:]): Reworked to the method to be used by the
NSTableView (or NSBrowser) action to track the user clicks.
(-[GSComboWindow validateSelection:]): Rewritten the method to handle
itself the selection, the method updates now the cell object value and
sends the action bound to the cell.
(-selectItemAtIndex:): Updated the method to match the Cocoa
specification which states that this method should adjust the selection
in the combo box list but not simulate a user click.
2004-12-09 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSCursor.m (getStandardCursor()): If not standard cursor

View file

@ -55,14 +55,14 @@
static NSNotificationCenter *nc;
static const BOOL ForceBrowser = NO;
@interface GSFirstMouseTableView : NSTableView
@interface GSComboBoxTableView : NSTableView
{
}
@end
@implementation GSFirstMouseTableView
@implementation GSComboBoxTableView
- (BOOL) acceptsFirstMouse: (NSEvent *)event
{
return YES;
@ -72,13 +72,12 @@ static const BOOL ForceBrowser = NO;
@interface GSComboWindow : NSPanel
{
NSBrowser *_browser;
GSFirstMouseTableView *_tableView;
GSComboBoxTableView *_tableView;
NSComboBoxCell *_cell;
BOOL _stopped;
BOOL _localSelection;
}
+ (GSComboWindow *)defaultPopUp;
+ (GSComboWindow *) defaultPopUp;
- (void) layoutWithComboBoxCell:(NSComboBoxCell *)comboBoxCell;
- (void) positionWithComboBoxCell:(NSComboBoxCell *)comboBoxCell;
@ -86,6 +85,7 @@ static const BOOL ForceBrowser = NO;
- (void) runModalPopUpWithComboBoxCell:(NSComboBoxCell *)comboBoxCell;
- (void) runLoopWithComboBoxCell:(NSComboBoxCell *)comboBoxCell;
- (void) onWindowEdited: (NSNotification *)notification;
- (void) clickItem: (id)sender;
- (void) reloadData;
- (void) noteNumberOfItemsChanged;
- (void) scrollItemAtIndexToTop: (int)index;
@ -118,7 +118,7 @@ static GSComboWindow *gsWindow = nil;
+ (GSComboWindow *) defaultPopUp
{
if (!gsWindow)
if (gsWindow == nil)
gsWindow = [[self alloc] initWithContentRect: NSMakeRect(0,0,200,200)
styleMask: NSBorderlessWindowMask
backing: NSBackingStoreNonretained // NSBackingStoreBuffered
@ -142,8 +142,6 @@ static GSComboWindow *gsWindow = nil;
[self setLevel: NSPopUpMenuWindowLevel];
[self setBecomesKeyOnlyIfNeeded: YES];
_localSelection = NO;
box = [[NSBox alloc] initWithFrame: contentRect];
[box setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
[box setBorderType: NSLineBorder];
@ -155,7 +153,8 @@ static GSComboWindow *gsWindow = nil;
if (!ForceBrowser)
{
_tableView = [[GSFirstMouseTableView alloc] initWithFrame: NSMakeRect(0, 0, 100, 100)];
_tableView = [[GSComboBoxTableView alloc]
initWithFrame: NSMakeRect(0, 0, 100, 100)];
[_tableView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
//[_tableView setBackgroundColor: [NSColor whiteColor]];
[_tableView setDrawsGrid: NO];
@ -168,6 +167,8 @@ static GSComboWindow *gsWindow = nil;
[[_tableView tableColumnWithIdentifier:@"content"] setDataCell: [[NSCell alloc] initTextCell: @""]];
[_tableView setDataSource: self];
[_tableView setDelegate: self];
[_tableView setAction: @selector(clickItem:)];
[_tableView setTarget: self];
scrollView = [[NSScrollView alloc] initWithFrame: NSMakeRect(borderRect.origin.x,
borderRect.origin.y,
@ -189,7 +190,7 @@ static GSComboWindow *gsWindow = nil;
[_browser setTitled: NO];
[_browser setHasHorizontalScroller: NO];
[_browser setTarget: self];
[_browser setAction: @selector(selectItem:)];
[_browser setAction: @selector(clickItem:)];
[_browser setDelegate: self];
[_browser setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable];
[_browser setAllowsEmptySelection: YES];
@ -203,7 +204,10 @@ static GSComboWindow *gsWindow = nil;
return self;
}
- (BOOL) canBecomeKeyWindow { return YES; }
- (BOOL) canBecomeKeyWindow
{
return YES;
}
- (void)dealloc
{
@ -250,6 +254,7 @@ static GSComboWindow *gsWindow = nil;
{
size.width = textCellWidth - bsize.width;
}
if (size.width < 0)
{
size.width = 0;
@ -381,26 +386,26 @@ static GSComboWindow *gsWindow = nil;
onWindow = [[_cell controlView] window];
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowWillCloseNotification object: onWindow];
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowWillMoveNotification object: onWindow];
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowWillMiniaturizeNotification object: onWindow];
/* The notification below doesn't exist currently
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowWillResizeNotification object: onWindow];
*/
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowWillCloseNotification object: onWindow];
// FIX ME: The notification below doesn't exist currently
// [nc addObserver: self selector: @selector(onWindowEdited:)
// name: NSWindowWillResizeNotification object: onWindow];
// ### HACK:
// ### The code below must be removed when the notifications over will work
// FIXME: The code below must be removed when the notifications over will work
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowDidMoveNotification object: onWindow];
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowDidMiniaturizeNotification object: onWindow];
[nc addObserver: self selector: @selector(onWindowEdited:)
name: NSWindowDidResizeNotification object: onWindow];
// ###
// End of the code to remove
[self orderFront: self];
[self makeFirstResponder: _tableView];
@ -429,7 +434,7 @@ static GSComboWindow *gsWindow = nil;
if ([event type] == NSLeftMouseDown
|| [event type] == NSRightMouseDown)
{
if (![comboBoxCell _isWantedEvent: event] && [event window] != self)
if ([comboBoxCell _isWantedEvent: event] == NO && [event window] != self)
{
break;
}
@ -541,10 +546,8 @@ static GSComboWindow *gsWindow = nil;
{
if ([_tableView selectedRow] == index || [_tableView numberOfRows] <= index)
return;
_localSelection = YES;
// Will block the TableDidSelectionChange: action
[_tableView selectRow: index byExtendingSelection: NO];
_localSelection = NO;
}
else
{
@ -552,6 +555,7 @@ static GSComboWindow *gsWindow = nil;
if ([matrix selectedRow] == index || [matrix numberOfRows] <= index)
return;
[_browser selectRow: index inColumn: 0];
}
}
@ -560,9 +564,7 @@ static GSComboWindow *gsWindow = nil;
{
if (!ForceBrowser)
{
_localSelection = YES;
[_tableView deselectAll: self];
_localSelection = NO;
}
else
{
@ -572,21 +574,36 @@ static GSComboWindow *gsWindow = nil;
}
}
// Target/Action of Browser
- (void) selectItem: (id)sender
{
if (_cell)
{
[_cell selectItemAtIndex: [sender selectedRowInColumn: 0]];
_stopped = YES;
// Target/Action method
- (void) clickItem: (id)sender
{
if (_cell == nil)
return;
if (!ForceBrowser)
{
[_cell _setSelectedItem: [sender selectedRow]];
}
else
{
[_cell _setSelectedItem: [sender selectedRowInColumn: 0]];
// NSBrowser has nothing like browserSelectionDidChange: delegate method
// which means selection changes not resulting from a click should be
// handled here by calling previously -setSendsActionOnArrowKeys: on the
// browser.
}
[self validateSelection];
[nc postNotificationName: NSComboBoxSelectionDidChangeNotification
object: [_cell controlView]
userInfo: nil];
}
// Browser delegate methods
- (int) browser: (NSBrowser *)sender
numberOfRowsInColumn: (int)column
- (int) browser: (NSBrowser *)sender numberOfRowsInColumn: (int)column
{
if (!_cell)
if (_cell == nil)
return 0;
return [_cell numberOfItems];
@ -597,7 +614,7 @@ numberOfRowsInColumn: (int)column
atRow: (int)row
column: (int)column
{
if (!_cell)
if (_cell == nil)
return;
[aCell setStringValue: [_cell _stringValueAtIndex: row]];
@ -618,7 +635,11 @@ numberOfRowsInColumn: (int)column
// Table view delegate methods
- (void) tableViewSelectionDidChange: (NSNotification *)notification
{
[self validateSelection];
[_cell _setSelectedItem: [[notification object] selectedRow]];
[nc postNotificationName: NSComboBoxSelectionDidChangeNotification
object: [_cell controlView]
userInfo: nil];
}
// Key actions methods
@ -630,10 +651,8 @@ numberOfRowsInColumn: (int)column
if (index > -1 && index < [_tableView numberOfRows])
{
_localSelection = YES;
[_tableView selectRow: index byExtendingSelection: NO];
[_tableView scrollRowToVisible: index];
_localSelection = NO;
}
}
else
@ -642,9 +661,7 @@ numberOfRowsInColumn: (int)column
if (index > -1 && index < [[_browser matrixInColumn: 0] numberOfRows])
{
_localSelection = YES;
[_browser selectRow: index inColumn: 0];
_localSelection = NO;
}
}
}
@ -657,10 +674,8 @@ numberOfRowsInColumn: (int)column
if (index > -1 && index < [_tableView numberOfRows])
{
_localSelection = YES;
[_tableView selectRow: index byExtendingSelection: NO];
[_tableView scrollRowToVisible: index];
_localSelection = NO;
}
}
else
@ -669,25 +684,48 @@ numberOfRowsInColumn: (int)column
if (index > -1 && index < [[_browser matrixInColumn: 0] numberOfRows])
{
_localSelection = YES;
[_browser selectRow: index inColumn: 0];
_localSelection = NO;
}
}
}
- (void) validateSelection
{
if (_cell && _localSelection == NO)
if (_cell != nil)
{
if (!ForceBrowser)
NSText *textObject = nil;
NSControl *cv = [_cell controlView];
if ([cv isKindOfClass: [NSControl class]])
{
[_cell selectItemAtIndex: [_tableView selectedRow]];
}
else
{
[_cell selectItemAtIndex: [_browser selectedRowInColumn: 0]];
textObject = [(NSControl *)cv currentEditor];
}
[_cell setStringValue: [_cell _stringValueAtIndex:
[_cell indexOfSelectedItem]]];
// Will update the editor when needed
// FIXME: Because NSCell doesn't behave correctly the line just over has
// no effect, to correct this fact, the code below is needed.
[textObject setString: [_cell _stringValueAtIndex:
[_cell indexOfSelectedItem]]];
/*
* Dispatch the text notifications and by side effect update the cell
* object value with the -textDidChange: method of NSTextField which is
* the editor delegate
*/
[(NSTextView *)textObject didChangeText];
// End of the code to remove
if (textObject != nil)
{
[textObject setSelectedRange:
NSMakeRange(0, [[textObject string] length])];
}
[cv sendAction: [_cell action] to: [_cell target]];
_stopped = YES;
}
}
@ -713,13 +751,13 @@ numberOfRowsInColumn: (int)column
*/
/**
<p>No special instructions to use NSComboBoxCell or text to detail the implementation.</p>
*/
* <p>No special instructions to use NSComboBoxCell or text to detail the implementation.</p>
*/
@implementation NSComboBoxCell
//
// Class methods
//
/*
* Class methods
*/
+ (void) initialize
{
if (self == [NSComboBoxCell class])
@ -777,7 +815,10 @@ numberOfRowsInColumn: (int)column
* height in the list is inferior to the minimal height of the list displayed
* area.
*/
- (BOOL) hasVerticalScroller { return _hasVerticalScroller; }
- (BOOL) hasVerticalScroller
{
return _hasVerticalScroller;
}
/**
* Sets whether the combo box cell list displays a vertical scroller, by default
@ -799,7 +840,10 @@ numberOfRowsInColumn: (int)column
* Returns the width and the height (as the values of an NSSize variable)
* between each item of the combo box cell list.
*/
- (NSSize) intercellSpacing { return _intercellSpacing; }
- (NSSize) intercellSpacing
{
return _intercellSpacing;
}
/**
* Sets the width and the height between each item of the combo box cell list to
@ -813,7 +857,10 @@ numberOfRowsInColumn: (int)column
/**
* Returns the height of the items in the combo box cell list.
*/
- (float) itemHeight { return _itemHeight; }
- (float) itemHeight
{
return _itemHeight;
}
/**
* Sets the height of the items in the combo box cell list to
@ -829,7 +876,10 @@ numberOfRowsInColumn: (int)column
* Returns the maximum number of allowed items to be displayed in the combo box
* cell list.
*/
- (int) numberOfVisibleItems { return _visibleItems; }
- (int) numberOfVisibleItems
{
return _visibleItems;
}
/**
* Sets the maximum number of allowed items to be displayed in the combo box
@ -871,7 +921,10 @@ numberOfRowsInColumn: (int)column
* populate its items list, otherwise returns NO in the case it uses its default
* list.
*/
- (BOOL) usesDataSource { return _usesDataSource; }
- (BOOL) usesDataSource
{
return _usesDataSource;
}
/**
* Sets according to <var>flag</var> whether the combo box cell uses a data
@ -913,24 +966,18 @@ numberOfRowsInColumn: (int)column
{
// Method called by GSComboWindow when a selection is done in the table view or
// the browser
if (index < 0)
return; // raise exception?
if ([self numberOfItems] <= index)
return; // raise exception?
if (index < 0 || [self numberOfItems] <= index)
return; // FIXME: Probably we should raise an exception
if (_selectedItem != index)
{
NSText *textObject = [[[self controlView] window] fieldEditor: YES
forObject: self];
_selectedItem = index;
[self _setSelectedItem: index];
[_popup selectItemAtIndex: index];
// This method call will not create a infinite loop when the index has been
// already set by a mouse click because the method is not completed when the
// current index is not different from the index parameter
[textObject setString: [self _stringValueAtIndex: _selectedItem]];
[textObject setSelectedRange: NSMakeRange(0, [[textObject string] length])];
[nc postNotificationName: NSComboBoxSelectionDidChangeNotification
object: [self controlView]
@ -948,7 +995,7 @@ numberOfRowsInColumn: (int)column
{
if (_selectedItem == index)
{
_selectedItem = -1;
[self _setSelectedItem: -1];
[_popup deselectItemAtIndex: index];
@ -978,27 +1025,27 @@ numberOfRowsInColumn: (int)column
{
if (_usesDataSource)
{
if (!_dataSource)
if (_dataSource == nil)
{
NSLog(@"%@: No data source currently specified", self);
}
else
NSLog(@"%@: No data source currently specified", self);
}
else if ([_dataSource respondsToSelector:
@selector(numberOfItemsInComboBox:)])
{
if ([_dataSource respondsToSelector: @selector(numberOfItemsInComboBox:)])
{
return [_dataSource numberOfItemsInComboBox:
(NSComboBox *)[self controlView]];
}
else
{
if ([_dataSource respondsToSelector: @selector(numberOfItemsInComboBoxCell:)])
return [_dataSource numberOfItemsInComboBoxCell: self];
}
}
return [_dataSource numberOfItemsInComboBox:
(NSComboBox *)[self controlView]];
}
else if ([_dataSource respondsToSelector:
@selector(numberOfItemsInComboBoxCell:)])
{
return [_dataSource numberOfItemsInComboBoxCell: self];
}
}
else
return [_popUpList count];
{
return [_popUpList count];
}
return 0;
}
@ -1008,7 +1055,10 @@ numberOfRowsInColumn: (int)column
* take a look at the NSComboBoxDataSource informal protocol description. In
* the case <code>usesDataSource</code> returns NO, this method logs a warning.
*/
- (id) dataSource { return _dataSource; }
- (id) dataSource
{
return _dataSource;
}
/**
* Sets the combo box cell data source to <var>aSource</var>. Just calling this
@ -1022,11 +1072,15 @@ numberOfRowsInColumn: (int)column
*/
- (void) setDataSource: (id)aSource
{
if (!_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is not set to use a data source",
self);
if (_usesDataSource == NO)
{
NSLog(@"%@: This method is invalid, this combo box is not set to use a data source",
self);
}
else
_dataSource = aSource;
{
_dataSource = aSource;
}
}
/**
@ -1037,10 +1091,14 @@ numberOfRowsInColumn: (int)column
- (void) addItemWithObjectValue: (id)object
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList addObject: object];
{
[_popUpList addObject: object];
}
[self reloadData];
}
@ -1053,10 +1111,14 @@ numberOfRowsInColumn: (int)column
- (void) addItemsWithObjectValues: (NSArray *)objects
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList addObjectsFromArray: objects];
{
[_popUpList addObjectsFromArray: objects];
}
[self reloadData];
}
@ -1069,10 +1131,14 @@ numberOfRowsInColumn: (int)column
- (void) insertItemWithObjectValue: (id)object atIndex: (int)index
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList insertObject: object atIndex: index];
{
[_popUpList insertObject: object atIndex: index];
}
[self reloadData];
}
@ -1085,10 +1151,14 @@ numberOfRowsInColumn: (int)column
- (void) removeItemWithObjectValue: (id)object
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList removeObject: object];
{
[_popUpList removeObject: object];
}
[self reloadData];
}
@ -1101,10 +1171,14 @@ numberOfRowsInColumn: (int)column
- (void) removeItemAtIndex: (int)index
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList removeObjectAtIndex: index];
{
[_popUpList removeObjectAtIndex: index];
}
[self reloadData];
}
@ -1117,10 +1191,14 @@ numberOfRowsInColumn: (int)column
- (void) removeAllItems
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
[_popUpList removeAllObjects];
{
[_popUpList removeAllObjects];
}
[self reloadData];
}
@ -1137,8 +1215,10 @@ numberOfRowsInColumn: (int)column
- (void) selectItemWithObjectValue: (id)object
{
if (_usesDataSource)
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
{
NSLog(@"%@: This method is invalid, this combo box is set to use a data source",
self);
}
else
{
int i = [_popUpList indexOfObject: object];
@ -1186,7 +1266,7 @@ numberOfRowsInColumn: (int)column
{
if (_usesDataSource)
{
if (!_dataSource)
if (_dataSource == nil)
{
NSLog(@"%@: No data source currently specified", self);
return nil;
@ -1209,6 +1289,7 @@ numberOfRowsInColumn: (int)column
return [self itemObjectValueAtIndex: index];
}
}
return nil;
}
@ -1230,9 +1311,13 @@ numberOfRowsInColumn: (int)column
int index = [self indexOfSelectedItem];
if (index == -1)
return nil;
{
return nil;
}
else
return [_popUpList objectAtIndex: index];
{
return [_popUpList objectAtIndex: index];
}
}
}
@ -1257,7 +1342,7 @@ numberOfRowsInColumn: (int)column
/**
* Returns the combo box cell default items list in an array.
*/
- (NSArray *)objectValues
- (NSArray *) objectValues
{
if (_usesDataSource)
{
@ -1285,7 +1370,7 @@ numberOfRowsInColumn: (int)column
* In the case, you want another behavior, you can override this method without
* need to call the superclass method.
*/
- (NSString *)completedString:(NSString *)substring
- (NSString *) completedString: (NSString *)substring
{
if (nil == substring)
{
@ -1294,7 +1379,7 @@ numberOfRowsInColumn: (int)column
if (_usesDataSource)
{
if (!_dataSource)
if (_dataSource == NO)
{
NSLog(@"%@: No data source currently specified", self);
}
@ -1342,7 +1427,10 @@ numberOfRowsInColumn: (int)column
* Take a look at the <code>setCompletes:</code> method documentation to know
* how the automatic completion works.
*/
- (BOOL)completes { return _completes; }
- (BOOL) completes
{
return _completes;
}
/**
* Sets whether the combo box cell automatic completion is active or not.
@ -1354,18 +1442,21 @@ numberOfRowsInColumn: (int)column
* called, and when the returned string is longer than the current one in the text
* field, the completion occurs and the completed part gets selected.
*/
- (void)setCompletes:(BOOL)completes
- (void) setCompletes: (BOOL)completes
{
_completes = completes;
}
#define ComboBoxHeight 21 // FIX ME: All this stuff shouldn't be hardcoded
// Inlined methods
#define ButtonWidth 17
#define ButtonHeight 17
#define BorderSize 2
// the inset border for the top and the bottom of the button
// The inset border for the top and the bottom of the button
/*
* Inlined methods
*/
static inline NSRect textCellFrameFromRect(NSRect cellRect)
// Not the drawed part, precises just the part which receives events
{
@ -1387,6 +1478,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
+ (BOOL) prefersTrackingUntilMouseUp
{
return YES;
/* Needed to have the clickability of the button take in account when the tracking happens.
This method is call by the NSControl -mouseDown: method with the code :
[_cell trackMouse: e
@ -1459,7 +1551,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
NSRect textRect = textCellFrameFromRect(cellFrame);
BOOL result = NO;
// Should this be set by NSActionCell ?
// FIXME: May be that should be set by NSActionCell
if (_control_view != controlView)
_control_view = controlView;
@ -1480,8 +1572,8 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
| NSMouseMovedMask | NSLeftMouseDraggedMask | NSOtherMouseDraggedMask
| NSRightMouseDraggedMask;
NSPoint location;
while (!isMouseUp) // Loop until mouse goes up
while (isMouseUp == NO) // Loop until mouse goes up
{
location = [controlView convertPoint: [e locationInWindow] fromView: nil];
@ -1501,7 +1593,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
[controlView setNeedsDisplay: YES];
}
if (!isMouseUp)
if (isMouseUp == NO)
{
e = [NSApp nextEventMatchingMask: eventMask
untilDate: nil
@ -1523,7 +1615,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
}
}
return NO; // Pathological case, normally never happen
return NO; // Pathological case, normally never happens
}
- (void) resetCursorRect: (NSRect)cellFrame inView: (NSView *)controlView
@ -1700,7 +1792,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
&& _prevSelectedRange.location < selectedRange.location)
{
more = [self completedString: myString];
if (![more isEqualToString: myString])
if ([more isEqualToString: myString] == NO)
{
[textObject setString: more];
location = myStringLength;
@ -1717,18 +1809,18 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
- (NSString *) _stringValueAtIndex: (int)index
{
if (!_usesDataSource)
if (_usesDataSource == NO)
{
return [[self itemObjectValueAtIndex: index] description];
}
else
{
if (!_dataSource)
if (_dataSource == nil)
{
NSLog(@"%@: No data source currently specified", self);
return nil;
}
if ([_dataSource respondsToSelector:
else if ([_dataSource respondsToSelector:
@selector(comboBox:objectValueForItemAtIndex:)])
{
return [[_dataSource comboBox: (NSComboBox *)[self controlView]
@ -1842,7 +1934,7 @@ static inline NSRect buttonCellFrameFromRect(NSRect cellRect)
more = [self completedString: [self stringValue]];
if (_usesDataSource)
{
if (!_dataSource)
if (_dataSource == nil)
{
NSLog(@"%@: No data source currently specified", self);
}