/******************************************************************************* * Copyright (c) 2012-2017 Codenvy, S.A. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.ide.api.parts; import org.eclipse.che.ide.api.constraints.Constraints; import org.eclipse.che.ide.api.mvp.Presenter; import javax.validation.constraints.NotNull; import java.util.List; /** * Part Stack is tabbed layout element, containing Parts. * * @author Nikolay Zamosenchuk * @author Vitaliy Guliy */ public interface PartStack extends Presenter { /** * State of the part stack. */ enum State { /** * The default state when the part stack is visible. * Part stack can be minimized, maximized or collapsed. */ NORMAL, /** * Part stack is minimized by minimize button. * Having this state part stack can not be maximized or collapsed but * only can be restored by clicking the tab button. */ MINIMIZED, /** * Part stack is maximized. In this state it can be restored or minimized. */ MAXIMIZED, /** * Part stack is collapsed while one is maximized. * The state will be changed on NORMAL after restoring the perspective. */ COLLAPSED } /** * Change the focused state of the PartStack to desired value * * @param focused */ void setFocus(boolean focused); /** * Add part to the PartStack. To immediately show part, you must call <code>setActivePart()</code>. * * @param part */ void addPart(PartPresenter part); /** * Add part to the PartStack with position constraint. * * @param part * @param constraint */ void addPart(PartPresenter part, Constraints constraint); /** * Ask if PartStack contains given Part. * * @param part * @return */ boolean containsPart(PartPresenter part); /** * Get active Part. Active is the part that is currently displayed on the screen * * @return */ PartPresenter getActivePart(); /** * Activate given part (force show it on the screen). If part wasn't previously added * to the PartStack or has been removed, that method has no effect. * * @param part */ void setActivePart(@NotNull PartPresenter part); /** * Returns the state of the perspective. * * @return * perspective state */ State getPartStackState(); /** * Maximizes the part stack. */ void maximize(); /** * Collapses the part stack. * The part state will be restored when restoring the perspective. */ void collapse(); /** * Minimizes / hides the part stack. * The part state will not be retored when restoring the perspective state. */ void minimize(); /** * Restores the part stack and the perspective to the default state. */ void restore(); /** * Displays part menu. */ void showPartMenu(int mouseX, int mouseY); /** * Remove given part from PartStack. * * @param part */ void removePart(PartPresenter part); void openPreviousActivePart(); /** * Update part stack reference */ void updateStack(); /** * Get all parts, opened in this stack. * * @return the parts list */ List<? extends PartPresenter> getParts(); void setDelegate(ActionDelegate delegate); interface ActionDelegate { /** * Requests the delegate to maximize the part stack. * * @param partStack * part stack */ void onMaximize(PartStack partStack); /** * Requests the delegate to restore part stack state. * * @param partStack * part stack */ void onRestore(PartStack partStack); } }