/** {@inheritDoc} */
 @Override
 public void onDirtyChanged() {
   for (PreferencePagePresenter p : preferences) {
     if (p.isDirty()) {
       view.enableSaveButton(true);
       return;
     }
   }
   view.enableSaveButton(false);
 }
 /** {@inheritDoc} */
 @Override
 public void onCloseClicked() {
   boolean haveUnsavedData = false;
   for (PreferencePagePresenter preference : preferences) {
     if (preference.isDirty()) {
       haveUnsavedData = true;
     }
   }
   if (haveUnsavedData) {
     dialogFactory
         .createConfirmDialog(
             "", locale.messagesPromptSaveChanges(), getConfirmCallback(), getCancelCallback())
         .show();
   } else {
     view.close();
   }
   view.enableSaveButton(false);
 }
  /** Shows preferences. */
  public void showPreferences() {
    if (preferencesMap != null) {
      view.show();
      return;
    }

    preferencesMap = new HashMap<>();
    for (PreferencePagePresenter preference : preferences) {
      Set<PreferencePagePresenter> prefsList = preferencesMap.get(preference.getCategory());
      if (prefsList == null) {
        prefsList = new HashSet<PreferencePagePresenter>();
        preferencesMap.put(preference.getCategory(), prefsList);
      }

      prefsList.add(preference);
    }
    view.setPreferences(preferencesMap);

    view.show();
    view.enableSaveButton(false);
    view.selectPreference(preferencesMap.entrySet().iterator().next().getValue().iterator().next());
  }
 /** {@inheritDoc} */
 @Override
 public void onPreferenceSelected(PreferencePagePresenter preference) {
   preference.go(view.getContentPanel());
 }