Sto sviluppando un Editor di moduli a più pagine per modificare/creare un file XML personalizzato in Eclipse.Come implementare la funzionalità di annullamento/ripristino in Eclipse FormEditor?
La classe di implementazione è MyXMLFormEditor che estende FormEditor.
Ogni pagina di FormEditor estende FormPage (ad esempio MyXMLFormPage estende FormPage).
Tra FormEditor e il file XML effettivo sto mantenendo il modello JDOM.
Inoltre ho implementato la gestione flag sporca. Gli input dell'utente nell'editor di form vengono salvati in JDOM fino al momento in cui l'utente preme il pulsante Salva. Quando l'utente preme il pulsante salva, JDOM viene scritto/serializzato in un file XML.
In un editor con funzionalità di cui sopra mi piacerebbe implementare la funzionalità di undo/redo come segue:
- Quando editore è sporco (l'utente ha cambiato qualcosa nel form editor e non viene salvato) annullare il funzionamento dovrebbe ripristinare le modifiche nell'editor di moduli e JDOM al suo stato originale (cioè lo stato in cui l'editor era non-sporco) e l'operazione di ripetizione dovrebbe nuovamente riportare le modifiche in FormEditor così come JDOM e l'editor dovrebbe diventare sporco.
seguito è il mio frammento di codice:
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");
}
}
Qualcuno mi può fornire puntatore/campioni su come implementare undo/redo funzionalità in FormEditor? Sarebbe positivo se l'approccio utilizzasse il framework di annullamento/ripristino esistente di Eclipse PDE o workbench.
il modo in cui hai presentato la tua domanda, sembra come fare i compiti, fornire un po 'di frammento di codice che hai fatto – exexzian