Patch for bezier path encoding.

Add support for new dragging methods in table view.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@25660 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2007-12-02 20:43:32 +00:00
parent 74841fc8ad
commit 3cbe23c511
5 changed files with 110 additions and 69 deletions

View file

@ -1,3 +1,16 @@
2007-12-02 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSBezierPath.m (-encodeWithCoder:, -initWithCoder:):
Corrected some of the encoding problems reported by
Christopher Wojno <christopher@wojno.com>.
* Headers/AppKit/NSTableView.h: Add missing new data source method.
* Source/NSTableView.m (-encodeWithCoder:, -initWithCoder:):
Better decoding of header view, corner view and drag masks.
* Source/NSTableView.m (-_indexSetToArray:) New helper method.
* Source/NSTableView.m (-_startDragOperationWithEvent:,
-dragImageForRowsWithIndexes:...offset:, -_isDraggingSource,
_writeRows:toPasteboard:): Support for new dragging methods.
2007-12-01 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSTableView.h

View file

@ -350,9 +350,14 @@ objectValueForTableColumn: (NSTableColumn *)aTableColumn
validateDrop: (id <NSDraggingInfo>)info
proposedRow: (int)row
proposedDropOperation: (NSTableViewDropOperation)operation;
- (BOOL) tableView: (NSTableView *)tableView
- (BOOL) tableView: (NSTableView*)tableView
writeRows: (NSArray*)rows
toPasteboard: (NSPasteboard*)pboard;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
- (BOOL) tableView: (NSTableView*)tableView
writeRowsWithIndexes: (NSIndexSet*)rows
toPasteboard: (NSPasteboard*)pboard;
#endif
@end
APPKIT_EXPORT NSString *NSTableViewColumnDidMoveNotification;

View file

@ -1565,12 +1565,12 @@ static int winding_curve(double_point from, double_point to, double_point c1,
{
case NSMoveToBezierPathElement:
case NSLineToBezierPathElement:
[aCoder encodeValueOfObjCType: @encode(NSPoint) at: &pts[0]];
[aCoder encodePoint: pts[0]];
break;
case NSCurveToBezierPathElement:
[aCoder encodeValueOfObjCType: @encode(NSPoint) at: &pts[0]];
[aCoder encodeValueOfObjCType: @encode(NSPoint) at: &pts[1]];
[aCoder encodeValueOfObjCType: @encode(NSPoint) at: &pts[2]];
[aCoder encodePoint: pts[0]];
[aCoder encodePoint: pts[1]];
[aCoder encodePoint: pts[2]];
break;
case NSClosePathBezierPathElement:
break;
@ -1610,17 +1610,18 @@ static int winding_curve(double_point from, double_point to, double_point c1,
switch(type)
{
case NSMoveToBezierPathElement:
[aCoder decodeValueOfObjCType: @encode(NSPoint) at: &pts[0]];
pts[0] = [aCoder decodePoint];
[self moveToPoint: pts[0]];
break;
case NSLineToBezierPathElement:
[aCoder decodeValueOfObjCType: @encode(NSPoint) at: &pts[0]];
pts[0] = [aCoder decodePoint];
[self lineToPoint: pts[0]];
break;
case NSCurveToBezierPathElement:
[aCoder decodeValueOfObjCType: @encode(NSPoint) at: &pts[0]];
[aCoder decodeValueOfObjCType: @encode(NSPoint) at: &pts[1]];
[aCoder decodeValueOfObjCType: @encode(NSPoint) at: &pts[2]];
[self curveToPoint: pts[0] controlPoint1: pts[1] controlPoint2: pts[2]];
pts[0] = [aCoder decodePoint];
pts[1] = [aCoder decodePoint];
pts[2] = [aCoder decodePoint];
[self curveToPoint: pts[2] controlPoint1: pts[0] controlPoint2: pts[1]];
break;
case NSClosePathBezierPathElement:
[self closePath];

View file

@ -92,7 +92,7 @@ static NSImage *unexpandable = nil;
- (void) _willDisplayCell: (NSCell*)cell
forTableColumn: (NSTableColumn *)tb
row: (int)index;
- (BOOL) _writeRows: (NSArray *) rows
- (BOOL) _writeRows: (NSIndexSet *)rows
toPasteboard: (NSPasteboard *)pboard;
- (BOOL) _isDraggingSource;
- (id) _objectValueForTableColumn: (NSTableColumn *)tb
@ -1573,25 +1573,25 @@ static NSImage *unexpandable = nil;
}
}
- (BOOL) _writeRows: (NSArray *) rows
- (BOOL) _writeRows: (NSIndexSet *)rows
toPasteboard: (NSPasteboard *)pboard
{
int count = [rows count];
int i;
NSMutableArray *itemArray = [NSMutableArray arrayWithCapacity: count];
for (i = 0; i < count; i++)
unsigned int index = [rows firstIndex];
while (index != NSNotFound)
{
[itemArray addObject:
[self itemAtRow: [[rows objectAtIndex: i] intValue]]];
}
[itemArray addObject: [self itemAtRow: index]];
index = [rows indexGreaterThanIndex: index];
}
if ([_dataSource respondsToSelector:
@selector(outlineView:writeItems:toPasteboard:)] == YES)
{
return [_dataSource outlineView: self
writeItems: itemArray
toPasteboard: pboard];
writeItems: itemArray
toPasteboard: pboard];
}
return NO;
}

