blob: ab3383b5651e5e6008964c903f625c42f573b75a [file] [log] [blame]
/*
* Copyright (c) 2014, 2015 Eike Stepper (Berlin, Germany) and others.
* 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.setup.presentation;
import org.eclipse.oomph.ui.ErrorDialog;
import org.eclipse.oomph.ui.UIUtil;
import org.eclipse.oomph.util.IOUtil;
import org.eclipse.oomph.util.OS;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchPart;
import java.io.File;
/**
* @author Eike Stepper
*/
public abstract class AbstractTableAction extends Action
{
private IWorkbenchPart part;
public AbstractTableAction(String text)
{
super(text);
}
public void setActivePart(IWorkbenchPart part)
{
this.part = part;
}
@Override
public void run()
{
if (UIUtil.isBrowserAvailable())
{
Dialog dialog = new CommandTableDialog(part.getSite().getShell());
dialog.open();
}
else
{
try
{
String html = renderHTML();
File tempFile = File.createTempFile("table", ".html");
IOUtil.writeUTF8(tempFile, html);
OS.INSTANCE.openSystemBrowser(tempFile.toURI().toString());
}
catch (Exception ex)
{
ErrorDialog.open(ex);
}
}
}
protected abstract String renderHTML();
/**
* @author Eike Stepper
*/
private final class CommandTableDialog extends Dialog
{
public CommandTableDialog(Shell parentShell)
{
super(parentShell);
setShellStyle(getShellStyle() ^ SWT.APPLICATION_MODAL | SWT.MODELESS | SWT.RESIZE | SWT.MIN | SWT.MAX | SWT.DIALOG_TRIM);
setBlockOnOpen(false);
}
@Override
protected Control createDialogArea(Composite parent)
{
getShell().setText(getText());
String html = renderHTML();
Browser browser = new Browser(parent, SWT.NONE);
browser.setText(html);
GridData layoutData = new GridData(GridData.FILL_BOTH);
layoutData.heightHint = 800;
layoutData.widthHint = 1000;
browser.setLayoutData(layoutData);
applyDialogFont(browser);
return browser;
}
@Override
protected Control createButtonBar(Composite parent)
{
return null;
}
}
}