/** Shows dialog window which contains properties for project settings. */
  public void show() {
    if (!settingsMap.isEmpty()) {
      view.show();
      return;
    }

    for (SettingsPagePresenter presenter : settings) {
      String category = presenter.getCategory();

      Set<SettingsPagePresenter> settingsCategory = settingsMap.get(category);

      if (settingsCategory == null) {
        settingsCategory = new HashSet<>();
        settingsMap.put(category, settingsCategory);
      }

      settingsCategory.add(presenter);
    }

    view.setSettings(settingsMap);

    view.show();
    view.enableSaveButton(false);

    view.selectSettingGroup(settings.iterator().next());
  }
 /** {@inheritDoc} */
 @Override
 public void onDirtyChanged() {
   for (SettingsPagePresenter presenter : settings) {
     if (presenter.isDirty()) {
       view.enableSaveButton(true);
       return;
     }
   }
   view.enableSaveButton(false);
 }
  /** {@inheritDoc} */
  @Override
  public void onRefreshClicked() {
    for (SettingsPagePresenter presenter : settings) {
      presenter.revertChanges();
    }

    view.enableSaveButton(false);
  }
  /** {@inheritDoc} */
  @Override
  public void onSaveClicked() {
    for (SettingsPagePresenter preference : settings) {
      if (preference.isDirty()) {
        preference.storeChanges();
      }
    }

    view.enableSaveButton(false);
  }
  /** {@inheritDoc} */
  @Override
  public void onCloseClicked() {
    boolean haveUnsavedData = false;

    for (SettingsPagePresenter presenter : settings) {
      if (presenter.isDirty()) {
        haveUnsavedData = true;
      }
    }

    if (!haveUnsavedData) {
      view.close();

      return;
    }

    dialogFactory
        .createConfirmDialog(
            "", locale.messagesPromptSaveChanges(), getConfirmCallback(), getCancelCallback())
        .show();
  }
 /** {@inheritDoc} */
 @Override
 public void onSettingsGroupSelected(@NotNull SettingsPagePresenter settings) {
   settings.go(view.getContentPanel());
 }