Example #1
0
	def loadPlugin( self ):
		"""
		You can add an observer like in the example.
		Do all initializing here.
		"""
		try:
			NSBundle.loadNibNamed_owner_( "GlyphsGitDialog", self )
			selector = objc.selector( self.documentWasSaved, signature="v@:@" )
			NSNotificationCenter.defaultCenter().addObserver_selector_name_object_( self, selector, "GSDocumentWasSavedSuccessfully", None )
			
			mainMenu = NSApplication.sharedApplication().mainMenu()
			s = objc.selector(self.showRevisions,signature='v@:')
			self.revisionMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_("View revision history", s, "" )
			self.revisionMenuItem.setTarget_(self)
			index = 0
			numberOfSeperators = 0
			for menuItem in mainMenu.itemAtIndex_(1).submenu().itemArray():
				if menuItem.isSeparatorItem():
					numberOfSeperators += 1
				if numberOfSeperators == 2:
					break
				index += 1;
			mainMenu.itemAtIndex_(1).submenu().insertItem_atIndex_(self.revisionMenuItem, index)
			return None
		except Exception, err:
			self.logToConsole( "init: %s" % traceback.format_exc() )
Example #2
0
    def testArgumentTypesPythonStyle(self):
        # Check that argumentTypes + returnType is correctly converted to
        # a signature

        s = objc.selector(lambda self: None, argumentTypes='ii', returnType='i')
        self.assertEqual(s.signature, b'i@:ii')

        s = objc.selector(lambda self: None, argumentTypes='Oi', returnType='i')
        self.assertEqual(s.signature, b'i@:@i')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='l')
        self.assertEqual(s.signature, objc._C_LNG + b'@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='f')
        self.assertEqual(s.signature, objc._C_FLT + b'@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='d')
        self.assertEqual(s.signature, objc._C_DBL + b'@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='i')
        self.assertEqual(s.signature, objc._C_INT + b'@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='s')
        self.assertEqual(s.signature, b'@@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='S')
        self.assertEqual(s.signature, b'@@:')

        s = objc.selector(lambda self: None, argumentTypes='', returnType='z')
        self.assertEqual(s.signature, b'@@:')

        s = objc.selector(lambda self: None, argumentTypes='zbhilcfdO', returnType='z')
        self.assertEqual(s.signature, b'@@:@csilcfd@')
Example #3
0
class BBFileLikeObjectReader(NSObject):
    """
    Provides a suitable delegate class for the BBDelegatingInputStream class in
    LightAquaBlue.framework.

    This basically provides a wrapper for a python file-like object so that it
    can be read through a NSInputStream.
    """
    def initWithFileLikeObject_(self, fileobj):
        self = super(BBFileLikeObjectReader, self).init()
        self.__fileobj = fileobj
        return self

    initWithFileLikeObject_ = objc.selector(initWithFileLikeObject_,
                                            signature=b"@@:@")

    def readDataWithMaxLength_(self, maxlength):
        try:
            data = self.__fileobj.read(maxlength)
        except Exception:
            return None
        return buffer(data)

    readDataWithMaxLength_ = objc.selector(
        readDataWithMaxLength_, signature=b"@@:I")  #"@12@0:4I8"    #"@:I"
Example #4
0
 def start(self):
     try:
         # new API in Glyphs 2.3.1-910
         new_update_menu_item = NSMenuItem(self.update_name, self.updateFilters_)
         new_restore_menu_item = NSMenuItem(self.restoredefault_name, self.restoreFilters_)
         new_opendir_menu_item = NSMenuItem(self.opendir_name, self.openGlyphsfiltersDirectory_)
         Glyphs.menu[EDIT_MENU].append(new_update_menu_item)
         Glyphs.menu[EDIT_MENU].append(new_restore_menu_item)
         Glyphs.menu[EDIT_MENU].append(new_opendir_menu_item)
     except Exception:
         main_menu = Glyphs.mainMenu()
         update_selector = objc.selector(self.updateFilters_, signature="v@:@")
         restore_selector = objc.selector(self.restoreFilters_, signature="v@:@")
         open_selector = objc.selector(
             self.openGlyphsfiltersDirectory_, signature="v@:@"
         )
         new_update_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
             self.update_name, update_selector, ""
         )
         new_restore_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
             self.restore_name, restore_selector, ""
         )
         new_open_menu_item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
             self.opendir_name, open_selector, ""
         )
         new_update_menu_item.setTarget_(self)
         main_menu.itemWithTag_(5).submenu().addItem_(new_update_menu_item)
         new_restore_menu_item.setTarget_(self)
         main_menu.itemWithTag_(5).submenu().addItem_(new_restore_menu_item)
         new_open_menu_item.setTarget_(self)
         main_menu.itemWithTag_(5).submenu().addItem_(new_open_menu_item)
Example #5
0
        class OC_TestTypeCodeLeaks_Result(NSObject):
            def myBOOLResult(self):
                return True

            myBOOLResult = objc.selector(myBOOLResult,
                                         signature=objc._C_NSBOOL + b"@:")

            def myInt8Result(self):
                return True

            myInt8Result = objc.selector(myInt8Result,
                                         signature=objc._C_CHAR_AS_INT + b"@:")

            def myByteResult(self):
                return True

            myByteResult = objc.selector(myByteResult,
                                         signature=objc._C_CHAR_AS_TEXT +
                                         b"@:")

            def myUniCharResult(self):
                return True

            myUniCharResult = objc.selector(myUniCharResult,
                                            signature=objc._C_UNICHAR + b"@:")

            def myUniStrResult(self):
                return True

            myUniStrResult = objc.selector(myUniStrResult,
                                           signature=objc._C_PTR +
                                           objc._C_UNICHAR + b"@:")
Example #6
0
        class OC_TestTypeCodeLeaks_RefIn(NSObject):
            def myBOOLArg_(self, arg):
                pass

            myBOOLArg_ = objc.selector(myBOOLArg_,
                                       signature=b"v@:" + objc._C_IN +
                                       objc._C_PTR + objc._C_NSBOOL)

            def myInt8Arg_(self, arg):
                pass

            myInt8Arg_ = objc.selector(
                myInt8Arg_,
                signature=b"v@:" + objc._C_IN + objc._C_PTR +
                objc._C_CHAR_AS_INT,
            )

            def myByteArg_(self, arg):
                pass

            myByteArg_ = objc.selector(
                myByteArg_,
                signature=b"v@:" + objc._C_IN + objc._C_PTR +
                objc._C_CHAR_AS_TEXT,
            )

            def myUniCharArg_(self, arg):
                pass

            myUniCharArg_ = objc.selector(
                myUniCharArg_,
                signature=b"v@:" + objc._C_IN + objc._C_PTR + objc._C_UNICHAR,
            )
Example #7
0
    def testDefaultSignatures(self):
        def meth():
            pass

        s = objc.selector(meth)
        self.assertEqual(s.selector, b'meth')
        self.assertEqual(s.signature, b'v@:')

        def meth__():
            pass

        s = objc.selector(meth__)
        self.assertEqual(s.selector, b'meth::')
        self.assertEqual(s.signature, b'v@:@@')

        def meth():
            return 1

        s = objc.selector(meth)
        self.assertEqual(s.selector, b'meth')
        self.assertEqual(s.signature, b'@@:')

        def meth__():
            return 1

        s = objc.selector(meth__)
        self.assertEqual(s.selector, b'meth::')
        self.assertEqual(s.signature, b'@@:@@')
class OCTestHidden(objc.lookUpClass('NSObject')):
    m = hidden_method()

    @objc.selector
    def body(self):
        return "BODY"

    body.isHidden = True

    def bodyclass(self):
        return "BODYCLASS"

    bodyclass = objc.selector(bodyclass, isClassMethod=True)
    bodyclass.isHidden = True

    @objc.selector
    def somebody(self):
        return "instance"

    somebody.isHidden = True

    def boolMethod(self):
        return 1

    boolMethod = objc.selector(boolMethod, signature=objc._C_NSBOOL + b'@:')
    boolMethod.isHidden = True
Example #9
0
    def testSelectorSignatures(self):

        self.assertIsInstance(
                objc.selector(lambda x,y:1, signature=b"ii"),
                objc.selector
        )
        self.assertIsInstance(
                objc.selector(lambda x,y:1, argumentTypes="ii"),
                objc.selector
        )
        self.assertIsInstance(
                objc.selector(lambda x,y:1,
                    argumentTypes="ii", returnType="s"),
                objc.selector
        )

        self.assertRaises(ValueError, objc.selector, lambda x,y:1,
                signature=b"FOOBAR")

        self.assertRaises(TypeError, objc.selector, lambda x,y:1,
                signature=b"@@", returnType="i")
        self.assertRaises(TypeError, objc.selector, lambda x,y:1,
                signature=b"@@", argumentTypes="ii")

        self.assertRaises(ValueError, objc.selector, lambda x,y:1,
                argumentTypes="iX")
        self.assertRaises(ValueError, objc.selector, lambda x,y:1,
                returnType="X")
Example #10
0
class PyObjCDebuggingDelegate(NSObject):
    verbosity = objc.ivar('verbosity', 'i')

    def initWithVerbosity_(self, verbosity):
        self = self.init()
        self.verbosity = verbosity
        return self

    def exceptionHandler_shouldLogException_mask_(self, sender, exception,
                                                  aMask):
        try:
            if isPythonException(exception):
                if self.verbosity & LOGSTACKTRACE:
                    nsLogObjCException(exception)
                return nsLogPythonException(exception)
            elif self.verbosity & LOGSTACKTRACE:
                return nsLogObjCException(exception)
            else:
                return False
        except:
            print >> sys.stderr, "*** Exception occurred during exception handler ***"
            traceback.print_exc(sys.stderr)
            return True

    exceptionHandler_shouldLogException_mask_ = objc.selector(
        exceptionHandler_shouldLogException_mask_, signature='c@:@@I')

    def exceptionHandler_shouldHandleException_mask_(self, sender, exception,
                                                     aMask):
        return False

    exceptionHandler_shouldHandleException_mask_ = objc.selector(
        exceptionHandler_shouldHandleException_mask_, signature='c@:@@I')
Example #11
0
    def testDefaultSignatures(self):
        def meth():
            pass

        s = objc.selector(meth)
        self.assertEqual(s.selector, b"meth")
        self.assertEqual(s.signature, b"v@:")

        def meth__():
            pass

        s = objc.selector(meth__)
        self.assertEqual(s.selector, b"meth::")
        self.assertEqual(s.signature, b"v@:@@")

        def meth():
            return 1

        s = objc.selector(meth)
        self.assertEqual(s.selector, b"meth")
        self.assertEqual(s.signature, b"@@:")

        def meth__():
            return 1

        s = objc.selector(meth__)
        self.assertEqual(s.selector, b"meth::")
        self.assertEqual(s.signature, b"@@:@@")
Example #12
0
    def __pyobjc_class_setup__(self, name, class_dict, instance_methods,
                               class_methods):
        super(array_property,
              self).__pyobjc_class_setup__(name, class_dict, instance_methods,
                                           class_methods)

        # Insert (Mutable) Indexed Accessors
        # FIXME: should only do the mutable bits when we're actually a mutable property

        name = self._name
        Name = name[0].upper() + name[1:]

        countOf, objectIn, insert, remove, replace = makeArrayAccessors(
            self._name)

        countOf = selector(
            countOf,
            selector=('countOf%s' % (Name, )).encode('latin1'),
            signature=_C_NSUInteger + b'@:',
        )
        countOf.isHidden = True
        instance_methods.add(countOf)

        objectIn = selector(
            objectIn,
            selector=('objectIn%sAtIndex:' % (Name, )).encode('latin1'),
            signature=b'@@:' + _C_NSUInteger,
        )
        objectIn.isHidden = True
        instance_methods.add(objectIn)

        insert = selector(
            insert,
            selector=('insertObject:in%sAtIndex:' % (Name, )).encode('latin1'),
            signature=b'v@:@' + _C_NSUInteger,
        )
        insert.isHidden = True
        instance_methods.add(insert)

        remove = selector(
            remove,
            selector=('removeObjectFrom%sAtIndex:' %
                      (Name, )).encode('latin1'),
            signature=b'v@:' + _C_NSUInteger,
        )
        remove.isHidden = True
        instance_methods.add(remove)

        replace = selector(
            replace,
            selector=('replaceObjectIn%sAtIndex:withObject:' %
                      (Name, )).encode('latin1'),
            signature=b'v@:' + _C_NSUInteger + b'@',
        )
        replace.isHidden = True
        instance_methods.add(replace)
Example #13
0
class _ChannelServerEventListener(Foundation.NSObject):
    """
    Listens for server-specific events on a RFCOMM or L2CAP channel (i.e. when a
    client connects) and makes callbacks to a specified object when events
    occur.
    """
    
    # note this is a NSObject "init", not a python object "__init__"
    def initWithDelegate_port_protocol_(self, cb_obj, port, proto):
        """
        Arguments:
        - cb_obj: to receive callbacks when a client connects to 
          to the channel, the callback object should have a method 
          '_handle_channelopened' which takes the newly opened 
          IOBluetoothRFCOMMChannel or IOBluetoothL2CAPChannel as its argument.
        - port: the channel or PSM that the server is listening on
        - proto: L2CAP or RFCOMM.
        """        
        self = super(_ChannelServerEventListener, self).init()            
        if cb_obj is None:
            raise TypeError("callback object is None")
        self.__cb_obj = cb_obj            
        self.__usernotif = None        

        if proto == _lightbluecommon.RFCOMM:
            usernotif = _IOBluetooth.IOBluetoothRFCOMMChannel.registerForChannelOpenNotifications_selector_withChannelID_direction_(self, "newChannelOpened:channel:", port, _macutil.kIOBluetoothUserNotificationChannelDirectionIncoming)      
        elif proto == _lightbluecommon.L2CAP:
            usernotif = _IOBluetooth.IOBluetoothL2CAPChannel.registerForChannelOpenNotifications_selector_withPSM_direction_(self, "newChannelOpened:channel:", port, _macutil.kIOBluetoothUserNotificationChannelDirectionIncoming)             
            
        if usernotif is None:
            raise _socket.error("Unable to register for channel-" + \
                "opened notifications on server socket on channel/PSM %d" % \
                port)
        self.__usernotif = usernotif
        return self
    initWithDelegate_port_protocol_ = objc.selector(
        initWithDelegate_port_protocol_, signature=b"@@:@ii")

    def close(self):
        if self.__usernotif is not None:
            self.__usernotif.unregister()   
        
    def newChannelOpened_channel_(self, notif, newChannel):
        """ 
        Handle when a client connects to the server channel.
        (This method is called for both RFCOMM and L2CAP channels.)
        """
        if newChannel is not None and newChannel.isIncoming():
            # not sure if delegate really needs to be set
            newChannel.setDelegate_(self) 

            if hasattr(self.__cb_obj, '_handle_channelopened'):          
                self.__cb_obj._handle_channelopened(newChannel)
    # makes this method receive notif and channel as objects                
    newChannelOpened_channel_ = objc.selector(
            newChannelOpened_channel_, signature=b"v@:@@")
    def test_python_only(self):
        def method(self, a, b): pass
        s = selector(method)
        self.assertEqual(s.selector, b'method')
        self.assertEqual(s.signature, b'v@:')

        def method_pep8(self, a, b): pass
        s = selector(method_pep8)
        self.assertEqual(s.selector, b'method_pep8')
        self.assertEqual(s.signature, b'v@:')
Example #15
0
    def __pyobjc_class_setup__(self, name, class_dict, instance_methods, class_methods):
        super(array_property, self).__pyobjc_class_setup__(
            name, class_dict, instance_methods, class_methods
        )

        # Insert (Mutable) Indexed Accessors

        name = self._name
        Name = name[0].upper() + name[1:]

        countOf, objectIn, insert, remove, replace = makeArrayAccessors(self._name)

        countOf = selector(
            countOf,
            selector=("countOf%s" % (Name,)).encode("latin1"),
            signature=_C_NSUInteger + b"@:",
        )
        countOf.isHidden = True
        instance_methods.add(countOf)

        objectIn = selector(
            objectIn,
            selector=("objectIn%sAtIndex:" % (Name,)).encode("latin1"),
            signature=b"@@:" + _C_NSUInteger,
        )
        objectIn.isHidden = True
        instance_methods.add(objectIn)

        insert = selector(
            insert,
            selector=("insertObject:in%sAtIndex:" % (Name,)).encode("latin1"),
            signature=b"v@:@" + _C_NSUInteger,
        )
        insert.isHidden = True
        instance_methods.add(insert)

        remove = selector(
            remove,
            selector=("removeObjectFrom%sAtIndex:" % (Name,)).encode("latin1"),
            signature=b"v@:" + _C_NSUInteger,
        )
        remove.isHidden = True
        instance_methods.add(remove)

        replace = selector(
            replace,
            selector=("replaceObjectIn%sAtIndex:withObject:" % (Name,)).encode(
                "latin1"
            ),
            signature=b"v@:" + _C_NSUInteger + b"@",
        )
        replace.isHidden = True
        instance_methods.add(replace)
    def test_python_only(self):
        def method(self, a, b):
            pass

        s = selector(method)
        self.assertEqual(s.selector, b"method")
        self.assertEqual(s.signature, b"v@:")

        def method_pep8(self, a, b):
            pass

        s = selector(method_pep8)
        self.assertEqual(s.selector, b"method_pep8")
        self.assertEqual(s.signature, b"v@:")
Example #17
0
    def test_python_only(self):
        def method(self, a, b):
            pass

        s = selector(method)
        self.assertEqual(s.selector, b'method')
        self.assertEqual(s.signature, b'v@:')

        def method_pep8(self, a, b):
            pass

        s = selector(method_pep8)
        self.assertEqual(s.selector, b'method_pep8')
        self.assertEqual(s.signature, b'v@:')
    def test_objective_c(self):
        def foo_(self, a): pass
        s = selector(foo_)
        self.assertEqual(s.selector, b'foo:')
        self.assertEqual(s.signature, b'v@:@')

        def foo_bar_(self, a): pass
        s = selector(foo_bar_)
        self.assertEqual(s.selector, b'foo:bar:')
        self.assertEqual(s.signature, b'v@:@@')

        def foo_bar_(self, a): return 1
        s = selector(foo_bar_)
        self.assertEqual(s.selector, b'foo:bar:')
        self.assertEqual(s.signature, b'@@:@@')
Example #19
0
    def run(self):
        self.app = NSApplication.sharedApplication()
        self.delegate = self.createAppDelegate().alloc().init()
        self.app.setDelegate_(self.delegate)
        self.app.setActivationPolicy_(NSApplicationActivationPolicyAccessory)
        self.workspace = NSWorkspace.sharedWorkspace()

        # listen for events thrown by the Experience sampling window
        s = objc.selector(self.makeAppActive_,signature='v@:@')
        NSNotificationCenter.defaultCenter().addObserver_selector_name_object_(self, s, 'makeAppActive', None)

        s = objc.selector(self.takeExperienceScreenshot_,signature='v@:@')
        NSNotificationCenter.defaultCenter().addObserver_selector_name_object_(self, s, 'takeExperienceScreenshot', None)

        AppHelper.runEventLoop()
Example #20
0
    def testStructCallback(self):
        """
        Regression test for an issue reported on the PyObjC mailinglist.
        """
        tp = objc.createStructType("FooStruct", b'{FooStruct="first"i"second"i}', None)

        StructArrayDelegate = objc.informal_protocol(
            "StructArrayDelegate",
            [
                objc.selector(None, b"arrayOf4Structs:",
                    signature=b"@@:[4{FooStruct=ii}]"),
            ])

        class OC_PyStruct (NSObject):

            def arrayOf4Structs_(self, value):
                return value

        self.assertEqual(OC_PyStruct.arrayOf4Structs_.signature, b"@@:[4{FooStruct=" + objc._C_INT + objc._C_INT + b"}]")

        o = OC_PyStruct.alloc().init()
        v = OC_StructTest.callArrayOf4Structs_(o)
        self.assertEqual(len(v), 4)
        for i in range(3):
            self.assertIsInstance(v[i], tp)

        self.assertEqual(v[0], tp(1, 2))
        self.assertEqual(v[1], tp(3, 4))
        self.assertEqual(v[2], tp(5, 6))
        self.assertEqual(v[3], tp(7, 8))
Example #21
0
    def _runScript(self, compile=True, newSeed=True):
        if not self.cleanRun(self._execScript):
            pass

        # Check whether we are dealing with animation
        if self.canvas.speed is not None:
            if not self.namespace.has_key("draw"):
                errorAlert(
                    "Not a proper NodeBox animation",
                    "NodeBox animations should have at least a draw() method.")
                return

            # Check if animationTimer is already running
            if self.animationTimer is not None:
                self.stopScript()

            self.speed = self.canvas.speed

            # Run setup routine
            if self.namespace.has_key("setup"):
                self.fastRun(self.namespace["setup"])
            window = self.currentView.window()
            window.makeFirstResponder_(self.currentView)

            # Start the timer
            self.animationTimer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(
                1.0 / self.speed, self,
                objc.selector(self.doFrame, signature="v@:@"), None, True)

            # Start the spinner
            self.animationSpinner.startAnimation_(None)
Example #22
0
    def imageGrowLoop(self):
        img = self.samples[self.currentSample]['screenshot'][:]
        path = os.path.join(self.datadrive, "screenshots", self.samples[self.currentSample]['screenshot'])
        cueImage = NSImage.alloc().initByReferencingFile_(path)
        max_height = min(cueImage.size().height, self.viewH)

        if(self.cueH <= max_height-20 and self.growImage):
            print 'increasing size'
            self.cueH = self.cueH + 20
            self.cueW = self.cueH * self.cueRatio

            targetImage = NSImage.alloc().initWithSize_(NSMakeSize(self.cueW, self.cueH))

            if(self.samples[self.currentSample]['snippet']):
                x = float(path.split("_")[-2])
                y = float(path.split("_")[-1].split('-')[0].split('.')[0])
                fromRect = CG.CGRectMake(x-self.cueW/2, y-self.cueH/2, self.cueW, self.cueH)
                toRect = CG.CGRectMake(0.0, 0.0, self.cueW, self.cueH)
            else:
                fromRect = CG.CGRectMake(0.0, 0.0, cueImage.size().width, cueImage.size().height)
                toRect = CG.CGRectMake(0.0, 0.0, self.cueW, self.cueH)

            targetImage.lockFocus()
            cueImage.drawInRect_fromRect_operation_fraction_( toRect, fromRect, NSCompositeCopy, 1.0 )
            targetImage.unlockFocus()

            self.reviewController.mainPanel.setImage_(targetImage)

            s = objc.selector(self.imageGrowLoop,signature='v@:')
            self.imageLoop = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(2, self, s, None, False)
Example #23
0
    def _runScript(self, compile=True, newSeed=True):
        if not self.cleanRun(self._execScript):
            pass

        # Check whether we are dealing with animation
        if self.canvas.speed is not None:
            if not self.namespace.has_key("draw"):
                errorAlert("Not a proper NodeBox animation", "NodeBox animations should have at least a draw() method.")
                return

            # Check if animationTimer is already running
            if self.animationTimer is not None:
                self.stopScript()

            self.speed = self.canvas.speed

            # Run setup routine
            if self.namespace.has_key("setup"):
                self.fastRun(self.namespace["setup"])
            window = self.currentView.window()
            window.makeFirstResponder_(self.currentView)

            # Start the timer
            self.animationTimer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(
                1.0 / self.speed, self, objc.selector(self.doFrame, signature="v@:@"), None, True
            )

            # Start the spinner
            self.animationSpinner.startAnimation_(None)
Example #24
0
 def loadPlugin(self):
     mainMenu = NSApplication.sharedApplication().mainMenu()
     s = objc.selector(self.newDocument, signature='v@:')
     newMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
         "New Drawbot", s, "")
     newMenuItem.setTarget_(self)
     mainMenu.itemAtIndex_(1).submenu().insertItem_atIndex_(newMenuItem, 1)
Example #25
0
 def start(self):
     """Starts the plugin"""
     mainMenu = Glyphs.mainMenu()
     s = objc.selector(self.invokePlugin_, signature=b'v@:@')
     newMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(self.name, s, '')
     newMenuItem.setTarget_(self)
     mainMenu.itemWithTag_(5).submenu().addItem_(newMenuItem)
Example #26
0
    def do_informal_protocol(self, node):
        name = self.attribute_string(node, "name", None)
        if not name:
            return

        method_list = []
        for method in node:
            sel_name = self.attribute_string(method, "selector", None)
            typestr = self.attribute_string(method, "type", "type64")
            is_class = self.attribute_bool(method, "classmethod", None,
                                           _SENTINEL)
            if is_class is _SENTINEL:
                # Manpage says 'class_method', older PyObjC used 'classmethod'
                is_class = self.attribute_bool(method, "class_method", None,
                                               False)

            if not sel_name or not typestr:
                continue

            typestr = self.typestr2typestr(typestr)
            sel = objc.selector(None,
                                selector=_as_bytes(sel_name),
                                signature=_as_bytes(typestr),
                                isClassMethod=is_class)
            method_list.append(sel)

        if method_list:
            self.informal_protocols.append((name, method_list))
    def testHiddenAddMethods(self):
        @objc.selector
        def addedmethod(self):
            return "NEW"

        addedmethod.isHidden = True

        def addedclass(self):
            return "NEWCLASS"

        addedclass = objc.selector(addedclass, isClassMethod=True)
        addedclass.isHidden = True

        objc.classAddMethods(OCTestHidden, [addedmethod, addedclass])

        o = OCTestHidden.alloc().init()

        # Instance method
        self.assertRaises(AttributeError, getattr, o, 'addedmethod')

        v = o.performSelector_(b'addedmethod')
        self.assertEquals(v, "NEW")

        v = o.pyobjc_instanceMethods.addedmethod()
        self.assertEquals(v, "NEW")

        # Class method
        self.assertRaises(AttributeError, getattr, OCTestHidden, 'addedclass')

        v = OCTestHidden.performSelector_(b'addedclass')
        self.assertEquals(v, "NEWCLASS")

        v = OCTestHidden.pyobjc_classMethods.addedclass()
        self.assertEquals(v, "NEWCLASS")
Example #28
0
 def setup_itunes_observer(self):
     self.itunes = ScriptingBridge.SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
     log.debug("iTunes running: {}".format(self.itunes.isRunning()))
     dnc = Foundation.NSDistributedNotificationCenter.defaultCenter()
     selector = objc.selector(self.receivedNotification_, signature=b"v@:@")
     dnc.addObserver_selector_name_object_(self, selector, "com.apple.iTunes.playerInfo", None)
     log.debug("Added observer")
Example #29
0
    def prepare_to_scrobble(self, userinfo):
        log.debug("prepare_to_scrobble")
        self.cancel_scrobble_timer()
        if userinfo.get("PersistentID") is None:
            log.warning("Track being played doesn't have a PersistentID, so can't prepare to scrobble it!")
            return

        # We need to wait a bit for a certain amount of the track to be played before scrobbling it.
        # The delay is half the track's length or SCROBBLER_HALFWAY_THRESHOLD, whichever is sooner.
        track_length = userinfo.get("Total Time", 0) / 1000 # seconds
        if track_length == 0:
            log.debug("Track has zero length, trying to get it from itunes.currentTrack after 5 seconds")
            time.sleep(5)
            track_length = self.itunes.currentTrack().duration()
            log.debug("currentTrack().duration(): {}".format(track_length))
            if not track_length:
                log.debug("Still zero-length, giving up!")
                return
        elif track_length < SCROBBLER_MIN_TRACK_LENGTH:
            log.debug("Track is too short ({}), so not going to scrobble it".format(track_length))
            return
        timeout = min(ceil(track_length/2), SCROBBLER_HALFWAY_THRESHOLD)
        log.debug("Setting up a timer for {} seconds".format(timeout))
        # Set up a timer that calls back after timeout seconds
        self.scrobble_timer = Foundation.NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(
            timeout,
            self,
            objc.selector(self.scrobbleTimerFired_, signature=b"v@:@"),
            userinfo,
            False
        )
Example #30
0
class ReturnAStruct(NSObject):
    def someRectWithRect_(self, aRect):
        ((x, y), (h, w)) = aRect
        return ((x, y), (h, w))

    someRectWithRect_ = objc.selector(someRectWithRect_,
                                      signature=rct + b"@:" + rct)
Example #31
0
class OC_TestCopy1(NSObject):
    def init(self):
        self = super(OC_TestCopy1, self).init()
        if self is not None:
            self.x = 1
            self.y = 2
        return self

    def modify(self):
        self.x = 42
        self.y = 24
        self.z = 0

    @funcattr(occlass="OC_TestCopy1")
    def copyWithZone_(self, zone):
        other = OC_TestCopy1.allocWithZone_(zone).init()
        other.x = self.x
        other.y = self.y
        return other

    # Argh, copyWithZone_ is a classmethod by default unless the
    # superclass implements  -copyWithZone:
    copyWithZone_ = objc.selector(copyWithZone_,
                                  signature=NSObject.copyWithZone_.signature,
                                  isClassMethod=False)
Example #32
0
    def init(self):
        """
		Do all initializing here, and customize the quadruple underscore items.
		____CFBundleIdentifier____ should be the reverse domain name you specified in Info.plist.
		"""
        try:
            self.controller = None
            if not NSBundle.loadNibNamed_owner_("FontNotePalette", self):
                self.logToConsole("Error loading .nib into Palette.")

            s = objc.selector(self.update, signature="v@:")
            NSNotificationCenter.defaultCenter(
            ).addObserver_selector_name_object_(self, s, "GSUpdateInterface",
                                                None)
            NSNotificationCenter.defaultCenter(
            ).addObserver_selector_name_object_(self, s,
                                                "GSDocumentCloseNotification",
                                                None)
            NSNotificationCenter.defaultCenter(
            ).addObserver_selector_name_object_(
                self, s, "GSDocumentActivateNotification", None)

            Frame = self._theView.frame()
            if NSUserDefaults.standardUserDefaults().objectForKey_(
                    "com.mekkablue.FontNote.ViewHeight"):
                Frame.size.height = NSUserDefaults.standardUserDefaults(
                ).integerForKey_("com.mekkablue.FontNote.ViewHeight")
                self._theView.setFrame_(Frame)

            return self
        except Exception as e:
            self.logToConsole("init: %s" % str(e))
    def toggleAudioPlay_(self, sender):
        try:
            if self.playingAudio:
                self.playingAudio = False

                s = NSAppleScript.alloc().initWithSource_(
                    "tell application \"QuickTime Player\" \n stop the front document \n close the front document \n end tell"
                )
                s.executeAndReturnError_(None)

                self.reviewController.playAudioButton.setTitle_("Play Audio")
            else:
                self.playingAudio = True
                s = NSAppleScript.alloc().initWithSource_(
                    "set filePath to POSIX file \"" + self.audio_file +
                    "\" \n tell application \"QuickTime Player\" \n open filePath \n tell application \"System Events\" \n set visible of process \"QuickTime Player\" to false \n repeat until visible of process \"QuickTime Player\" is false \n end repeat \n end tell \n play the front document \n end tell"
                )
                s.executeAndReturnError_(None)

                audio = mutagen.mp4.MP4(self.audio_file)
                length = audio.info.length
                s = objc.selector(self.stopAudioPlay, signature='v@:')
                self.audioTimer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(
                    length, self, s, None, False)

                self.reviewController.playAudioButton.setTitle_("Stop Audio")
        except:
            showAlert(
                "Problem playing audio. Please delete audio file and try again."
            )
Example #34
0
 def testIncorrectlyDefiningFormalProtocols(self):
     # Some bad calls to objc.formal_protocol
     self.assertRaises(TypeError, objc.formal_protocol, [], None, ())
     self.assertRaises(TypeError, objc.formal_protocol, "supers",
                       (NSObject, ), ())
     self.assertRaises(
         TypeError,
         objc.formal_protocol,
         "supers",
         objc.protocolNamed("NSLocking"),
         (),
     )
     self.assertRaises(
         TypeError,
         objc.formal_protocol,
         "supers",
         [objc.protocolNamed("NSLocking"), "hello"],
         (),
     )
     self.assertRaises(
         TypeError,
         objc.formal_protocol,
         "supers",
         None,
         [
             objc.selector(None, selector=b"fooMethod:", signature=b"v@:i"),
             "hello"
         ],
     )
Example #35
0
	def loadPlugin(self):
		mainMenu = NSApplication.sharedApplication().mainMenu()
		s = objc.selector(self.showWindow,signature='v@:')
		newMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(self.title(), s, "" )
		newMenuItem.setTarget_(self)
		
		mainMenu.itemAtIndex_(2).submenu().addItem_(newMenuItem)
Example #36
0
 def start_continuous_acquisition(self):
     print "Starting continuous acquisition"
     self.continuously_acquiring = 1
     acquire_selector = objc.selector(self.continuouslyAcquireImages,
                                      signature='v@:')
     NSThread.detachNewThreadSelector_toTarget_withObject_(
         acquire_selector, self, objc.nil)
Example #37
0
class _SDPQueryRunner(Foundation.NSObject):
    """
    Convenience class for performing a synchronous or asynchronous SDP query
    on an IOBluetoothDevice.
    """

    def query(self, device, timeout=10.0):
        # do SDP query
        err = device.performSDPQuery_(self)
        if err != _macutil.kIOReturnSuccess:
            raise _lightbluecommon.BluetoothError(err, self._errmsg(device))
        
        # performSDPQuery_ is async, so block-wait
        self._queryresult = None
        if not _macutil.waituntil(lambda: self._queryresult is not None,
                                          timeout):
            raise _lightbluecommon.BluetoothError(
                "Timed out getting services for %s" % \
                    device.getNameOrAddress())
        # query is now complete
        if self._queryresult != _macutil.kIOReturnSuccess:  
            raise _lightbluecommon.BluetoothError(
                self._queryresult, self._errmsg(device))
        
    def sdpQueryComplete_status_(self, device, status):
        # can't raise exception during a callback, so just keep the err value
        self._queryresult = status
        _macutil.interruptwait()
    sdpQueryComplete_status_ = objc.selector(
        sdpQueryComplete_status_, signature="v@:@i")    # accept object, int
            
    def _errmsg(self, device):
        return "Error getting services for %s" % device.getNameOrAddress()
Example #38
0
 def decorator(func):
     oldIMP      = cls.instanceMethodForSelector_(SEL)
     def wrapper(self, *args, **kwargs):
         return func(self, oldIMP, *args, **kwargs)
     newMethod   = objc.selector(wrapper, selector = oldIMP.selector, signature = oldIMP.signature)
     objc.classAddMethod(cls, SEL, newMethod)
     return wrapper
Example #39
0
    def testHiddenAddMethods(self):

        @objc.selector
        def addedmethod(self):
            return "NEW"
        addedmethod.isHidden = True

        def addedclass(self):
            return "NEWCLASS"
        addedclass=objc.selector(addedclass, isClassMethod=True)
        addedclass.isHidden=True

        objc.classAddMethods(OCTestHidden, [addedmethod, addedclass])

        o = OCTestHidden.alloc().init()

        # Instance method
        self.assertRaises(AttributeError, getattr, o, 'addedmethod')

        v = o.performSelector_(b'addedmethod')
        self.assertEquals(v, "NEW")

        v = o.pyobjc_instanceMethods.addedmethod()
        self.assertEquals(v, "NEW")

        # Class method
        self.assertRaises(AttributeError, getattr, OCTestHidden, 'addedclass')

        v = OCTestHidden.performSelector_(b'addedclass')
        self.assertEquals(v, "NEWCLASS")

        v = OCTestHidden.pyobjc_classMethods.addedclass()
        self.assertEquals(v, "NEWCLASS")
Example #40
0
        def swizzle(cls, SEL, func):
            old_IMP = cls.instanceMethodForSelector_(SEL)

            def wrapper(self, *args, **kwargs):
                return func(self, old_IMP, *args, **kwargs)
            new_IMP = objc.selector(wrapper, selector=old_IMP.selector,
                                    signature=old_IMP.signature)
            objc.classAddMethod(cls, SEL, new_IMP)
Example #41
0
 def testAssignFuzzyMethod(self):
     self.assertRaises(
         (ValueError, TypeError),
         setattr,
         MEClass,
         "fuzzyMethod",
         objc.selector(None, selector=b"fuzzy", signature=b"@@:"),
     )
Example #42
0
    def __pyobjc_class_setup__(self, name, class_dict, instance_methods, class_methods):
        super(array_property, self).__pyobjc_class_setup__(name, class_dict, instance_methods, class_methods)


        # Insert (Mutable) Indexed Accessors
        # FIXME: should only do the mutable bits when we're actually a mutable property

        name = self._name
        Name = name[0].upper() + name[1:]

        countOf, objectIn, insert, remove, replace = makeArrayAccessors(self._name)

        countOf = selector(countOf, 
                selector  = ('countOf%s'%(Name,)).encode('latin1'),
                signature = _C_NSUInteger + b'@:',
        )
        countOf.isHidden = True
        instance_methods.add(countOf)

        objectIn = selector(objectIn, 
                selector  = ('objectIn%sAtIndex:'%(Name,)).encode('latin1'),
                signature = b'@@:' + _C_NSUInteger,
        )
        objectIn.isHidden = True
        instance_methods.add(objectIn)

        insert = selector(insert, 
                selector  = ('insertObject:in%sAtIndex:'%(Name,)).encode('latin1'),
                signature = b'v@:@' + _C_NSUInteger,
        )
        insert.isHidden = True
        instance_methods.add(insert)

        remove = selector(remove, 
                selector  = ('removeObjectFrom%sAtIndex:'%(Name,)).encode('latin1'),
                signature = b'v@:' + _C_NSUInteger,
        )
        remove.isHidden = True
        instance_methods.add(remove)

        replace = selector(replace, 
                selector  = ('replaceObjectIn%sAtIndex:withObject:'%(Name,)).encode('latin1'),
                signature = b'v@:' + _C_NSUInteger + b'@',
        )
        replace.isHidden = True
        instance_methods.add(replace)
Example #43
0
    def __pyobjc_class_setup__(self, name, class_dict, instance_method_list, class_method_list):
        self.name = name

        def dospecial(self):
            pass
        m = objc.selector(dospecial, selector=("special"+name).encode('latin1'))
        #instance_method_list.append(m)
        class_dict['myspecialprop'] = m
 def run(self):
     center = Foundation.NSDistributedNotificationCenter.defaultCenter()
     selector = objc.selector(self.didReceiveNotification_, signature='v@:@')
     center.addObserver_selector_name_object_suspensionBehavior_(self, selector, None, None, Foundation.NSNotificationSuspensionBehaviorDeliverImmediately)
     runloop = Foundation.NSRunLoop.currentRunLoop()
     
     while not self.should_terminate:
         runloop.runUntilDate_(Foundation.NSDate.dateWithTimeIntervalSinceNow_(1))
Example #45
0
 def swizzleWithNewMethod_(f):
     cls = old.definingClass
     oldSelectorName = old.__name__.replace("_", ":")
     oldIMP = cls.instanceMethodForSelector_(oldSelectorName)
     newSelectorName = f.__name__.replace("_", ":")
     
     argc = len(inspect.getargspec(f)[0])
     newSEL = objc.selector(f, selector=newSelectorName, signature=old.signature)
     #oldSEL = objc.selector(lambda self, *args: oldIMP(self, *args), selector=newSelectorName, signature=old.signature)
     oldSEL = objc.selector(__swizzleIMPMap[argc](oldIMP), selector=newSelectorName, signature=old.signature)
 
     # Swap the two methods
     objc.classAddMethod(cls, newSelectorName, oldSEL)
     objc.classAddMethod(cls, oldSelectorName, newSEL)
     #NSLog(u"Swizzled %s.%s <-> %s" % (cls.__name__, oldSelectorName, newSelectorName))
     
     return f
Example #46
0
def endSheetMethod(meth):
    """
    Return a selector that can be used as the delegate callback for
    sheet methods
    """
    return objc.selector(
        meth, signature=b"v@:@" + objc._C_NSInteger + objc._C_NSInteger
    )
Example #47
0
 def __init__(self, listener, seconds_to_run=5.0):
     self._listener = listener
     callback = objc.selector(self.alarm, signature='v@:')
     self._timer = NSTimer.scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_(
         seconds_to_run,  # Interval
         self,  # Target
         callback,  # Selector
         None,  # User info
         False)  # Repeats?
Example #48
0
    def __pyobjc_class_setup__(self, name, class_dict, instance_methods, class_methods):
        super(set_property, self).__pyobjc_class_setup__(name, class_dict, instance_methods, class_methods)

        # (Mutable) Unordered Accessors
        # FIXME: should only do the mutable bits when we're actually a mutable property

        name = self._name
        Name = name[0].upper() + name[1:]

        countOf, enumeratorOf, memberOf, add, remove = makeSetAccessors(self._name)

        countOf = selector(countOf, 
                selector  = ('countOf%s'%(Name,)).encode('latin1'),
                signature = _C_NSUInteger + b'@:',
        )
        countOf.isHidden = True
        instance_methods.add(countOf)

        enumeratorOf = selector(enumeratorOf, 
                selector  = ('enumeratorOf%s'%(Name,)).encode('latin1'),
                signature = b'@@:',
        )
        enumeratorOf.isHidden = True
        instance_methods.add(enumeratorOf)

        memberOf = selector(memberOf, 
                selector  = ('memberOf%s:'%(Name,)).encode('latin'),
                signature = b'@@:@',
        )
        memberOf.isHidden = True
        instance_methods.add(memberOf)

        add1 = selector(add, 
                selector  = ('add%s:'%(Name,)).encode('latin'),
                signature = b'v@:@',
        )
        add1.isHidden = True
        instance_methods.add(add1)

        add2 = selector(add, 
                selector  = ('add%sObject:'%(Name,)).encode('latin1'),
                signature = b'v@:@',
        )
        add2.isHidden = True
        instance_methods.add(add2)

        remove1 = selector(remove, 
                selector  = ('remove%s:'%(Name,)).encode('latin1'),
                signature = b'v@:@',
        )
        remove1.isHidden = True
        instance_methods.add(remove1)

        remove2 = selector(remove, 
                selector  = ('remove%sObject:'%(Name,)).encode('latin'),
                signature = b'v@:@',
        )
        remove2.isHidden = True
        instance_methods.add(remove2)
Example #49
0
	def start(self):
		try: 
			newMenuItem = NSMenuItem(self.name, self.showWindow)
			Glyphs.menu[EDIT_MENU].append(newMenuItem)
		except:
			mainMenu = Glyphs.mainMenu()
			s = objc.selector(self.showWindow, signature='v@:@')
			newMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(self.name, s, "")
			newMenuItem.setTarget_(self)
			mainMenu.itemWithTag_(5).submenu().addItem_(newMenuItem)
Example #50
0
	def addMenuItem(self):
		mainMenu = NSApplication.sharedApplication().mainMenu()
		s = objc.selector(self.selectGlyphsWithErrors,signature='v@:')
		newMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
			"Select Glyphs With Outline Errors",
			s,
			""
		)
		newMenuItem.setTarget_(self)
		mainMenu.itemAtIndex_(2).submenu().insertItem_atIndex_(newMenuItem, 11)
