Plusieurs NSTextView avec un seul NSTextStorage

fouffouf Membre
16:12 modifié dans API AppKit #1
L'utilise deux NSTextView independantes l'une de l'autre, mais qui ont le meme contenu, et MyDocument qui implemente textDidChange:. A ce moment la, MyDocument regarde quelle textView est l'objet de la notification et envoie [autreTextView setString:[textView string]];

Je me rend bien compte que cette architecture est tres lourde : 2 NSTextStorage, 1 NSString dans MyDocument et que, de plus, l'utilisateur ne peut pas rajouter des textView supplementaires.

Je me demande si il n'est pas plus simple et moins lourd d'avoir un meme NSTextStorage voire meme un meme NSTextLayout (pour la police et la couleur du texte).

Questions :
1- Est-ce simple a mettre en oeuvre (surtout pour le textLayout) ?
2- Est-ce que cela optimise vraiment la quantite de memoire utilisee et si possible mon code ??

:why?:

Toutes les idees et propositions seront les bienvenues

Réponses

  • 16:12 modifié #2
    Il y a moyen et c'est très simple, et c'est même prévu ;). C'est un truc dans le genre, si tu as fais les 2 textview dans interfacebuilder:

    [tt]textView2 layoutManager] replaceTextStorage:[textView1 textStorage[/tt]
  • fouffouf Membre
    16:12 modifié #3
    Renaud, excuse moi pour ma reponse tardive.

    Merci beaucoup, ca marche achement mieux et ca m'evite tout une procedure de mise a jour des textViews.
    Par contre, la procedure de mise a jour me permettait d'enregistrer dans mes preferences la couleur et la police des textViews. Le probleme, c'est que je n'arrive pas a gerer ca sans m'encombrer de deux NSString supplementaires pour voir si le texte a change ou pas. Comment faire sans gaspiller une quantite de memoire astronomique ?

    Ca doit etre faisable mais je n'arrive pas a voir comment faire. :why?:
  • 16:12 modifié #4
    Si tu veux des attributs de texte différents par ce mécanisme, ce n'est pas possible, tout est stocké dans le textstorage, qui est partagé. Les seuls attributs que tu pourrais changer sont ceux relatifs aux couleurs et aux soulignements, via les temporaryAttributes de NSLayoutManager.
  • fouffouf Membre
    16:12 modifié #5
    Je suis entierement d'accord avec toi Renaud.

    J'ai du mal poser ma question :
    La police et la couleur sont les memes pour les deux vues, NO PROBLEM. Mais, en fait, je veux pouvoir recuperer une notification qui est postee quand la police ou la couleur (voir l'ombre change). Or je n'arrive pas a touver ca dans la doc (ca m'etonnerait que ca existe). Alors, je me demande si vous n'avez pas une idee de comment faire.  o:)

    Peut-etre faut il implementer un delegate du la fenetre des polices ??
  • 16:12 modifié #6
    NSTextStorageDidProcessEditingNotification ;)
Connectez-vous ou Inscrivez-vous pour répondre.