View Javadoc

1   /*
2   Wotonomy: OpenStep design patterns for pure Java applications.
3   Copyright (C) 2001 Intersect Software Corporation
4   
5   This library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9   
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  Lesser General Public License for more details.
14  
15  You should have received a copy of the GNU Lesser General Public
16  License along with this library; if not, see http://www.gnu.org
17  */
18  
19  package net.wotonomy.ui;
20  import net.wotonomy.foundation.NSArray;
21  
22  /***
23  * This master detail association synchronizes the contents
24  * and selection of the master group into the detail group.
25  */
26  public class MirrorDetailAssociation extends MasterDetailAssociation{
27  
28      /*** 
29      * Standard constructor specifying the detail display group.
30      * @param displayGroup the detail display group of this 
31      * Master-Detail Association
32      */
33      public MirrorDetailAssociation(EODisplayGroup displayGroup){
34          super(displayGroup);
35      }
36  
37      /***
38      * Called by subjectChanged() to requalify the controlled
39      * display group with the indexed object and the bound key.
40      * This implementation ignores both and sets the object array
41      * of the detail group to the displayed objects of the master
42      * and sets the selection to match.
43      */
44      protected void requalify()
45      {
46          EODisplayGroup detail = (EODisplayGroup) object();
47          EODisplayGroup master =
48              displayGroupForAspect( ParentAspect );
49  
50          if ( master != null )
51          {
52              NSArray masterObjects = master.displayedObjects();
53              NSArray detailObjects = detail.displayedObjects();
54              int size = masterObjects.size();
55              boolean different = false;
56              
57              // see if lists contain the same object instances
58              if ( size == detailObjects.size() )
59              {
60                  for ( int i = 0; i < size; i++ )
61                  {
62                      if ( masterObjects.objectAtIndex(i) 
63                        != detailObjects.objectAtIndex(i) )
64                      {
65                          different = true;
66                          break;
67                      }
68                  }
69              }
70              else // different sizes
71              {
72                  different = true;
73              }
74              
75              // if different, sync contents and selection with master
76              if ( different )
77              {
78                  detail.setObjectArray( masterObjects );
79                  detail.setSelectionIndexes( master.selectionIndexes() );
80              }
81              else // if selection changed, sync selection with master
82              if ( master.selectionChanged() )
83              {
84                  detail.setSelectionIndexes( master.selectionIndexes() );
85              }
86          }
87          else // no bound display group, clear
88          {
89              detail.setObjectArray( null );
90          }
91      }
92  }
93  /*
94   * $Log$
95   * Revision 1.1  2006/02/16 13:22:22  cgruber
96   * Check in all sources in eclipse-friendly maven-enabled packages.
97   *
98   * Revision 1.2  2001/07/05 22:13:28  mpowers
99   * Now only updating if master has actually changed.
100  *
101  * Revision 1.1  2001/05/29 19:57:47  mpowers
102  * Added some neglected files.
103  *
104  *
105  */
106