/** * Copyright (c) 2012-2013 MATSUFUJI Hideharu <matsufuji2008@gmail.com>, * All rights reserved. * * This file is part of MakeGood. * * This program and the accompanying materials are made available under * the terms of the Eclipse Public License v1.0 which accompanies this * distribution, and is available at http://www.eclipse.org/legal/epl-v10.html */ package com.piece_framework.makegood.ui.views; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.dltk.core.ElementChangedEvent; import org.eclipse.dltk.core.IElementChangedListener; import org.eclipse.swt.custom.CaretEvent; import org.eclipse.swt.custom.CaretListener; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.progress.UIJob; import com.piece_framework.makegood.ui.ActiveEditor; import com.piece_framework.makegood.ui.MakeGoodContext; import com.piece_framework.makegood.ui.MakeGoodStatus; import com.piece_framework.makegood.ui.MakeGoodStatusChangeListener; /** * @since 2.3.0 */ public class TestOutlineViewController implements IPartListener2, MakeGoodStatusChangeListener, IElementChangedListener, CaretListener { private int currentEditorCode = 0; @Override public void partActivated(IWorkbenchPartReference partRef) { if (partRef.hashCode() == currentEditorCode) return; currentEditorCode = partRef.hashCode(); if (!(partRef.getPart(false) instanceof IEditorPart)) return; updateTestOutline(); ActiveEditor activeEditor = MakeGoodContext.getInstance().getActiveEditor(); if (!activeEditor.isPHP()) return; StyledText text = (StyledText) activeEditor.get().getAdapter(Control.class); text.addCaretListener(this); } @Override public void partBroughtToTop(IWorkbenchPartReference partRef) { } @Override public void partClosed(IWorkbenchPartReference partRef) { } @Override public void partDeactivated(IWorkbenchPartReference partRef) { } @Override public void partOpened(IWorkbenchPartReference partRef) { } @Override public void partHidden(IWorkbenchPartReference partRef) { } @Override public void partVisible(IWorkbenchPartReference partRef) { } @Override public void partInputChanged(IWorkbenchPartReference partRef) { } @Override public void elementChanged(ElementChangedEvent event) { updateTestOutline(); } @Override public void statusChanged(MakeGoodStatus status) { TestOutlineView view = (TestOutlineView) ViewOpener.find(TestOutlineView.ID); if (view != null) view.refresh(); } @Override public void caretMoved(CaretEvent event) { TestOutlineView view = (TestOutlineView) ViewOpener.find(TestOutlineView.ID); if (view != null) view.selectCurrentElement(); } private void updateTestOutline() { Job job = new UIJob("MakeGood Test Outline View Updated") { //$NON-NLS-1$ @Override public IStatus runInUIThread(IProgressMonitor monitor) { TestOutlineView view = (TestOutlineView) ViewOpener.find(TestOutlineView.ID); if (view != null) { view.updateTestOutline(); } return Status.OK_STATUS; } }; job.schedule(); } }