blob: 3e76ded70a14e5501e825b9afa5eed466fac2948 [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.util;
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
import com.intellij.openapi.options.ConfigurationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
/**
* Defines contract for a component which knows how to manage particular settings.
*
* @author Denis Zhdanov
* @since 4/28/13 12:15 AM
* @param <S> settings type
*/
public interface ExternalSystemSettingsControl<S> {
/**
* Adds current control-specific UI controls to the given canvas.
* <p/>
* <b>Note:</b> given canvas component is expected to be managed by a {@link GridBagLayout}. That is the reason on why we use
* this method instead of a method like 'JComponent getComponent()' - there is a possible case that given canvas has components
* from more than one control and we might want them to be aligned.
*
* @param canvas container to use as a holder for UI components specific to the current control
* @param indentLevel a hint on how much UI components added by the current control should be indented
*/
void fillUi(@NotNull PaintAwarePanel canvas, int indentLevel);
/**
* Asks current control to reset its state to the initial one.
*/
void reset();
/**
* @return <code>true</code> if settings exposed by the current control have been modified; <code>false</code> otherwise
*/
boolean isModified();
/**
* Asks current control to fill given settings with the current user-defined values.
*
* @param settings settings holder
*/
void apply(@NotNull S settings);
/**
* Asks current control to validate given settings with the current user-defined values.
*
* @param settings settings holder
*/
boolean validate(@NotNull S settings) throws ConfigurationException;
void disposeUIResources();
/**
* Hides/shows {@link #fillUi(PaintAwarePanel, int) components added by the current control}.
*
* @param show flag which indicates if current control' components should be visible
*/
void showUi(boolean show);
}