It's ok now for italic and underline but not for bold. May be it's because I am with MACOS 10.5.8 and Purebasic 5.31 x32 ?
Code: Select all
Global FontSize.CGFloat = 12.0
Global TextStorage.i
Global BoldFont.i
Global ItalicFont.i
Global UnderlineFont.i
Global BoldItalicFont.i
#NSItalicFontMask = 1
#NSBoldFontMask = 2
#NSBoldItalicFontMask = 3
#NSUnderlineStyleNone = 0
#NSUnderlineStyleSingle = 1
#NSUnderlineStyleThick = 2
;#NSUnderlineStyleDouble = 9
;#NSUnderlinePatternSolid = 0
;#NSUnderlinePatternDot = $100
;#NSUnderlinePatternDash = $200
;#NSUnderlinePatternDashDot = $300
;#NSUnderlinePatternDashDotDot = $400
#NSUnderlineByWord = $8000
Enumeration FormWindow
#Window_0
EndEnumeration
Enumeration FormGadget
#Editor_0
#Button_gras
#Button_souligne
#Button_italic
#Button_grasitalic
EndEnumeration
FontManager = CocoaMessage(0, 0, "NSFontManager sharedFontManager")
Procedure OpenWindow_0(x = 0, y = 0, width = 600, height = 400)
OpenWindow(#Window_0, x, y, width, height, "", #PB_Window_SystemMenu)
EditorGadget(#Editor_0, 20, 50, 560, 290)
ButtonGadget(#Button_gras, 20, 10, 50, 30, "Bold")
ButtonGadget(#Button_souligne, 80, 10, 60, 30, "Underline")
ButtonGadget(#Button_italic, 150, 10, 70, 30, "Italic")
ButtonGadget(#Button_grasitalic, 230, 10, 100, 30, "Bold Italic")
EndProcedure
Procedure SetEditorText(EditorID, Text.s, Type.s = "NSRTF")
; Type can be : "NSPlainText", "NSRTF", "NSHTML"
Protected DataObj = CocoaMessage(0, CocoaMessage(0, 0, "NSString stringWithString:$", @Text), "dataUsingEncoding:", 4)
Protected TypeDict = CocoaMessage(0, 0, "NSDictionary dictionaryWithObject:$", @Type, "forKey:$", @"DocumentType")
Protected AttributedString = CocoaMessage(0, CocoaMessage(0, 0, "NSAttributedString alloc"), "initWithData:", DataObj, "options:", TypeDict, "documentAttributes:", #Null, "error:", #nil)
If AttributedString
CocoaMessage(0, CocoaMessage(0, EditorID, "textStorage"), "setAttributedString:", AttributedString)
CocoaMessage(0, AttributedString, "release")
EndIf
EndProcedure
OpenWindow_0()
SetGadgetText(#Editor_0, "je fais un test en gras, souligne, italique.")
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Button_gras
CocoaMessage(@Range.NSRange, GadgetID(#Editor_0), "selectedRange")
TextStorage = CocoaMessage(0, GadgetID(#Editor_0), "textStorage")
;BoldFont= CocoaMessage(0, 0, "NSFont boldSystemFontOfSize:@", @FontSize)
BoldFont = CocoaMessage(0, FontManager, "fontWithFamily:$", @"Helvetica","traits:", #NSBoldFontMask,"weight:", 0, "size:@", @FontSize)
CocoaMessage(0, TextStorage, "addAttribute:$", @"NSFont", "value:", BoldFont, "range:@", @Range)
Case #Button_italic
CocoaMessage(@Range.NSRange, GadgetID(#Editor_0), "selectedRange")
TextStorage = CocoaMessage(0, GadgetID(#Editor_0), "textStorage")
ItalicFont = CocoaMessage(0, FontManager, "fontWithFamily:$", @"Helvetica","traits:", #NSItalicFontMask,"weight:", 0, "size:@", @FontSize)
CocoaMessage(0, TextStorage, "addAttribute:$", @"NSFont", "value:", ItalicFont, "range:@", @Range)
Case #Button_grasitalic
CocoaMessage(@Range.NSRange, GadgetID(#Editor_0), "selectedRange")
TextStorage = CocoaMessage(0, GadgetID(#Editor_0), "textStorage")
BoldItalicFont = CocoaMessage(0, FontManager, "fontWithFamily:$", @"Helvetica","traits:", #NSBoldItalicFontMask,"weight:", 0, "size:@", @FontSize)
CocoaMessage(0, TextStorage, "addAttribute:$", @"NSFont", "value:", BoldItalicFont, "range:@", @Range)
Case #Button_souligne
CocoaMessage(@Range.NSRange, GadgetID(#Editor_0), "selectedRange")
TextStorage = CocoaMessage(0, GadgetID(#Editor_0), "textStorage")
Underlinefont = CocoaMessage(0, 0, "NSNumber numberWithInt:", #NSUnderlineStyleSingle | #NSUnderlineByWord)
CocoaMessage(0, TextStorage, "addAttribute:$", @"NSUnderline", "value:", UnderlineFont, "range:@", @Range)
EndSelect
Case #PB_Event_CloseWindow
End
EndSelect
ForEver