NSMatrix + NSCell ou bien NSView pour dessiner plein de données dans une vue ?

muqaddarmuqaddar Administrateur
02:42 modifié dans API AppKit #1
Bonjour,

Je viens de lire pas mal de discussion sur les matrices sur ce même site.
Je vous expose mon problème. En fait, ce n'est pas vraiment un problème, je veux juste avoir votre avis pour un prochain dév.

Je souhaite afficher une matrice de vues avec scrolling et mise à  l'échelle comme iPhoto. Or chaque NSCell doit afficher tout un tas d'informations.

A savoir une vue contenant :
- une image centrale
- des chiffres aux 4 coins de la cellule (voir d'autres imagettes dans les coins ou bien des drawings)

J'ai lu que Bru par exemple ne conseillait pas de faire une NSMatrix dans ce cas là . Mais une vue qui englobe les vues.
Est-ce la meilleure façon de procéder ?

Côté performances, je précise que :
- il pourrait y avoir jusqu'à  1000 vues (ou 1000 NSCell) dans la matrice
- chaque image centrale est la même (donc moins de ressources !!!) ou au pire il y aurait 4 ou 5 images différentes.
- lors du resizing, tout doit diminuer proportionnellement à  l'intérieur d'une même cellule.

Qu'en pensez-vous ? Quelle est la meilleure façon de procéder ?

Réponses

  • BruBru Membre
    02:42 modifié #2
    dans 1152698058:

    J'ai lu que Bru par exemple ne conseillait pas de faire une NSMatrix dans ce cas là . Mais une vue qui englobe les vues.


    Si tu fais référence à  ce post, ce n'est pas ça.
    Dans le cas de Olivier555, il y a dans sa "matrice" des contrôles (boutons et slider de mémoire), donc on sort du cadre de NSCell.

    Dans ton cas, NSCell est une bonne solution, et moins gourmande en ressource que NSView.

    .
  • muqaddarmuqaddar Administrateur
    02:42 modifié #3
    dans 1152703650:

    dans 1152698058:

    J'ai lu que Bru par exemple ne conseillait pas de faire une NSMatrix dans ce cas là . Mais une vue qui englobe les vues.


    Si tu fais référence à  ce post, ce n'est pas ça.
    Dans le cas de Olivier555, il y a dans sa "matrice" des contrôles (boutons et slider de mémoire), donc on sort du cadre de NSCell.

    Dans ton cas, NSCell est une bonne solution, et moins gourmande en ressource que NSView.

    .


    Exactement, je faisais référence à  ce post. :-) (pardon de ne pas avoir mis le lien)
    Ok, je vais donc partir sur une NSMatrix.

    Dans mon cas, il me faut donc :
    - une classe MatrixController (NSObject) qui gère le fonctionnement de la matrice, les données des cellules  et les redimensionnements
    - une classe CellView (NSView) qui dessine tout ce qu'il y a à  afficher dans chaque cellule (NSCell)

    Ai-je besoin d'autre chose ? A priori, je n'ai pas besoin de sous-classer NSCell, ni NSMatrix.
  • BruBru Membre
    02:42 modifié #4
    dans 1152707103:

    Dans mon cas, il me faut donc :
    - une classe MatrixController (NSObject) qui gère le fonctionnement de la matrice, les données des cellules  et les redimensionnements
    - une classe CellView (NSView) qui dessine tout ce qu'il y a à  afficher dans chaque cellule (NSCell)
    Ai-je besoin d'autre chose ? A priori, je n'ai pas besoin de sous-classer NSCell, ni NSMatrix.


    Tu t'égares...

    NSMatrix est un NSView (en fait un NSControl) qui affiche une série de NSCell en ligne et en colonne.
    C'est donc NSCell que tu dois sous-classer afin de personnaliser la fonction de dessin de son contenu.

    .
  • 02:42 modifié #5
    dans 1152698058:

    - il pourrait y avoir jusqu'à  1000 vues (ou 1000 NSCell) dans la matrice


    Je dirais 1000 vues, ou ... une seule NSCell. Si tu te bases sur le fonctionnement des tables, ça doit se passer comme ça: 1. 'remplir' la cell (=donner les bonnes variables), 2. dessiner la cell là  où il faut, 3. la "remplir" à  nouveau avec les données de l'élément suivant,.... Une fois que ce qui doit être dessiné est dessiné, tu fais ce que tu veux de ta cell 'prototype', ce qui a été dessiné restera.

    Les matrix ne fonctionnent pas comme ça (elles créent une instance par cellule) donc je suis pas sur que ce soit le plus adéquat pour ça.
  • muqaddarmuqaddar Administrateur
    02:42 modifié #6
    dans 1152710387:

    dans 1152707103:

    Dans mon cas, il me faut donc :
    - une classe MatrixController (NSObject) qui gère le fonctionnement de la matrice, les données des cellules  et les redimensionnements
    - une classe CellView (NSView) qui dessine tout ce qu'il y a à  afficher dans chaque cellule (NSCell)
    Ai-je besoin d'autre chose ? A priori, je n'ai pas besoin de sous-classer NSCell, ni NSMatrix.


    Tu t'égares...

    NSMatrix est un NSView (en fait un NSControl) qui affiche une série de NSCell en ligne et en colonne.
    C'est donc NSCell que tu dois sous-classer afin de personnaliser la fonction de dessin de son contenu.

    .


    Donc si j'ai 1000 cellules, je vais instancier 1000 NSCell "customizées" avec des contenus différents. C'est ça ?

    dans 1152712829:

    dans 1152698058:

    - il pourrait y avoir jusqu'à  1000 vues (ou 1000 NSCell) dans la matrice


    Je dirais 1000 vues, ou ... une seule NSCell. Si tu te bases sur le fonctionnement des tables, ça doit se passer comme ça: 1. 'remplir' la cell (=donner les bonnes variables), 2. dessiner la cell là  où il faut, 3. la "remplir" à  nouveau avec les données de l'élément suivant,.... Une fois que ce qui doit être dessiné est dessiné, tu fais ce que tu veux de ta cell 'prototype', ce qui a été dessiné restera.

    Les matrix ne fonctionnent pas comme ça (elles créent une instance par cellule) donc je suis pas sur que ce soit le plus adéquat pour ça.


    Donc, tu ne privilégies pas la piste de Bru où j'ai rien compris ?
  • 02:42 modifié #7
    Faut surtout voir ce que tu dois faire après... Si tu dois comme dans iPhoto gérer les sélections multiples, discontinues, les sélections par "tracé de rectangle",... la NSMatrix risque fort de montrer ses limites, et bricoler au dessus de ce que la matrix permet risque de prendre plus de temps que faire une classe maison from scratch.

    À toi de voir suivant ce que tu dois faire, peser le pour et le contre de chaque piste, je n'ai pas assez d'info pour préconiser une solution ou une autre.
  • muqaddarmuqaddar Administrateur
    02:42 modifié #8
    dans 1152720695:

    Faut surtout voir ce que tu dois faire après... Si tu dois comme dans iPhoto gérer les sélections multiples, discontinues, les sélections par "tracé de rectangle",... la NSMatrix risque fort de montrer ses limites, et bricoler au dessus de ce que la matrix permet risque de prendre plus de temps que faire une classe maison from scratch.

    À toi de voir suivant ce que tu dois faire, peser le pour et le contre de chaque piste, je n'ai pas assez d'info pour préconiser une solution ou une autre.


    Ce ne sera que de l'affichage d'infos (et du drawing)... et à  priori juste faire du simple clic ou double clic sur chaque NSCell... ;-)
Connectez-vous ou Inscrivez-vous pour répondre.