CurrencyConvBinding

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"],
)