blob: 2846c5486ab15ce3b0c42b5131a59392ec562992 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 Ericsson AB and others.
*
* All rights reserved. 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
*
* Description:
*
* This class defines the base class for the tabbed proprties for all UI elements
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.internal.properties.tabbed;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.properties.general.ModelElementProperties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.internal.forms.widgets.FormUtil;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection;
/**
* @author Sebastien Dubois
* @version $Revision: 1.0 $
*/
public class ModelElementTabPropertySection extends AbstractPropertySection implements IPropertyListener {
// ------------------------------------------------------------------------
// Member variables
// ------------------------------------------------------------------------
/**
* Field fReviewProps.
*/
protected ModelElementProperties fProperties;
/**
* Field fRefreshInProgress.
*/
protected boolean fRefreshInProgress = false;
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Method setInput.
*
* @param part
* IWorkbenchPart
* @param aSelection
* ISelection
* @see org.eclipse.ui.views.properties.tabbed.ISection#setInput(IWorkbenchPart, ISelection)
*/
@Override
public void setInput(IWorkbenchPart part, ISelection aSelection) {
//Get current selection.
if (null == aSelection || aSelection.isEmpty()) {
return;
}
//Get model element selected
final IR4EUIModelElement element = (IR4EUIModelElement) ((StructuredSelection) aSelection).getFirstElement();
if (null != element) {
fProperties = (ModelElementProperties) ((R4EUIModelElement) element).getAdapter(IPropertySource.class);
refresh();
}
}
/**
* Method propertyChanged.
*
* @param source
* Object
* @param propId
* int
* @see org.eclipse.ui.IPropertyListener#propertyChanged(Object, int)
*/
public void propertyChanged(Object source, int propId) {
refresh();
}
/**
* Method refresh.
*
* @see org.eclipse.ui.views.properties.tabbed.ISection#refresh()
*/
@Override
public void refresh() {
//default implementation
fRefreshInProgress = true;
setEnabledFields();
fRefreshInProgress = false;
}
/**
* Method setEnabledFields.
*/
protected void setEnabledFields() { // $codepro.audit.disable emptyMethod
//default implementation
}
/**
* Method scroll.
*
* @param aComp
* ScrolledComposite
* @param aXOffset
* int
* @param aYOffset
* int
*/
public static void scroll(ScrolledComposite aComp, int aXOffset, int aYOffset) {
final Point origin = aComp.getOrigin();
final Point contentSize = aComp.getContent().getSize();
int xorigin = origin.x + aXOffset;
int yorigin = origin.y + aYOffset;
xorigin = Math.max(xorigin, 0);
xorigin = Math.min(xorigin, contentSize.x - 1);
yorigin = Math.max(yorigin, 0);
yorigin = Math.min(yorigin, contentSize.y - 1);
aComp.setOrigin(xorigin, yorigin);
}
/**
* Method addScrollListener. Transfer scrolling from Combo box to the parent scrolled form
*
* @param aCombo
* CCombo
*/
public static void addScrollListener(final CCombo aCombo) {
aCombo.addListener(SWT.MouseVerticalWheel, new Listener() {
@SuppressWarnings("restriction")
public void handleEvent(Event event) {
final ScrolledComposite form = FormUtil.getScrolledComposite(aCombo);
aCombo.select(aCombo.getSelectionIndex());
if (null != form && null != form.getVerticalBar()) {
if (event.count < 0) {
// scroll form down
scroll(form, 0, form.getVerticalBar().getIncrement());
} else {
// scroll form up
scroll(form, 0, -form.getVerticalBar().getIncrement());
}
}
event.doit = false;
}
});
}
}