/*******************************************************************************
* 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.editor.texteditor.infopanel;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.inject.Inject;
import org.eclipse.che.ide.api.editor.text.TextPosition;
import java.util.HashMap;
import java.util.Map;
/**
* The presenter for the editor info panel.<br>
* Info panel shows the following things: cursor position, number of lines, tab settings and file type.
*
* @author "Mickaël Leduque"
* @author Vitaliy Guliy
*/
public class InfoPanel extends Composite {
/**
* A set with file type descriptions.
*/
private static Map<String, String> fileTypes = new HashMap<String, String>();
static {
fileTypes.put("application/xml", "XML");
fileTypes.put("text/html", "HTML");
fileTypes.put("application/x-jsp", "JSP");
fileTypes.put("application/javascript", "JavaScript");
fileTypes.put("text/css", "CSS");
fileTypes.put("text/x-java-source", "Java");
fileTypes.put("text/x-less", "Less");
}
/**
* UI binder interface for this component.
*
* @author "Mickaël Leduque"
*/
interface InfoPanelUiBinder extends UiBinder<FlowPanel, InfoPanel> {
}
/** The UI binder instance. */
private static final InfoPanelUiBinder UIBINDER = GWT.create(InfoPanelUiBinder.class);
@UiField
HTMLPanel cursorPosition;
@UiField
HTMLPanel fileType;
@UiField
HTMLPanel encoding;
@Inject
public InfoPanel() {
initWidget(UIBINDER.createAndBindUi(this));
}
/**
* Creates an initial state, before actual data is available.
*
* @param fileContentDescription the file type
* @param numberOfLines the file number of lines
* @param tabSize the space-equivalent width of a tabulation character
*/
public void createDefaultState(final String fileContentDescription, final int numberOfLines, final int tabSize) {
setFileType(fileContentDescription);
}
/**
* Update the line and char display to show a position in the text.
* @param position the position in the text
*/
public void updateCursorPosition(final TextPosition position) {
if (position != null) {
cursorPosition.getElement().setInnerText("" + (position.getLine() + 1) + ":" + (position.getCharacter() + 1));
} else {
cursorPosition.getElement().setInnerText("");
}
}
/**
* Changes the displayed value of the file type.
*
* @param type the new value
*/
private void setFileType(final String type) {
String displayName = fileTypes.get(type);
if (displayName != null) {
fileType.getElement().setInnerHTML(displayName);
} else {
fileType.getElement().setInnerHTML(type);
}
}
}