57 var _availableTraits= [@"Normal", @"Italic", @"Bold", @"Bold Italic"],
58 _availableSizes = [@"9", @"10", @"11", @"12", @"13", @"14", @"18", @"24", @"36", @"48", @"72", @"96"];
69 CPArray _availableFonts;
72 int _currentColorButtonTag;
79 #pragma mark Class methods 84 + (BOOL)sharedFontPanelExists
86 return _sharedFontPanel !== nil;
94 if (!_sharedFontPanel)
97 return _sharedFontPanel;
102 #pragma mark Init methods 111 [
self setLevel:CPFloatingWindowLevel];
126 - (void)_setupToolbarView
128 _toolbarView = [[
CPView alloc] initWithFrame:CGRectMake(0, kBorderSpacing, CGRectGetWidth([
self frame]), kToolbarHeight)];
129 [_toolbarView setAutoresizingMask:CPViewWidthSizable];
132 _textColorWell = [[
CPColorWell alloc] initWithFrame:CGRectMake(10, 0, 25, 25)];
133 [_textColorWell setColor:_textColor];
134 [_toolbarView addSubview:_textColorWell];
137 - (void)_setupBrowser:(
CPBrowser)aBrowser
145 [[
self contentView] addSubview:aBrowser];
148 - (void)_setupContents
155 [
self _setupToolbarView];
157 var contentView = [
self contentView],
159 contentBounds = [contentView bounds],
160 upperView = [[
CPView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(contentBounds), CGRectGetHeight(contentBounds) - (kBorderSpacing + kToolbarHeight + kInnerSpacing))];
162 [contentView addSubview:_toolbarView];
164 _fontBrowser = [[
CPBrowser alloc] initWithFrame:CGRectMake(10, 35, 150, 350)];
165 _traitBrowser = [[
CPBrowser alloc] initWithFrame:CGRectMake(155, 35, 150, 350)];
166 _sizeBrowser = [[
CPBrowser alloc] initWithFrame:CGRectMake(300, 35, 140, 350)];
168 [
self _setupBrowser:_fontBrowser];
169 [
self _setupBrowser:_traitBrowser];
170 [
self _setupBrowser:_sizeBrowser];
174 name:CPTextViewDidChangeSelectionNotification
180 [
self _refreshWithTextView:[notification
object]];
184 - (void)_refreshWithTextView:(
CPTextView)textView
186 if (![
self isVisible])
189 var attribs = [textView _attributesForFontPanel],
191 color = [attribs objectForKey:CPForegroundColorAttributeName];
198 if ([font isItalic] && [font isBold])
200 else if ([font isItalic])
202 else if ([font isBold])
205 [
self setCurrentFont:font];
206 [
self setCurrentTrait:trait];
207 [
self setCurrentSize:[font size] + ""];
212 [_textColorWell setColor:color];
215 - (void)orderFront:(
id)sender
217 [
self _setupContents];
219 [
self _refreshWithTextView:[[CPApp keyWindow] firstResponder]];
222 - (void)reloadDefaultFontFamilies
227 - (BOOL)worksWhenModal
241 switch (_fontChanges)
268 CPLog.trace(
@"FIXME: -[" + [
self className] +
" " + _cmd +
"] unhandled _fontChanges: " + _fontChanges);
275 - (void)setCurrentSize:(CGSize)aSize
277 [_sizeBrowser selectRow:[_availableSizes indexOfObject:aSize] inColumn:0];
282 return [_sizeBrowser selectedItem];
287 [_fontBrowser selectRow:[_availableFonts indexOfObject:[aFont
familyName]] inColumn:0];
292 return [_fontBrowser selectedItem];
295 - (void)setCurrentTrait:(
unsigned)aTrait
314 [_traitBrowser selectRow:row inColumn:0];
318 - (unsigned)currentTrait
320 var sel = [_traitBrowser selectedItem];
322 if (sel ===
"Italic")
328 if (sel ===
"Bold Italic")
339 - (void)setPanelFont:(
CPFont)font isMultiple:(BOOL)flag
341 [
self _setupContents];
343 if ([
self currentFont] !== [font familyName])
346 if ([
self currentSize] != [font size])
359 if ([
self currentTrait] != typefaceIndex)
365 - (void)changeColor:(
id)sender
367 _textColor = [sender color];
374 - (void)browserClicked:(
id)aBrowser
376 if (aBrowser === _fontBrowser)
381 else if (aBrowser === _traitBrowser)
386 else if (aBrowser === _sizeBrowser)
393 - (void)dblClicked:(
id)sender
398 - (id)browser:(
id)aBrowser numberOfChildrenOfItem:(
id)anItem
400 if (aBrowser === _fontBrowser)
401 return [_availableFonts count];
403 if (aBrowser === _traitBrowser)
404 return [_availableTraits count];
406 return [_availableSizes count]
409 - (id)browser:(
id)aBrowser child:(
int)index ofItem:(
id)anItem
411 if (aBrowser === _fontBrowser)
412 return [_availableFonts objectAtIndex:index];
414 if (aBrowser === _traitBrowser)
415 return [_availableTraits objectAtIndex:index];
417 return [_availableSizes objectAtIndex:index];
420 - (id)browser:(
id)aBrowser objectValueForItem:(
id)anItem
425 - (BOOL)browser:(
id)aBrowser isLeafItem:(
id)anItem
void setCurrentFont:(CPFont aFont)
void setDelegate:(id< CPBrowserDelegate > anObject)
void setAction:(SEL anAction)
void setFontPanelFactory:(Class aClass)
void setCurrentTrait:(unsigned aTrait)
CPFont systemFontOfSize:(CGSize aSize)
void setTarget:(id aTarget)
var kTypefaceIndex_Normal
void addObserver:selector:name:object:(id anObserver, [selector] SEL aSelector, [name] CPString aNotificationName, [object] id anObject)
void setTitle:(CPString aTitle)
CPFont convertFont:toSize:(CPFont aFont, [toSize] float aSize)
CPNotificationCenter defaultCenter()
A mutable key-value pair collection.
CPFont convertFont:toNotHaveTrait:(CPFont aFont, [toNotHaveTrait] CPFontTraitMask fontTrait)
void orderFront:(id aSender)
void setCurrentSize:(CGSize aSize)
An immutable string (collection of characters).
var kTypefaceIndex_BoldItalic
void setAllowsMultipleSelection:(BOOL shouldAllow)
CPFontDescriptor fontDescriptor()
CPFontDescriptor fontDescriptorByAddingAttributes:(CPDictionary attributes)
void setFloatingPanel:(BOOL isFloatingPanel)
CPFontManager sharedFontManager()
A notification that can be posted to a CPNotificationCenter.
CPFontSymbolicTraits symbolicTraits()
void setAllowsEmptySelection:(BOOL shouldAllow)
CPColor colorWithWhite:alpha:(float white, [alpha] float alpha)
var kTypefaceIndex_Italic
CPFont fontWithDescriptor:size:(CPFontDescriptor fontDescriptor, [size] float aSize)
void setBecomesKeyOnlyIfNeeded:(BOOL shouldBecomeKeyOnlyIfNeeded)
CPFont convertFont:toHaveTrait:(CPFont aFont, [toHaveTrait] CPFontTraitMask addTraits)
CPTextStorage textStorage()
var kBackgroundColorChanged
void setLevel:(int aLevel)
CPTextField labelWithTitle:(CPString aTitle)
Sends messages (CPNotification) between objects.
void modifyFontViaPanel:(id sender)
void setDoubleAction:(SEL aValue)
void setBackgroundColor:(CPColor aColor)
void setMinSize:(CGSize aSize)
id dictionaryWithObject:forKey:(id anObject, [forKey] id aKey)