Warning: Creating default object from empty value in /www/htdocs/harmless/hscs.php on line 239
harmless Cocoa: AMButtonBar
AMButtonBar 2007-03-16 00:27:28
Create a bar of buttons, similar to those in iTunes 6 or in the Finder search pane.
Button Bar Sample
von Andreas www.harmless.de

The latest version includes the fix below. It also adds support for separators and replaces CTGradient with NSGradient.

von Andreas www.harmless.de

For those who haven't figured it out yet:
You replace

result = ceilf([font widthOfString:[self title]]);

with

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
result = ceilf([[self title] sizeWithAttributes:attributes].width);

von Todd Ransom

Hey Andreas,

Do you have any plans to update AMButtonBar? The calls to -[NSFont widthOfString:] are deprecated.

von Derek Bolli

Great code effort. Note that "#import "NSBezierPath_AMShading.h" " needs to be commented out on line 22 of AMButtonBarCell.h as it does not exist. Thanks again, Derek Bolli, Sydney Australia.

von Andreas www.harmless.de

Die aktuelle Version unterstützt weder Separator noch Overflow-Menüs. Da das Suchfeld unabhängig vom Buttonbar ist, kann man es einfach als Subview einfügen.

The current version does not support separators or overflow menus. Since a search field has no dependency on the button bar, you may simply add it as a subview.

von iwan Negro

hallo! vielen dank für die tolle ambuttonbar. ich frage mich nur ob es dazu auch eine doku gibt? wie setze ich zum beispiel einen separator, ein overflow pfeil oder ein suchfeld?

von Andreas www.harmless.de

Thank you.
Yes, I always forget about the problems with moving views. :)

It's actually a bit more complicated, but I already solved this problem in my AMRollOverButton class. In -viewDidMoveToWindow I'm now registering for both, NSViewFrameDidChangeNotification and NSWindowDidResizeNotification.

That seems to work for me, no matter how the view is moved. I'll upload an updated archive soon.

von Paulo Andrade

Excellent code, congratulatios.
I'm using this for my app, and it's working nicely.
Allow me to make just one seggestion, in AMButtonBar.m add:
- (void)setFrame:(NSRect)frameRect
{
[self setNeedsLayout:YES];
[super setFrame:frameRect];
}

This will allow to update the trackingRectangles when the frame of the View is changed, such as when the ButtonBar is inside an NSSplitView and the user moves the splitter handle.

Name:  Passwort: (1)
Email: (2)
Webseite: (3)
Kommentar:
{captcha}
Obige Zeichen eingeben: (Groß-/Kleinschreibung egal)
   

1) Bitte geben Sie möglichst Ihren echten Namen an. (Momentan gibt es keine Möglichkeit, einen festen Account anzulegen.)

2) Ihre Email-Adresse wird nie veröffentlicht werden. Die Angabe ermöglicht mir, Sie ggf. zu kontaktieren.

3) Die Adresse Ihrer Webseite wird zusammen mit Ihrem Namen veröffentlicht. Bitte kurz halten.

Ich behalte mir das Recht vor, Beiträge aus beliebigen Gründen zu löschen.
Also bitte keinen SPAM posten, beim Thema bleiben, nicht unverschämt werden, etc.