package org.geogebra.web.web.export; import org.geogebra.common.main.App; import org.geogebra.common.main.Feature; import org.geogebra.common.main.Localization; import org.geogebra.common.util.debug.Log; import org.geogebra.web.html5.awt.PrintableW; import org.geogebra.web.html5.gui.GPopupPanel; import org.geogebra.web.html5.main.AppW; import org.geogebra.web.html5.util.Dom; import org.geogebra.web.web.gui.GuiManagerW; import org.geogebra.web.web.gui.dialog.DialogBoxW; import org.geogebra.web.web.gui.layout.DockPanelW; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NodeList; import com.google.gwt.dom.client.Style; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.SimplePanel; /** * Print dialog * */ public class PrintPreviewW extends DialogBoxW implements ClickHandler, ChangeHandler { /** application */ AppW app; private Button btPrint; private Button btCancel; /** view list */ ListBox m_cbView; /** print panel */ FlowPanel printPanel; private SimplePanel scalePanelHolder; private Localization loc; /** * printable width at portrait orientation */ public static final int PWIDTH = 900; /** * printable height at portrait orientation */ public static final int PHEIGHT = 1400; /** * printable width at landscape orientation */ public static final int LWIDTH = 1200; /** * printable height at landscape orientation */ public static final int LHEIGHT = 900; /** * @param appl * application */ public PrintPreviewW(AppW appl) { super(appl.getPanel()); if (appl.has(Feature.DIALOGS_OVERLAP_KEYBOARD)) { setOverlapFeature(true); } app = appl; this.loc = app.getLocalization(); createGUI(); addStyleName("GeoGebraPopup"); setGlassEnabled(true); getCaption().setText(loc.getMenu("PrintPreview")); center(); } private void createGUI() { // Maybe there is older print panel, because after open pdf in preview // the previous print panel hasn't been removed removePrintPanelFromDOM(); printPanel = new FlowPanel(); printPanel.setStyleName("printPanel"); RootPanel.get().add(printPanel); FlowPanel centerPanel = new FlowPanel(); btPrint = new Button(loc.getMenu("Print")); btPrint.getElement().getStyle().setMargin(3, Style.Unit.PX); btPrint.addClickHandler(this); btPrint.setEnabled(false); btCancel = new Button(loc.getMenu("Cancel")); btCancel.addStyleName("cancelBtn"); btCancel.getElement().getStyle().setMargin(3, Style.Unit.PX); btCancel.addClickHandler(this); m_cbView = new ListBox(); // app.forEachView(new App.ViewCallback() { // public void run(int viewID, String viewName) { // m_cbView.addItem(loc.getMenu(viewName), viewID + ""); // } // }); // We can print EVs yet if (app.getGuiManager().showView(App.VIEW_EUCLIDIAN)) { m_cbView.addItem(loc.getMenu("DrawingPad"), App.VIEW_EUCLIDIAN + ""); } if (app.getGuiManager().showView(App.VIEW_EUCLIDIAN2)) { m_cbView.addItem(loc.getMenu("DrawingPad2"), App.VIEW_EUCLIDIAN2 + ""); } if (app.getGuiManager().showView(App.VIEW_ALGEBRA)) { m_cbView.addItem(loc.getMenu("AlgebraWindow"), App.VIEW_ALGEBRA + ""); } if (app.getGuiManager().showView(App.VIEW_CONSTRUCTION_PROTOCOL)) { m_cbView.addItem(loc.getMenu("ConstructionProtocol"), App.VIEW_CONSTRUCTION_PROTOCOL + ""); } if (m_cbView.getItemCount() == 0) { this.setVisible(false); this.hide(false); } if (m_cbView.getItemCount() != 0) { DockPanelW focusedPanel = ((GuiManagerW) app.getGuiManager()) .getLayout().getDockManager().getFocusedPanel(); if (focusedPanel == null) { m_cbView.setItemSelected(0, true); // setSelectedItem(loc.getMenu("AllViews")); } else { String title = loc.getMenu(focusedPanel.getViewTitle()); int index = m_cbView.getItemCount() - 1; while (!m_cbView.getValue(index).equals(title) && index != 0) { index--; } m_cbView.setItemSelected(index, true); } m_cbView.addChangeHandler(this); FlowPanel buttonPanel = new FlowPanel(); buttonPanel.addStyleName("DialogButtonPanel"); centerPanel.add(m_cbView); scalePanelHolder = new SimplePanel(); centerPanel.add(scalePanelHolder); buttonPanel.add(btPrint); buttonPanel.add(btCancel); centerPanel.add(buttonPanel); // if (!((m_cbView.getSelectedValue().equals(App.VIEW_EUCLIDIAN + // "")) // || (m_cbView // .getSelectedValue().equals(App.VIEW_EUCLIDIAN2 + "")))) { // createPreview(m_cbView.getSelectedValue()); // } addScalePanelOrCreatePreview(); } else { centerPanel.add(btCancel); } this.addCloseHandler(new CloseHandler<GPopupPanel>() { @Override public void onClose(final CloseEvent<GPopupPanel> event) { app.setDefaultCursor(); app.closePopups(); } }); add(centerPanel); } @Override public void onClick(ClickEvent event) { if (event.getSource() == btPrint || event.getSource() == btCancel) { hide(); if (event.getSource() == btPrint) { if ((m_cbView.getSelectedValue() .equals(App.VIEW_EUCLIDIAN + "")) || (m_cbView.getSelectedValue() .equals(App.VIEW_EUCLIDIAN2 + ""))) { Log.debug("print EV"); createPreview(m_cbView.getSelectedValue()); } else { Window.print(); removePrintPanelFromDOM(); } } NodeList<Element> pw = Dom.getElementsByClassName("printableView"); if (pw.getLength() != 0) { pw.getItem(0).removeClassName("printableView"); } } } private void addScalePanelOrCreatePreview() { if ((App.VIEW_EUCLIDIAN + "").equals(m_cbView.getSelectedValue())) { scalePanelHolder.add(new PrintScalePanelW(app, app .getEuclidianView1())); btPrint.setEnabled(true); } else if ((App.VIEW_EUCLIDIAN2 + "").equals(m_cbView .getSelectedValue())) { scalePanelHolder.add(new PrintScalePanelW(app, app .getEuclidianView2(1))); btPrint.setEnabled(true); } else { createPreview(m_cbView.getSelectedValue()); } } @Override public void onChange(ChangeEvent event) { if (event.getSource() == m_cbView) { scalePanelHolder.clear(); addScalePanelOrCreatePreview(); } } private void createPreview(final String viewID) { createPrintables(Integer.parseInt(viewID), app, printPanel, btPrint); } private static void createPrintables(int viewID, AppW app, FlowPanel pPanel, Button bPrint) { GuiManagerW gui = (GuiManagerW) app.getGuiManager(); PrintableW view; if (viewID == App.VIEW_CAS) { view = (PrintableW) gui.getCasView(); } else if (viewID == App.VIEW_CONSTRUCTION_PROTOCOL) { view = (PrintableW) app.getGuiManager() .getConstructionProtocolView(); } else if (viewID == App.VIEW_SPREADSHEET) { view = gui.getSpreadsheetView(); } else if (viewID == App.VIEW_EUCLIDIAN2) { view = app.getEuclidianView2(1); } else if (viewID == App.VIEW_ALGEBRA) { view = gui.getAlgebraView(); } else if (viewID == App.VIEW_DATA_ANALYSIS) { view = (PrintableW) gui.getDataAnalysisView(); } else { view = app.getEuclidianView1(); } view.getPrintable(pPanel, bPrint); } private static void removePrintPanelFromDOM() { NodeList<com.google.gwt.dom.client.Element> pp = Dom .getElementsByClassName("printPanel"); if (pp.getLength() != 0) { pp.getItem(0).removeFromParent(); } } }