カスタマイズパレットを使ってTouchBarをカスタマイズできます。ユーザーは提供されたアイテムを使ってTouchBarを追加、削除、再編成できる。
カスタマイズされたTouchBarは保存され、ロードされるため、実装はやや複雑になる。
1. TouchBarの識別子の設定
TouchBarにカスタマイズ用の識別子を設定することで、その識別子を保存し、次回の実行時にロードできる。
識別子は文字列で、Appleの公式ドキュメントによると「reverse-DNS style」というフォーマットになっている。(customizationIdentifier | Apple Developer Documentation)
PyTouchBar.set_customization_identifier("com.madrau.PyTouchBar.touchbar")
2. TouchBarItemsの準備
TouchBarアイテムを初期化する際には、いくつかのパラメータ(Labelの場合は “text”、Buttonの場合は “action”など)を指定する。アイテムをカスタマイズするには、さらにいくつかのパラメータを指定する必要がある。
- id (string) : アイテムの識別子:TouchBar Identifierと同様に、idはアイテムの位置を保存するために使用される文字列。デフォルトでは、実行のたびにランダムに生成されるが、アイテムの位置を保存する必要がある場合は、固定値にする必要がある。
- customization_label (string) : カスタマイズパレットでのアイテムのタイトル(スペースアイテムには使えない)
- customization_mode (PyTouchBar.CustomizationMode) : アイテムをユーザーがどのようにカスタマイズするかを指定する。
例を以下に示す。
button = ptb.TouchBarItems.Button(title = "Button", action = action, id = "button", customization_label = "A button", customization_mode = ptb.CustomizationMode.allowed)
space = ptb.TouchBarItems.Space.Flexible(customization_mode = ptb.CustomizationMode.allowed)
slider = ptb.TouchBarItems.Slider(id = "slider", customization_label = "The slider", customization_mode = ptb.CustomizationMode.allowed)
stepper = ptb.TouchBarItems.Stepper(min = 0, max = 100, id = "stepper", customization_label = "The stepper", customization_mode = ptb.CustomizationMode.allowed)
3. カスタマイズ・パレットの起動
カスタマイズパレットを呼び出すには2つの方法がある。
1つ目の方法は、PyTouchBar.customize関数を呼び出す方法。
PyTouchBar.customize()
2つ目の方法は、「TouchBarのカスタマイズ」メニューを使うこと。このメニューはデフォルトでは表示されない。これを表示するには、TouchBarの識別子を設定する際に、”menu”パラメータをTrueに設定する。
PyTouchBar.set_customization_identifier("com.madrau.PyTouchBar.touchbar", menu = True)
4. Default Set にアイテムを追加
デフォルトでは、set_touchbar関数でTouchBarにアイテムを追加すると、そのアイテムは「Default Set」に配置される。「Default Set」に含まれていないが、ユーザが配置できるTouchBarアイテムを作成したい場合は、「define」パラメータに追加すること。
ptb.set_touchbar([button, space, slider], define = [stepper])
このコードを使うと、TouchBarにはデフォルトでボタン、スペース、スライダーが表示される。しかし、ユーザーがカスタマイズ・パレットを開くと、TouchBarに追加できるステッパーも表示される。例を以下に示す。
ptb.set_customization_identifier("com.madrau.PyTouchBar.anotherTest", menu = True)
button = ptb.TouchBarItems.Button(title = "Button", action = action, id = "button", customization_label = "A button", customization_mode = ptb.CustomizationMode.allowed)
space = ptb.TouchBarItems.Space.Flexible(customization_mode = ptb.CustomizationMode.allowed)
slider = ptb.TouchBarItems.Slider(id = "slider", customization_label = "The slider", customization_mode = ptb.CustomizationMode.allowed)
stepper = ptb.TouchBarItems.Stepper(min = 0, max = 100, id = "stepper", customization_label = "The stepper", customization_mode = ptb.CustomizationMode.allowed)
ptb.set_touchbar([button, space, slider], define = [stepper])