Sheet et MyDocument

muqaddarmuqaddar Administrateur
23:25 modifié dans API AppKit #1
Salut la compagnie,

Je souhaiterai ajouter une feuille à  mon appli qui ne dispose pas de contrôleur (c'est MyDocument qui joue ce rôle). Seulement, il me faut ajouter un outlet pour MyDocument, pour la feuille. Mon pb est que je dois ajouter cette feuille dans le MainMenu.nib pour la relier aux prefs par exemple. Or dans le mainMenu il m'est impossible d'ajouter l'outlet à  MyDocument. Logique.
Y a t-il une solution ?

Plus généralement, c'est compliqué de prendre myDocument comme contrôleur principal (meme si on ajoute des Object et arrayController en plus)...

«1

Réponses

  • TiffTiff Membre
    23:25 modifié #2
    La feuille est destinée au document ou à  l'appli ?
    Si c'est à  l'appli, il te faut un contôleur d'appli qui se trouvera dans MainMenu.nib.
  • TiffTiff Membre
    23:25 modifié #3
    Bon, j'ai répondu sans réfléchir. Reprenons.
    Je suppose que la feuille en question est liée à  la fenêtre du document. C'est bien ça ?
    Donc c'est dans MyDocument.nib que tu la gères.
    Pour l'accès aux préférences, revoir le tuto de ClicCool, qui permet de faire des liens entre le panneau des préférences et le document.
  • muqaddarmuqaddar Administrateur
    23:25 modifié #4
    Oui, la feuille est destinée à  le fenêtre du document.

    Merci Tiff, je l'ai fait y'a pas longtemps pourtant ce tut.
    J'étais sur un ancien tut de PO où ils passaient par des outlets et un controleur...
    Je vais regarder ça.
  • muqaddarmuqaddar Administrateur
    23:25 modifié #5
    Yes, but we have a problem Redmond. :)

    En fait, ClicCool la met dans le MainWindow, lui il ne crée pas de sheet donc pas de pb pour préciser de quelle fenêtre sort la feuille ! Mais ce n'est pas mon cas et le problème reste le même. Il faut que la feuille soit dans mydocument mais alors comment la relier au menu préférences qui est dans mainmenu ?
  • 23:25 modifié #6
    J'ai juste une petite question: pourquoi vouloir attacher à  une fenêtre d'un document des données d'ordre général. La sheet est justement faite pour les cas qui se rapportent uniquement à  la fenêtre qui lui est attachée.
  • TiffTiff Membre
    23:25 modifié #7
    Osxitan veut peut-être que, suivant les préférences, la feuille propose tel ou tel paramètre pour son document.
    Ce que je ne comprends pas, c'est la différence entre un document avec feuille et un document sans feuille. Pourquoi dans un cas la méthode ClicCool fonctionne et pas dans l'autre ?
  • muqaddarmuqaddar Administrateur
    23:25 modifié #8
    Bein c'ets à  dire que c'est ma seule fenêtre ! Donc la sheet se rapportera uniquement à  son contenu.
  • TiffTiff Membre
    23:25 modifié #9
    Si c'est ta seule fenêtre, pourquoi as-tu créé une Document-based Application ?
  • muqaddarmuqaddar Administrateur
    23:25 modifié #10
    Tiff, en fait je ne vois pas le moyen d'indiquer à  une feuille qui se trouve dans MainMenu (puisqu'elle est attachée au menu préférences) de sortir de ma fenêtre document, qui est ma seule fenêtre dans l'appli , tu me suis ?
  • muqaddarmuqaddar Administrateur
    23:25 modifié #11
    dans 1094224355:

    Si c'est ta seule fenêtre, pourquoi as-tu créé une Document-based Application ?


    J'en ai bcp parlé avec ClicCool. Je vais enregistrer des fichiers "documents" (qui contiennent des contenus d'array), en fait c'ets parce que l'application ne contient aucune donnée elle ! Tout est dans le document.
  • TiffTiff Membre
    23:25 modifié #12
    Non !
    Il va falloir que je revois le tuto de ClicCool moi aussi !
    C'est dans MyDocument.nib que tu dois faire sortir la feuille.

    CliCool n'avait pas réussi le tour de force de mettre les préférences dans MainMenu.nib et de les lier à  MyDocument.nib ?
  • muqaddarmuqaddar Administrateur
    23:25 modifié #13
    ClicCool a mis les prefs ds MainMenu...
    N'empêche ça doit être faisable le tour de force.  o:)
  • TiffTiff Membre
    23:25 modifié #14
    Quand je disais "Non !" c'est en réponse à  la question "Tu me suis ?"
  • TiffTiff Membre
    23:25 modifié #15
    T'as fini de répondre avant moi ?
  • TiffTiff Membre
    23:25 modifié #16
    dans 1094224841:

    ClicCool a mis les prefs ds MainMenu...


    Oui, et alors ? Pourquoi tu ne fais pas pareil ?
  • TiffTiff Membre
    23:25 modifié #17
    Bon, je vais revoir le tuto, parce que je crois qu'on ne se comprend pas. À plus.
  • muqaddarmuqaddar Administrateur
    23:25 modifié #18
    dans 1094224845:

    Quand je disais "Non !" c'est en réponse à  la question "Tu me suis ?"


    Ah, je recommence alors.
    Pour lier une fenêtre au menu "préférences", il faut être dans mainmenu.nib puisqu'il n'y a que là  qu'est le menu de l'appli. Or, moi, ma sheet doit être dans MyDocument, puisqu'elle sort de cette fenêtre là  ! Alors comment concilier les deux ?
    Je suis sûr que les pros se marrent. ;)
  • ClicCoolClicCool Membre
    23:25 modifié #19
    Il me semble que pour appeler la sheet de la fenêtre document le mieux est de créer une méthode Action faisant le travail dans myDocument.
    D'ajouter au first responder du mainMenu.nid une action ( de même nom bien sur que celle définie dans myDocument)
    Puis, toujours dans mainMenu.nib, de relier le menu préférence à  la dite action du First Responder
  • TiffTiff Membre
    23:25 modifié #20
    Oui ! Je trouve leur silence étonnant !
    Le lien entre MainMenu.nib et MyDocument.nib s'opère par l'intermédiaire du DefaultController, présent dans les deux fichiers nib.
    ClicCool a lié les champs de la fenêtre MyDocument au DefaultController.
    Je ne vois pas ce qui empêche de faire la même chose avec la feuille.
  • TiffTiff Membre
    23:25 modifié #21
    Encore trop tard !
  • ClicCoolClicCool Membre
    23:25 modifié #22
    Tu devrais peut-être te familiariser avec la chaine des répondeurs.  8)
    Le First Respondeur est présent dans tous les nib et représente l'entrée dans cette chaine (son premier maillon).
    Lorsqu'une action d'un utilisateur est envoyée vers le first responder, la chaine est parcourue jusqu'à  trouver un maillon capable de répondre à  l'appel.
    C'est cette structure de répondeur qui permet à  un menu d'édition d'avoir une action sur le champ qui a le focus et pas les autres.
    En sélectionnant le menu "copier" par exemple, le message est envoyé au first respondeur, puis, s'il ne répond pas, parcoure la chaine des répondeurs: la venêtre active, sa vue, la group-box active puis enfin le champs actif dans la groupe box qui reconnait le message et y répond, ce qui arrète le cheminement du message. Le premier objet dans la chaine hyerarchique d'objets ayant le focus répond et interromps la recherche.

    Suis pas sur d'avoir été clair  :-\
  • TiffTiff Membre
    23:25 modifié #23
    dans 1094225020:

    Pour lier une fenêtre au menu "préférences"

    Je commence à  comprendre.
    (Du coup je comprends aussi la réponse de Arldon.)
    Tu veux que la feuille remplace le panneau des préférences ?
    Quel intérêt ?
  • ClicCoolClicCool Membre
    23:25 modifié #24
    Ceci dit ta solution passe par la chaine de répondeurs,
    Mais, pour ce qui est de l'ergonomie globale, je suis d'accord avec Arldon et Tiff.
    Il paraà®t plus judicieux de créer un paneau des préférences global à  l'appli plutôt qu'attaché à  un document.

    Mais, dis mois, ta documented based appli. n'aura jamais qu'un seul document à  gérer ?
    Tes tableaux et tout le toutim c'est pour l'appli elle même et pas pour des documents ?
    Alors pourquoi ne mettre tout le basard dans les prefs, ou un fichier de librairie genre application support ?
    Tu t'affranchis alors de la structure document based et peux toujours utiliser le fileOwner ou le userDefaut comme contrôleur pour tes bindings  ;)
  • muqaddarmuqaddar Administrateur
    septembre 2004 modifié #25
    Oh, c'ets fini les pipelettes là  ?
    Faut que je relise les 4 derniers messages tranquillement.
    N'empêche, je susi arrivé à  mes fins et ça marche ! ClicCool number one !
    J'ai ajouté des outlets en plus et basta, ma feuille de prefs sort de ma mydocument window ;-)

    Tiff, merci de ta patience.

    De toute façon, c'ets pas clair encore cette histoire de document-based application...
  • TiffTiff Membre
    23:25 modifié #26
    dans 1094228114:

    De toute façon, c'ets pas clair encore cette histoire de document-based application...


    C'est par là  qu'il fallait commencer !  ;D
  • muqaddarmuqaddar Administrateur
    23:25 modifié #27
    dans 1094227794:

    Ceci dit ta solution passe par la chaine de répondeurs,
    Mais, pour ce qui est de l'ergonomie globale, je suis d'accord avec Arldon et Tiff.
    Il paraà®t plus judicieux de créer un paneau des préférences global à  l'appli plutôt qu'attaché à  un document.

    Mais, dis mois, ta documented based appli. n'aura jamais qu'un seul document à  gérer ?
    Tes tableaux et tout le toutim c'est pour l'appli elle même et pas pour des documents ?
    Alors pourquoi ne mettre tout le basard dans les prefs, ou un fichier de librairie genre application support ?
    Tu t'affranchis alors de la structure document based et peux toujours utiliser le fileOwner ou le userDefaut comme contrôleur pour tes bindings  ;)


    En fait, j'ai créé une document-based application car je voulais enregistrer le contenu de 4 arrays dans un fichier avec extension poru mon application. Il est clair que mon appli ne possède qu'une fenêtre, celle de MyDocument, et peut donc ouvrir un seul doc à  la fois.
    J'aurais pu comme tu dis enregistrer les 4 tableaux dans des fichiers dans la bibliothèques des prefs, c'ets même plus simple...

    Pour les prefs gérés par une feuille et non une fenêtre flottante, je crois que c'est plus "cocoa-like" non ? J'ai déjà  vu plien d'applis le faire.

    Reste que effectivement, ici, je n'ai pas de contrôleur général. C'est MyDocument...

    Toutefois, si quelqu'un veut bien me dire (redire) quand vaut-il mieux utiliser une document-bases appli ou pas clairement, je suis preneur. Quelle est la règle d'or ?

  • TiffTiff Membre
    23:25 modifié #28
    Ben, l'intérêt d'un Document-based, c'est la possibilité d'avoir plusieurs documents ouverts en même temps (par l'intermédiaire de NSDocumentController).
    Si tu n'as qu'un document, j'vois pas !  :-\

    Tiens, j'ai réussi à  mettre une image. Je deviens un pro des fora moi ! Bon elle est pas belle, mais elle reflète bien mon état d'esprit présent.
  • muqaddarmuqaddar Administrateur
    23:25 modifié #29
    Ok, alors je sais pas si je refait toute mon appli...

    Ton image :
    Ouais, va falloir changer ça !
  • Eddy58Eddy58 Membre
    23:25 modifié #30
    dans 1094228784:


    En fait, j'ai créé une document-based application car je voulais enregistrer le contenu de 4 arrays dans un fichier avec extension poru mon application. Il est clair que mon appli ne possède qu'une fenêtre, celle de MyDocument, et peut donc ouvrir un seul doc à  la fois.
    J'aurais pu comme tu dis enregistrer les 4 tableaux dans des fichiers dans la bibliothèques des prefs, c'ets même plus simple...

    Pour les prefs gérés par une feuille et non une fenêtre flottante, je crois que c'est plus "cocoa-like" non ? J'ai déjà  vu plien d'applis le faire.

    Reste que effectivement, ici, je n'ai pas de contrôleur général. C'est MyDocument...

    Toutefois, si quelqu'un veut bien me dire (redire) quand vaut-il mieux utiliser une document-bases appli ou pas clairement, je suis preneur. Quelle est la règle d'or ?



    Le concept des applications de type documents-based s'utilise pour des softs genre traitement de texte, d'image, bases de données, gestion banquaire, tableurs, etc....
    Effectivement dans ton cas, une appli classique avec un fichier .nib et un controleur auraient suffis. Inutile de se compliquer la vie inutilement... :)
    Ceci dit, personnellement je ne conçois pas d'applis sans avoir au moins un controleur. C'est lui qui centralise tout. J'applique le principe de base MVC et tout va bien.
  • muqaddarmuqaddar Administrateur
    23:25 modifié #31
    Ok Eddy58, je vais la refaire en sans document-based avec un controleur général (des impôts ?)
Connectez-vous ou Inscrivez-vous pour répondre.