SOLVED addToolbarItem problem
-
I'm trying to add a custom button to the font overview toolbar and am running into a problem.
The button adds correctly to the first window, but each additional window causes the older windows' to gain blank icon spaces.
I'm not sure if it's a bug in my code or in robofont or in vanilla, but I've reached the limit of my debugging ability.
Below is my test code. Thanks.
from AppKit import NSApp, NSImageNameAdvanced from vanilla import Window from mojo.events import addObserver, removeObserver from mojo.UI import CurrentFontWindow from mojo.UI import OutputWindow OutputWindow().clear() debug = True class AddToToolbar(): def __init__(self): debugname = 'Debug Toolbar' if debug is True: self.debug = Window((500, 50), debugname) self.debug.bind('close', self.debugClose) for window in [w for w in NSApp().orderedWindows() if w.isVisible()]: if window.title() == debugname: window.close() self.debug.open() addObserver(self, 'addToolbarButton', 'fontWindowDidOpen') def debugClose(self, sender): removeObserver(self, 'fontWindowDidOpen') def addToolbarButton(self, notification): if notification['window'] is None: return window = notification['window'].window() newItem = dict( itemIdentifier='customButton', label='Custom Button', toolTip='ToolTip', imageNamed=NSImageNameAdvanced, callback=self.customButton ) if newItem['itemIdentifier'] in window.getToolbarItems(): window.removeToolbarItem(newItem['itemIdentifier']) window.addToolbarItem( newItem, index=2 ) def customButton(self, sender): print('click!') AddToToolbar() # edited to use the notification window
-
Yeah: and with a mix of single and multi window mode this is the best solutions...
-
That's even easier! Thanks.
-
use the notification
fontWindowWillShowToolbarItems
from AppKit import NSApp, NSImageNameAdvanced from vanilla import Window from mojo.events import addObserver, removeObserver from mojo.UI import CurrentFontWindow from mojo.UI import OutputWindow OutputWindow().clear() debug = True class AddToToolbar(): def __init__(self): debugname = 'Debug Toolbar' if debug is True: self.debug = Window((500, 50), debugname) self.debug.bind('close', self.debugClose) for window in [w for w in NSApp().orderedWindows() if w.isVisible()]: if window.title() == debugname: window.close() self.debug.open() addObserver(self, 'addToolbarButton', 'fontWindowWillShowToolbarItems') def debugClose(self, sender): removeObserver(self, 'fontWindowDidOpen') def addToolbarButton(self, notification): newItem = dict( itemIdentifier='customButton', label='Custom Button', toolTip='ToolTip', imageNamed=NSImageNameAdvanced, callback=self.customButton ) notification['toolbarItems'].insert(2, newItem) def customButton(self, sender): print('click!') AddToToolbar()