changepropertiesaction.java

来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 106 行

JAVA
106
字号
package net.sf.freenote.action;

import net.sf.freenote.FreeNoteConstants;
import net.sf.freenote.model.ModelElement;
import net.sf.freenote.parts.ConnectionEditPart;
import net.sf.freenote.parts.ShapeEditPart;

import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.ui.actions.SelectionAction;
import org.eclipse.gef.ui.properties.UndoablePropertySheetEntry;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.views.properties.IPropertySource;
import org.eclipse.ui.views.properties.PropertySheetPage;
/**
 * 查看/编辑属性,修改属性不能undo
 * 属性编辑器简化处理
 * @author levin
 * @since 2008-2-9 下午09:43:17
 */
public class ChangePropertiesAction extends SelectionAction {

	public ChangePropertiesAction(IWorkbenchPart part) {
		super(part);
		setText("属性...");
		setToolTipText("查看/编辑形体的属体");
		setId(FreeNoteConstants.PROPERTY_EDITOR);
	}

	@Override
	protected boolean calculateEnabled() {
		if (getSelectedObjects().size() == 1 && (getSelectedObjects().get(0) instanceof ShapeEditPart || getSelectedObjects().get(0) instanceof ConnectionEditPart)) {
				return true;
		}
		return false;
	}

	@Override
	public void run() {
		try{
			ModelElement shape =(ModelElement) ((AbstractGraphicalEditPart) getSelectedObjects().get(0)).getModel();
			ObjectPropertyDialog opd=new ObjectPropertyDialog(getWorkbenchPart().getSite().getShell(),shape);
			opd.open();
		}catch(Exception ex){
			;
		}
	}
	/**
	 * 对象编辑器对话框
	 * @author levin
	 * @since 2008-2-9 下午09:50:42
	 */
	class ObjectPropertyDialog extends Dialog {
		//用来定制的bean
		private IPropertySource bean;
	    
		public ObjectPropertyDialog(Shell parent,IPropertySource bean) {
			super(parent);
			this.bean=bean;
		}
		
		protected Control createDialogArea(Composite parent) {
			Composite composite = (Composite) super.createDialogArea(parent);
			GridLayout gl=new GridLayout();
			gl.verticalSpacing = 8;
			composite.setLayout(gl);
			composite.setLayoutData(new GridData(GridData.FILL_BOTH));
			
			Label nameLabel=new Label(composite,SWT.NONE);
			GridData listGridData = new GridData(SWT.LEFT,SWT.TOP,true,false,1,1);
			listGridData.minimumWidth=240;
			nameLabel.setLayoutData(listGridData);

			PropertySheetPage psp = new PropertySheetPage();
			psp.createControl(composite);
			psp.setRootEntry(new UndoablePropertySheetEntry(getCommandStack()));
			GridData gridData=new GridData(GridData.FILL_BOTH);
			psp.getControl().setLayoutData(gridData);
			
			psp.selectionChanged(null,new StructuredSelection(bean));
			nameLabel.setText("类:"+bean.getClass().getName());
	        return composite;	
		}
		protected Point getInitialSize() {
			return new Point(400,320);
		}
		protected void configureShell(Shell newShell) {
			super.configureShell(newShell);
			newShell.setText("属性查看器");
		}
		protected void createButtonsForButtonBar(Composite parent) {
			createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,true);
		}
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?