2008-09-15 5 views
2

Utilisation du framework Apple OS X Cocoa, comment puis-je poster une feuille (glisser vers le bas de dialogue modale) sur la fenêtre d'un autre processus?Comment puis-je publier une "feuille" Cocoa dans la fenêtre d'un autre programme?

Edit: Précisé un peu:

Mon application est une extension du Finder pour faire le contrôle de version Subversion (http://scplugin.tigris.org/). Une partie de mon application est un plug-in (un élément de menu contextuel pour le Finder); la majeure partie de mon application, cependant, est dans un processus de démon séparé. Pour plusieurs raisons, nous avons choisi de mettre pratiquement tout le code dans le démon; le plug-in définit uniquement le menu lui-même, et Apple-Events sur le démon.

Parfois, le démon doit demander à l'utilisateur d'autres informations. Il peut lancer une fenêtre à l'écran, mais c'est perturbant (position aléatoire), et il me semble que le flux de travail est légitimement modal, par exemple "sélectionner un fichier, choisir" valider "dans le menu, fournir des commentaires , fais l'opération. "

coopération Interprocess (comme le passage d'une référence quelconque) est acceptable: les deux processus sont à moi, mais je veux éviter lier le code de la feuille dans le processus primaire.

+0

Pour votre information: Articles du menu contextuel pour Finder sont DOA dans Snow Leopard. Vous devez les réécrire en tant que services. Voir geowar

Répondre

5

Vraiment, on dirait que vous essayez d'avoir votre communication inter-processus se produit au niveau de la vue, ce qui est pas vraiment comment le cacao fonctionne en général. Les choses seront beaucoup plus faciles si vous séparez vos couches un peu plus que cela. Pourquoi ne voulez-vous pas mettre le code de la feuille dans l'autre processus?

C'est le code de la vue, et le code de la vue est intrinsèquement spécifique au processus. La bonne chose à faire ici est probablement d'ajouter un support de feuille modale quelque peu générique à votre code plugin, et un appel IPC que votre démon peut faire pour invoquer ce code. Essayer d'expédier des objets de vue sur le processus à distance va être cauchemardesque si vous pouvez le faire fonctionner du tout.

Vous vous battez contre les frameworks avec cette approche.

1

Veuillez ne pas faire ceci. Rendre l'interaction non-modale si possible. Surtout dans quelque chose comme un commit, c'est bien plus agréable de pouvoir naviguer dans vos fichiers pendant que vous écrivez des commentaires de commit.

OS X n'ont des groupes de fenêtres, mais je ne pense pas qu'ils peuvent (facilement) des applications de portée.

2

Vous ne pouvez pas ajouter une feuille à une fenêtre dans un autre processus, parce que vous avez tout au plus l'accès le plus restreint aux fenêtres dans l'autre processus.

1

Une autre chose à considérer est que dans OS X, il est possible d'avoir plusieurs fenêtres du Finder ouvert sur le même dossier (contrairement à OS 9). Même si avait avait suffisamment de privilèges/API pour ajouter une feuille à une fenêtre du Finder, ce n'est pas comme si la modalité de cette fenêtre empêchait l'utilisateur de continuer à travailler avec les fichiers.

(Mon opinion personnelle de longue date de l'utilisateur Mac est que ce genre d'interaction me conduire jusqu'à le mur.)

Questions connexes