Ajouts dans une NSOutlineView

muqaddarmuqaddar Administrateur
19:14 modifié dans API AppKit #1
Yop,

J'ai créé une outineView que je charge à  partir d'un plist. Pas de pb.
Bien sûr, je veux ajouter des éléments dans cette putlineView à  2 dimensions (groupes et sous-groupes).
En sélectionnant, une ligne et avec InsertObject, ça marche, ça m'ajoute mes éléments au bon endroit.

Maintenant 2 soucis :
1) si aucune ligne n'est sélectionnée, ça ne marche pas malgré un test que je fais
2) comment on ajoute des éléments dans le sous-groupe ?

Mon code :

- (IBAction)addGroup:(id)sender<br />{<br />  int index;<br />        if (![groupsTable selectedRow]) {<br />         index=[groupsArray count]-1;<br />      }<br /> else index = [groupsTable selectedRow];<br />   <br />  [groupsArray insertObject:[self createGroup] atIndex:index];<br />      [groupsTable reloadData];<br />}<br /><br />-(NSDictionary *)createGroup<br />{<br />   NSMutableDictionary *group = [NSMutableDictionary dictionary];<br />    [group setObject:[newGroupField stringValue] forKey:@&quot;Group&quot;];<br />  return group;<br />}<br />


J'ai bien sûr implémenter les 5 méthodes datasource pour outlineView.

