package com.exanimo.gallery { import com.exanimo.gallery.*; /** * * .. * * @langversion ActionScript 3 * @playerversion Flash 9.0.0 * * @author Eric Eldredge * @author Rich Perez * @author Matthew Tretter * @since 2009.01.12 * */ public class MultiGalleryController extends GalleryController implements IMultiGalleryController { private var _dataProviders:Object; public function MultiGalleryController(...dataProviders:Array) { this._init(dataProviders); } /** * @inheritDoc */ private function _init(dataProviders:Array):void { this._dataProviders = {}; for each (var dp:GalleryDataProvider in dataProviders) { this.addDataProvider(dp); } } /** * @inheritDoc */ public function addDataProvider(dp:GalleryDataProvider):void { if (dp.name == null) { throw new ArgumentError("DataProvider has no name."); } this.removeDataProvider(dp); this._dataProviders[dp.name] = dp; } /** * @inheritDoc */ public function removeDataProvider(dp:GalleryDataProvider):void { if (dp == null) { throw new ArgumentError("null value"); } var name:String = dp.name; if (name != null) { delete this._dataProviders[name]; } if (dp.equals(this.dataProvider)) { this.dataProvider = null; } } override public function selectItemAt(index:uint):void { if (!this.dataProvider) { throw new Error('You must select a group before selecting an item.'); } super.selectItemAt(index); } /** * @inheritDoc */ public function selectGroupByName(name:String):void { var dp:GalleryDataProvider = this._dataProviders[name]; if (dp == null) { throw new ArgumentError("no such name"); } var oldDataProvider:GalleryDataProvider = this.dataProvider; super.dataProvider = dp; if (((dp != null) && !dp.equals(oldDataProvider)) || ((dp == null) && (oldDataProvider != null))) { this.dispatchEvent(new GalleryEvent(GalleryEvent.SELECTED_GROUP_CHANGE)); } } public function get selectedGroupName():String { return this.dataProvider ? this.dataProvider.name : null; } override public function set dataProvider(dp:GalleryDataProvider):void { if (dataProvider != null) { this.addDataProvider(dp); this.selectGroupByName(dp.name); } else { super.dataProvider = null; } } /** * @inheritDoc */ public function bindSelectedGroup(gallery:IMultiGalleryController):void { gallery.addEventListener(GalleryEvent.SELECTED_GROUP_CHANGE, this._selectedGroupChange, false, 0, true); } /** * @inheritDoc */ public function unbindSelectedGroup(gallery:IMultiGalleryController):void { gallery.removeEventListener(GalleryEvent.SELECTED_GROUP_CHANGE, this._selectedGroupChange); } private function _selectedGroupChange(e:GalleryEvent):void { this.selectGroupByName(e.currentTarget.selectedGroupName); } } }