def applicationDidFinishLaunching_(self, notification): self.statusbar = NSStatusBar.systemStatusBar() # Create the statusbar item self.statusitem = self.statusbar.statusItemWithLength_(NSVariableStatusItemLength) # Set initial image raw_data = base64.b64decode(''.join(GOAGENT_ICON_DATA.strip().splitlines())) self.image_data = NSData.dataWithBytes_length_(raw_data, len(raw_data)) self.image = NSImage.alloc().initWithData_(self.image_data) self.statusitem.setImage_(self.image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) # Set a tooltip self.statusitem.setToolTip_('GoAgent OSX') # Build a very simple menu self.menu = NSMenu.alloc().init() # Show Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Show', 'show:', '') self.menu.addItem_(menuitem) # Hide Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Hide', 'hide:', '') self.menu.addItem_(menuitem) # Rest Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Reset', 'reset:', '') self.menu.addItem_(menuitem) # Default event menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') self.menu.addItem_(menuitem) # Bind it to the status item self.statusitem.setMenu_(self.menu)
def __setstate__(self, state): bytes = state.pop('_ns_print_info', None) if bytes: data = NSData.dataWithBytes_length_(bytes, len(bytes)) self._ns_print_info = NSKeyedArchiver.unarchiveObjectWithData_(data) else: GPageSetup.__setstate__(self, state)
def _setup_ui_dialogs(self): # This needs to be here otherwise we can't install the dialog if 'STOQ_TEST_MODE' in os.environ: return log.debug('providing graphical notification dialogs') from stoqlib.gui.base.dialogs import DialogSystemNotifier from stoqlib.lib.interfaces import ISystemNotifier from kiwi.component import provide_utility provide_utility(ISystemNotifier, DialogSystemNotifier(), replace=True) from gi.repository import Gtk from kiwi.environ import environ from stoqlib.gui.stockicons import STOQ_LAUNCHER Gtk.Window.set_default_icon_name(STOQ_LAUNCHER) if platform.system() == 'Darwin': from AppKit import NSApplication, NSData, NSImage # FIXME: This should be a 48x48 icon data = environ.get_resource_string('stoq', 'pixmaps', 'hicolor', '24x24', 'actions', 'stoq-launcher.png') data = NSData.alloc().initWithBytes_length_(data, len(data)) icon = NSImage.alloc().initWithData_(data) app = NSApplication.sharedApplication() app.setApplicationIconImage_(icon)
def _setup_ui_dialogs(self): # This needs to be here otherwise we can't install the dialog if 'STOQ_TEST_MODE' in os.environ: return log.debug('providing graphical notification dialogs') from stoqlib.gui.base.dialogs import DialogSystemNotifier from stoqlib.lib.interfaces import ISystemNotifier from kiwi.component import provide_utility provide_utility(ISystemNotifier, DialogSystemNotifier(), replace=True) import gtk from kiwi.environ import environ from kiwi.ui.pixbufutils import pixbuf_from_string data = environ.get_resource_string( 'stoq', 'pixmaps', 'stoq-stock-app-24x24.png') gtk.window_set_default_icon(pixbuf_from_string(data)) if platform.system() == 'Darwin': from AppKit import NSApplication, NSData, NSImage bytes = environ.get_resource_string( 'stoq', 'pixmaps', 'stoq-stock-app-48x48.png') data = NSData.alloc().initWithBytes_length_(bytes, len(bytes)) icon = NSImage.alloc().initWithData_(data) app = NSApplication.sharedApplication() app.setApplicationIconImage_(icon)
def _setup_ui_dialogs(self): # This needs to be here otherwise we can't install the dialog if 'STOQ_TEST_MODE' in os.environ: return log.debug('providing graphical notification dialogs') from stoqlib.gui.base.dialogs import DialogSystemNotifier from stoqlib.lib.interfaces import ISystemNotifier from kiwi.component import provide_utility provide_utility(ISystemNotifier, DialogSystemNotifier(), replace=True) from gi.repository import Gtk from kiwi.environ import environ from kiwi.ui.pixbufutils import pixbuf_from_string data = environ.get_resource_string('stoq', 'pixmaps', 'stoq-stock-app-24x24.png') Gtk.Window.set_default_icon(pixbuf_from_string(data)) if platform.system() == 'Darwin': from AppKit import NSApplication, NSData, NSImage bytes = environ.get_resource_string('stoq', 'pixmaps', 'stoq-stock-app-48x48.png') data = NSData.alloc().initWithBytes_length_(bytes, len(bytes)) icon = NSImage.alloc().initWithData_(data) app = NSApplication.sharedApplication() app.setApplicationIconImage_(icon)
def setupUI(self): self.statusbar = NSStatusBar.systemStatusBar() # Create the statusbar item self.statusitem = self.statusbar.statusItemWithLength_(NSVariableStatusItemLength) # Set initial image raw_data = base64.b64decode(''.join(GOAGENT_ICON_DATA.strip().splitlines())) self.image_data = NSData.dataWithBytes_length_(raw_data, len(raw_data)) self.image = NSImage.alloc().initWithData_(self.image_data) self.statusitem.setImage_(self.image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) # Set a tooltip self.statusitem.setToolTip_(GOAGENT_TITLE) # Build a very simple menu self.menu = NSMenu.alloc().init() # Show Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Show', 'show:', '') self.menu.addItem_(menuitem) # Hide Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Hide', 'hide2:', '') self.menu.addItem_(menuitem) # Rest Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Reload', 'reset:', '') self.menu.addItem_(menuitem) # Default event menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'exit:', '') self.menu.addItem_(menuitem) # Bind it to the status item self.statusitem.setMenu_(self.menu) # Console window frame = NSMakeRect(0,0,550,350) self.console_window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(frame, NSClosableWindowMask|NSTitledWindowMask, NSBackingStoreBuffered, False) self.console_window.setTitle_(GOAGENT_TITLE) self.console_window.setDelegate_(self) # Console view inside a scrollview self.scroll_view = NSScrollView.alloc().initWithFrame_(frame) self.scroll_view.setBorderType_(NSNoBorder) self.scroll_view.setHasVerticalScroller_(True) self.scroll_view.setHasHorizontalScroller_(False) self.scroll_view.setAutoresizingMask_(NSViewWidthSizable|NSViewHeightSizable) self.console_view = NSTextView.alloc().initWithFrame_(frame) self.console_view.setVerticallyResizable_(True) self.console_view.setHorizontallyResizable_(True) self.console_view.setAutoresizingMask_(NSViewWidthSizable) self.scroll_view.setDocumentView_(self.console_view) contentView = self.console_window.contentView() contentView.addSubview_(self.scroll_view) # Hide dock icon NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)
def do_play(self): if self.playing or not self.queue: return self.playing = True sample = self.queue[0] del self.queue[0] self.impl = NSSound.alloc() data = NSData.alloc().initWithBytes_length_(sample, len(sample)) self.impl.initWithData_(data) self.impl.setDelegate_(self) self.impl.play()
def play_sound_darwin(self, wav_file_as_byte_array): from AppKit import NSSound from AppKit import NSObject from AppKit import NSData nssound = NSSound.alloc() data = NSData.alloc().initWithBytes_length_(wav_file_as_byte_array, len(wav_file_as_byte_array)) nssound.initWithData_(data) nssound.setDelegate_(self) if (not nssound): raise IOError('Unable to load sound.') nssound.play()
def save_image_to_clipboard(self, url): pb = NSPasteboard.generalPasteboard() pb.clearContents() if url.startswith('http'): img = Image.open(urllib.request.urlopen(url)) else: img = Image.open(url) img_bytes = io.BytesIO() img.save(img_bytes, format='PNG') imgNsData = NSData.alloc().initWithBytes_length_( img_bytes.getvalue(), img_bytes.tell()) imgNsImage = NSImage.alloc().initWithData_(imgNsData) array = NSArray.arrayWithObject_(imgNsImage) pb.writeObjects_(array) return
def NSImageFactory(image): font = image.font if font is None: return layer = image.layer images = font.images if image.fileName not in images: return None imageColor = image.color if imageColor is None: imageColor = layer.color data = images[image.fileName] data = NSData.dataWithBytes_length_(data, len(data)) if imageColor is None: return NSImage.alloc().initWithData_(data) # make the input image inputImage = CIImage.imageWithData_(data) # make a color filter r, g, b, a = imageColor color0 = CIColor.colorWithRed_green_blue_(r, g, b) color1 = CIColor.colorWithRed_green_blue_(1, 1, 1) falseColorFilter = CIFilter.filterWithName_("CIFalseColor") falseColorFilter.setValue_forKey_(inputImage, "inputImage") falseColorFilter.setValue_forKey_(color0, "inputColor0") falseColorFilter.setValue_forKey_(color1, "inputColor1") # get the result ciImage = falseColorFilter.valueForKey_("outputImage") # make an NSImage nsImage = NSImage.alloc().initWithSize_(ciImage.extent().size) nsImage.lockFocus() context = NSGraphicsContext.currentContext().CIContext() context.drawImage_atPoint_fromRect_(ciImage, (0, 0), ciImage.extent()) nsImage.unlockFocus() # apply the alpha finalImage = NSImage.alloc().initWithSize_(nsImage.size()) finalImage.lockFocus() nsImage.drawAtPoint_fromRect_operation_fraction_( (0, 0), ((0, 0), nsImage.size()), NSCompositeSourceOver, a ) finalImage.unlockFocus() return finalImage
def applicationDidFinishLaunching_(self, notification): self.statusbar = NSStatusBar.systemStatusBar() # Create the statusbar item self.statusitem = self.statusbar.statusItemWithLength_( NSVariableStatusItemLength) # Set initial image raw_data = base64.b64decode(''.join( GOAGENT_ICON_DATA.strip().splitlines())) self.image_data = NSData.dataWithBytes_length_(raw_data, len(raw_data)) self.image = NSImage.alloc().initWithData_(self.image_data) self.statusitem.setImage_(self.image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) # Set a tooltip self.statusitem.setToolTip_('GoAgent OSX') # Build a very simple menu self.menu = NSMenu.alloc().init() # Show Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Show', 'show:', '') self.menu.addItem_(menuitem) # Hide Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Hide', 'hide:', '') self.menu.addItem_(menuitem) # Rest Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Reset', 'reset:', '') self.menu.addItem_(menuitem) # Default event menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') self.menu.addItem_(menuitem) # Bind it to the status item self.statusitem.setMenu_(self.menu)
def _setup_ui_dialogs(self): # This needs to be here otherwise we can't install the dialog if 'STOQ_TEST_MODE' in os.environ: return log.debug('providing graphical notification dialogs') from stoqlib.gui.base.dialogs import DialogSystemNotifier from stoqlib.lib.interfaces import ISystemNotifier from kiwi.component import provide_utility provide_utility(ISystemNotifier, DialogSystemNotifier(), replace=True) from gi.repository import Gtk from kiwi.environ import environ from stoqlib.gui.stockicons import STOQ_LAUNCHER Gtk.Window.set_default_icon_name(STOQ_LAUNCHER) if platform.system() == 'Darwin': from AppKit import NSApplication, NSData, NSImage # FIXME: This should be a 48x48 icon data = environ.get_resource_string( 'stoq', 'pixmaps', 'hicolor', '24x24', 'actions', 'stoq-launcher.png') data = NSData.alloc().initWithBytes_length_(data, len(data)) icon = NSImage.alloc().initWithData_(data) app = NSApplication.sharedApplication() app.setApplicationIconImage_(icon)
def setupUI(self): self.statusbar = NSStatusBar.systemStatusBar() # Create the statusbar item self.statusitem = self.statusbar.statusItemWithLength_( NSVariableStatusItemLength) # Set initial image raw_data = base64.b64decode(''.join( GOAGENT_ICON_DATA.strip().splitlines())) self.image_data = NSData.dataWithBytes_length_(raw_data, len(raw_data)) self.image = NSImage.alloc().initWithData_(self.image_data) self.statusitem.setImage_(self.image) # Let it highlight upon clicking self.statusitem.setHighlightMode_(1) # Set a tooltip self.statusitem.setToolTip_(GOAGENT_TITLE) # Build a very simple menu self.menu = NSMenu.alloc().init() # Show Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Show', 'show:', '') self.menu.addItem_(menuitem) # Hide Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Hide', 'hide2:', '') self.menu.addItem_(menuitem) # Rest Menu Item menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Reload', 'reset:', '') self.menu.addItem_(menuitem) # Default event menuitem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'exit:', '') self.menu.addItem_(menuitem) # Bind it to the status item self.statusitem.setMenu_(self.menu) # Console window frame = NSMakeRect(0, 0, 550, 350) self.console_window = NSWindow.alloc( ).initWithContentRect_styleMask_backing_defer_( frame, NSClosableWindowMask | NSTitledWindowMask, NSBackingStoreBuffered, False) self.console_window.setTitle_(GOAGENT_TITLE) self.console_window.setDelegate_(self) # Console view inside a scrollview self.scroll_view = NSScrollView.alloc().initWithFrame_(frame) self.scroll_view.setBorderType_(NSNoBorder) self.scroll_view.setHasVerticalScroller_(True) self.scroll_view.setHasHorizontalScroller_(False) self.scroll_view.setAutoresizingMask_(NSViewWidthSizable | NSViewHeightSizable) self.console_view = NSTextView.alloc().initWithFrame_(frame) self.console_view.setVerticallyResizable_(True) self.console_view.setHorizontallyResizable_(True) self.console_view.setAutoresizingMask_(NSViewWidthSizable) self.scroll_view.setDocumentView_(self.console_view) contentView = self.console_window.contentView() contentView.addSubview_(self.scroll_view) # Hide dock icon NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)
# If no metadata is found, use filename instead if not subtitle or not message: filename = Path(status["file"]).name subtitle = filename center = NSUserNotificationCenter.defaultUserNotificationCenter() notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) # To-Do: Data allocation currently doesn't work in Catalina if mac_ver()[0] != "10.15": if cover is not None: # the song has an embedded cover image data = NSData.alloc().initWithBytes_length_(cover, len(cover)) image_rep = NSBitmapImageRep.alloc().initWithData_(data) # CGImageGetWidth started returning bogus values in macOS 10.14 -> # Use Pillow to extract the image dimensions size = NSMakeSize(*Image.open(BytesIO(cover)).size) image = NSImage.alloc().initWithSize_(size) image.addRepresentation_(image_rep) if env.itunes_style_notification: notification.setValue_forKey_(image, "_identityImage") else: notification.setValue_forKey_( NSImage.alloc().initByReferencingFile_(str(env.app_icon)), "_identityImage",
def Data(s): return NSData.alloc().initWithBytes_length_(s, len(s))
if "album" in status: message += ' – %s' % status["album"] if "date" in status and status["date"].isnumeric(): message += " (%s)" % status["date"] center = NSUserNotificationCenter.defaultUserNotificationCenter() notification = NSUserNotification.alloc().init() notification.setTitle_(title) notification.setSubtitle_(subtitle) notification.setInformativeText_(message) if cover: # the song has an embedded cover image data = NSData.alloc().initWithBytes_length_(cover, len(cover)) image_rep = NSBitmapImageRep.alloc().initWithData_(data) size = NSMakeSize(CGImageGetWidth(image_rep), CGImageGetHeight(image_rep)) image = NSImage.alloc().initWithSize_(size) image.addRepresentation_(image_rep) if config.itunes_style_notification: notification.setValue_forKey_(image, "_identityImage") else: notification.setValue_forKey_( NSImage.alloc().initByReferencingFile_(config.app_icon), "_identityImage") notification.setContentImage_(image) else: # song has no cover image, show an icon notification.setValue_forKey_( NSImage.alloc().initByReferencingFile_(config.app_icon), "_identityImage")