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'가 아닌지 테스트해야합니다. 당신은 여전히 부동산 테스터 코드가 실제로 테스트하고있는 것을 말하지 않았습니다. –