Re: A custom cell in a NSOutlineView
Re: A custom cell in a NSOutlineView
- Subject: Re: A custom cell in a NSOutlineView
- From: Eric Gorr <email@hidden>
- Date: Fri, 9 Jan 2009 11:58:48 -0500
Thanks for the information. It was quite useful.
p.s. you have my permission to slap whomever is preventing the mention
of the PhotoSearch sample code at:
http://developer.apple.com/documentation/Cocoa/Reference/ApplicationKit/Classes/NSOutlineView_Class/Reference/Reference.html
in the Related Sample Code section.
On Jan 8, 2009, at 4:50 PM, Corbin Dunn wrote:
My second idea is that I could just dynamically add and remove
columns & rows, but the problem is that in order to display the
group titles, the column they are displayed in needs to be
wide...when I added multiple columns, the column of the group title
was never wide enough - they would always get clipped. If I had
continued down this line, I suspect I would have had trouble
dynamically adding and removing columns as the user was resizing
the NSPanel.
RE: group rows. Take a look at the DragNDropOutlineView example in
Leopard, and this delegate method (return something for the nil
column):
/* Optional - Different cells for each row
A different data cell can be returned for any particular
tableColumn and item, or a cell that will be used for the entire row
(a full width cell). The returned cell should properly implement
copyWithZone:, since the cell may be copied by NSTableView. If the
tableColumn is non-nil, you should return a cell, and generally you
will want to default to returning the result from [tableColumn
dataCellForRow:row].
When each row (identified by the item) is being drawn, this
method will first be called with a nil tableColumn. At this time,
you can return a cell that will be used to draw the entire row,
acting like a group. If you do return a cell for the 'nil'
tableColumn, be prepared to have the other corresponding datasource
and delegate methods to be called with a 'nil' tableColumn value. If
don't return a cell, the method will be called once for each
tableColumn in the tableView, as usual.
*/
- (NSCell *)outlineView:(NSOutlineView *)outlineView
dataCellForTableColumn:(NSTableColumn *)tableColumn item:(id)item
AVAILABLE_MAC_OS_X_VERSION_10_5_AND_LATER;
The third idea was to subclass NSTextFieldCell and do all of the
drawing myself. Each group (Gradients, Hatches, Images, etc.)
contains just a single row with a single subclass of a
NSTextFieldCell. It is this implementation that is pictured above.
As you can see it mostly works and I can dynamically alter the row
height so each item fits and moves to different rows as needed.
I've seen this done both ways; with/without columns, or with a
single cell. Multiple Columns might be easier, especially with group
rows, but it might also be difficult, as you have to dynamically add/
remove them as the window resizes. So, a single cell that draws
multiple pieces might be easier -- you could use subcells to do the
actual work.
The PhotoSearch example (easy to find on the developer site) is a
good example to start from. It also shows group rows.
The problem I am having with this is that I cannot seem to get any
help with tracking the mouse (see the thread http://tinyurl.com/9y8to9)
.
The PhotoSearch example shows how to do this. Instead of doing the
tracking in the cell, you can forward the tracking to a sub-cell.
The final idea is to dump NSTextFieldCell, since it seems to be
eating all mouseUp and mouse tracking information, and go with a
completely custom cell. I understand this may be a lot of work, but
I cannot see a way around it at the moment.
You could have a main cell that subclasses NSCell, and sub-cells in
it that subclass NSTextFieldCell for drawing the text.
corbin
I am hoping that someone else might have some alternate ideas or a
pointer to some sample code of a subclass of NSCell which was
written to work with a NSTableView.
One alternative that had been suggested is to simulate a
NSOutlineView with a NSCollectionView. However, it is unclear how
well this would actually work. Would it support the editing of the
names of the items? Would it support rows of different heights?
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden