/*
* CompileNotebookOptionsDialog.java
*
* Copyright (C) 2009-12 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.notebook;
import java.util.Date;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.DivElement;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
import org.rstudio.core.client.StringUtil;
import org.rstudio.core.client.widget.HelpButton;
import org.rstudio.core.client.widget.ModalDialog;
import org.rstudio.core.client.widget.OperationWithInput;
import org.rstudio.studio.client.RStudioGinjector;
import org.rstudio.studio.client.common.filetypes.FileTypeCommands;
public class CompileNotebookOptionsDialog extends ModalDialog<CompileNotebookOptions>
{
interface Binder extends UiBinder<Widget, CompileNotebookOptionsDialog>
{}
public CompileNotebookOptionsDialog(
String docId,
String defaultTitle,
String defaultAuthor,
String defaultType,
final OperationWithInput<CompileNotebookOptions> operation)
{
super("Compile Report from R Script", operation);
docId_ = docId;
RStudioGinjector.INSTANCE.injectMembers(this);
widget_ = GWT.<Binder>create(Binder.class).createAndBindUi(this);
txtTitle_.setText(defaultTitle);
txtAuthor_.setText(defaultAuthor);
if (showTypes_)
{
setType(defaultType);
typeLabelPanel_.setCellVerticalAlignment(
lblType_,
HasVerticalAlignment.ALIGN_MIDDLE);
HelpButton helpButton = HelpButton.createHelpButton("notebook_types");
typeLabelPanel_.add(helpButton);
typeLabelPanel_.setCellVerticalAlignment(
helpButton,
HasVerticalAlignment.ALIGN_MIDDLE);
divTypeSelector_.getStyle().setPaddingBottom(10, Unit.PX);
}
else
{
setType(CompileNotebookOptions.TYPE_DEFAULT);
divTypeSelector_.getStyle().setDisplay(Style.Display.NONE);
}
setOkButtonCaption("Compile");
}
@Inject
void initialize(FileTypeCommands fileTypeCommands)
{
showTypes_ = fileTypeCommands.getHTMLCapabiliites().isStitchSupported();
}
@Override
protected void onDialogShown()
{
txtTitle_.setFocus(true);
txtTitle_.selectAll();
}
@Override
protected CompileNotebookOptions collectInput()
{
return CompileNotebookOptions.create(docId_,
createPrefix(),
createSuffix(),
true,
txtTitle_.getValue().trim(),
txtAuthor_.getValue().trim(),
getType());
}
private String createPrefix()
{
StringBuilder builder = new StringBuilder();
String title = txtTitle_.getValue().trim();
if (title.length() > 0)
{
builder.append("### ")
.append(SafeHtmlUtils.htmlEscape(title))
.append("\n");
}
String author = txtAuthor_.getValue().trim();
if (author.length() > 0)
{
builder.append(SafeHtmlUtils.htmlEscape(author))
.append(" --- ");
}
builder.append("*");
builder.append(StringUtil.formatDate(new Date()));
builder.append("*");
return builder.toString();
}
private String createSuffix()
{
return "";
}
@Override
protected boolean validate(CompileNotebookOptions input)
{
return true;
}
@Override
protected Widget createMainWidget()
{
return widget_;
}
private String getType()
{
return listType_.getValue(listType_.getSelectedIndex());
}
private void setType(String type)
{
int typeIndex = 0;
for (int i=0; i<listType_.getItemCount(); i++)
{
if (type.equals(listType_.getValue(i)))
{
typeIndex = i;
break;
}
}
listType_.setSelectedIndex(typeIndex);
}
private final String docId_;
@UiField
TextBox txtTitle_;
@UiField
TextBox txtAuthor_;
@UiField
DivElement divTypeSelector_;
@UiField
HorizontalPanel typeLabelPanel_;
@UiField
Label lblType_;
@UiField
ListBox listType_;
private boolean showTypes_;
private Widget widget_;
}