J'ai une solution de contournement qui fonctionne avec org.eclipse.ui.part.MultiPageEditorPart qui est soutenu par un CTabFolder. Je vais l'adapter pour une implémentation directe de CTabFolder.
hors d'abord utiliser la sélection auditeur:
tabFolder.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
pageChange(tabFolder.indexOf((CTabItem) e.item));
}
});
Ensuite, je mets en œuvre pageChange() comme ceci:
protected void pageChange(int newPageIndex) {
boolean changingPages = this.changingPages;
this.changingPages = true;
int oldPageIndex = tabFolder.getSelectionIndex();
if (isDirty() && !changingPages) {
tabFolder.setSelection(oldPageIndex);
if (canChangePages()) {
tabFolder.setSelection(newPageIndex);
}
}
this.changingPages = false;
}
Dans canChangePages() je pop un ne vous voulez enregistrer le dialogue et donner l'utilisateur a la possibilité de sélectionner oui, non ou annuler. Oui enregistre l'information et renvoie true. Non rétablit l'état au dernier état enregistré et renvoie true. Annuler retourne simplement faux. Vous pouvez simplement essayer d'enregistrer et renvoyer false uniquement si l'enregistrement échoue.
Il peut sembler étrange que je repasse à l'ancienne page avant d'appeler canChangePages(). Cet appel s'exécute rapidement, ce qui donne l'illusion que l'onglet n'est jamais commuté. Peu importe combien de temps canChangePages() prendra, l'utilisateur ne verra pas de changement de tabulation à moins d'être approuvé par cette méthode.
Je suis venu avec la même solution de contournement pour CTabFolders et arbres :) Je m'attendais à quelques scintillements, mais je n'en ai vu aucun. Et heureusement assez CTabFolder déclenche effectivement un événement avant de fermer un onglet :) –
À partir de 2015, '' tabFolder.getSelectionIndex() '' retournera toujours la même valeur que '' tabFolder.indexOf ((CTabItem) e.item) ' '. Donc, '' newPageIndex'' sera toujours égal à '' oldPageIndex'' dans le '' SelectionListener''. Si quelqu'un a des difficultés avec cela, maintenez l'ancien index de page pour vous-même pour surmonter ce problème. – user1438038