/*
* SnippetType.java
*
* Copyright (C) 2009-15 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.snippets.ui;
import org.rstudio.core.client.theme.res.ThemeResources;
import org.rstudio.studio.client.common.filetypes.TextFileType;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
public class EditableSnippets extends Composite
{
public EditableSnippets(TextFileType fileType)
{
this(fileType.getLabel(), fileType);
}
public EditableSnippets(String name, TextFileType fileType)
{
fileType_ = fileType;
HorizontalPanel panel = new HorizontalPanel();
Image icon = new Image(fileType.getDefaultIcon());
icon.getElement().getStyle().setMarginRight(2, Unit.PX);
panel.add(icon);
Label label = new Label(name);
label.addStyleName(ThemeResources.INSTANCE.themeStyles().handCursor());
label.getElement().getStyle().setMarginLeft(5, Unit.PX);
panel.add(label);
initWidget(panel);
}
public String getEditorMode()
{
return fileType_.getEditorLanguage().getModeName();
}
public String getFileTypeLabel()
{
return fileType_.getLabel();
}
public String getSnippetText()
{
// if we haven't yet been edited then get the default snippet text
if (pendingEdits_ != null)
{
return pendingEdits_;
}
else
{
return getSnippetText(getEditorMode());
}
}
public void recordPendingEdits(String pendingEdits)
{
pendingEdits_ = pendingEdits;
}
public void setScrollPosition(int scrollPosition)
{
scrollPosition_ = scrollPosition;
}
public int getScrollPosition()
{
return scrollPosition_;
}
public String getPendingEdits()
{
return pendingEdits_;
}
private static native String getSnippetText(String mode) /*-{
// Try to get RStudio custom snippets first; if that fails,
// then get Ace snippets.
var rsSnippetId = "rstudio/snippets/" + mode;
var snippets = $wnd.require(rsSnippetId);
if (snippets && snippets.snippetText)
return snippets.snippetText;
// Fall back to Ace snippets
var snippetId = "ace/snippets/" + mode;
var snippets = $wnd.require(snippetId);
if (snippets && snippets.snippetText)
return snippets.snippetText;
return "";
}-*/;
private final TextFileType fileType_;
private String pendingEdits_ = null;
private int scrollPosition_ = 0;
}