2008-09-15 7 views
2

Apple OS X Cocoaフレームワークを使用して、シート(スライドダウンモーダルダイアログ)を別のプロセスのウィンドウに投稿するにはどうすればよいですか?別のプログラムのウィンドウにCocoaの「シート」を投稿するにはどうしたらいいですか?

編集:ビットを明確化:

私のアプリケーションはSubversionのバージョン管理(http://scplugin.tigris.org/)を行うにはFinderの拡張機能です。私のアプリケーションの一部は、プラグイン(Finder用のコンテキストメニュー項目)です。しかし、私のアプリケーションの大部分は、別のデーモンのプロセスに入っています。いくつかの理由から、私たちは事実上すべてのコードをデーモンに入れることを選択しました。プラグインはメニュー自体とApple-Eventsをデーモンに限定します。

場合によっては、デーモンはユーザーに詳細情報を要求する必要があります。これは画面上にウィンドウを投げることができますが、それは破壊的です(ランダムに配置されています)。ここでの作業フローは合法的です。たとえば、「ファイルを選択し、メニューから「コミット」を選択し、 、操作を行う。

プロセス間の協力(ある種の参照を渡すなど)は可能です。どちらのプロセスも私のものですが、シートのコードをプライマリプロセスにバインドしないようにしたいと思います。

+0

FYI:Finderのためのコンテキストメニュー項目Snow LeopardでDOAあります。それらをサービスとして書き直す必要があります。 を参照してください。 – geowar

答えて

5

実際には、プロセス間の通信をビューレベルで実行しようとしているようですが、これは実際にCocoaが一般的にどのように動作するかは実際には分かりません。レイヤーをそれ以上分離すると、作業がはるかに簡単になります。

なぜシートコードを他のプロセスに入れたくないのですか?それはビューコードであり、ビューコードは本質的にプロセス固有です。ここで行うべきことは、プラグインコードに多少の一般的なモーダルシートサポートを追加することと、デーモンがそのコードを呼び出すために行うことができるIPC呼び出しを追加することです。リモートプロセスにビューオブジェクトを配布しようとすると、それをまったく動作させることができれば悪夢になるでしょう。

あなたはこのアプローチでフレームワークと戦っています。

1

しないでください。可能であれば、相互作用を非モーダルにする。特にコミットのようなものでは、コミットコメントを書いている間にあなたのファイルをブラウズすることができる方がはるかにいいです。

OS Xにはウィンドウグループがありますが、(簡単に)アプリケーションを拡張することはできません。

2

あなたが他のプロセスのウィンドウにせいぜい最もアクセス制限を持っているので、あなたは、別のプロセス内のウィンドウにシートを追加することはできません。

1

考慮すべきもう一つは、OS Xにそれが(OS 9の場合とは異なり)同じフォルダで開いて多くのFinderウインドウを持つことが可能だということです。 になっても、Finderウィンドウにシートを追加するのに十分な特権/ APIを持っていても、そのウィンドウのモダリティはユーザーがファイルを使用し続けるのを妨げるものではありません。

は(長時間のMacユーザーはこの種の相互作用は、右の壁まで私を車だろうということですと私の個人的な意見。)

関連する問題