2017-05-11 6 views
0

Quelle est la méthode standard et recommandée pour appliquer le bouton Appliquer et OK dans la page de préférences Eclipse.Bouton Appliquer et OK dans Eclipse PreferencePage

J'ai vérifié et trouvé que la méthode performOK() est appelée lorsque nous cliquons sur le bouton apply ou ok. Cela signifie que si j'ai des calculs ou laissons le fil commencer dans performOK() et que l'utilisateur clique d'abord sur apply puis sur ok, il sera exécuté deux fois et si l'utilisateur clique sur apply et annule les changements seront appliqués de toute façon?

Existe-t-il un moyen de ne pas exécuter le code deux fois si l'utilisateur clique sur appliquer, puis OK?

@Override 
protected void performApply() { 
    this.performOk(); 
} 

@Override 
public boolean performOk() { 
    PreferencesUtil.savePreferences(); 
    return super.performOk(); 
} 

Merci

Répondre

0

Il vous appartient de se rappeler que Apply a été géré par performApply impérieuses et mettre un drapeau. Vous pouvez ensuite tester le drapeau dans performOk et sauter faire la même chose.

Veillez à effacer le drapeau si l'utilisateur modifie quelque chose après avoir appuyé sur Appliquer.

donc quelque chose comme:

private boolean saveDone = false; 


public boolean performOk() { 

    if (!saveDone) { 
    saveDone = true; 

    store.setValue(Constants.ENABLE_DEFAULT_COLOR, this.defaultColoringCheckBox.getSelection()); 
    PreferencesUtil.addToPreferenceStore(viewer.getTable()); 
    PreferencesUtil.savePreferences(); 
    } 

    return super.performOk(); 
} 

Set saveDone = false si quelque chose est changé dans la page.

+0

Dois-je écrire ma mise en œuvre dans performApply ou effectOK? – wearybands

+0

performApply appelle normalement simplement performOk. –

+0

vérifier mon edit dans la question – wearybands

0

Je pense qu'il serait logique d'extraire la fonctionnalité à exécuter pendant que l'utilisateur souhaite appliquer les changements dans une méthode séparée. Cette méthode est appelée depuis apply AND ok. Je n'appellerais pas "performOK" depuis "performApply". Dans performOk, la fermeture supplémentaire du dialogue des préférences est ensuite effectuée par la super méthode, je suppose.