/*******************************************************************************
* 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.workspace;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.SplitLayoutPanel;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
/**
* Implementation of WorkBenchPartController, used with SplitLayoutPanel as container
*
* @author Evgen Vidolob
* @author Dmitry Shnurenko
*/
public class WorkBenchPartControllerImpl implements WorkBenchPartController {
public static final int DURATION = 200;
private final SplitLayoutPanel splitLayoutPanel;
private final SimplePanel widget;
@Inject
public WorkBenchPartControllerImpl(@Assisted SplitLayoutPanel splitLayoutPanel,
@Assisted SimplePanel widget) {
this.splitLayoutPanel = splitLayoutPanel;
this.widget = widget;
splitLayoutPanel.setWidgetToggleDisplayAllowed(widget, true);
splitLayoutPanel.setWidgetHidden(widget, true);
splitLayoutPanel.forceLayout();
}
/** {@inheritDoc} */
@Override
public double getSize() {
return splitLayoutPanel.getWidgetSize(widget);
}
/** {@inheritDoc} */
@Override
public void setSize(double size) {
splitLayoutPanel.setWidgetSize(widget, size);
splitLayoutPanel.animate(DURATION);
}
@Override
public void maximize() {
DockLayoutPanel.Direction direction = splitLayoutPanel.getWidgetDirection(widget);
if (DockLayoutPanel.Direction.NORTH == direction || DockLayoutPanel.Direction.SOUTH == direction) {
int maxHeight = splitLayoutPanel.getOffsetHeight() - splitLayoutPanel.getSplitterSize();
splitLayoutPanel.setWidgetSize(widget, maxHeight);
splitLayoutPanel.animate(DURATION);
} else if (DockLayoutPanel.Direction.WEST == direction || DockLayoutPanel.Direction.EAST == direction) {
int maxWidth = splitLayoutPanel.getOffsetWidth() - splitLayoutPanel.getSplitterSize();
splitLayoutPanel.setWidgetSize(widget, maxWidth);
splitLayoutPanel.animate(DURATION);
}
}
/** {@inheritDoc} */
@Override
public void setHidden(boolean hidden) {
if (!hidden) {
splitLayoutPanel.setWidgetHidden(widget, false);
}
splitLayoutPanel.setWidgetSize(widget, hidden ? 0 : getSize());
splitLayoutPanel.animate(DURATION);
}
@Override
public boolean isHidden() {
return splitLayoutPanel.getWidgetSize(widget) == 0;
}
@Override
public void setMinSize(int minSize) {
splitLayoutPanel.setWidgetMinSize(widget, minSize);
}
}