/* http://www.geogebra.org This file is part of GeoGebra. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. */ package org.geogebra.desktop.export; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import org.geogebra.common.gui.view.algebra.DialogType; import org.geogebra.common.kernel.Construction; import org.geogebra.common.kernel.Kernel; import org.geogebra.common.main.App; import org.geogebra.desktop.gui.TitlePanel; import org.geogebra.desktop.gui.inputfield.MyTextFieldD; import org.geogebra.desktop.gui.util.HelpAction; import org.geogebra.desktop.gui.view.algebra.InputPanelD; import org.geogebra.desktop.main.AppD; import org.geogebra.desktop.main.LocalizationD; import org.geogebra.desktop.util.GuiResourcesD; import org.geogebra.desktop.util.UtilD; /** * Dialog which provides for exporting into an HTML page enriched with an * Applet. * * @author Markus Hohenwarter * @author Philipp Weissenbacher (materthron@users.sourceforge.net) */ public class WorksheetExportDialog extends JDialog { private static final long serialVersionUID = 1L; AppD app; Kernel kernel; private InputPanelD textAboveUpload, textBelowUpload; JButton uploadButton; boolean kernelChanged = false; MyTextFieldD titleField; private LocalizationD loc; /** * @param app * app */ public WorksheetExportDialog(AppD app) { super(app.getFrame(), true); this.app = app; this.loc = app.getLocalization(); kernel = app.getKernel(); initGUI(); } private void initGUI() { // title, author, date TitlePanel titlePanel = new TitlePanel(app); ActionListener kernelChangedListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { kernelChanged = true; } }; titlePanel.addActionListener(kernelChangedListener); titlePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Cancel and Export Button JButton cancelButton = new JButton(loc.getMenu("Cancel")); cancelButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setVisible(false); } }); JButton helpButton = new JButton(loc.getMenu("Help")); HelpAction helpAction = new HelpAction(app, app.getScaledIcon(GuiResourcesD.HELP), loc.getMenu("Help"), App.WIKI_EXPORT_WORKSHEET); helpButton.setAction(helpAction); uploadButton = new JButton(loc.getMenu("Upload")); uploadButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Thread runner = new Thread() { @Override public void run() { setVisible(false); if (kernelChanged) { app.storeUndoInfo(); } GeoGebraTubeExportD ggtExport = new GeoGebraTubeExportD( app); ggtExport.uploadWorksheet(null); } }; runner.start(); } }); JPanel buttonPanel = new JPanel(); buttonPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); buttonPanel.add(Box.createHorizontalGlue()); buttonPanel.add(helpButton); buttonPanel.add(Box.createRigidArea(new Dimension(10, 0))); buttonPanel.add(uploadButton); buttonPanel.add(Box.createRigidArea(new Dimension(10, 0))); buttonPanel.add(cancelButton); JPanel modeUploadPanel = createUploadPanel(); // init text of text areas Construction cons = kernel.getConstruction(); String text = cons.getWorksheetText(0); if (text.length() > 0) { textAboveUpload.setText(text); } text = cons.getWorksheetText(1); if (text.length() > 0) { textBelowUpload.setText(text); } titleField.setText(cons.getTitle()); getContentPane().setLayout(new BorderLayout()); getContentPane().add(modeUploadPanel, BorderLayout.CENTER); getContentPane().add(buttonPanel, BorderLayout.SOUTH); UtilD.registerForDisposeOnEscape(this); setTitle(loc.getMenu("UploadGeoGebraTube")); setResizable(true); centerOnScreen(); } private JPanel createUploadPanel() { JPanel panel = new JPanel(new BorderLayout(5, 5)); panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // title textfield titleField = new MyTextFieldD(app); titleField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Construction cons = kernel.getConstruction(); if (titleField.getText().equals(cons.getTitle())) { return; } cons.setTitle(titleField.getText()); kernelChanged = true; } }); titleField.addFocusListener(new FocusListener() { @Override public void focusLost(FocusEvent e) { Construction cons = kernel.getConstruction(); if (titleField.getText().equals(cons.getTitle())) { return; } cons.setTitle(titleField.getText()); kernelChanged = true; } @Override public void focusGained(FocusEvent e) { // } }); JPanel p = new JPanel(new BorderLayout(5, 5)); p.add(new JLabel(loc.getMenu("Title") + ": "), app.getLocalization().borderWest()); p.add(titleField, BorderLayout.CENTER); panel.add(p, BorderLayout.NORTH); // text areas JPanel centerPanel = new JPanel(new BorderLayout(5, 5)); JLabel label = new JLabel(loc.getMenu("TextBeforeConstruction") + ":"); textAboveUpload = new InputPanelD(null, app, 5, 40, true, DialogType.TextArea); // JScrollPane scrollPane = new JScrollPane(textAbove); p = new JPanel(new BorderLayout()); p.add(label, BorderLayout.NORTH); p.add(textAboveUpload, BorderLayout.CENTER); centerPanel.add(p, BorderLayout.CENTER); label = new JLabel(loc.getMenu("TextAfterConstruction") + ":"); textBelowUpload = new InputPanelD(null, app, 8, 40, true, DialogType.TextArea); p = new JPanel(new BorderLayout()); p.add(label, BorderLayout.NORTH); p.add(textBelowUpload, BorderLayout.CENTER); centerPanel.add(p, BorderLayout.SOUTH); panel.add(centerPanel, BorderLayout.CENTER); return panel; } @Override public void setVisible(boolean flag) { if (flag) { pack(); super.setVisible(true); } else { // store the texts of the text ares in // the current construction Construction cons = kernel.getConstruction(); cons.setWorksheetText(textAboveUpload.getText(), 0); cons.setWorksheetText(textBelowUpload.getText(), 1); super.setVisible(false); } } private void centerOnScreen() { pack(); setLocationRelativeTo(app.getMainComponent()); } }