Eclipse에서 사용자 정의 XML 파일을 편집/작성하기 위해 다중 페이지 양식 편집기를 개발 중입니다.Eclipse FormEditor에서 실행 취소/다시 실행 기능을 구현하는 방법은 무엇입니까?
구현 클래스는 FormEditor를 확장 한 MyXMLFormEditor입니다.
FormEditor의 각 페이지는 FormPage (즉, MyXMLFormPage가 FormPage를 확장)를 확장합니다.
FormEditor와 실제 XML 파일 사이에서 JDOM 모델을 유지 관리하고 있습니다.
또한 더티 플래그 처리를 구현했습니다. 따라서 사용자가 Save 버튼을 누를 때까지 사용자가 폼 편집기에 입력 한 내용을 JDOM에 저장합니다. 사용자가 저장 버튼을 누르면 JDOM이 XML 파일에 쓰여지고 직렬화됩니다. 편집기 (사용자가 양식 편집기로 무언가를 변경하고이 저장되지 않습니다) 더러운 경우
-
가
- 실행 취소 작업 : 위의 기능과 편집기에서
public class MyXMLFormEditor extends FormEditor {
MyXMLFormEditor(){
super();
}
@Override
protected FormToolkit createToolkit(Display display) {
// Create a toolkit that shares colors between editors.
return new FormToolkit(Activator.getDefault().getFormColors(display));
}
@Override
public void init(IEditorSite site, IEditorInput editorInput) {
setSite(site);
mSite = site;
setInput(editorInput);
try {
super.init(site, editorInput);
} catch (PartInitException e1) {
e1.printStackTrace();
}
if (!(editorInput instanceof IFileEditorInput))
try {
throw new PartInitException("Invalid Input: Must be IFileEditorInput");
} catch (PartInitException e) {
e.printStackTrace();
}
setPartName(fileName);
}
public void setUpProgFile(IEditorSite site, IEditorInput editorInput){
IFileEditorInput fileInput = ((IFileEditorInput) editorInput);
//create document builder and prepare JDom model for xml file.
}
@Override
protected void addPages() {
try {
//add 'Main' page
objMyXMLFormPage = new MyXMLFormPage (this, "FirstPage","Main");
//set rootNode of MyXMLFormPage
objMyXMLFormPage.rootNode = getRootNode();
objMyXMLFormPage.filePath = filePath;
objMyXMLFormPage.document = document;
addPage(objMyXMLFormPage);
} catch (PartInitException e) {
e.printStackTrace();
}
}
@Override
public void doSave(IProgressMonitor monitor) {
System.out.println("MyXMLFormEditor: doSave");
//logic to write jdom contents into xml file.
objMyXMLFormPage.setDirty(false);
}
@Override
public void doSaveAs() {
System.out.println("MyXMLFormEditor: doSaveAs");
}
@Override
public boolean isSaveAsAllowed() {
System.out.println("MyXMLFormEditor: isSaveAsAllowed");
return true;
}
}
MyXMLFormPage의 된 .java가
public class MyXMLFormPage extends FormPage{
//private members declaration.
public MyXMLFormPage (MyXMLFormEditor editor,String title, String id) {
// initialize the editor and set its title and name.
super(editor,title,id);
}
@Override
public void createFormContent(IManagedForm managedForm) {
// Set page title
super.createFormContent(managedForm);
FormToolkit mMyXMLFormPage Toolkit = managedForm.getToolkit();
//Logic to creat UI and populating its contents from JDom
}
private void makeEditorDirty() {
updateJdom = true;
setDirty(true);
}
private void updateJDom() {
if(updateJdom){
System.out.println("*** Jdom updated ***");
updateJdom = false;
}
}
@Override
public boolean isDirty() {
return isDirtyFlag;
}
protected void setDirty(boolean value) {
isDirtyFlag = value;
dirtyStateChanged();
}
public void dirtyStateChanged() {
getEditor().editorDirtyStateChanged();
}
@Override
public boolean isSaveAsAllowed() {
System.out.println("MyXMLFormPage .isSaveAsAllowed");
return false;
}
@Override
public void doSave(IProgressMonitor monitor) {
System.out.println("MyXMLFormPage .doSave");
}
}
사람이 나에게 포인터를 제공 할 수/취소를 구현하는 방법에 대한 샘플/다시
MyXMLFormEditor.java : 다음
내 코드입니다 기능을 FormEditor에 추가 할 수 있습니까? 접근법이 Eclipse PDE 또는 Workbench의 기존 실행 취소/다시 실행 프레임 워크를 사용하면 좋을 것입니다.
질문을 제출 한 방식, 숙제와 같음, 수행 한 코드 스 니펫을 조금만 제공하십시오. – exexzian