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