今回はLGTM.app の開発中に得たちょっとした知見の共有になります。
StoryboardというかnibからNSMenuItemのTriggered Actionを設定すると、対応するキーボードショートカット(keyEquivalent) が簡単に設定できてオススメです。
今回Storyboard上でNSMenuItemのTriggered Actionを直接Segueにつなげてみたのですが、Windowが何枚でも開けてしまうという状態になりました。設定画面なので、2枚以上開けないようにしたいところです。
こういうとき、一般的にはNSMenuValidationのvalidateMenuItem(_:) をNSMenuItemのtargetとなるクラスに実装してメニューの有効無効を切り替えると思います。
しかしSegueをActionにした場合、NSMenuItemのtargetはStoryboardShowSegueTemplate というクラスのインスタンスになります。StoryboardShowSegueTemplateクラスは公開されていないため、NSMenuValidationを実装することができません。もしやと思いNSStoryboardSegueをサブクラスしてみましたが、ダメでした。というわけで、今回のケースではTriggered Segueは使わないというのが正解なようでした。
Sent ActionをIBActionに紐付け、IBActionを置いたクラスにNSMenuValidationを実装したところ、validateMenuItem(_:)が呼ばれるようになりました。あとはプログラムからNSWindowControllerをStoryboardIDで初期化して表示するようにすればいいでしょう。