def setupUI(self): self.statusbar = NSStatusBar.systemStatusBar() self.statusitem = self.statusbar.statusItemWithLength_(NSVariableStatusItemLength) #NSSquareStatusItemLength #NSVariableStatusItemLength # Set initial image icon icon_path = os.path.join(current_path, "../trayicon.ico") image = NSImage.alloc().initByReferencingFile_(icon_path) image.setScalesWhenResized_(True) image.setSize_((20, 20)) self.statusitem.setImage_(image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) self.statusitem.setToolTip_("ZeroNet") # Build a very simple menu self.menu = NSMenu.alloc().init() self.menu.setAutoenablesItems_(False) #self.create_menu_item( 'ip_external', 'IP: %s' % INFO['ip_external'], 'info:') self.menu.addItem_( NSMenuItem.separatorItem() ) # Links self.create_menu_item( 'open_zeronet', 'Open ZeroNet', 'open:') self.create_menu_item( 'open_reddit', 'Zeronet Reddit Community', 'openreddit:') self.create_menu_item( 'open_gh', 'Report issues/feature requests', 'opengithub:') self.menu.addItem_( NSMenuItem.separatorItem() ) self.create_menu_item( 'quit_zeronet', 'Quit ZeroNet', 'windowWillClose:' ) # Bind it to the status item and hide dock icon self.statusitem.setMenu_(self.menu) NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)
def applicationDidFinishLaunching_(self, notification): # load icon files self.active_image = NSImage.imageNamed_("active") self.inactive_image = NSImage.imageNamed_("inactive") # make status bar item self.statusitem = NSStatusBar.systemStatusBar().statusItemWithLength_( NSVariableStatusItemLength) self.statusitem.retain() self.statusitem.setHighlightMode_(False) self.statusitem.setEnabled_(True) # insert a menu into the status bar item self.menu = NSMenu.alloc().init() self.statusitem.setMenu_(self.menu) # open connection to the dynamic (configuration) store self.store = SCDynamicStoreCreate(None, "name.klep.toggleproxy", self.dynamicStoreCallback, None) proxyRef = SCNetworkServiceCopyProtocol(self.service, kSCNetworkProtocolTypeProxies) prefDict = SCNetworkProtocolGetConfiguration(proxyRef) hasProxies = False # For each of the proxies we are concerned with, check to see if any # are configured. If so (even if not enabled), create a menuitem for # that proxy type. for proxy in self.proxies.values(): enabled = CFDictionaryGetValue(prefDict, proxy['pref']) if enabled is not None: proxy[ 'menuitem'] = self.menu.addItemWithTitle_action_keyEquivalent_( proxy['title'], proxy['action'], proxy['keyEquivalent']) hasProxies = True else: proxy['menuitem'] = None if hasProxies: self.menu.addItem_(NSMenuItem.separatorItem()) self.enableallmi = self.menu.addItemWithTitle_action_keyEquivalent_( 'Enable All', 'enableall', '') self.disableallmi = self.menu.addItemWithTitle_action_keyEquivalent_( 'Disable All', 'disableall', '') self.menu.addItem_(NSMenuItem.separatorItem()) # Need a way to quit self.menu.addItemWithTitle_action_keyEquivalent_( "Quit", "quitApp:", "") # Start working # self.loadNetworkServices() self.watchForProxyChanges() self.updateProxyStatus()
def setupStatusBar(self): statusbar = NSStatusBar.systemStatusBar() statusitem = statusbar.statusItemWithLength_(20).retain() icon = NSImage.imageNamed_('status') icon.setSize_((20, 20)) statusitem.setImage_(icon) iconHighlight = NSImage.imageNamed_('status-hi') iconHighlight.setSize_((20, 20)) statusitem.setAlternateImage_(iconHighlight) statusitem.setHighlightMode_(1) # TODO: Put this whole menu creation stuff into interface builder! menu = NSMenu.alloc().init() linkMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Post a Link', 'doLink:', '') linkMenu.setTarget_(self) # Make it possible to invoke the link menu via a keyboard shortcut. linkMenu.setKeyEquivalentModifierMask_(NSShiftKeyMask | NSCommandKeyMask) linkMenu.setKeyEquivalent_('l') menu.addItem_(linkMenu) menu.addItem_(NSMenuItem.separatorItem()) previewMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Update Preview', 'doPreview:', '') previewMenu.setTarget_(self) menu.addItem_(previewMenu) publishMenuItem = NSMenuItem.alloc( ).initWithTitle_action_keyEquivalent_('Publish', None, '') publishMenu = NSMenu.alloc().init() s3MenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'S3', 'doPublish:', '') s3MenuItem.setTarget_(self) publishMenu.addItem_(s3MenuItem) publishMenuItem.setSubmenu_(publishMenu) menu.addItem_(publishMenuItem) menu.addItem_(NSMenuItem.separatorItem()) quitMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') menu.addItem_(quitMenu) statusitem.setMenu_(menu) menu.release()
def finishLaunching(self): # Get current track info curr_track = get_current_track() self.lyrics = get_lyrics(curr_track['curr_artist'], curr_track['curr_song']).split('<br>') # Remove empty lines self.lyrics = [x for x in self.lyrics if x] # Cache current track to avoid unnecessary requests self.curr_track_hash = abs(hash(curr_track['curr_track_full'])) % (10** 8) # Create the status & menu bar statusBar = NSStatusBar.systemStatusBar() self.statusItem = statusBar.statusItemWithLength_(-1) self.statusItem.setTitle_(curr_track['curr_track_full']) self.menuBar = NSMenu.alloc().init() # Lyrics block for i, row in enumerate(self.lyrics): row = re.sub('<[^<]+?>', '', row).strip() setattr( self, 'row_{}'.format(i), NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( row, 'doNothing:', '')) self.menuBar.addItem_(getattr(self, 'row_{}'.format(i))) self.SEPERATOR = NSMenuItem.separatorItem() self.menuBar.addItem_(self.SEPERATOR) # Quit option self.QUIT = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') self.SEPERATOR = NSMenuItem.separatorItem() self.menuBar.addItem_(self.SEPERATOR) self.menuBar.addItem_(self.QUIT) # Add menu to status bar self.statusItem.setMenu_(self.menuBar) # Create our timer for song title updates self.timer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_( 1, self, 'update:', '', True) # Add our timer to the runloop NSRunLoop.currentRunLoop().addTimer_forMode_( self.timer, NSEventTrackingRunLoopMode)
def assemble_menu(parent_menu, menu_spec: dict, top_menu: bool = False): if not menu_spec: if not top_menu: parent_menu.addItem_(NSMenuItem.separatorItem()) else: raise AssertionError('Cannot put separator into top menu') elif 'children' in menu_spec: menu_item = NSMenuItem.alloc().init() if not top_menu: menu_item.setTitle_(menu_spec['title']) parent_menu.addItem_(menu_item) menu = NSMenu.alloc().init() if top_menu: menu.setTitle_(menu_spec['title']) for child in menu_spec['children']: assemble_menu(menu, child) menu_item.setSubmenu_(menu) else: menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( menu_spec['title'], None, menu_spec.get('key', '') if not top_menu else '') parent_menu.addItem_(menu_item) if top_menu: # workaround: # I cannot get Mac to play the action on a top menu if it is a menu item # Mac does not display top menu item without submenu... menu = NSMenu.alloc().init() menu.setTitle_(menu_spec['title']) assemble_menu(menu, menu_spec) menu_item.setSubmenu_(menu) if 'action' in menu_spec: set_action(menu_item, menu_spec['action'])
def refreshDropboxMenu_(self, items): try: self.removeAllItems() except: for i in reversed(xrange(self.numberOfItems())): self.removeItemAtIndex_(i) for text, func in items: if text is None: menuitem = NSMenuItem.separatorItem() elif type(func) in (list, tuple): text = unicode(text) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(text, None, '') submenu = DropboxNSMenu.menuWithDropboxMenuDescriptor_(func) menuitem.setSubmenu_(submenu) else: text = unicode(text) menuitem = DropboxNSMenuItem.alloc().initWithTitle_action_keyEquivalent_(text, None, '') if hasattr(func, '__call__'): menuitem.dropboxFunc = func menuitem.setTarget_(self) menuitem.setAction_('menuAction:') else: menuitem.setEnabled_(False) self.addItem_(menuitem) return self
def inject(self): try: # necessary because of the menu callbacks self.retain() # get application menu instance appmenu = NSApplication.sharedApplication().mainMenu().itemAtIndex_(0).submenu() # make a new menu item self.item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( "MailTrack", "toggleState:", "") self.item.setToolTip_(self.get_string("MAILTRACK_TOOLTIP", "")) self.set_state_and_title(self.item) self.item.setTarget_(self) # add separator and new item appmenu.insertItem_atIndex_(NSMenuItem.separatorItem(), 1) appmenu.insertItem_atIndex_(self.item, 2) # observe changes for active state NSUserDefaultsController.sharedUserDefaultsController().addObserver_forKeyPath_options_context_( self, "values.MailTrackDisabled", NSKeyValueObservingOptionNew, None ) except Exception, e: raise e
def inject(self): try: # necessary because of the menu callbacks self.retain() # get application menu instance appmenu = NSApplication.sharedApplication().mainMenu().itemAtIndex_(0).submenu() # make a new menu item self.item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( "QuoteFix", "toggleState:", "") self.item.setToolTip_(self.get_string("QUOTEFIX_TOOLTIP", "")) self.set_state_and_title(self.item) self.item.setTarget_(self) # add separator and new item appmenu.insertItem_atIndex_(NSMenuItem.separatorItem(), 1) appmenu.insertItem_atIndex_(self.item, 2) # observe changes for active state NSUserDefaultsController.sharedUserDefaultsController().addObserver_forKeyPath_options_context_( self, "values.QuoteFixDisabled", NSKeyValueObservingOptionNew, None ) except Exception, e: raise e
def initialize(cls): # Register ourselves as a Mail.app plugin and add an entry for our # 'Fill Text' and Wrap Text' actions to the Edit menu. application = NSApplication.sharedApplication() bundle = NSBundle.bundleWithIdentifier_('uk.me.cdw.MailWrap') cls.registerBundle() editmenu = application.mainMenu().itemAtIndex_(2).submenu() editmenu.addItem_(NSMenuItem.separatorItem()) mask = NSCommandKeyMask | NSAlternateKeyMask editmenu.addItemWithTitle_action_keyEquivalent_('Fill Text', 'fillText', '\\').setKeyEquivalentModifierMask_(mask) mask = NSCommandKeyMask editmenu.addItemWithTitle_action_keyEquivalent_('Wrap Text', 'wrapText', "\\").setKeyEquivalentModifierMask_(mask) # Read our configuration settings if present. Otherwise, set the # correct default values. defaults = NSUserDefaults.standardUserDefaults() defaults = defaults.dictionaryForKey_('MailWrap') or {} ComposeViewController._fixAttribution = defaults.get('FixAttribution', False) EditingMessageWebView._bulletLists = defaults.get('BulletLists', True) EditingMessageWebView._indentWidth = int(defaults.get('IndentWidth', 2)) EditingMessageWebView._wrapWidth = int(defaults.get('WrapWidth', 72)) # Report the plugin name and version to the com.apple.mail log. version = bundle.objectForInfoDictionaryKey_('CFBundleVersion') NSLog('Loaded MailWrap %s' % version)
def applicationDidFinishLaunching_(self, notification): self.noDevice = None #Create menu self.menu = NSMenu.alloc().init() self.barItem = dict() # Load images self.noDeviceImage = NSImage.alloc().initByReferencingFile_('icons/no_device.png') self.barImage = dict(kb = NSImage.alloc().initByReferencingFile_('icons/kb.png'), magicMouse = NSImage.alloc().initByReferencingFile_('icons/magic_mouse.png'), mightyMouse = NSImage.alloc().initByReferencingFile_('icons/mighty_mouse.png'), magicTrackpad = NSImage.alloc().initByReferencingFile_('icons/TrackpadIcon.png')) #Define menu items self.statusbar = NSStatusBar.systemStatusBar() self.menuAbout = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('About BtBatStat', 'about:', '') self.separator_menu_item = NSMenuItem.separatorItem() self.menuQuit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') # Get the timer going self.timer = NSTimer.alloc().initWithFireDate_interval_target_selector_userInfo_repeats_(start_time, 10.0, self, 'tick:', None, True) NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) self.timer.fire() #Add menu items self.menu.addItem_(self.menuAbout) self.menu.addItem_(self.separator_menu_item) self.menu.addItem_(self.menuQuit) #Check for updates checkForUpdates()
def constructMenu(self): self.menu.removeAllItems() separator_required = False if self.is_ip_assigned: # For each of the proxyTypes we are concerned with, check to see if any # are configured. If so (even if not enabled), create a menuitem for # that proxy type. for proxy in self.proxyTypes.values(): enabled = CFDictionaryGetValue(self.prefDict, proxy['prefEnable']) if enabled is not None: proxy['menuitem'] = self.menu.addItemWithTitle_action_keyEquivalent_( proxy['title'], proxy['action'], proxy['keyEquivalent'] ) separator_required = True else: proxy['menuitem'] = None else: self.menu.addItemWithTitle_action_keyEquivalent_("No connection - Please connect to any network before using this tool", None, "") if separator_required: self.menu.addItem_(NSMenuItem.separatorItem()) # Need a way to quit self.menu.addItemWithTitle_action_keyEquivalent_("Quit", "quitApp:", "q")
def initialize(cls): # Register ourselves as a Mail.app plugin and add an entry for our # 'Fill Text' and Wrap Text' actions to the Edit menu. application = NSApplication.sharedApplication() bundle = NSBundle.bundleWithIdentifier_('uk.me.cdw.MailWrap') cls.registerBundle() editmenu = application.mainMenu().itemAtIndex_(2).submenu() editmenu.addItem_(NSMenuItem.separatorItem()) mask = NSCommandKeyMask editmenu.addItemWithTitle_action_keyEquivalent_( 'Fill Text', 'fillText', '\\').setKeyEquivalentModifierMask_(mask) mask = NSCommandKeyMask | NSAlternateKeyMask editmenu.addItemWithTitle_action_keyEquivalent_( 'Wrap Text', 'wrapText', '\\').setKeyEquivalentModifierMask_(mask) # Read our configuration settings if present. Otherwise, set the # correct default values. defaults = NSUserDefaults.standardUserDefaults() defaults = defaults.dictionaryForKey_('MailWrap') or {} ComposeViewController._fixAttribution = defaults.get( 'FixAttribution', True) EditingMessageWebView._bulletLists = defaults.get('BulletLists', True) EditingMessageWebView._indentWidth = int(defaults.get( 'IndentWidth', 2)) EditingMessageWebView._wrapWidth = int(defaults.get('WrapWidth', 76)) # Report the plugin name and version to the com.apple.mail log. version = bundle.objectForInfoDictionaryKey_('CFBundleVersion') NSLog('Loaded MailWrap %s' % version)
def setupStatusBar(self): statusbar = NSStatusBar.systemStatusBar() statusitem = statusbar.statusItemWithLength_(20).retain() icon = NSImage.imageNamed_('status') icon.setSize_((20, 20)) statusitem.setImage_(icon) iconHighlight = NSImage.imageNamed_('status-hi') iconHighlight.setSize_((20, 20)) statusitem.setAlternateImage_(iconHighlight) statusitem.setHighlightMode_(1) # TODO: Put this whole menu creation stuff into interface builder! menu = NSMenu.alloc().init() linkMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Post a Link', 'doLink:', '') linkMenu.setTarget_(self); # Make it possible to invoke the link menu via a keyboard shortcut. linkMenu.setKeyEquivalentModifierMask_(NSShiftKeyMask | NSCommandKeyMask) linkMenu.setKeyEquivalent_('l') menu.addItem_(linkMenu) menu.addItem_(NSMenuItem.separatorItem()) previewMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Update Preview', 'doPreview:', '') previewMenu.setTarget_(self); menu.addItem_(previewMenu) publishMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Publish', None, '') publishMenu = NSMenu.alloc().init(); s3MenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('S3', 'doPublish:', '') s3MenuItem.setTarget_(self); publishMenu.addItem_(s3MenuItem) publishMenuItem.setSubmenu_(publishMenu) menu.addItem_(publishMenuItem) menu.addItem_(NSMenuItem.separatorItem()) quitMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') menu.addItem_(quitMenu) statusitem.setMenu_(menu) menu.release();
def initialize_menu(self): self.menubarMenu = NSMenu.alloc().init() self.menubarMenu.addItem_(NSMenuItem.separatorItem()) self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') self.menubarMenu.addItem_(self.quit) self.statusitem.setMenu_(self.menubarMenu) self.statusitem.setToolTip_('Project Cron')
def update_(self, timer): curr_track = get_current_track() self.statusItem.setTitle_(curr_track['curr_track_full']) self.next_track_hash = abs(hash(curr_track['curr_track_full'])) % (10** 8) if self.curr_track_hash != self.next_track_hash: self.lyrics = get_lyrics(curr_track['curr_artist'], curr_track['curr_song']).split('<br>') # Remove empty lines self.lyrics = [x for x in self.lyrics if x] self.curr_track_hash = abs(hash( curr_track['curr_track_full'])) % (10**8) # Create the status & menu bar statusBar = NSStatusBar.systemStatusBar() self.statusItem = statusBar.statusItemWithLength_(-1) self.statusItem.setTitle_(curr_track['curr_track_full']) self.menuBar = NSMenu.alloc().init() # Lyrics block for i, row in enumerate(self.lyrics): row = re.sub('<[^<]+?>', '', row).strip() setattr( self, 'row_{}'.format(i), NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( row, 'doNothing:', '')) self.menuBar.addItem_(getattr(self, 'row_{}'.format(i))) self.SEPERATOR = NSMenuItem.separatorItem() self.menuBar.addItem_(self.SEPERATOR) # Quit option self.QUIT = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') self.SEPERATOR = NSMenuItem.separatorItem() self.menuBar.addItem_(self.SEPERATOR) self.menuBar.addItem_(self.QUIT) # Add menu to status bar self.statusItem.setMenu_(self.menuBar)
def refreshOptions(self): # refresh option items try: favNameList = self.favNameList() self.w.tabs[0].options.setItems(tab0options + favNameList) menu = self.w.tabs[0].options._nsObject.menu() menu.itemAtIndex_(0).setEnabled_(False) divider0 = NSMenuItem.separatorItem() menu.insertItem_atIndex_(divider0, 6) menu.itemAtIndex_(7).setEnabled_(False) except Exception as e: Glyphs.showMacroWindow() print("BubbleKern Error (refreshOptions): %s" % e)
def setupUI(self): self.statusbar = NSStatusBar.systemStatusBar() self.statusitem = self.statusbar.statusItemWithLength_( NSVariableStatusItemLength ) #NSSquareStatusItemLength #NSVariableStatusItemLength # Set initial image icon icon_path = os.path.join(current_path, "../trayicon.ico") image = NSImage.alloc().initByReferencingFile_(icon_path) image.setScalesWhenResized_(True) image.setSize_((20, 20)) self.statusitem.setImage_(image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) self.statusitem.setToolTip_("ZeroNet") # Build a very simple menu self.menu = NSMenu.alloc().init() self.menu.setAutoenablesItems_(False) #self.create_menu_item( 'ip_external', 'IP: %s' % INFO['ip_external'], 'info:') self.menu.addItem_(NSMenuItem.separatorItem()) # Links self.create_menu_item('open_zeronet', 'Open ZeroNet', 'open:') self.create_menu_item('open_reddit', 'Zeronet Reddit Community', 'openreddit:') self.create_menu_item('open_gh', 'Report issues/feature requests', 'opengithub:') self.menu.addItem_(NSMenuItem.separatorItem()) self.create_menu_item('quit_zeronet', 'Quit ZeroNet', 'windowWillClose:') # Bind it to the status item and hide dock icon self.statusitem.setMenu_(self.menu) NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)
def _initialize_menu(self): self.menubarMenu = NSMenu.alloc().init() for schedule in self._schedules: menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(schedule.name, 'execute:', '') self._menu_items.append(menu_item) self.menubarMenu.addItem_(menu_item) menu_item = NSMenuItem.separatorItem() self.menubarMenu.addItem_(menu_item) self.quit = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') self.menubarMenu.addItem_(self.quit) self.statusitem.setMenu_(self.menubarMenu) self.statusitem.setToolTip_('Crow')
def addMenuItemsForEvent_toMenu_(self, theEvent, theMenu): """ Adds menu items to default context menu. Remove this method if you do not want any extra context menu items. """ try: if hasattr(self, 'conditionalContextMenus'): contextMenus = self.conditionalContextMenus() if contextMenus: # Todo: Make sure that the index is 0 for all items, # i.e., add at top rather than at bottom of menu: newSeparator = NSMenuItem.separatorItem() theMenu.addItem_(newSeparator) setUpMenuHelper(theMenu, contextMenus, self) except: self.logError(traceback.format_exc())
def addMenuItemsForEvent_toMenu_(self, theEvent, theMenu): """ Adds menu items to default context menu. Remove this method if you do not want any extra context menu items. """ try: if hasattr(self, 'conditionalContextMenus'): contextMenus = self.conditionalContextMenus() if contextMenus: # Todo: Make sure that the index is 0 for all items, # i.e., add at top rather than at bottom of menu: newSeparator = NSMenuItem.separatorItem() theMenu.addItem_(newSeparator) setUpMenuHelper(theMenu, contextMenus, self) except: self.logError(traceback.format_exc())
def defaultContextMenu(self): """ Sets the default content of the context menu and returns the menu. Add menu items that do not depend on the context, e.g., actions that affect the whole layer, no matter what is selected. Remove this method if you do not want any extra context menu items. """ try: # Get the current default context menu: theMenu = objc.super(SelectTool, self).defaultContextMenu() # Add separator at the bottom: newSeparator = NSMenuItem.separatorItem() theMenu.addItem_(newSeparator) # Add menu items at the bottom: setUpMenuHelper(theMenu, self.generalContextMenus, self) return theMenu except: self.logError(traceback.format_exc())
def defaultContextMenu(self): """ Sets the default content of the context menu and returns the menu. Add menu items that do not depend on the context, e.g., actions that affect the whole layer, no matter what is selected. Remove this method if you do not want any extra context menu items. """ try: # Get the current default context menu: theMenu = objc.super(SelectTool, self).defaultContextMenu() # Add separator at the bottom: newSeparator = NSMenuItem.separatorItem() theMenu.addItem_(newSeparator) # Add menu items at the bottom: setUpMenuHelper(theMenu, self.generalContextMenus, self) return theMenu except: self.logError(traceback.format_exc())
def createMainMenu(self): mainMenu = NSMenu.alloc().init() # menu bar mainMenuItem = NSMenuItem.alloc().init() mainMenu.addItem_(mainMenuItem) # NOTE: The title of the first menu will automatically refer to CFBundleName. appMenu = NSMenu.alloc().init() appMenu.addItemWithTitle_action_keyEquivalent_( "About", "orderFrontStandardAboutPanel:", "", ) appMenu.addItem_(NSMenuItem.separatorItem()) appMenu.addItemWithTitle_action_keyEquivalent_( "Quit", "terminate:", "q", ) mainMenuItem.setSubmenu_(appMenu) return mainMenu
def _buildMenu(self, items, menu): for item in items: if isinstance(item, NSMenuItem): menu.addItem_(item) elif item == "----": item = NSMenuItem.separatorItem() menu.addItem_(item) else: title = item["title"] callback = item.get("callback") subItems = item.get("items") menuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(title, "", "") if callback: wrapper = VanillaCallbackWrapper(callback) self._callbackWrappers.append(wrapper) menuItem.setTarget_(wrapper) menuItem.setAction_("action:") if subItems: subMenu = NSMenu.alloc().init() self._buildMenu(subItems, subMenu) menuItem.setSubmenu_(subMenu) menu.addItem_(menuItem)
def __init__(self): self._menuitem = NSMenuItem.separatorItem()
def _populatePlacard(self): if not hasattr(self, "placard"): return options = self._placardOptions = [ (None, None, None), # Display... ("Fill", "showGlyphFill", None), ("Stroke", "showGlyphStroke", None), #("Image", "showGlyphImage", None), ("Metrics", "showGlyphMargins", None), ("On Curve Points", "showGlyphOnCurvePoints", None), ("Off Curve Points", "showGlyphOffCurvePoints", None), #("Point Coordinates", "showGlyphPointCoordinates", None), ("Anchors", "showGlyphAnchors", None), ("Blues", "showFontPostscriptBlues", None), ("Family Blues", "showFontPostscriptFamilyBlues", None), (None, None, None), # layer divider ] if not hasattr(self, "_placardLayerOptions"): self._placardLayerOptions = {} # title item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( "Display...", None, "") item.setHidden_(True) items = [item] # main layer for title, drawingAttribute, layerName in options: if title is None: continue state = self.getDrawingAttribute(drawingAttribute) item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( title, None, "") item.setState_(state) items.append(item) # sub layers glyph = self._glyphView.getGlyph() if glyph is not None: layerSet = glyph.layerSet if layerSet is not None: if len(layerSet.layerOrder) > 1: items.append(NSMenuItem.separatorItem()) # prep the state dictionary for layerName in list(self._placardLayerOptions.keys()): if layerName not in layerSet: del self._placardLayerOptions[layerName] for layerName in layerSet.layerOrder: if layerName not in self._placardLayerOptions: self._placardLayerOptions[layerName] = False for layerName in layerSet.layerOrder: state = self._placardLayerOptions[layerName] enabled = True if layerName == glyph.layer.name: state = True enabled = False self._placardOptions.append((None, None, layerName)) title = "Layer: %s" % layerName item = NSMenuItem.alloc( ).initWithTitle_action_keyEquivalent_(title, None, "") item.setState_(state) item.setEnabled_(enabled) items.append(item) # set the items self.placard.optionsButton.setItems(items) button = self.placard.optionsButton.getNSPopUpButton() button.setTitle_("Display...") # update the layer options self._updateLayerDrawingAttributes()
def _add_separator_to_platform_menu(self): ns_item = NSMenuItem.separatorItem() self._ns_menu.addItem_(ns_item)
def instances_(self, _n): self.loop_func = sys._getframe(0).f_code.co_name try: x = subprocess.check_output(["/usr/local/bin/docker", "ps", "--format", "{{.Names}}"]) except subprocess.CalledProcessError as e: #print(e) self.statusitem.setImage_(self.image) # Keep looping, but don't do anything NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode) return containers = x.splitlines() self.statusitem.setTitle_(str(len(containers))) new_menu = NSMenu.alloc().init() shellmenu = NSMenu.alloc().init() logmenu = NSMenu.alloc().init() i = NSMenuItem.alloc().init() i.setTitle_("Shell") i.setSubmenu_(shellmenu) new_menu.addItem_(i) i = NSMenuItem.alloc().init() i.setTitle_("Logs") i.setSubmenu_(logmenu) new_menu.addItem_(i) new_menu.addItem_(NSMenuItem.separatorItem()) for container in containers: shellmenuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(container, 'shellinto:', '') shellmenu.addItem_(shellmenuitem) logmenuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(container, 'loginto:', '') logmenu.addItem_(logmenuitem) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(container, 'killinstance:', '') menuitem.setImage_(self.toggle_images['kill' if self.kill else 'refresh']) # pprint(dir(menuitem)) new_menu.addItem_(menuitem) new_menu.addItem_(NSMenuItem.separatorItem()) i = NSMenuItem.alloc().init() configmenu = NSMenu.alloc().init() i.setTitle_("Settings") i.setSubmenu_(configmenu) new_menu.addItem_(i) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Kill', 'killornot:', '') menuitem.setState_(NSOnState if self.kill else NSOffState) configmenu.addItem_(menuitem) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Restart', 'killornot:', '') menuitem.setState_(NSOnState if not self.kill else NSOffState) configmenu.addItem_(menuitem) configmenu.addItem_(NSMenuItem.separatorItem()) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('iTerm', 'itermtoggle:', '') menuitem.setState_(NSOnState if self.which_terminal == 'iTerm' else NSOffState) configmenu.addItem_(menuitem) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Terminal', 'itermtoggle:', '') menuitem.setState_(NSOnState if not self.which_terminal == 'iTerm' else NSOffState) configmenu.addItem_(menuitem) menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') new_menu.addItem_(menuitem) self.menu = new_menu self.statusitem.setMenu_(self.menu) if self.state == 'setup': self.state = 'running' if self.state == 'running': NSRunLoop.currentRunLoop().addTimer_forMode_(self.timer, NSDefaultRunLoopMode)
def _add_separator_to_platform_menu(self): ns_item = NSMenuItem.separatorItem() self._ns_menu.addItem_(ns_item)
def finishLaunching(self): # Note: variable names here are camelCased to stay consistent with # pyobjc (except menubar items). # Create the status & menu bar statusBar = NSStatusBar.systemStatusBar() self.statusItem = statusBar.statusItemWithLength_(-1) self.statusItem.setTitle_('Simon') self.menuBar = NSMenu.alloc().init() # System self.SYSTEM = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'System', 'doNothing:', '') self.CPU_USAGE = self._create_empty_menu_item() self.RAM_USAGE = self._create_empty_menu_item() self.RAM_AVAILABLE = self._create_empty_menu_item() self.menuBar.addItem_(self.SYSTEM) self.menuBar.addItem_(self.CPU_USAGE) self.menuBar.addItem_(self.RAM_USAGE) self.menuBar.addItem_(self.RAM_AVAILABLE) # Disk I/O self.DISKIO = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Disk I/O', 'doNothing:', '') self.DATA_READ = self._create_empty_menu_item() self.DATA_WRITTEN = self._create_empty_menu_item() self.menuBar.addItem_(self.DISKIO) self.menuBar.addItem_(self.DATA_READ) self.menuBar.addItem_(self.DATA_WRITTEN) # Network self.NETWORK = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Network', 'doNothing:', '') self.NETWORK_RECV = self._create_empty_menu_item() self.NETWORK_SENT = self._create_empty_menu_item() self.menuBar.addItem_(self.NETWORK) self.menuBar.addItem_(self.NETWORK_RECV) self.menuBar.addItem_(self.NETWORK_SENT) # Quit self.QUIT = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') self.SEPERATOR = NSMenuItem.separatorItem() self.menuBar.addItem_(self.SEPERATOR) self.menuBar.addItem_(self.QUIT) # Add menu to status bar self.statusItem.setMenu_(self.menuBar) # Create our timer self.timer = \ NSTimer \ .scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_( 1, self, 'update:', '', True ) # Add our timer to the runloop NSRunLoop.currentRunLoop().addTimer_forMode_( self.timer, NSEventTrackingRunLoopMode) print('Simon is now running.') print('CTRL+C does not work here.') print('You can quit through the menubar.')
def _setup_menuBar(self): statusBar = NSStatusBar.systemStatusBar() self.statusItem = statusBar.statusItemWithLength_(-1) self.menuBar = NSMenu.alloc().init() self.statusItem.setTitle_('Simon') # Labels/buttons self.SYSTEM = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'System', 'doNothing:', '') self.DISKIO = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Disk I/O', 'doNothing:', '') self.NETWORK = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Network', 'doNothing:', '') self.QUIT = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') # System self.CPU_USAGE = self._create_empty_menu_item() self.RAM_USAGE = self._create_empty_menu_item() self.RAM_AVAILABLE = self._create_empty_menu_item() # Disk I/O self.DATA_READ = self._create_empty_menu_item() self.DATA_WRITTEN = self._create_empty_menu_item() # Network self.NETWORK_RECV = self._create_empty_menu_item() self.NETWORK_SENT = self._create_empty_menu_item() ''' Add our items to the menuBar - yields the following output: Simon System CPU Usage RAM Usage Available Memory Disk I/O Read Written Network Received Sent ----------------------- Quit ''' self.menuBar.addItem_(self.SYSTEM) # system label self.menuBar.addItem_(self.CPU_USAGE) self.menuBar.addItem_(self.RAM_USAGE) self.menuBar.addItem_(self.RAM_AVAILABLE) self.menuBar.addItem_(self.DISKIO) # disk I/O label self.menuBar.addItem_(self.DATA_READ) self.menuBar.addItem_(self.DATA_WRITTEN) self.menuBar.addItem_(self.NETWORK) # network label self.menuBar.addItem_(self.NETWORK_RECV) self.menuBar.addItem_(self.NETWORK_SENT) self.menuBar.addItem_(NSMenuItem.separatorItem()) # seperator self.menuBar.addItem_(self.QUIT) # quit button # Add menu to status bar self.statusItem.setMenu_(self.menuBar)
def _populatePlacard(self): if not hasattr(self, "placard"): return options = self._placardOptions = [ (None, None, None), # Display... ("Fill", "showGlyphFill", None), ("Stroke", "showGlyphStroke", None), ("Image", "showGlyphImage", None), ("Metrics", "showGlyphMargins", None), ("On Curve Points", "showGlyphOnCurvePoints", None), ("Off Curve Points", "showGlyphOffCurvePoints", None), ("Point Coordinates", "showGlyphPointCoordinates", None), ("Anchors", "showGlyphAnchors", None), ("Blues", "showFontPostscriptBlues", None), ("Family Blues", "showFontPostscriptFamilyBlues", None), (None, None, None), # layer divider ] if not hasattr(self, "_placardLayerOptions"): self._placardLayerOptions = {} # title item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("Display...", None, "") item.setHidden_(True) items = [item] # main layer for title, drawingAttribute, layerName in options: if title is None: continue state = self.getDrawingAttribute(drawingAttribute) item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(title, None, "") item.setState_(state) items.append(item) # sub layers glyph = self._glyphView.getGlyph() if glyph is not None: layerSet = glyph.layerSet if layerSet is not None: if len(layerSet.layerOrder) > 1: items.append(NSMenuItem.separatorItem()) # prep the state dictionary for layerName in list(self._placardLayerOptions.keys()): if layerName not in layerSet: del self._placardLayerOptions[layerName] for layerName in layerSet.layerOrder: if layerName not in self._placardLayerOptions: self._placardLayerOptions[layerName] = False for layerName in layerSet.layerOrder: state = self._placardLayerOptions[layerName] enabled = True if layerName == glyph.layer.name: state = True enabled = False self._placardOptions.append((None, None, layerName)) title = "Layer: %s" % layerName item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(title, None, "") item.setState_(state) item.setEnabled_(enabled) items.append(item) # set the items self.placard.optionsButton.setItems(items) button = self.placard.optionsButton.getNSPopUpButton() button.setTitle_("Display...") # update the layer options self._updateLayerDrawingAttributes()
def __init__(self): self._menuitem = NSMenuItem.separatorItem()
def setFont(self, font): # script list if font is None: scriptList = [] else: scriptList = ["DFLT"] + font.getScriptList() unsupportedScripts = [i for i in scriptTags if i not in scriptList] if unsupportedScripts: scriptList.append(NSMenuItem.separatorItem()) scriptList += unsupportedScripts self._controlGroup.scriptPopUpButton.setItems(scriptList) # language list if font is None: languageList = [] else: languageList = ["Default"] + font.getLanguageList() unsupportedLanguages = [i for i in languageTags if i not in languageList] if unsupportedLanguages: languageList.append(NSMenuItem.separatorItem()) languageList += unsupportedLanguages self._controlGroup.languagePopUpButton.setItems(languageList) # teardown existing controls for attr in self._gsubAttributes: delattr(self._controlGroup, attr) for attr in self._gposAttributes: delattr(self._controlGroup, attr) for attr in self._featureNames: delattr(self._controlGroup, attr) if hasattr(self._controlGroup, "gposTitle"): del self._controlGroup.gposTitle if hasattr(self._controlGroup, "gsubTitle"): del self._controlGroup.gsubTitle # stylistic set names if hasattr(font, "stylisticSetNames"): stylisticSetNames = font.stylisticSetNames else: stylisticSetNames = {} # GSUB top = self._dynamicTop if font is None: gsub = None else: gsub = font.gsub if gsub is None: gsubFeatureList = [] else: gsubFeatureList = gsub.getFeatureList() self._gsubAttributes = {} self._featureNames = {} if gsubFeatureList: self._controlGroup.gsubTitle = vanilla.TextBox((10, top, -10, 14), NSAttributedString.alloc().initWithString_attributes_("GSUB", titleControlAttributes), sizeStyle="small") top += 20 for tag in gsubFeatureList: state = font.gsub.getFeatureState(tag) attr = "gsubCheckBox_%s" % tag obj = vanilla.CheckBox((10, top, -10, 22), tag, value=state, callback=self._controlEditCallback) setattr(self._controlGroup, attr, obj) self._gsubAttributes[attr] = tag top += 20 # stylistic set name if tag in stylisticSetNames: attr = "ssName_%s" % tag setName = stylisticSetNames[tag] if hasattr(self._controlGroup, attr): obj = getattr(self._controlGroup, attr) obj.set(setName) else: obj = vanilla.TextBox((26, top, -10, 13), setName, sizeStyle="mini") setattr(self._controlGroup, attr, obj) self._featureNames[attr] = setName top += 13 top += 10 # GPOS if font is None: gpos = None else: gpos = font.gpos if gpos is None: gposFeatureList = [] else: gposFeatureList = gpos.getFeatureList() self._gposAttributes = {} if gposFeatureList: self._controlGroup.gposTitle = vanilla.TextBox((10, top, -10, 14), NSAttributedString.alloc().initWithString_attributes_("GPOS", titleControlAttributes), sizeStyle="small") top += 20 for tag in gposFeatureList: state = font.gpos.getFeatureState(tag) attr = "gposCheckBox_%s" % tag obj = vanilla.CheckBox((10, top, -10, 22), tag, value=state, callback=self._controlEditCallback) setattr(self._controlGroup, attr, obj) self._gposAttributes[attr] = tag top += 20 top += 10 # set the view size (x, y), (w, h) = self._nsObject.documentView().frame() self._nsObject.documentView().setFrame_(((x, y), (w, top))) x, y, w, h = self._controlGroup.getPosSize() self._controlGroup.setPosSize((x, y, w, top))