def service_selector(fn):
    """Set the selector signature to be that of a service

    Signature copied from:
    https://pythonhosted.org/pyobjc/examples/Cocoa/AppKit/SimpleService/index.html

    :param fn: the service
    :return: an objc-ified service method
    """
    return objc.selector(fn, signature='v@:@@o^@')
Example #52
0
 def decorator(function):
     old = cls.instanceMethodForSelector_(selector)
     if old.isClassMethod:
         old = cls.methodForSelector_(selector)
     def wrapper(self, *args, **kwargs):
         return function(self, old, *args, **kwargs)
     new = objc.selector(wrapper, selector = old.selector,
                         signature = old.signature,
                         isClassMethod = old.isClassMethod)
     objc.classAddMethod(cls, selector, new)
     return wrapper
Example #53
0
 def decorator(fun):
     original = cls.instanceMethodForSelector_(sel)
     if original.isClassMethod:
         original = cls.methodForSelector_(sel)
     def wrapper(self, *args, **kwargs):
         return fun(self, original, *args, **kwargs)
     new = objc.selector(wrapper, selector = original.selector,
                         signature = original.signature,
                         isClassMethod = original.isClassMethod)
     objc.classAddMethod(cls, sel, new)
     return wrapper
Example #54
0
    def init(self):
        self.statusitemController = StatusItemController.alloc().init()
		
        statusItemView = NSStatusBar.systemStatusBar().statusItemWithLength_(STATUS_ITEM_VIEW_WIDTH).retain()
        statusItemView.setTitle_("MNPP")
        statusItemView.setHighlightMode_(YES)
        statusItemView.setTarget_(self.statusitemController)
        selector = objc.selector(self.statusitemController.togglePanel, signature = 'v@:')
        statusItemView.setAction_(selector)

        return self
