17 #ifndef NS_RETURNS_INNER_POINTER
18 #define NS_RETURNS_INNER_POINTER
20 #include <AppKit/AppKit.h>
21 #include <objc/runtime.h>
65 return [NSDictionary dictionaryWithObjectsAndKeys:
66 [NSNumber numberWithInteger:
currentUnderline?kCTUnderlineStyleSingle:kCTUnderlineStyleNone], kCTUnderlineStyleAttributeName,
80 - (void)drawRect:(NSRect)dirtyRect
82 NSFontManager *fm = [NSFontManager sharedFontManager];
83 NSFontPanel *fp = [fm fontPanel:YES];
86 [fp makeKeyAndOrderFront:nil];
89 [fm setSelectedFont:[NSFont fontWithName:currentFontName size:currentPointSize] isMultiple:NO];
90 [fm setSelectedAttributes:getCurrentAttributes() isMultiple:NO];
96 - (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel
98 return NSFontPanelUnderlineEffectModeMask | NSFontPanelTextColorEffectModeMask | NSFontPanelCollectionModeMask | NSFontPanelFaceModeMask | NSFontPanelSizeModeMask;
104 - (void)changeFont:(NSFontManager *)fm
106 NSFont *oldFont = [NSFont userFontOfSize:12];
107 NSFont *newFont = [fm convertFont:oldFont];
118 - (void)changeAttributes:(NSFontManager *)fm
120 NSDictionary *newAttributes = [fm convertAttributes:getCurrentAttributes()];
122 NSNumber *underlineNumber = [newAttributes objectForKey:(NSString *)kCTUnderlineStyleAttributeName];
123 if (underlineNumber && [underlineNumber integerValue] != kCTUnderlineStyleNone)
128 currentColor = [[newAttributes objectForKey:@"NSColor"] retain];
143 - (id)initWithQDialog:(QDialog *)_dialog
148 - (void)windowWillClose:(NSNotification *)notification
153 - (void)okButtonPressed
157 - (void)cancelButtonPressed
171 - (void)alignmentChanged:(NSSegmentedControl *)control
177 - (void)charSpacingChanged:(NSSlider *)control
182 - (void)lineSpacingChanged:(NSSlider *)control
198 QDialog *dialog =
new QDialog;
200 dialog->setWindowFlags(Qt::FramelessWindowHint|Qt::NoDropShadowWindowHint);
206 NSView *d = (NSView *)dialog->winId();
209 [d addSubview:textEditView];
210 [[d window] makeFirstResponder:textEditView];
215 NSFontManager *fm = [NSFontManager sharedFontManager];
216 NSFontPanel *fp = [fm fontPanel:YES];
218 [[NSColorPanel sharedColorPanel] setShowsAlpha:YES];
225 [[NSColorPanel sharedColorPanel] setAlphaValue:0];
227 dialog.setOption(QColorDialog::NoButtons,
true);
230 [[NSColorPanel sharedColorPanel] setAlphaValue:1];
235 [fp setDelegate:delegate];
242 currentFontName = [NSString stringWithUTF8String:originalVuoFont.fontName];
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:NSSmallControlSize];
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:NSSmallControlSize];
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:NSMomentaryLightButton];
360 [okButton setBezelStyle:NSRoundedBezelStyle];
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:NSMomentaryLightButton];
371 [cancelButton setBezelStyle:NSRoundedBezelStyle];
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);