fix drawing bug when number of rows decreases

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@29065 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2009-11-26 20:33:44 +00:00
parent 97d1907a52
commit 82d1ada3dc
4 changed files with 32 additions and 20 deletions

View file

@ -1,3 +1,8 @@
2009-11-26 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSTableView.m: ([-noteNumberOfRowsChanged]) fid to redraw
the rectangle in the superview if the receiver shrinks.
2009-11-25 Wolfgang Lux <wolfgang.lux@gmail.com> 2009-11-25 Wolfgang Lux <wolfgang.lux@gmail.com>
* Source/NSCell.m (-_updateFieldEditor:): Don't write back * Source/NSCell.m (-_updateFieldEditor:): Don't write back

View file

@ -2174,6 +2174,7 @@ IF_NO_GC(NSAssert([event retainCount] > 0, NSInternalInconsistencyException));
if (resp != nil) if (resp != nil)
{ {
IMP actionIMP = [resp methodForSelector: aSelector]; IMP actionIMP = [resp methodForSelector: aSelector];
if (0 != actionIMP) if (0 != actionIMP)
{ {
actionIMP(resp, aSelector, sender); actionIMP(resp, aSelector, sender);

View file

@ -139,7 +139,7 @@ static NSImage *unexpandable = nil;
* the superclass method initWithFrame: as well to initialize the object. * the superclass method initWithFrame: as well to initialize the object.
* *
*/ */
- (id)initWithFrame: (NSRect)frame - (id) initWithFrame: (NSRect)frame
{ {
self = [super initWithFrame: frame]; self = [super initWithFrame: frame];
@ -177,8 +177,8 @@ static NSImage *unexpandable = nil;
} }
/** /**
* Causes the outline column, the column containing the expand/collapse gadget, to * Causes the outline column, the column containing the expand/collapse
* resize based on the amount of space needed by widest content. * gadget, to resize based on the amount of space needed by widest content.
*/ */
- (BOOL)autoResizesOutlineColumn - (BOOL)autoResizesOutlineColumn
{ {
@ -186,8 +186,8 @@ static NSImage *unexpandable = nil;
} }
/** /**
* Causes the outline column, the column containing the expand/collapse gadget, to * Causes the outline column, the column containing the expand/collapse
* resize based on the amount of space needed by widest content. * gadget, to resize based on the amount of space needed by widest content.
*/ */
- (BOOL)autosaveExpandedItems - (BOOL)autosaveExpandedItems
{ {
@ -198,17 +198,17 @@ static NSImage *unexpandable = nil;
* Collapses the given item only. This is the equivalent of calling * Collapses the given item only. This is the equivalent of calling
* [NSOutlineView-collapseItem:collapseChildren:] with NO. * [NSOutlineView-collapseItem:collapseChildren:] with NO.
*/ */
- (void)collapseItem: (id)item - (void) collapseItem: (id)item
{ {
[self collapseItem: item collapseChildren: NO]; [self collapseItem: item collapseChildren: NO];
} }
/** /**
* Collapses the specified item. If collapseChildren is set to YES, then all of the * Collapses the specified item. If collapseChildren is set to YES,
* expandable children of this item all also collapsed in a recursive fashion (i.e. * then all of the expandable children of this item all also collapsed
* all children, grandchildren and etc). * in a recursive fashion (i.e. all children, grandchildren and etc).
*/ */
- (void)collapseItem: (id)item collapseChildren: (BOOL)collapseChildren - (void) collapseItem: (id)item collapseChildren: (BOOL)collapseChildren
{ {
const SEL shouldSelector = @selector(outlineView:shouldCollapseItem:); const SEL shouldSelector = @selector(outlineView:shouldCollapseItem:);
BOOL canCollapse = YES; BOOL canCollapse = YES;
@ -250,7 +250,7 @@ static NSImage *unexpandable = nil;
allChildren = NSMapGet(_itemDict, sitem); allChildren = NSMapGet(_itemDict, sitem);
numchild = [allChildren count]; numchild = [allChildren count];
for (index = 0;index < numchild;index++) for (index = 0; index < numchild; index++)
{ {
id child = [allChildren objectAtIndex: index]; id child = [allChildren objectAtIndex: index];
@ -328,7 +328,7 @@ static NSImage *unexpandable = nil;
allChildren = NSMapGet(_itemDict, sitem); allChildren = NSMapGet(_itemDict, sitem);
numchild = [allChildren count]; numchild = [allChildren count];
for (index = 0;index < numchild;index++) for (index = 0; index < numchild; index++)
{ {
id child = [allChildren objectAtIndex: index]; id child = [allChildren objectAtIndex: index];
@ -930,7 +930,7 @@ static NSImage *unexpandable = nil;
if (_autoResizesOutlineColumn) if (_autoResizesOutlineColumn)
{ {
float widest = 0; float widest = 0;
for (index = 0;index < _numberOfRows; index++) for (index = 0; index < _numberOfRows; index++)
{ {
float offset = [self levelForRow: index] * float offset = [self levelForRow: index] *
[self indentationPerLevel]; [self indentationPerLevel];
@ -1764,7 +1764,7 @@ static NSImage *unexpandable = nil;
// For the close method it doesn't matter what order they are // For the close method it doesn't matter what order they are
// removed in. // removed in.
for (i=0; i < numchildren; i++) for (i = 0; i < numchildren; i++)
{ {
id child = [removeAll objectAtIndex: i]; id child = [removeAll objectAtIndex: i];
[_items removeObject: child]; [_items removeObject: child];
@ -1798,7 +1798,7 @@ static NSImage *unexpandable = nil;
insertionPoint++; insertionPoint++;
} }
for (i=numchildren-1; i >= 0; i--) for (i = numchildren-1; i >= 0; i--)
{ {
id obj = NSMapGet(_itemDict, sitem); id obj = NSMapGet(_itemDict, sitem);
id child = [obj objectAtIndex: i]; id child = [obj objectAtIndex: i];

View file

@ -4414,6 +4414,7 @@ static BOOL selectContiguousRegion(NSTableView *self,
- (void) setFrame: (NSRect)frameRect - (void) setFrame: (NSRect)frameRect
{ {
NSRect tmpRect = frameRect; NSRect tmpRect = frameRect;
if ([_super_view respondsToSelector: @selector(documentVisibleRect)]) if ([_super_view respondsToSelector: @selector(documentVisibleRect)])
{ {
float rowsHeight = ((_numberOfRows * _rowHeight) + 1); float rowsHeight = ((_numberOfRows * _rowHeight) + 1);
@ -4758,6 +4759,8 @@ static BOOL selectContiguousRegion(NSTableView *self,
- (void) noteNumberOfRowsChanged - (void) noteNumberOfRowsChanged
{ {
NSRect newFrame;
_numberOfRows = [self _numRows]; _numberOfRows = [self _numRows];
/* If we are selecting rows, we have to check that we have no /* If we are selecting rows, we have to check that we have no
@ -4832,10 +4835,13 @@ static BOOL selectContiguousRegion(NSTableView *self,
} }
} }
[self setFrame: NSMakeRect (_frame.origin.x, newFrame = _frame;
_frame.origin.y, newFrame.size.height = (_numberOfRows * _rowHeight) + 1;
_frame.size.width, if (NO == NSEqualRects(newFrame, NSUnionRect(newFrame, _frame)))
(_numberOfRows * _rowHeight) + 1)]; {
[_super_view setNeedsDisplayInRect: _frame];
}
[self setFrame: newFrame];
/* If we are shorter in height than the enclosing clipview, we /* If we are shorter in height than the enclosing clipview, we
should redraw us now. */ should redraw us now. */
@ -4844,7 +4850,7 @@ static BOOL selectContiguousRegion(NSTableView *self,
NSRect superviewBounds; // Get this *after* [self setFrame:] NSRect superviewBounds; // Get this *after* [self setFrame:]
superviewBounds = [_super_view bounds]; superviewBounds = [_super_view bounds];
if ((superviewBounds.origin.x <= _frame.origin.x) if ((superviewBounds.origin.x <= _frame.origin.x)
&& (NSMaxY(superviewBounds) >= NSMaxY(_frame))) && (NSMaxY(superviewBounds) >= NSMaxY(_frame)))
{ {
[self setNeedsDisplay: YES]; [self setNeedsDisplay: YES];
} }