Xojo Conferences

Platforms to show: All Mac Windows Linux Cross-Platform

/MacCocoa/Font PopupMenu in Cocoa
Required plugins for this example: MBS MacBase Plugin, MBS MacCocoa Plugin, MBS Main Plugin
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacCocoa/Font PopupMenu in Cocoa
This example is the version from Sat, 19th Dec 2014.
Project "Font PopupMenu in Cocoa.rbp"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class Window1 Inherits Window
Control PopupMenu1 Inherits PopupMenu
ControlInstance PopupMenu1 Inherits PopupMenu
EventHandler Sub Open() // get font list from Xojo dim fonts() as string dim fu as integer = FontCount-1 for fi as integer = 0 to fu fonts.append font(fi) next fonts.Sort for each name as string in fonts me.AddRow name next ApplyFontsToItems me End EventHandler
End Control
Control Label1 Inherits Label
ControlInstance Label1 Inherits Label
End Control
Control PopupMenu2 Inherits PopupMenu
ControlInstance PopupMenu2 Inherits PopupMenu
EventHandler Sub Open() // getting font list from NSFontManager. dim fm as new NSFontManagerMBS dim fonts() as string = fm.availableFontFamilies fonts.Sort for each name as string in fonts me.AddRow name next ApplyFontsToItems me End EventHandler
End Control
Control Label2 Inherits Label
ControlInstance Label2 Inherits Label
End Control
Sub ApplyFontsToItems(xp as PopupMenu) // Apply font to menu items in a popupmenu #if TargetCocoa then // graphics for measurement of height dim g as new NSGraphicsMBS dim si as new NSSizeMBS(1000, 1000) // the Cocoa popup control and it's menu dim p as NSPopUpButtonMBS = xp.NSPopUpButtonMBS dim m as NSMenuMBS = p.menu // font size to use? dim fontSize as Double = xp.TextSize if fontsize <= 8 then fontsize = NSFontMBS.systemFontSize end if // walk over all items dim mu as integer = m.numberOfItems-1 for mi as integer = 0 to mu dim item as NSMenuItemMBS = m.Item(mi) // get the title and use it to make font dim name as string = item.Title dim f as NSFontMBS = NSFontMBS.fontWithName(name, fontSize) // now build attributed string with that font dim a as new NSMutableAttributedStringMBS if a.initWithString(name) then dim r as new NSRangeMBS(0, a.length) a.addAttribute(a.NSFontAttributeName, f, r) // calculate bounding Rectangle dim re as NSRectMBS = g.boundingRectWithSize(a, si, 0) if re.Height <= 22 then // only apply font if height is not too much item.attributedTitle = a end if end if next #endif End Sub
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project

See also:

Feedback, Comments & Corrections

The items on this page are in the following plugins: MBS MacCocoa Plugin.

MBS Xojo tutorial videos