/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2001 Intersect Software Corporation This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.ui; import net.wotonomy.foundation.NSArray; /** * This master detail association synchronizes the contents * and selection of the master group into the detail group. */ public class MirrorDetailAssociation extends MasterDetailAssociation{ /** * Standard constructor specifying the detail display group. * @param displayGroup the detail display group of this * Master-Detail Association */ public MirrorDetailAssociation(EODisplayGroup displayGroup){ super(displayGroup); } /** * Called by subjectChanged() to requalify the controlled * display group with the indexed object and the bound key. * This implementation ignores both and sets the object array * of the detail group to the displayed objects of the master * and sets the selection to match. */ protected void requalify() { EODisplayGroup detail = (EODisplayGroup) object(); EODisplayGroup master = displayGroupForAspect( ParentAspect ); if ( master != null ) { NSArray masterObjects = master.displayedObjects(); NSArray detailObjects = detail.displayedObjects(); int size = masterObjects.size(); boolean different = false; // see if lists contain the same object instances if ( size == detailObjects.size() ) { for ( int i = 0; i < size; i++ ) { if ( masterObjects.objectAtIndex(i) != detailObjects.objectAtIndex(i) ) { different = true; break; } } } else // different sizes { different = true; } // if different, sync contents and selection with master if ( different ) { detail.setObjectArray( masterObjects ); detail.setSelectionIndexes( master.selectionIndexes() ); } else // if selection changed, sync selection with master if ( master.selectionChanged() ) { detail.setSelectionIndexes( master.selectionIndexes() ); } } else // no bound display group, clear { detail.setObjectArray( null ); } } } /* * $Log$ * Revision 1.1 2006/02/16 13:22:22 cgruber * Check in all sources in eclipse-friendly maven-enabled packages. * * Revision 1.2 2001/07/05 22:13:28 mpowers * Now only updating if master has actually changed. * * Revision 1.1 2001/05/29 19:57:47 mpowers * Added some neglected files. * * */