Corbin's Treehouse - Corbin Dunn, Santa Cruz, CA
Plug Bug

Archive for June, 2005

Different cells on each row in an NSTableView or NSOutlineView

Some people have asked me how to dynamically change the cell that is displayed for each row in an NSTableView or NSOutlineView. Generally, the same cell is used for each row, but it is possible to use a different cell for each row, if you like. NSTableColumn can change the cell that is used for each row. NSTableView calls -[NSTableColumn dataCellForRow:(int)row] for each row. Now, consider this code: @interface NSObject (VariableCellColumnDelegate) - (id)tableColumn:(NSTableColumn *)column inTableView:(NSTableView *)tableView dataCellForRow:(int)row; @end @interface VariableCellColumn : NSTableColumn @end @implementation VariableCellColumn - (id)dataCellForRow:(int)row { id delegate = [[self tableView] delegate]; if ([delegate respondsToSelector:@selector(tableColumn:inTableView:dataCellForRow:)]) { return [delegate... [read more]

Fixing the annoying focus stealing habit of Safari RSS feeds

Safari RSS support is way cool. Except for the fact that after a page has loaded, the search field receives focus, causing the space bar to not scroll down a page at a time. I wanted to fix this…but how? Well, I browsed to an RSS feed and viewed the source in Safari. I noticed this line: <script language=JavaScript src=“feed:///__rsrc__/Articles.js”> So, Safari uses some internal file called Articles.js. Now, where is it? Well, I dropped down to a command prompt in Console, logged in as root (su’d) and typed: nibroc:/Users/corbin/Desktop root# fs_usage -w -f filesys Safari | grep Articles.js Okay!... [read more]

Debugging OCTest bundles

Another old article: June 20, 2005 Debugging OCTest bundles To debug OCTest bundles: 1. Add a new executable to your Xcode project pointing it to “otest” at /Developer/Tools/otest 2. Double click on the executable, and add two run params (requires Xcode 2.1):   a. -SenTest Self   b. $(BUILT_PRODUCTS_DIR)/YourBundleName.octest This makes it REALLY easy to debug OCUnit tests. You can debug an individual test suite with:   -SenTest UnitTestClassName or an individual test case with:   -SenTest UnitTestClassName/testMethodName For instance, here is what one of my arguments looks like in Xcode 2.1: I can easily test/debug all tests, or an individual... [read more]

Repost: How to find memory leaks in Cocoa apps with Object Alloc

(The original of this I accidentally killed — here is a copy). If your Cocoa application leaks memory, here is a way to find those leaks! 1) Open your application in Object Alloc 2) Start the process, and check to have retain events: 3) Run to a known state 4) Check "Show since mark" 5) Click "Auto sort" 6) Click the "Current" column header to sort on that automatically 7) Click the Mark button 8) Do the offending memory leak operation (to warm it up) 9) Click Mark again, and repeat the offending memory leak operation 10) Take a look... [read more]

Changing the disclosure triangle in an NSOutlineView

At WWDC I was asked how to remove the disclosure triangle in an NSOutlineView. Well, first things first. You can change it with this bit of code in your delegate: - (void)outlineView:(NSOutlineView *)ov willDisplayOutlineCell:(NSButtonCell *)cell forTableColumn:(NSTableColumn *)tableColumn item:(id)item { [cell setImage:[NSImage imageNamed:@“collapsedglyph.tiff”]]; [cell setAlternateImage:[NSImage imageNamed:@“expandedglyph.tiff”]]; } If you want to set it to nil, you will have to create an image that is empty. –corbin

rail unicycle riding at East Cliff Rd, Santa Cruz, CA (aka: ‘the hook’)

I did some cool rail riding last weekend: Here’s a snapshot: I am actually right above the cliff. Check out the other pictures. Cool, huh! This is what I do in my spare time. Today, after work, I’m doing a mountain unicycle ride at the Soquel Demo forest.

Tooltips for NSTableView cell’s in Tiger

At WWDC, I quickly mentioned how easy it is to add tooltip’s to an NSCell for an NSTableView/NSOutlineView. Here is a quick snippet of code on how to do this only if the text doesn’t fill up the entire cell: - (NSString *)tableView:(NSTableView *)tv toolTipForCell:(NSCell *)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn *)tc row:(int)row mouseLocation:(NSPoint)mouseLocation { if ([cell isKindOfClass:[NSTextFieldCell class]]) { if ([[cell attributedStringValue] size].width > rect->size.width) { return [cell stringValue]; } } return nil; } You will obviously have to set the delegate for the tableview to be whatever class implements the above method, and this will only work on Tiger. But, it... [read more]

Tiger and the keyboard

Okay, one of the coolest Tiger enhancements has to do with keyboard shortcuts. The “really smart” Human Interface people at Apple figured out some stuff that bothered me in Panther. The main one that I like is “move focus to the menu bar”. Turn on this shortcut in the “keyboard and mouse” section of System Preferences. By default it is set to Ctrl-F2, but i changed it to Cmd-F2 because it is easier to type. First, how does it work? Well, you type “Ctrl-F2” (Cmd-F2 in my case), and the Apple menu item has focus. Begin typing, and “type to... [read more]

Drawing a “mail like” border on items in an NSTableView

Mail has a cool way of making unread messages stand out. It is really easy to do this type of thing with NSTableView/NSOutlineView. Subclass the one you want, and override drawRow. Toss in the code you see below, and it should give a cool highlight on all expandable rows in an NSOutlineView (you will have to modify it to have it work in NSTableView — just remove the call to isExpandable). - (void)drawRow:(int)row clipRect:(NSRect)clipRect { if (([self isExpandable:[self itemAtRow:row]]) && (![self isRowSelected:row])) { // Draw a light-blue “mail like” border around the row, if not selected NSRect rect = [self... [read more]

(c) 2008-2017 Corbin Dunn

Corbin's Treehouse is powered by WordPress. Made on a Mac.

Subscribe to RSS feeds for entries and comments.

38 queries. 0.459 seconds.