2008-09-15 4 views
2

Mit dem Apple OS X Cocoa-Framework, wie kann ich ein Blatt (slide-down modalen Dialog) auf dem Fenster eines anderen Prozesses?Wie kann ich ein Cocoa "Blatt" in einem anderen Programmfenster veröffentlichen?

Edit: Geklärte ein bisschen:

Meine Anwendung ist eine Erweiterung Finder Subversion zur Versionskontrolle (http://scplugin.tigris.org/) zu tun. Teil meiner Anwendung ist ein Plug-in (ein Kontextmenüelement für Finder); Der Großteil meiner Anwendung befindet sich jedoch in einem separaten Daemon-Prozess. Aus verschiedenen Gründen haben wir uns dazu entschieden, praktisch den gesamten Code in den Daemon einzubringen. Das Plug-In definiert nur das Menü selbst und Apple-Ereignisse für den Daemon.

Manchmal muss der Daemon den Benutzer zur Eingabe weiterer Informationen auffordern. Es kann ein Fenster auf dem Bildschirm dafür werfen, aber das ist störend (zufällig positioniert), und es scheint mir der Arbeitsfluss hier ist legal modal, zum Beispiel "wählen Sie eine Datei, wählen Sie Commit" aus dem Menü, geben Commit-Kommentare mach die Operation. "

Interprozesskooperation (wie das Übergeben einer Referenz irgendeiner Art) ist akzeptabel: Beide Prozesse gehören mir, aber ich möchte vermeiden, den Code des Sheets in den primären Prozess zu binden.

+0

FYI: Kontextmenüeinträge für Finder sind DOA in Snow Leopard. Sie müssen sie als Dienste neu schreiben. Siehe geowar

Antwort

5

Wirklich, es klingt wie Sie versuchen, Ihre Interprozesskommunikation auf der Ansichtsebene geschehen zu lassen, die nicht wirklich ist, wie Cocoa im Allgemeinen funktioniert. Die Dinge werden viel einfacher, wenn Sie Ihre Ebenen ein wenig mehr trennen.

Warum möchten Sie den Blattcode nicht in den anderen Prozess einfügen? Es ist View-Code und View-Code ist inhärent prozessspezifisch. Das Richtige, was Sie hier tun können, ist wahrscheinlich, Ihrem Plugin-Code etwas generische Modal-Sheet-Unterstützung hinzuzufügen, und einen IPC-Aufruf, den Ihr Daemon ausführen kann, um diesen Code aufzurufen. Der Versuch, Objekte an den Remote-Prozess zu senden, wird albtraumhaft sein, wenn Sie es überhaupt funktionieren lassen können.

Sie kämpfen mit diesem Ansatz gegen die Frameworks.

1

Bitte tun Sie dies nicht. Machen Sie die Interaktion möglichst unmodal. Besonders in etwas wie einem Commit ist es viel schöner, in der Lage zu sein, Ihre Dateien zu durchsuchen, während Sie Commit-Kommentare schreiben.

OS X hat Fenstergruppen, aber ich denke nicht, dass sie Anwendungen (einfach) überspannen können.

2

Sie können einem Fenster in einem anderen Prozess kein Blatt hinzufügen, da Sie im anderen Prozess höchstens den eingeschränktesten Zugriff auf die Fenster haben.

1

Eine andere Sache zu betrachten ist, dass in OS X es möglich ist, viele Finder-Fenster auf demselben Ordner geöffnet zu haben (anders als in OS 9). Selbst wenn Sie haben ausreichende Berechtigungen/APIs, um ein Blatt zu einem Finder-Fenster hinzuzufügen, ist es nicht wie die Modalität dieses Fensters würde verhindern, dass der Benutzer weiterhin mit den Dateien arbeiten kann.

(Meine persönliche Meinung als Langzeit-Mac-Benutzer ist, dass diese Art von Interaktion mich bis die Wand fahren würde.)

Verwandte Themen