Example #55
0
    def testDefaultSignatures(self):
        def meth(): pass
        s = objc.selector(meth)
        self.assertEqual(s.selector, b'meth')
        self.assertEqual(s.signature, b'v@:')

        def meth__(): pass
        s = objc.selector(meth__)
        self.assertEqual(s.selector, b'meth::')
        self.assertEqual(s.signature, b'v@:@@')

        def meth(): return 1
        s = objc.selector(meth)
        self.assertEqual(s.selector, b'meth')
        self.assertEqual(s.signature, b'@@:')

        def meth__(): return 1
        s = objc.selector(meth__)
        self.assertEqual(s.selector, b'meth::')
        self.assertEqual(s.signature, b'@@:@@')
 def _addTextField(self, v, y, cnt):
     control = NSTextField.alloc().init()
     control.setStringValue_(v.value)
     control.setFrame_(((108,y-2),(172,15)))
     control.cell().setControlSize_(NSMiniControlSize)
     control.cell().setControlTint_(NSGraphiteControlTint)
     control.setFont_(MINI_FONT)
     control.setTarget_(self)
     control.setTag_(cnt)
     control.setAction_(objc.selector(self.textChanged_, signature="v@:@@"))
     self.panel.contentView().addSubview_(control)
 def _addButton(self, v, y, cnt):
     control = NSButton.alloc().init()
     control.setFrame_(((108, y-2),(172,16)))
     control.setTitle_(v.name)
     control.setBezelStyle_(1)
     control.setFont_(SMALL_FONT)
     control.cell().setControlSize_(NSMiniControlSize)
     control.cell().setControlTint_(NSGraphiteControlTint)
     control.setTarget_(self)
     control.setTag_(cnt)
     control.setAction_(objc.selector(self.buttonClicked_, signature="v@:@@"))
     self.panel.contentView().addSubview_(control)