インスペクタービューにカスタムダイアログを貼り付けるには基本的に以下のようにすれば良いようだ。クラスメンバの名前について「この名前じゃないとダメ」というのもあるので注意が必要だ。
ダイアログのレイアウトは予めXcodeのInterface Builderなどで「InspectorView.xib」として書かれて、ibtool
で
ibtool --compile InspectorView.nib InspectorView.xib
のようにコンパイルされ「InspectorView.nib」が生成されていると想定している。
class MyTool(SelectTool): # このクラスメンバは「inspectorDialogView」である必要がある。 # 基底クラスのSelectTool内でこのプロパティを参照するためだ。 inspectorDialogView = objc.IBOutlet() def settings(self): ... # Load .nib file from package (without .extension) self.loadNib("InspectorView", __file__) # インスペクタービューに自身のダイアログしか表示させたくないなら # 基底クラスのinspectorViewControllersメソッドをオーバーライドして # 以下のようにする。 def inspectorViewControllers(self): return [self]
inspectorViewControllers
についてはGlyphsSDKの ObjectWrapper/GlyphsApp/plugins.py
を読む必要がある。
オリジナルの実装は
def inspectorViewControllers(self): ViewControllers = objc.super(SelectTool, self).inspectorViewControllers() if ViewControllers is None: ViewControllers = [] try: # self.inspectorDialogView may also be defined witut a .nib, # so it could be a Vanilla dialog if self.inspectorDialogView: ViewControllers.append(self) except: self.logError(traceback.format_exc()) return ViewControllers
であるのだが、これはデフォルトの ViewControllers
に更に自身を付け加えているように読める。
よって、自身だけにしたいならデフォルト分を無視して [self]
だけを返せば良い。
デフォルト実装のままだと、グリフ名+unicodeのダイアログとメトリクスのダイアログに加えてユーザー定義のダイアログが返るようだ。
ダイアログのlistの配置についてはGlyphsがよろしくやってくれているように見える。