1
我創建了一個帶有兩個編輯頁面的編輯器。我爲屬性測試人員添加了兩個頁面的工具欄項目。在第一頁上,屬性測試人員正常工作。但是,如果我打開編輯器,選擇第二頁並選擇樹項目,屬性測試器不起作用。請求評估產權測試人員的手冊不起作用。在第一頁上選擇另一個視圖或樹項目後,屬性測試人員也可以在第二頁上正常工作。有什麼問題?這裏用於編輯一個例子:屬性測試儀不能在第二個編輯頁面上工作
public class MyEditor extends FormEditor {
@Override
protected void addPages() {
try {
addPage(new MyPage(this));
addPage(new MyPage(this));
} catch (PartInitException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void doSave(IProgressMonitor monitor) {
// nothing to do
}
@Override
public void doSaveAs() {
// nothing to do
}
}
class MyPage extends FormPage {
private static final String TOOLBAR_URI = "toolbar:my.page";
public MyPage(final FormEditor editor) {
super(editor, MyPage.class.getName(), "Test");
}
@Override
protected void createFormContent(final IManagedForm managedForm) {
final ScrolledForm form = managedForm.getForm();
final ToolBarManager toolbarManager = (ToolBarManager) form.getToolBarManager();
final IMenuService menuService = (IMenuService) getSite().getService(IMenuService.class);
menuService.populateContributionManager(toolbarManager, TOOLBAR_URI);
final Composite body = managedForm.getForm().getBody();
body.setLayout(new GridLayout());
final TreeViewer treeViewer = new TreeViewer(body);
treeViewer.setContentProvider(new MyContentProvider());
treeViewer.setLabelProvider(new ColumnLabelProvider());
treeViewer.setInput(Arrays.asList(new String[] { "A", "B", "C" }));
getSite().setSelectionProvider(treeViewer);
}
}
class MyContentProvider implements ITreeContentProvider {
@Override
public Object[] getElements(final Object inputElement) {
return ((List<String>) inputElement).toArray();
}
@Override
public Object[] getChildren(final Object parentElement) {
return new Object[] {};
}
@Override
public Object getParent(final Object element) {
return null;
}
@Override
public boolean hasChildren(final Object element) {
return false;
}
@Override
public void dispose() {
// nothing to do
}
@Override
public void inputChanged(final Viewer viewer, final Object oldInput, final Object newInput) {
// nothing to do
}
}
處理程序:
<handler
class="EditHandler"
commandId="myEdit">
<activeWhen>
<with
variable="selection">
<test
property="my.active">
</test>
</with>
</activeWhen>
</handler>
屬性測試儀注冊:
<propertyTester
class="MyPropertyTester"
id="MyPropertyTester"
namespace="my"
properties="active"
type="java.lang.Object">
</propertyTester>
屬性測試儀:
public class MyPropertyTester extends PropertyTester {
public static final String ID = MyPropertyTester.class.getName();
public static final String ACTIVE = "active";
@Override
public boolean test(final Object receiver, final String property, final Object[] args, final Object expectedValue) {
if (receiver instanceof IStructuredSelection) {
final IStructuredSelection selection = (IStructuredSelection) receiver;
if (selection.size() == 1) {
return isMatch(property);
}
}
return false;
}
private static boolean isMatch(final String property) {
if (ACTIVE.equals(property)) {
return true;
}
return false;
}
}
你還沒有告訴我們房產測試人員正在測試什麼。 –
好的,我更新了問題 –
有了該屬性測試器定義,您應該測試'my.active'而不是'active'。你還沒有說過屬性測試器代碼實際上正在測試什麼。 –