Tôi đang phát triển Trình chỉnh sửa biểu mẫu nhiều trang để chỉnh sửa/tạo tệp XML tùy chỉnh trong Eclipse.Làm thế nào để thực hiện chức năng hoàn tác/làm lại trong Eclipse FormEditor?
Lớp triển khai là MyXMLFormEditor mở rộng FormEditor.
Mỗi trang của FormEditor mở rộng FormPage (tức là MyXMLFormPage mở rộng FormPage).
Giữa FormEditor và tệp XML thực tế Tôi đang duy trì mô hình JDOM.
Ngoài ra, tôi đã thực hiện xử lý cờ bẩn. Vì vậy, đầu vào của người dùng vào trình chỉnh sửa biểu mẫu được lưu vào JDOM cho đến khi người dùng nhấn nút Lưu. Khi người dùng nhấn nút lưu, JDOM được viết/tuần tự hóa thành tệp XML.
Trong một biên tập viên với các chức năng trên, chúng tôi muốn thực hiện chức năng undo/redo như sau:
- Khi biên tập viên là bẩn (người dùng thay đổi một cái gì đó vào trình soạn thảo dạng và nó không được lưu) lùi lại hoạt động nên khôi phục lại các thay đổi trong trình soạn thảo biểu mẫu cũng như JDOM về trạng thái ban đầu của nó (tức là trạng thái khi trình chỉnh sửa không bẩn) và làm lại thao tác một lần nữa sẽ mang lại các thay đổi vào FormEditor cũng như JDOM và trình soạn thảo.
Sau đây là đoạn mã của tôi:
MyXMLFormEditor.java
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");
}
}
bất cứ ai có thể cung cấp cho tôi con trỏ/mẫu về cách thực hiện undo/redo chức năng vào FormEditor? Sẽ tốt nếu cách tiếp cận này sử dụng khung công tác hoàn tác/làm lại hiện tại của Eclipse PDE hoặc bàn làm việc.
cách bạn đã trình bày câu hỏi của mình, có vẻ như bài tập về nhà, cung cấp ít đoạn mã mà bạn đã thực hiện – exexzian