[Pythonmac-SIG] NSTableView and NSOutlineView backgrounds

Drew McCormack drewmccormack at mac.com
Tue Oct 14 12:28:46 EDT 2003

>   SOFT_BLUE = NSColor.colorWithCalibratedRed_green_blue_alpha_(
>       0.92941, 0.95294, 0.99607, 1.0)
>   class MyOutlineView(NibClassBuilder.AutoBaseClass):
>       def drawRow_clipRect_(self, row, rect):
>           if row % 2 == 0 and not self.isRowSelected_(row):
>               SOFT_BLUE.set()
>               bounds = self.rectOfRow_(row)
>               path = NSBezierPath.fillRect_(bounds)
>           NSOutlineView.drawRow_clipRect_(self, row, rect)
> <snip>
> The inspiration for this came from Evan Jones' implementation in
> Objective-C, which is, of course, several times larger than the
> code above, especially since it involves more than only this one
> method:
As an fan of Obj-C, I can't really let this go unanswered. There seems 
quite a bit of animosity toward Obj-C from python programmers, and I 
don't really understand why.

To test the statement above, I rewrote the python code in Obj-C:

  id SoftBlue = [NSColor colorWithCalibratedRed:0.92941
	green: 0.95294 blue:0.99607 alpha:1.0];

   @interface MyOutlineView : NSOutlineView { }

   @implementation MyOutlineView
    -(void)drawRow:(int)row clipRect:(NSRect)rect {
           if ( row % 2 == 0 && ! [self isRowSelected:row] ) {
               [SoftBlue set];
               NSRect bounds = [self rectOfRow:row];
               path = [NSBezierPath fillRect:bounds];
               [self drawRow:row clipRect:rect];

This is 494 characters long. The python example is 445 characters long. 
So in this case Obj-C is 10% longer, and this is a worst case example, 
because the ratio of method code to class declaration code is low: 
python basically replaces the '@interface/@implementation' type 
keywords with a single 'class' keyword.

This leads me to something that I think is better in Obj-C than python: 
the smalltalk method naming. I like python a lot, and use it when I 
can. It is a concise language, and there are countless modules 
available which you can't find in Obj-C. But I find remembering method 
signatures, particularly the number or order of arguments, much more 
difficult in python than Obj-C. I have to continually go back to docs 
to jolt my memory. You don't have that problem in Obj-C, because you 
remember the method name, and it tells you what the arguments are. You 
often also avoid in-code comments, because the method calls are self 

In my view, monolithic method naming is a hangup from C/C++ that 
afflicts otherwise good languages like Java and python. It is the same 
as the countless linux windows managers that were too short-sighted to 
avoid using a 'Start' button. The dominant technology of the day 
dictates the trends, whether for good or bad.

Along these lines, has anyone ever 'hacked' the python interpreter to 
do smalltalk like messaging, with segmented names? I've been tempted to 
try it myself. You wouldn't think it would be that hard. Maybe just an 
extra stage to convert segmented names to underscored ones, the same 
way that PyObjC names methods. But I'm no python expert, so I don't 
know what would be involved.


Dr. Drew McCormack
Trade Strategist (www.trade-strategist.com)
Stock Market strategy design platform for Mac OS X.

More information about the Pythonmac-SIG mailing list