Réponses

  • cbrandtcbrandt Membre
    19:14 modifié #2
    dans 1100528838:

    1) si aucune ligne n'est sélectionnée, ça ne marche pas malgré un test que je fais
    ...
    <br />   if (![groupsTable selectedRow]) {<br />
    



    là , tu testes si la 1ère rangée est sélectionnée, pas si aucune rangée n'est sélectionnée... (les nos. de rangées commencent à  0)
    donc à  remplacer par:
    <br />     if ([groupsTable selectedRow] != -1) {<br />
    



    dans 1100528838:

    2) comment on ajoute des éléments dans le sous-groupe ?


    je regarde pour la suite, ça demande un peu de réflexion...
  • cbrandtcbrandt Membre
    novembre 2004 modifié #3
    et voici la suite...

    tu pourrais faire comme suit:
    - si aucun élément n'est sélectionné, créer un nouveau groupe
    - si un groupe est sélectionné, mais qu'il est fermé, créer un nouveau groupe
    - si un groupe est sélectionné, mais qu'il est ouvert, créer un nouveau sous-groupe dans ce groupe
    - si un sous-groupe est sélectionné, créer un nouveau sous-groupe dans le même groupe

    <br />- (IBAction) addGroup: (id) sender<br />{<br />&nbsp; &nbsp; NSMutableArray&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  *subGroupsArray;<br />&nbsp; &nbsp; NSMutableDictionary&nbsp; &nbsp; &nbsp; &nbsp; *subGroup;<br />&nbsp; &nbsp; int&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index;<br />&nbsp; &nbsp; int&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; &nbsp; row = [groupsTable selectedRow];<br /><br />&nbsp; &nbsp; if (row == -1) // aucune sélection - ajout groupe en fin de liste<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; [groupsArray addObject: [self createGroup]];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else if ([groupsTable isExpandable: [groupsTable itemAtRow]]) // groupe sélectionné<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; group = [groupsTable itemAtRow: row];<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroupsArray = [group objectForKey: @&quot;sous-groupes&quot;];<br />&nbsp; &nbsp; &nbsp; &nbsp; if ([groupsTable isItemExpanded: item]) // groupe ouvert - ajout sous-groupe en fin de liste des sous-groupes<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [subGroupsArray addObject: [self createSubGroup]];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; // groupe fermé - ajout groupe après le groupe sélectionné<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index = [groupsArray indexOfObject: group] + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [groupsArray insertObject: [self createGroup] atIndex: index];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; else // sous-groupe sélectionné - ajout sous-groupe après le sous-groupe sélectionné<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; group = xxx;//[groupsTable itemAtRow: row];<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroupsArray = [group objectForKey: @&quot;sous-groupes&quot;];<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroup = [groupsTable itemAtRow: row];<br />&nbsp; &nbsp; &nbsp; &nbsp; index = [subGroupsArray indexOfObject: subGroup] + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; [subGroupsArray insertObject: [self createSubGroup] atIndex: index];<br />&nbsp; &nbsp; }<br /><br />&nbsp; &nbsp; [groupsTable reloadData];<br />}<br /><br />-(NSDictionary*) createGroup<br />{<br />&nbsp; &nbsp; return [NSMutableDictionary dictionaryWithObjectsAndKeys:<br />&nbsp; &nbsp; &nbsp; &nbsp; [newGroupField stringValue],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  @&quot;Group&quot;,<br />&nbsp; &nbsp; &nbsp; &nbsp; [NSMutableArray array],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @&quot;sous-groupes&quot;,<br />&nbsp; &nbsp; &nbsp; &nbsp; nil];<br />}<br /><br />-(NSDictionary*) createSubGroup<br />{<br />&nbsp; &nbsp; return [NSMutableDictionary dictionaryWithObjectsAndKeys:<br />&nbsp; &nbsp; &nbsp; &nbsp; // mettre les paires valeur - clé qui conviennent<br />&nbsp; &nbsp; &nbsp; &nbsp; nil];<br />}<br />
    


    bon, bien sûr c'est pas testé...  :) m'enfin ça pourrait être quelque chose comme ça...
  • muqaddarmuqaddar Administrateur
    19:14 modifié #4
    Merci cbrandt...
    Je teste et améliore si besoin est tout ça, et je reviens à  la charge.
    Chapeau pour cette aide précieuse.
  • cbrandtcbrandt Membre
    19:14 modifié #5
    merci.. :rose!:

    au fait, petite modif:

    ajoute dans - (IBAction) addGroup: (id) sender:
    <br />    NSEnumerator    *enumerator;<br />
    


    et remplace:
    <br />        group = xxx;//[groupsTable itemAtRow: row];<br />        subGroupsArray = [group objectForKey: @&quot;sous-groupes&quot;];<br />        subGroup = [groupsTable itemAtRow: row];<br />
    

    par:
    <br />        subGroup = [groupsTable itemAtRow: row];<br />        enumerator = [groupsArray objectEnumerator];<br />        while (group = [enumerator nextObject] &amp;&amp; ![[groups objectForKey: @&quot;sous-groupes&quot;] containsObject: subGroup]);<br />
    


    ça devrait aller mieux...
  • muqaddarmuqaddar Administrateur
    19:14 modifié #6
    Bon, y'a plusieurs points qui m'échappent...

    D'abord :

    // groupe ouvert - ajout d&#39;un sous-groupe en fin de liste des sous-groupes<br />             if ([groupsTable isItemExpanded: [groupsTable itemAtRow: row]]) {<br />                 [subGroupsArray addObject: [self createSubGroup]];<br />                }
    


    isItemExpanded réclame un item, et je suis pas sûr que ce qui suit soit bon...

    Ensuite, le enumerator que tu m'as fait ajouter sans boucle ??? kesako ?

    while (group = [enumerator nextObject] &amp;&amp; ![[group objectForKey: @&quot;childs&quot;] containsObject: subGroup]);
    


    Puis, le MutableArray array dans createGroup :

    - (NSDictionary*)createGroup<br />{<br />      return [NSMutableDictionary dictionaryWithObjectsAndKeys: <br />                        [newGroupField stringValue], @&quot;Group&quot;,<br />                  [NSMutableArray array], @&quot;childs&quot;, nil];<br />}
    


    Jamais vu encore [NSMutableArray array] ? C'est un tableau vide ? Pas de pointeur ?

    Même chose ds createSubGroup :

    - (NSDictionary*)createSubGroup<br />{<br />    return [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSMutableArray array], @&quot;childs&quot;, [newGroupField stringValue], @&quot;Group&quot;, nil];<br />}
    


    Je comprends pas bien ce qu'il faut mettre ds cette dernière fonction... on devrait s'occuper que des childs... Je sais pas si c'est bon.


    Je remets le tout :

    - (IBAction)addGroup: (id)sender<br />{<br />     NSMutableDictionary* subGroup;<br />    NSMutableDictionary* group;<br />       NSMutableArray* subGroupsArray;<br />   NSEnumerator* enumerator;<br /> int index;<br />        int row;<br />  <br />  row = [groupsTable selectedRow];<br /><br />    //aucune selection - ajout d&#39;un groupe en fin de liste<br />       if (row == -1) [groupsArray addObject: [self createGroup]];<br />       <br />  // groupe selectionne<br />     else if ([groupsTable isExpandable: [groupsTable itemAtRow: row]]) {<br />      <br />          group = [groupsTable itemAtRow: row];<br />             subGroupsArray = [group objectForKey: @&quot;childs&quot;];<br />               <br />          // groupe ouvert - ajout d&#39;un sous-groupe en fin de liste des sous-groupes<br />           if ([groupsTable isItemExpanded: [groupsTable itemAtRow: row]]) {<br />                 [subGroupsArray addObject: [self createSubGroup]];<br />                }<br />         // groupe ferme - ajout d&#39;un groupe apres le groupe selectionne<br />              else {<br />                    index = [groupsArray indexOfObject: group] + 1;<br />                   [groupsArray insertObject: [self createGroup] atIndex: index];<br />            }<br /> }<br /> // sous-groupe selectionne - ajout sous-groupe apres le sous-groupe selectionne<br />   else {<br />            subGroup = [groupsTable itemAtRow: row];<br />          enumerator = [groupsArray objectEnumerator];<br />              while (group = [enumerator nextObject] &amp;&amp; ![[group objectForKey: @&quot;childs&quot;] containsObject: subGroup]);<br />                 index = [subGroupsArray indexOfObject: subGroup] + 1;<br />                     [subGroupsArray insertObject: [self createSubGroup] atIndex: index];<br />              <br />  }<br /> <br />  [groupsTable reloadData];<br /> [NSApp stopModal];<br />}<br /><br />- (NSDictionary*)createGroup<br />{<br />  return [NSMutableDictionary dictionaryWithObjectsAndKeys: <br />                        [newGroupField stringValue], @&quot;Group&quot;,<br />                  [NSMutableArray array], @&quot;childs&quot;, nil];<br />}<br /><br />- (NSDictionary*)createSubGroup<br />{<br />       return [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSMutableArray array], @&quot;childs&quot;, [newGroupField stringValue], @&quot;Group&quot;, nil];<br />}<br />
    
  • cbrandtcbrandt Membre
    19:14 modifié #7
    juste une question:
    combien y a-t'il de niveaux de sous-groupes ?
    c'est-à -dire, les sous-groupes peuvent-ils avoir des sous-groupes ?
  • muqaddarmuqaddar Administrateur
    19:14 modifié #8
    Juste un seul niveau de sous-groupe.
    A vrai dire, je comprends pas qu'on ait besoin de 2 méthodes createGroup et createSubGroup. Il suffit juste de lui faire comprendre dans quel niveau on est non ?
  • cbrandtcbrandt Membre
    19:14 modifié #9
    oui, dans ce cas il faut passer un paramètre (ce serait mieux aussi de passer le nom du groupe en paramètre)
    à  bientôt pour le tout débuggé
  • cbrandtcbrandt Membre
    19:14 modifié #10
    et voici un truc testé et qui marche:

    (à  adapter bien sûr)

    si tu as des questions n'hésite pas...

    <br />#import &quot;MyWindowController.h&quot;<br /><br />// c&#39;est bien de defini comme ca les cles utilises dans les dictionnaires<br />// pour etre a l&#39;abre des fautes de frappe (et pour pouvoir les changer facilement)<br /><br />#define OXGroupKey&nbsp; &nbsp; &nbsp; &nbsp; @&quot;Group&quot;<br />#define OXChildsKey&nbsp; &nbsp; &nbsp; &nbsp; @&quot;childs&quot;<br /><br /><br />@implementation MyWindowController<br /><br />//--------------------------------------------------------------------------------<br /><br />- (void) awakeFromNib<br />{<br />&nbsp; &nbsp; groupsArray = [[NSMutableArray alloc] init];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (id) outlineView: (NSOutlineView*) outlineView child: (int) index ofItem: (id) item<br />{<br />&nbsp; &nbsp; if (!item)<br />&nbsp; &nbsp; &nbsp; &nbsp; return [groupsArray objectAtIndex: index];<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; return [[item objectForKey: OXChildsKey] objectAtIndex: index];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (BOOL) outlineView: (NSOutlineView*) outlineView isItemExpandable: (id) item<br />{<br />&nbsp; &nbsp; return [groupsArray containsObject: item];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (int) outlineView: (NSOutlineView*) outlineView numberOfChildrenOfItem: (id) item<br />{<br />&nbsp; &nbsp; if (!item)<br />&nbsp; &nbsp; &nbsp; &nbsp; return [groupsArray count];<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; return [[item objectForKey: OXChildsKey] count];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (id) outlineView: (NSOutlineView*) outlineView objectValueForTableColumn: (NSTableColumn*) tableColumn byItem: (id) item<br />{<br />&nbsp; &nbsp; return [item objectForKey: [tableColumn identifier]];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (IBAction) addGroup: (id)sender<br />{<br />&nbsp; &nbsp; NSMutableDictionary* subGroup;<br />&nbsp; &nbsp; NSMutableDictionary* group;<br />&nbsp; &nbsp; NSMutableArray* subGroupsArray;<br />&nbsp; &nbsp; NSEnumerator* enumerator;<br />&nbsp; &nbsp; int index;<br />&nbsp; &nbsp; int row;<br /><br /><br />&nbsp; &nbsp; row = [groupsTable selectedRow];<br /><br />&nbsp; &nbsp; // aucune selection - ajout d&#39;un groupe en fin de liste<br />&nbsp; &nbsp; if (row == -1)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; [groupsArray addObject: [self createGroup: [newGroupField stringValue] isSubGroup: NO]];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; // groupe selectionne<br />&nbsp; &nbsp; else if ([groupsTable isExpandable: [groupsTable itemAtRow: row]])<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; group = [groupsTable itemAtRow: row];<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroupsArray = [group objectForKey: OXChildsKey];<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; // groupe ouvert - ajout d&#39;un sous-groupe en fin de liste des sous-groupes<br />&nbsp; &nbsp; &nbsp; &nbsp; if ([groupsTable isItemExpanded: [groupsTable itemAtRow: row]])<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [subGroupsArray addObject: [self createGroup: [newGroupField stringValue] isSubGroup: YES]];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; // groupe ferme - ajout d&#39;un groupe apres le groupe selectionne<br />&nbsp; &nbsp; &nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; index = [groupsArray indexOfObject: group] + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [groupsArray insertObject: [self createGroup: [newGroupField stringValue] isSubGroup: NO] atIndex: index];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; // sous-groupe selectionne - ajout sous-groupe apres le sous-groupe selectionne<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroup = [groupsTable itemAtRow: row];<br />&nbsp; &nbsp; &nbsp; &nbsp; // ici, on cherche dans quel groupe se trouve le sous-groupe selectionne,<br />&nbsp; &nbsp; &nbsp; &nbsp; // pour pouvoir y ajouter un nouveau sous-groupe:<br />&nbsp; &nbsp; &nbsp; &nbsp; enumerator = [groupsArray objectEnumerator];<br />&nbsp; &nbsp; &nbsp; &nbsp; while ((group = [enumerator nextObject]) &amp;&amp; ![[group objectForKey: OXChildsKey] containsObject: subGroup]);<br /><br />&nbsp; &nbsp; &nbsp; &nbsp; // on a le groupe, on cherche l&#39;index du sous-groupe selectionne<br />&nbsp; &nbsp; &nbsp; &nbsp; // pour ajouter le nouveau sous-groupe juste apres le sous-groupe selectionne<br />&nbsp; &nbsp; &nbsp; &nbsp; subGroupsArray = [group objectForKey: OXChildsKey];<br />&nbsp; &nbsp; &nbsp; &nbsp; index = [subGroupsArray indexOfObject: subGroup] + 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; [subGroupsArray insertObject: [self createGroup: [newGroupField stringValue] isSubGroup: YES] atIndex: index];<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; [groupsTable reloadData];<br />&nbsp; &nbsp; // [NSApp stopModal];<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />- (NSDictionary*) createGroup: (NSString*) name isSubGroup: (BOOL) isSG<br />{<br />&nbsp; &nbsp; if (isSG)<br />&nbsp; &nbsp; &nbsp; &nbsp; return [NSMutableDictionary dictionaryWithObject: name forKey: OXGroupKey];<br />&nbsp; &nbsp; else<br />&nbsp; &nbsp; &nbsp; &nbsp; return [NSMutableDictionary dictionaryWithObjectsAndKeys: <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OXGroupKey,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [NSMutableArray array],&nbsp; &nbsp; &nbsp; &nbsp; OXChildsKey,<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil];<br />&nbsp; &nbsp; // [NSMutableArray array] est la meme chose que [[[NSMutableArray alloc] init] autorelease] <br />&nbsp; &nbsp; // mais c&#39;est plus rapide a taper<br />}<br /><br />//--------------------------------------------------------------------------------<br /><br />@end<br />
    
  • muqaddarmuqaddar Administrateur
    19:14 modifié #11
    Diable !
    ça a l'air de marcher sauf un cas : sous-groupe sélectionné. J'ai droit à  une sigEnv 11.

    donc ici, fuite mémoire ?

    // sous-groupe selectionne - ajout sous-groupe apres le sous-groupe selectionne<br />   else {<br />            subGroup = [groupsTable itemAtRow: row];<br />          // ici, on cherche dans quel groupe se trouve le sous-groupe selectionne,<br />         // pour pouvoir y ajouter un nouveau sous-groupe:<br />         enumerator = [groupsArray objectEnumerator];<br />              while ((group = [enumerator nextObject]) &amp;&amp; ![[group objectForKey: @&quot;Childs&quot;] containsObject: subGroup]);<br />               <br />          // on a le groupe, on cherche l&#39;index du sous-groupe selectionne<br />             // pour ajouter le nouveau sous-groupe juste apres le sous-groupe selectionne<br />             index = [subGroupsArray indexOfObject: subGroup] + 1;<br />             [subGroupsArray insertObject: [self createGroup: [newGroupField stringValue] isSubGroup: YES] atIndex: index];<br />            <br />  }
    


    Merci de m'avoir pris par la main ! Pas simple ces OutlineView ! ;)
  • cbrandtcbrandt Membre
    19:14 modifié #12
    ben justement, tu as tape "Childs" au lieu de "childs" ;D
    d'où l'intérêt d'utiliser des #define, comme ça le compilateur s'en rend compte...

  • muqaddarmuqaddar Administrateur
    novembre 2004 modifié #13
    No, non, en fait c'était bien "Childs" dès le départ, j'avais oublié la majuscule.
    T'as pas ce pb chez toi ?

    Qd je mets ces lignes en comments, pas de plantage :

    index = [subGroupsArray indexOfObject: subGroup] + 1;
    [subGroupsArray insertObject: [self createGroup: [newGroupField stringValue] isSubGroup: YES] atIndex: index];
  • cbrandtcbrandt Membre
    19:14 modifié #14
    ben non, chez moi c'est bon... tu veux que je t'envoies le projet complet ?
  • muqaddarmuqaddar Administrateur
    19:14 modifié #15
    Ouais ! Je vais comparer. Mais bon, si on a le même code...

    Je sais pas si t'as vu , j'ai édité le message de dessus.
  • cbrandtcbrandt Membre
    19:14 modifié #16
    ah oui, effectivement...

    tu pourrais séparer cette partie en plusieurs lignes et mettre un point d'arrêt juste avant, puis d'avancer pas à  pas en vérifiant à  chaque pas le contenu des variables...       
    <br />NSString *name;<br />NSDictionary *newGroup;<br />...<br />name = [newGroupField stringValue];<br />newGroup = [self createGroup: name isSubGroup: YES];<br /> [subGroupsArray insertObject: newGroup atIndex: index];<br />
    


    [Fichier joint supprimé par l'administrateur]
  • muqaddarmuqaddar Administrateur
    novembre 2004 modifié #17
    Ah bein, c'est bon, il manquait cette ligne tout simplement :

    subGroupsArray = [group objectForKey: @Childs];  :-\

    En revanche t'as remarqué que ça créait une flêche pour le nouveau groupe, même quand il n'y a rien à  l'intérieur ?

    ça vient du array de Childs... logique. Si je l'enlève, plus de flêche, mais on ne plus déplier le groupe donc on ne peut ajouter de sous groupe.

    En fait, j'initialise mon outlineView avec un plist. Celui-ci a un groupe qui ne peut être modifié (1 seul niveau),  1 groupe avec 4 sous-niveaux non modifiable, et 1 groupe à  sous-niveaux modifiable. Ensuite on peut rajouter ce qu'on veut et autant de groupes ailleurs.

    Va falloir gérer ça... mais je me demande si je complique pas trop pour mes besoins. Après tout un tableView comme dans AdressBook, avec 5 groupes par défaut aurait p-e suffit... Au moins j'apprends les outlines view.
  • cbrandtcbrandt Membre
    novembre 2004 modifié #18
    dans 1100613567:

    En fait, j'initialise mon outlineView avec un plist. Celui-ci a un groupe qui ne peut être modifié (1 seul niveau),  1 groupe avec 4 sous-niveaux non modifiable, et 1 groupe à  sous-niveaux modifiable. Ensuite on peut rajouter ce qu'on veut et autant de groupes ailleurs.


    pour gérer ça tu pourrais ajouter un couple clé/valeur à  chaque groupe et sous-groupe, indiquant s'il a le droit d'être modifié, et dans le selectionChanged du delegate, rendre le bouton 'ajouter' (in)disponible en fonction de la valeur qu'a cette clé pour l'élément sélectionné. comme ça pas besoin de modifier le contenu de addGroup, ça serait géré en amont.

    bon courgage pour la suite ! 
  • muqaddarmuqaddar Administrateur
    19:14 modifié #19
    OK.
    Encore merci pour tout cbrandt. :)
Connectez-vous ou Inscrivez-vous pour répondre.