8
votes

Plusieurs documents dans une seule fenêtre en cacao

Je veux écrire une application qui peut avoir plusieurs documents dans une seule fenêtre via une interface à onglets. Devrais-je éviter l'architecture NSDocument (le modèle de demande de documents de cacao)? Pour autant que je sache, cela ne supporte qu'une ou plusieurs fenêtres par document mais pas vice versa.

J'ai eu la lutte avec cette question pendant un moment et j'ai déjà construit une grande partie de ma demande sur l'architecture Nsdocument, mais je ne peux pas comprendre un bon moyen d'associer plusieurs documents avec une seule fenêtre.

Edit: Je veux avoir des fenêtres de document de projet en plus des fenêtres de base du document. À ce niveau de complexité, cela vaut-il toujours la peine de pirater l'architecture Nsdocument? Apple écrit Xcode (qui fonctionne de cette façon) en utilisant l'architecture NSDocument?


3 commentaires

Il semble que Xcode utilise effectivement nsdocument, mais la fenêtre qui contient les multiples onglets du projet n'est qu'un seul document (les projets)


En outre, un outil très amusant pour fouiller dans les applications de cacao pour voir comment ils le font est F-script fscript.org


@Cobal: intéressant. Est-ce que cela implique que les fichiers texte ne sont pas représentés comme nsdocuments?


4 Réponses :


4
votes

L'utilisation d'une architecture basée sur la NSDocument n'est pas nécessairement une mauvaise idée dans ce cas; Mais cela pourrait nécessiter un peu de haqueuse.

Il est fort probable que vous devriez avoir à non seulement la sous-classe Nsdocument, mais aussi, c'est plus rarement sous-classé, nsdocumentController. Une fois que cela est fait, il devrait s'agir d'une simple affaire de détournement et d'éviter les appels à -MakeWindowControlers et à d'autres méthodes liées à la fenêtre, vous permettant de envelopper le document "Windows" de la mode de la mode, mais conserver toujours les avantages du document- application basée.


0 commentaires


3
votes

Une autre technique, que je n'ai pas encore essayé mais que vous prévoyez d'avoir une fenêtre sans frontière pour chaque document. De cette façon, un document a une fenêtre, qui peut être visible ou non.

Ensuite, faites une fenêtre d'emballage contenant la bordure de la fenêtre réelle et toutes les commandes permettant de basculer entre les fenêtres de document sans bordure / fenêtres sont visibles. La fenêtre du document est une fenêtre enfant de l'emballage, qui garantit les deux sera liée lorsqu'une fenêtre est déplacée / minimisée / fermée / etc.

Pour chaque fenêtre de document sans bordure, la fenêtre d'emballage a une vue d'espace réservé qui, lorsqu'elle est redimensionnée, redimensionnez la fenêtre du document et injection de la vue de la fenêtre du document dans la chaîne du répondeur (tout événement envoyé à la vue de l'espace réservé sera envoyé. à la vue de la fenêtre du document avant d'être transmis à la vue parent de l'espace réservé).

Il y a encore des détails mineurs pour s'entraîner, mais je pense que cette approche fonctionnera bien.


0 commentaires

6
votes

J'ai le même type de projet - Différents documents indépendants que je souhaite présenter dans une seule fenêtre, avec une barre latérale qui permet de passer entre les documents - donc j'ai fait un peu de recherche de moi-même.

Je viens de trouver un avantage intéressant en lisant Application basée sur les documents avec une fenêtre pour tous les documents référence. Il apparaît, de la réponse de Miketrent, que l'utilisation de NSDocument est un moyen très viable d'aller. Vous avez juste besoin de sous-classement NsdocumentController.

J'aime aussi L'idée d'Abhi d'utiliser une fenêtre enfant sans bordure.


2 commentaires

Le premier lien est cassé


Peut-être qu'ils étaient en mai, mais maintenant ils travaillent bien.