/*******************************************************************************
* Copyright 2015 xWic group (http://www.xwic.de)
*
* 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 de.jwic.base;
import java.util.Iterator;
/**
* This interface defines methods required by containers.
* @author Florian Lippisch
*/
public interface IControlContainer {
/**
* Adopt a control that has already been created with a different parent. The
* control is removed from its current parent and added to this container.
* @param control
* @param name - new name of the control or <code>null</code> if the name should be assigned automatically
*/
public void adopt(Control control, String name);
/**
* Returns a Control by its name.
* @param name java.lang.String
*/
public Control getControl(String name);
/**
* Returns an Iterator for all controls in this container.
* @return Iterator of Control objects
*/
public Iterator<Control> getControls();
/**
* Returns the SessionContext.
* @return
*/
public SessionContext getSessionContext();
/**
* INTERNAL method used to registers a control with this container. This method is called automatically
* within the constructor of a control. Do not use this method directly, thought that subclasses
* may override this method to get notified if a control is registered.
* @param control the Control
*/
public void registerControl(Control control, String name);
/**
* INTERNAL method used to unregisters a control from this container. The control is removed but not
* destroyed. Do not use this method directly, thought that subclasses may override this method to
* get notified if a control is removed.
* @param control the Control
*/
public void unregisterControl(Control control);
/**
* Remove a control from the container.
*/
public void removeControl(String name);
/**
* Returns true if the control has been changed since the last rendering
* and must be rendered again to reflect the last changes.
* @return boolean
*/
public abstract boolean isRequireRedraw();
/**
* Set to true if the control needs to be rendered again to reflect the changes
* of the control since it was last rendered.
* @param requireRedraw
*/
public abstract void setRequireRedraw(boolean requireRedraw);
/**
* Returns true if the specified childControl is visible. This method is
* used by the rendering engine to determine if the specified control can
* be rendered. By default, it simply returns the childControls visible
* property. But some container implementations (like the TabStripControl)
* can override this method to prevent rendering of a child (i.e. a TabControl)
* that is visible but not 'active.
*
* @param childControl
* @return
*/
public boolean isRenderingRelevant(Control childControl);
}