mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 06:51:44 +00:00
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:
parent
74841fc8ad
commit
3cbe23c511
5 changed files with 110 additions and 69 deletions
13
ChangeLog
13
ChangeLog
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue