/******************************************************************************* * 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 com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.IsWidget; import org.eclipse.che.commons.annotation.Nullable; import org.eclipse.che.ide.api.mvp.Presenter; import org.eclipse.che.ide.api.selection.Selection; import org.vectomatic.dom.svg.ui.SVGResource; import javax.validation.constraints.NotNull; import java.util.List; /** * Part is a main UI block of the IDE. * * @author Nikolay Zamosenchuk * @author Stéphane Daviet */ public interface PartPresenter extends Presenter { /** The property id for <code>getTitle</code>, <code>getTitleImage</code> and <code>getTitleToolTip</code>. */ int TITLE_PROPERTY = 0x001; /** The property id for <code>getSelection</code>. */ int SELECTION_PROPERTY = 0x002; /** Store part state before changing perspective. */ void storeState(); /** Restore part state after changing perspective. */ void restoreState(); /** @return Title of the Part */ @NotNull String getTitle(); void addRule(@NotNull String perspectiveId); List<String> getRules(); IsWidget getView(); /** * Returns corresponding part stack. * * @return */ PartStack getPartStack(); /** * Returns the title SVG image resource of this part. If this value changes the part must fire a property listener event with * <code>PROP_TITLE</code>. * <p> * The title image is usually used to populate the title bar of this part's visual container. * * @return the title SVG image resource */ @Nullable SVGResource getTitleImage(); /** * Returns count of unread notifications. * Is used to display a badge on part button. * * @return count of unread notifications */ int getUnreadNotificationsCount(); /** * Returns the title tool tip text of this part. * An empty string result indicates no tool tip. * If this value changes the part must fire a property listener event with <code>PROP_TITLE</code>. * <p> * The tool tip text is used to populate the title bar of this part's visual container. * </p> * * @return the part title tool tip (not <code>null</code>) */ @Nullable String getTitleToolTip(); /** * Return size of part. If current part is vertical panel then size is height. If current part is horizontal panel then size is width. * * @return size of part */ int getSize(); /** * This method is called when Part is opened. * Note: this method is NOT called when part gets focused. It is called when new tab in PartStack created. */ void onOpen(); /** * This method is called when part is going to be closed. Part itself can deny blocking, by calling onFailure() on callback, i.e. when * document is * being edited and accidentally close button pressed. * * @param callback */ void onClose(@NotNull AsyncCallback<Void> callback); /** * Adds a listener for changes to properties of this part. Has no effect if an identical listener is already registered. * * @param listener * a property listener */ void addPropertyListener(@NotNull PropertyListener listener); /** @return The {@link org.eclipse.che.ide.api.selection.Selection} of this Part. */ @NotNull Selection<?> getSelection(); /** * Removes the given property listener from this part. Has no effect if an identical listener is not registered. * * @param listener * a property listener */ void removePropertyListener(@NotNull PropertyListener listener); }