/*
* ShowContentDialog.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.core.client.widget;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.Widget;
import org.rstudio.core.client.Size;
import org.rstudio.core.client.dom.DomMetrics;
import org.rstudio.core.client.theme.res.ThemeResources;
public class ShowContentDialog extends ModalDialogBase
{
public ShowContentDialog(String title, String content)
{
this(title, content, new Size(0,0));
}
public ShowContentDialog(String title, String content, Size preferredSize)
{
setText(title);
preferredSize_ = preferredSize;
if (content.startsWith("<html>") || content.startsWith("<!DOCTYPE "))
{
content_ = content;
styleName_ = ThemeResources.INSTANCE.themeStyles().showFile();
isFixedFont_ = false;
}
else
{
content_ = "<pre>" + content + "</pre>";
styleName_ = ThemeResources.INSTANCE.themeStyles().showFileFixed();
isFixedFont_ = true;
}
setButtonAlignment(HasHorizontalAlignment.ALIGN_CENTER);
addButtons();
}
protected void addButtons()
{
ThemedButton closeButton = new ThemedButton("Close", new ClickHandler() {
public void onClick(ClickEvent event) {
closeDialog();
}
});
addOkButton(closeButton);
}
@Override
protected Widget createMainWidget()
{
// main widget is scroll panel with embeddeed html
ScrollPanel scrollPanel = new ScrollPanel();
scrollPanel.setStylePrimaryName(styleName_);
HTML htmlContent = new HTML(content_);
if (isFixedFont_)
FontSizer.applyNormalFontSize(htmlContent);
scrollPanel.setWidget(htmlContent);
// if we don't have a preferred size then size based on content
Size size = preferredSize_ ;
if (size.isEmpty())
size = DomMetrics.measureHTML(content_, styleName_);
// compute the widget size and set it
Size minimumSize = new Size(300, 300);
size = DomMetrics.adjustedElementSize(size,
minimumSize,
70, // pad
100); // client margin
scrollPanel.setSize(size.width + "px", size.height + "px");
// return it
return scrollPanel;
}
private String content_;
private String styleName_;
private boolean isFixedFont_;
private Size preferredSize_;
}