blob: 2bcfde8898629d39ff5591af172e6ebbb5c8ad36 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.openapi.externalSystem.service.settings;
import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings;
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
import com.intellij.openapi.externalSystem.util.ExternalSystemSettingsControl;
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil;
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
import com.intellij.ui.components.JBCheckBox;
import org.jetbrains.annotations.NotNull;
/**
* Templates class for managing single external project settings (single ide project might contain multiple bindings to external
* projects, e.g. one module is backed by a single external project and couple of others are backed by a single external multi-project).
*
* @author Denis Zhdanov
* @since 4/24/13 1:19 PM
*/
public abstract class AbstractExternalProjectSettingsControl<S extends ExternalProjectSettings>
implements ExternalSystemSettingsControl<S>
{
@NotNull private S myInitialSettings;
private JBCheckBox myUseAutoImportBox;
private JBCheckBox myCreateEmptyContentRootDirectoriesBox;
private boolean myHideUseAutoImportBox;
protected AbstractExternalProjectSettingsControl(@NotNull S initialSettings) {
myInitialSettings = initialSettings;
}
@NotNull
public S getInitialSettings() {
return myInitialSettings;
}
public void hideUseAutoImportBox() {
myHideUseAutoImportBox = true;
}
@Override
public void fillUi(@NotNull PaintAwarePanel canvas, int indentLevel) {
myUseAutoImportBox = new JBCheckBox(ExternalSystemBundle.message("settings.label.use.auto.import"));
myUseAutoImportBox.setVisible(!myHideUseAutoImportBox);
canvas.add(myUseAutoImportBox, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
myCreateEmptyContentRootDirectoriesBox =
new JBCheckBox(ExternalSystemBundle.message("settings.label.create.empty.content.root.directories"));
canvas.add(myCreateEmptyContentRootDirectoriesBox, ExternalSystemUiUtil.getFillLineConstraints(indentLevel));
fillExtraControls(canvas, indentLevel);
}
protected abstract void fillExtraControls(@NotNull PaintAwarePanel content, int indentLevel);
public boolean isModified() {
return myUseAutoImportBox.isSelected() != getInitialSettings().isUseAutoImport()
|| myCreateEmptyContentRootDirectoriesBox.isSelected() != getInitialSettings().isCreateEmptyContentRootDirectories()
|| isExtraSettingModified();
}
protected abstract boolean isExtraSettingModified();
public void reset() {
reset(false);
}
public void reset(boolean isDefaultModuleCreation) {
myUseAutoImportBox.setSelected(getInitialSettings().isUseAutoImport());
myCreateEmptyContentRootDirectoriesBox.setSelected(getInitialSettings().isCreateEmptyContentRootDirectories());
resetExtraSettings(isDefaultModuleCreation);
}
protected abstract void resetExtraSettings(boolean isDefaultModuleCreation);
@Override
public void apply(@NotNull S settings) {
settings.setUseAutoImport(myUseAutoImportBox.isSelected());
settings.setCreateEmptyContentRootDirectories(myCreateEmptyContentRootDirectoriesBox.isSelected());
if (myInitialSettings.getExternalProjectPath() != null) {
settings.setExternalProjectPath(myInitialSettings.getExternalProjectPath());
}
applyExtraSettings(settings);
}
protected abstract void applyExtraSettings(@NotNull S settings);
public void disposeUIResources() {
ExternalSystemUiUtil.disposeUi(this);
}
@Override
public void showUi(boolean show) {
ExternalSystemUiUtil.showUi(this, show);
}
public void updateInitialSettings() {
myInitialSettings.setUseAutoImport(myUseAutoImportBox.isSelected());
myInitialSettings.setCreateEmptyContentRootDirectories(myCreateEmptyContentRootDirectoriesBox.isSelected());
updateInitialExtraSettings();
}
protected void updateInitialExtraSettings(){}
}