/*
* This file is part of the Gwt-Uml project and was written by Raphal Brugier <raphael dot brugier at gmail dot com > for Objet Direct
* <http://wwww.objetdirect.com>
*
* Copyright 2010 Objet Direct
*
* Gwt-Uml is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* Gwt-Uml is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with Gwt-Generator. If not, see <http://www.gnu.org/licenses/>.
*/
package com.objetdirect.gwt.umldrawer.client;
import static com.objetdirect.gwt.umlapi.client.umlcomponents.DiagramType.CLASS;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget;
import com.objetdirect.gwt.umlapi.client.Drawer;
import com.objetdirect.gwt.umlapi.client.helpers.OptionsManager;
import com.objetdirect.gwt.umlapi.client.helpers.UMLCanvas;
import com.objetdirect.gwt.umlapi.client.umlcomponents.DiagramType;
/**
* Contains the drawer and the buttons to export the current displayed drawer.
* @author Raphael Brugier (raphael-dot-brugier.at.gmail'dot'com)
*/
public class DrawerContainer extends ResizeComposite {
private static DrawerContainerUiBinder uiBinder = GWT
.create(DrawerContainerUiBinder.class);
interface DrawerContainerUiBinder extends UiBinder<Widget, DrawerContainer> {
}
@UiField
Button exportToUrl;
@UiField
Button clearUrl;
@UiField
Button exportToSvg;
@UiField
LayoutPanel drawerContainer;
private UMLCanvas umlCanvas;
private Drawer drawer;
/**
* Create a default canvas for a class Diagram.
*/
public DrawerContainer() {
initWidget(uiBinder.createAndBindUi(this));
OptionsManager.set("DiagramType", CLASS.getIndex());
umlCanvas = new UMLCanvas(CLASS);
drawer = new Drawer(umlCanvas);
drawerContainer.add(drawer);
}
public DrawerContainer(UrlParser urlParser) {
initWidget(uiBinder.createAndBindUi(this));
OptionsManager.setAllFromURL(urlParser.getOptionsList());
int diagramIndex = OptionsManager.get("DiagramType");
DiagramType diagramType = DiagramType.fromIndex(diagramIndex);
umlCanvas = new UMLCanvas(diagramType);
drawer = new Drawer(umlCanvas);
umlCanvas.getArtifactById().clear();
if (urlParser.getDiagram64() != null) {
umlCanvas.fromURL(urlParser.getDiagram64(), false);
}
drawerContainer.add(drawer);
}
/**
* @return the umlCanvas
*/
public UMLCanvas getUmlCanvas() {
return umlCanvas;
}
/**
* @return the drawer
*/
public Drawer getDrawer() {
return drawer;
}
@Override
public void onResize() {
super.onResize();
}
@Override
protected void onLoad() {
super.onLoad();
}
@UiHandler("exportToUrl")
void clickExportToUrl(ClickEvent event) {
HistoryManager.upgradeDiagramURL(umlCanvas.toUrl());
}
@UiHandler("clearUrl")
void clickClearUrl(ClickEvent event) {
HistoryManager.upgradeDiagramURL("");
}
@UiHandler("exportToSvg")
void clickExportToSvg(ClickEvent event) {
String svg = "<?xml version='1.0' standalone='no'?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>";
// Session.getActiveCanvas().clearArrows(); //TODO
svg += DOM.getInnerHTML((Element) umlCanvas.getContainer().getElement().getFirstChildElement());
Window.open("data:image/xml+svg;charset=utf-8," + svg, "SVG export", "top");
// Session.getActiveCanvas().makeArrows(); //TODO
}
}
|