# CurrencyConvBinding

- `Download example`

A rewrite of the CurrencyConverter example using Cocoa Bindings.

Originally from Introduction to Developing Cocoa Applications Using Bindings, converted to PyObjC by u.fiedler.

## Sources

### Converter.py

    import objc
    from Foundation import NSObject
    from objc import super

    class Converter(NSObject):
        exchangeRate = objc.ivar.double()
        dollarsToConvert = objc.ivar.double()

        def init(self):
            self = super(Converter, self).init()
            self.exchangeRate = 3
            self.dollarsToConvert = 4
            return self

        def amountInOtherCurrency(self):
            return self.dollarsToConvert * self.exchangeRate

    Converter.setKeys_triggerChangeNotificationsForDependentKey_(
        ["dollarsToConvert", "exchangeRate"], "amountInOtherCurrency"
    )

### CurrencyConvBinding.py

    # import classes required to start application
    import Converter  # noqa: F401
    import CurrencyConvBindingDocument  # noqa: F401
    from PyObjCTools import AppHelper

    if __name__ == "__main__":
        AppHelper.runEventLoop()

### CurrencyConvBindingDocument.py

    from Cocoa import NSDocument

    class CurrencyConvBindingDocument(NSDocument):
        def windowNibName(self):
            return "CurrencyConvBindingDocument"

### setup.py

    """
    Script for building the example:

    Usage:
        python3 setup.py py2app
    """
    from setuptools import setup

    plist = {
        "CFBundleDocumentTypes": [
            {
                "CFBundleTypeExtensions": ["CurrencyConvBinding", "*"],
                "CFBundleTypeName": "CurrencyConvBinding File",
                "CFBundleTypeRole": "Editor",
                "NSDocumentClass": "CurrencyConvBindingDocument",
            }
        ]
    }

    setup(
        name="CurrencyConvBinding",
        app=["CurrencyConvBinding.py"],
        data_files=["English.lproj"],
        options={"py2app": {"plist": plist}},
        setup_requires=["py2app", "pyobjc-framework-Cocoa"],
    )