View file

@ -124,7 +124,7 @@ typedef struct _tableViewFlags
forTableColumn: (NSTableColumn *)tb
row: (int)index;
- (BOOL) _writeRows: (NSArray *) rows
- (BOOL) _writeRows: (NSIndexSet *)rows
toPasteboard: (NSPasteboard *)pboard;
- (BOOL) _isDraggingSource;
- (id)_objectValueForTableColumn: (NSTableColumn *)tb
@ -140,6 +140,7 @@ typedef struct _tableViewFlags
@interface NSTableView (SelectionHelper)
- (void) _setSelectingColumns: (BOOL)flag;
- (NSArray *) _indexSetToArray: (NSIndexSet*)indexSet;
- (NSArray *) _selectedRowArray;
- (BOOL) _selectRow: (int)rowIndex;
- (BOOL) _selectUnselectedRow: (int)rowIndex;
@ -2002,8 +2003,9 @@ static void computeNewSelection
_selectedColumn = -1;
_selectedRow = -1;
_highlightedTableColumn = nil;
_draggingSourceOperationMaskForLocal = NSDragOperationAll;
_draggingSourceOperationMaskForRemote = NSDragOperationAll;
_draggingSourceOperationMaskForLocal = NSDragOperationCopy
| NSDragOperationLink | NSDragOperationGeneric | NSDragOperationPrivate;
_draggingSourceOperationMaskForRemote = NSDragOperationNone;
}
- (id) initWithFrame: (NSRect)frameRect
@ -3451,20 +3453,22 @@ static inline float computePeriod(NSPoint mouseLocationWin,
- (BOOL) _startDragOperationWithEvent: (NSEvent *) theEvent
{
NSPasteboard *pboard;
NSArray *rows;
rows = [self _selectedRowArray];
pboard = [NSPasteboard pasteboardWithName: NSDragPboard];
if ([self _writeRows: rows
toPasteboard: pboard] == YES)
if ([self _writeRows: _selectedRows
toPasteboard: pboard] == YES)
{
NSPoint p = NSZeroPoint;
NSImage *dragImage;
NSSize s;
dragImage = [self dragImageForRows: rows
event: theEvent
dragImageOffset: &p];
// FIXME
NSArray *cols = nil;
dragImage = [self dragImageForRowsWithIndexes: _selectedRows
tableColumns: cols
event: theEvent
offset: &p];
/*
* Store image offset in s ... the returned
* value is the position of the center of
@ -5525,10 +5529,12 @@ static BOOL selectContiguousRegion(NSTableView *self,
offset: (NSPoint*)offset;
{
// FIXME
NSImage *dragImage = [[NSImage alloc]
initWithSize: NSMakeSize(8, 8)];
NSArray *rowArray;
return AUTORELEASE(dragImage);
rowArray = [self _indexSetToArray: rows];
return [self dragImageForRows: rowArray
event: event
dragImageOffset: offset];
}
- (void) setDropRow: (int)row
@ -5712,6 +5718,19 @@ static BOOL selectContiguousRegion(NSTableView *self,
}
[self setIntercellSpacing: intercellSpacing];
if ([aDecoder containsValueForKey: @"NSDraggingSourceMaskForLocal"])
{
[self setDraggingSourceOperationMask:
[aDecoder decodeIntForKey: @"NSDraggingSourceMaskForLocal"]
forLocal: YES];
}
if ([aDecoder containsValueForKey: @"NSDraggingSourceMaskForNonLocal"])
{
[self setDraggingSourceOperationMask:
[aDecoder decodeIntForKey: @"NSDraggingSourceMaskForNonLocal"]
forLocal: NO];
}
if ([aDecoder containsValueForKey: @"NSRowHeight"])
{
[self setRowHeight: [aDecoder decodeFloatForKey: @"NSRowHeight"]];
@ -5721,26 +5740,23 @@ static BOOL selectContiguousRegion(NSTableView *self,
forClassName: @"_NSCornerView"];
if ([aDecoder containsValueForKey: @"NSCornerView"])
{
NSRect viewFrame;
float rowHeight = [self rowHeight];
[self setCornerView: [aDecoder decodeObjectForKey: @"NSCornerView"]];
viewFrame = [[self cornerView] frame];
viewFrame.size.height = rowHeight;
[[self cornerView] setFrame: viewFrame];
}
else
{
_cornerView = [GSTableCornerView new];
}
// if ([aDecoder containsValueForKey: @"NSHeaderView"])
if ([aDecoder containsValueForKey: @"NSHeaderView"])
{
[self setHeaderView: [aDecoder decodeObjectForKey: @"NSHeaderView"]];
}
else
{
NSRect viewFrame = [self frame];
float rowHeight = [self rowHeight];
_headerView = [[NSTableHeaderView alloc] init];
[_headerView setFrameSize: NSMakeSize(viewFrame.size.width, rowHeight)];
[_headerView setFrameSize: NSMakeSize(viewFrame.size.width, 22.0)];
[_headerView setTableView: self];
}
@ -6589,18 +6605,30 @@ static BOOL selectContiguousRegion(NSTableView *self,
- (BOOL) _isDraggingSource
{
return [_dataSource respondsToSelector:
@selector(tableView:writeRows:toPasteboard:)];
@selector(tableView:writeRows:toPasteboard:)]
|| [_dataSource respondsToSelector:
@selector(tableView:writeRowsWithIndexes:toPasteboard:)];
}
- (BOOL) _writeRows: (NSArray *) rows
- (BOOL) _writeRows: (NSIndexSet *)rows
toPasteboard: (NSPasteboard *)pboard
{
if ([_dataSource respondsToSelector:
@selector(tableView:writeRows:toPasteboard:)] == YES)
@selector(tableView:writeRowsWithIndexes:toPasteboard:)] == YES)
{
return [_dataSource tableView: self
writeRows: rows
toPasteboard: pboard];
writeRowsWithIndexes: rows
toPasteboard: pboard];
}
else if ([_dataSource respondsToSelector:
@selector(tableView:writeRows:toPasteboard:)] == YES)
{
NSArray *rowArray;
rowArray = [self _indexSetToArray: rows];
return [_dataSource tableView: self
writeRows: rowArray
toPasteboard: pboard];
}
return NO;
}
@ -6626,20 +6654,25 @@ static BOOL selectContiguousRegion(NSTableView *self,
}
}
- (NSArray *) _selectedRowArray
- (NSArray *) _indexSetToArray: (NSIndexSet*)indexSet
{
NSMutableArray *selected = [NSMutableArray array];
unsigned int row = [_selectedRows firstIndex];
NSMutableArray *array = [NSMutableArray array];
unsigned int index = [indexSet firstIndex];
while (row != NSNotFound)
while (index != NSNotFound)
{
NSNumber *num = [NSNumber numberWithInt: row];
NSNumber *num = [NSNumber numberWithInt: index];
[selected addObject: num];
row = [_selectedRows indexGreaterThanIndex: row];
[array addObject: num];
index = [indexSet indexGreaterThanIndex: index];
}
return selected;
return array;
}
- (NSArray *) _selectedRowArray
{
return [self _indexSetToArray: _selectedRows];
}
- (BOOL) _selectRow: (int)rowIndex
@ -6702,18 +6735,7 @@ static BOOL selectContiguousRegion(NSTableView *self,
- (NSArray *) _selectedColumArray
{
NSMutableArray *selected = [NSMutableArray array];
unsigned int column = [_selectedColumns firstIndex];
while (column != NSNotFound)
{
NSNumber *num = [NSNumber numberWithInt: column];
[selected addObject: num];
column = [_selectedColumns indexGreaterThanIndex: column];
}
return selected;
return [self _indexSetToArray: _selectedColumns];
}
- (void) _unselectAllColumns