package org.ovirt.engine.ui.userportal.client.views.extended.maingrid.components; import java.util.HashMap; import java.util.Map; import org.ovirt.engine.core.compat.Event; import org.ovirt.engine.core.compat.EventArgs; import org.ovirt.engine.core.compat.IEventListener; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicommon.models.EntityModel; import org.ovirt.engine.ui.uicommon.models.userportal.UserPortalListModel; import org.ovirt.engine.ui.uicommon.models.vms.VmSnapshotListModel; import org.ovirt.engine.ui.userportal.client.binders.SubTabView; import org.ovirt.engine.ui.userportal.client.components.GridController; import org.ovirt.engine.ui.userportal.client.components.Tab; import org.ovirt.engine.ui.userportal.client.components.TabPanel; import com.google.gwt.core.client.GWT; public class MainGridItemSubTabs extends TabPanel { private Map<EntityModel,DetailTab> tabsToModels = new HashMap<EntityModel, DetailTab>(); UserPortalListModel uplm; public MainGridItemSubTabs(final UserPortalListModel uplm, final GridController gridController) { setHeight(180); hide(); this.uplm = uplm; uplm.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { PropertyChangedEventArgs pargs = (PropertyChangedEventArgs)args; if (pargs.PropertyName.equals("DetailModels")) { show(); for (final EntityModel model : uplm.getDetailModels()) { final DetailTab tab = new DetailTab(new SubTabView(model, gridController), model); addTab(tab, !model.getIsAvailable()); model.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { if (((PropertyChangedEventArgs)args).PropertyName.equals("IsAvailable")) { if (model.getIsAvailable()) showTab(tab); else hideTab(tab); } } }); } } else if (pargs.PropertyName.equals("ActiveDetailModel")) { if (!tabsToModels.get(uplm.getActiveDetailModel()).equals(getSelectedTab())) { GWT.log("Main grid active detail tab changed to " + uplm.getActiveDetailModel().getTitle() + " by UICommon"); select(tabsToModels.get(uplm.getActiveDetailModel())); } } } }); } class DetailTab extends Tab { EntityModel model; public DetailTab(SubTabView subTabView, EntityModel model) { super(); setTitle(model.getTitle()); tabsToModels.put(model, this); this.model = model; setPane(subTabView.getLayout()); } @Override public void select() { super.select(); uplm.setActiveDetailModel(model); } } }