/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* 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 org.uberfire.client.workbench.panels;
import java.util.Collection;
import com.google.gwt.event.logical.shared.HasBeforeSelectionHandlers;
import com.google.gwt.event.logical.shared.HasSelectionHandlers;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.RequiresResize;
import org.uberfire.client.workbench.part.WorkbenchPartPresenter;
import org.uberfire.client.workbench.widgets.dnd.WorkbenchDragAndDropManager;
import org.uberfire.mvp.Command;
import org.uberfire.workbench.model.PartDefinition;
public interface MultiPartWidget extends IsWidget,
RequiresResize,
HasBeforeSelectionHandlers<PartDefinition>,
HasSelectionHandlers<PartDefinition> {
void setPresenter(final WorkbenchPanelPresenter presenter);
void setDndManager(final WorkbenchDragAndDropManager dndManager);
/**
* Removes all contained WorkbenchParts from this multi-part panel. Part Activities are not closed and part Presenters
* are not freed.
*/
void clear();
void addPart(final WorkbenchPartPresenter.View view);
void changeTitle(final PartDefinition part,
final String title,
final IsWidget titleDecoration);
/**
* Makes the given part visible if it is a direct child of this widget.
* @param part the direct child part to select. Must not be null.
* @return true if the part was found as a direct child of this widget, and it was therefore selected. False if the
* part was not found, in which case this method had no effect.
*/
boolean selectPart(final PartDefinition part);
/**
* Removes the given part from this widget. If the part was currently selected (visible) when removed, another part
* will be selected to take its place.
* @param part the part to remove. Must not be null.
* @return True if the given part was found as a direct child of this widget, in which case it has been removed.
* False if the given part was not found, in which case this method had no effect.
*/
boolean remove(final PartDefinition part);
/**
* Informs this widget that its containing panel view has gained or lost panel focus. Views within focused panels
* may respond by updating their style to look more prominent than unfocused views.
* @param hasFocus if true, the containing panel now has focus. If false, the panel does not have focus.
*/
void setFocus(final boolean hasFocus);
/**
* Registers the given Command to be called each time something happens (for example, a UI gesture or parhaps an API
* call) to make this widget believe its containing panel should be the focused panel.
* <p>
* Restated for clarity: the given command is called when this view thinks its panel should get focus. The command
* is <i>not</i> called as a side effect of calls to {@link #setFocus(boolean)}.
* @param doWhenFocused the command to call when this widget believes its panel should become focused. Typically, the given
* command will call into the PanelManager to give focus to the containing panel.
*/
void addOnFocusHandler(final Command doWhenFocused);
/**
* Returns the number of parts currently held by this widget.
*/
int getPartsSize();
/**
* Returns the parts currently held by this widget.
*/
Collection<PartDefinition> getParts();
}