// Copyright (c) 2009-2010 by the projectusus.org contributors // This software is released under the terms and conditions // of the Eclipse Public License (EPL) 1.0. // See http://www.eclipse.org/legal/epl-v10.html for details. package org.projectusus.ui.internal.hotspots; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.part.PageBook; import org.eclipse.ui.part.ViewPart; import org.projectusus.ui.internal.AnalysisDisplayEntry; import org.projectusus.ui.internal.hotspots.pages.DefaultHotspotsPage; import org.projectusus.ui.internal.hotspots.pages.HotspotsPage; import org.projectusus.ui.internal.hotspots.pages.IHotspotsPage; import org.projectusus.ui.internal.hotspots.selectionprovider.DelegatingSelectionProvider; public class HotSpotsView extends ViewPart { private PageBook book; private IHotspotsPage defaultPage; private IHotspotsPage activePage; private final Set<IHotspotsPage> pages = new HashSet<IHotspotsPage>(); private final DelegatingSelectionProvider selectionProvider = new DelegatingSelectionProvider(); public void update( AnalysisDisplayEntry entry ) { if( entry != null ) { updatePage( entry ); } } @Override public void createPartControl( Composite parent ) { getSite().setSelectionProvider( selectionProvider ); book = new PageBook( parent, SWT.NONE ); defaultPage = new DefaultHotspotsPage(); defaultPage.createControl( book ); showPage( defaultPage ); } @Override public void setFocus() { // first set focus on the page book, in case the page // doesn't properly handle setFocus if( book != null ) { book.setFocus(); } // then set focus on the page, if any if( activePage != null ) { activePage.setFocus(); } } @Override public void dispose() { activePage = null; if( defaultPage != null ) { defaultPage.dispose(); } super.dispose(); } // internal // //////// private void showPage( IHotspotsPage page ) { if( activePage == page ) { return; } activePage = page; Control pageControl = activePage.getControl(); if( pageControl != null && !pageControl.isDisposed() ) { // Verify that the page control is not disposed // If we are closing, it may have already been disposed setContentDescription( page.getDescription() ); selectionProvider.switchTo( page.getSelectionProvider() ); book.showPage( pageControl ); } } private IHotspotsPage createPage( AnalysisDisplayEntry entry ) { IHotspotsPage page = getPageFor( entry ); if( page != null && !page.isInitialized() ) { page.createControl( book ); } return page; } private IHotspotsPage getPageFor( AnalysisDisplayEntry entry ) { if( !entry.hasHotspots() ) { return null; } for( IHotspotsPage page : pages ) { if( page.matches( entry ) ) { return page; } } HotspotsPage page = new HotspotsPage( getSite(), entry ); pages.add( page ); return page; } private void updatePage( AnalysisDisplayEntry entry ) { IHotspotsPage page = createPage( entry ); if( page != null ) { page.setInput( entry ); showPage( page ); } else { showPage( defaultPage ); } } public void refreshActivePage( List<AnalysisDisplayEntry> entries ) { for( AnalysisDisplayEntry entry : entries ) { if( activePage != null ) { if( activePage.matches( entry ) ) { activePage.setInput( entry ); } } } } public void resetSort() { activePage.resetSort(); } }