/*******************************************************************************
* 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.plugin.svn.ide.common;
import org.eclipse.che.ide.api.parts.PartStackUIResources;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SimpleHtmlSanitizer;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiTemplate;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import org.eclipse.che.plugin.svn.ide.SubversionExtensionLocalizationConstants;
import org.eclipse.che.ide.ui.button.ConsoleButton;
import org.eclipse.che.ide.ui.button.ConsoleButtonFactory;
/**
* Implementation of {@link SubversionOutputConsoleView}.
*/
public class SubversionOutputConsoleViewImpl extends Composite implements SubversionOutputConsoleView {
private ActionDelegate delegate;
interface SubversionOutputConsoleViewImplUiBinder extends UiBinder<Widget, SubversionOutputConsoleViewImpl> { }
@UiField
FlowPanel buttons;
@UiField
ScrollPanel scrollPanel;
@UiField
FlowPanel consoleArea;
@Inject
public SubversionOutputConsoleViewImpl(final SubversionOutputConsoleViewImplUiBinder uiBinder,
final ConsoleButtonFactory consoleButtonFactory,
final PartStackUIResources resources,
final SubversionExtensionLocalizationConstants constants) {
initWidget(uiBinder.createAndBindUi(this));
ConsoleButton clearButton = consoleButtonFactory.createConsoleButton(constants.consoleClearButton(), resources.erase());
clearButton.setDelegate(new ConsoleButton.ActionDelegate() {
@Override
public void onButtonClicked() {delegate.onClearClicked();}
});
buttons.add(clearButton);
ConsoleButton scrollButton = consoleButtonFactory.createConsoleButton(constants.consoleScrollButton(), resources.arrowBottom());
scrollButton.setDelegate(new ConsoleButton.ActionDelegate() {
@Override
public void onButtonClicked() {delegate.onScrollClicked();}
});
buttons.add(scrollButton);
}
/**
* Sets the delegate to receive events from this view.
*
* @param delegate
*/
@Override
public void setDelegate(ActionDelegate delegate) {
this.delegate = delegate;
}
@Override
public void print(String text) {
String preStyle = " style='margin:0px; font-size: 12px;' ";
HTML html = new HTML();
html.setHTML("<pre" + preStyle + ">" + SimpleHtmlSanitizer.sanitizeHtml(text).asString() + "</pre>");
html.getElement().setAttribute("style", "padding-left: 2px;");
consoleArea.add(html);
}
@Override
public void print(String text, String color) {
String preStyle = " style='margin:0px; font-size: 12px;' ";
HTML html = new HTML();
html.setHTML("<pre" + preStyle + "><span style='color:" + SimpleHtmlSanitizer.sanitizeHtml(color).asString() +
";'>" + SimpleHtmlSanitizer.sanitizeHtml(text).asString() + "</span></pre>");
html.getElement().setAttribute("style", "padding-left: 2px;");
consoleArea.add(html);
}
/**
* Print text with a given style in view.
*
* @param text
* The text to display
* @param style
*/
@Override
public void printPredefinedStyle(String text, String style) {
String preStyle = " style='margin:0px; font-size: 12px;' ";
HTML html = new HTML();
html.setHTML("<pre" + preStyle + "><span style='" + SimpleHtmlSanitizer.sanitizeHtml(style).asString() + "'>" +
SimpleHtmlSanitizer.sanitizeHtml(text).asString() + "</span></pre>");
html.getElement().setAttribute("style", "padding-left: 2px;");
consoleArea.add(html);
}
@Override
public void clear() {
consoleArea.clear();
}
@Override
public void scrollBottom() {
scrollPanel.getElement().setScrollTop(scrollPanel.getElement().getScrollHeight());
}
}