18 #include <AppKit/AppKit.h>
19 #include <objc/runtime.h>
63 return [NSDictionary dictionaryWithObjectsAndKeys:
64 [NSNumber numberWithInteger:
currentUnderline?kCTUnderlineStyleSingle:kCTUnderlineStyleNone], kCTUnderlineStyleAttributeName,
78 - (void)drawRect:(NSRect)dirtyRect
80 NSFontManager *fm = [NSFontManager sharedFontManager];
81 NSFontPanel *fp = [fm fontPanel:YES];
84 [fp makeKeyAndOrderFront:nil];
87 [fm setSelectedFont:[NSFont fontWithName:currentFontName size:currentPointSize] isMultiple:NO];
88 [fm setSelectedAttributes:getCurrentAttributes() isMultiple:NO];
94 - (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel
96 return NSFontPanelUnderlineEffectModeMask | NSFontPanelTextColorEffectModeMask | NSFontPanelCollectionModeMask | NSFontPanelFaceModeMask | NSFontPanelSizeModeMask;
102 - (void)changeFont:(NSFontManager *)fm
104 NSFont *oldFont = [NSFont userFontOfSize:12];
105 NSFont *newFont = [fm convertFont:oldFont];
107 [currentFontName release];
117 - (void)changeAttributes:(NSFontManager *)fm
119 NSDictionary *newAttributes = [fm convertAttributes:getCurrentAttributes()];
121 NSNumber *underlineNumber = [newAttributes objectForKey:(NSString *)kCTUnderlineStyleAttributeName];
122 if (underlineNumber && [underlineNumber integerValue] != kCTUnderlineStyleNone)
127 currentColor = [[newAttributes objectForKey:@"NSColor"] retain];
142 - (id)initWithQDialog:(QDialog *)_dialog
147 - (void)windowWillClose:(NSNotification *)notification
152 - (void)okButtonPressed
156 - (void)cancelButtonPressed
170 - (void)alignmentChanged:(NSSegmentedControl *)control
176 - (void)charSpacingChanged:(NSSlider *)control
181 - (void)lineSpacingChanged:(NSSlider *)control
197 QDialog *dialog =
new QDialog;
199 dialog->setWindowFlags(Qt::FramelessWindowHint|Qt::NoDropShadowWindowHint);
205 NSView *d = (NSView *)dialog->winId();
208 [d addSubview:textEditView];
209 [[d window] makeFirstResponder:textEditView];
214 NSFontManager *fm = [NSFontManager sharedFontManager];
215 NSFontPanel *fp = [fm fontPanel:YES];
217 [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];
224 [[NSColorPanel sharedColorPanel] setAlphaValue:0];
226 dialog.setOption(QColorDialog::NoButtons,
true);
229 [[NSColorPanel sharedColorPanel] setAlphaValue:1];
234 [fp setDelegate:delegate];
239 [currentFontName release];
242 currentFontName = [[NSString stringWithUTF8String:originalVuoFont.fontName] retain];
247 NSFont *originalFont = [NSFont userFontOfSize:12];
252 currentColor = [[NSColor colorWithCalibratedRed:originalVuoFont.color.r green:originalVuoFont.color.g blue:originalVuoFont.color.b alpha:originalVuoFont.color.a] retain];
265 NSSize panelSize = [fp frame].size;
266 NSSize screenSize = [[fp screen] frame].size;
267 [fp setFrameTopLeftPoint:NSMakePoint(portLeftCenter.x() - panelSize.width, screenSize.height - portLeftCenter.y() + panelSize.height/2)];
271 const unsigned int buttonWidth = 80;
272 const unsigned int buttonHeight = 24;
273 const unsigned int buttonSep = 12;
274 NSView *accessoryView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 4*buttonWidth+3*buttonSep, 2*buttonHeight+3*buttonSep)];
275 [fp setAccessoryView:accessoryView];
276 [accessoryView autorelease];
277 [fp setMinSize:NSMakeSize([accessoryView frame].size.width, [fp minSize].height)];
280 [accessoryDelegate autorelease];
284 NSSegmentedControl *alignmentControl = [[NSSegmentedControl alloc] initWithFrame:NSMakeRect(0, 0, buttonWidth+buttonSep+buttonWidth, buttonHeight)];
285 [alignmentControl setSegmentCount:3];
286 [alignmentControl setSelectedSegment:currentAlignment];
288 [alignmentControl setImage:[NSImage imageNamed:@"align-left"] forSegment:0];
289 [alignmentControl setImage:[NSImage imageNamed:@"align-center"] forSegment:1];
290 [alignmentControl setImage:[NSImage imageNamed:@"align-right"] forSegment:2];
292 [alignmentControl setTarget:accessoryDelegate];
293 [alignmentControl setAction:@selector(alignmentChanged:)];
295 [accessoryView addSubview:alignmentControl];
296 [alignmentControl autorelease];
299 int secondBaseline = buttonHeight+buttonSep;
300 int sliderWidth = buttonWidth+buttonSep+buttonWidth;
304 NSTextField *charSpacingLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(0, secondBaseline+buttonSep, sliderWidth, buttonHeight)];
305 [charSpacingLabel setEditable:NO];
306 [charSpacingLabel setBordered:NO];
307 [charSpacingLabel setDrawsBackground:NO];
308 [charSpacingLabel setStringValue:@"Character Spacing"];
309 [charSpacingLabel setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
310 [accessoryView addSubview:charSpacingLabel];
311 [charSpacingLabel autorelease];
313 NSSlider *charSpacingControl = [[NSSlider alloc] initWithFrame:NSMakeRect(0, secondBaseline, sliderWidth, buttonHeight)];
314 [charSpacingControl setNumberOfTickMarks:1];
315 [charSpacingControl setMinValue:0];
316 [charSpacingControl setMaxValue:2];
317 [charSpacingControl setDoubleValue:currentCharacterSpacing];
318 [[charSpacingControl cell] setControlSize:NSControlSizeSmall];
320 [charSpacingControl setTarget:accessoryDelegate];
321 [charSpacingControl setAction:@selector(charSpacingChanged:)];
323 [accessoryView addSubview:charSpacingControl];
324 [charSpacingControl autorelease];
329 NSTextField *lineSpacingLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(2*buttonWidth+2*buttonSep, secondBaseline+buttonSep, sliderWidth, buttonHeight)];
330 [lineSpacingLabel setEditable:NO];
331 [lineSpacingLabel setBordered:NO];
332 [lineSpacingLabel setDrawsBackground:NO];
333 [lineSpacingLabel setStringValue:@"Line Spacing"];
334 [lineSpacingLabel setFont:[NSFont systemFontOfSize:[NSFont smallSystemFontSize]]];
335 [accessoryView addSubview:lineSpacingLabel];
336 [lineSpacingLabel autorelease];
338 NSSlider *lineSpacingControl = [[NSSlider alloc] initWithFrame:NSMakeRect(2*buttonWidth+2*buttonSep, secondBaseline, sliderWidth, buttonHeight)];
339 [lineSpacingControl setNumberOfTickMarks:1];
340 [lineSpacingControl setMinValue:0];
341 [lineSpacingControl setMaxValue:2];
342 [lineSpacingControl setDoubleValue:currentLineSpacing];
343 [[lineSpacingControl cell] setControlSize:NSControlSizeSmall];
345 [lineSpacingControl setTarget:accessoryDelegate];
346 [lineSpacingControl setAction:@selector(lineSpacingChanged:)];
348 [accessoryView addSubview:lineSpacingControl];
349 [lineSpacingControl autorelease];
356 NSButton *okButton = [[NSButton alloc] initWithFrame:NSMakeRect(3*buttonWidth+3*buttonSep,0,buttonWidth,buttonHeight)];
357 [okButton setKeyEquivalent:@"\r"];
358 [okButton setTitle:@"OK"];
359 [okButton setButtonType:NSButtonTypeMomentaryLight];
360 [okButton setBezelStyle:NSBezelStyleRounded];
361 [okButton setTarget:delegate];
362 [okButton setAction:@selector(okButtonPressed)];
363 [accessoryView addSubview:okButton];
364 [okButton autorelease];
367 NSButton *cancelButton = [[NSButton alloc] initWithFrame:NSMakeRect(2*buttonWidth+3*buttonSep,0,buttonWidth,buttonHeight)];
368 [cancelButton setKeyEquivalent:@"\E"];
369 [cancelButton setTitle:@"Cancel"];
370 [cancelButton setButtonType:NSButtonTypeMomentaryLight];
371 [cancelButton setBezelStyle:NSBezelStyleRounded];
372 [cancelButton setTarget:delegate];
373 [cancelButton setAction:@selector(cancelButtonPressed)];
374 [accessoryView addSubview:cancelButton];
375 [cancelButton autorelease];
380 int result = dialog->exec();
383 [[NSColorPanel sharedColorPanel] orderOut:nil];
394 if (result == QDialog::Accepted)
397 return originalValue;
406 emit valueChanged(valueAsJson);
407 json_object_put(valueAsJson);