/** * This file is part of Archiv-Editor. * * The software Archiv-Editor serves as a client user interface for working with * the Person Data Repository. See: pdr.bbaw.de * * The software Archiv-Editor was developed at the Berlin-Brandenburg Academy * of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin. * www.bbaw.de * * Copyright (C) 2010-2013 Berlin-Brandenburg Academy * of Sciences and Humanities * * The software Archiv-Editor was developed by @author: Christoph Plutte. * * Archiv-Editor 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. * * Archiv-Editor 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 Archiv-Editor. * If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>. */ package org.bbaw.pdr.ae.export.xslfo.pages; import org.bbaw.pdr.ae.common.AEConstants; import org.bbaw.pdr.ae.common.CommonActivator; import org.bbaw.pdr.ae.common.NLMessages; import org.bbaw.pdr.ae.export.pluggable.AeExportCoreProvider; import org.bbaw.pdr.ae.export.swt.FileSelectionGroup; import org.bbaw.pdr.ae.export.swt.PdrObjectsPreview; import org.bbaw.pdr.ae.export.xslfo.PdfExportWizard; import org.bbaw.pdr.ae.export.xslfo.PdfProvider; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; public class IntroPage extends WizardPage { private Composite container; private PdfExportWizard wizard; private PdfProvider provider; private ILog log = AEConstants.ILOGGER; public IntroPage(String pageName) { super(pageName); setTitle(NLMessages.getString("export.pdf.title")); setDescription(NLMessages.getString("export.pdf.desc")); } @Override public void createControl(Composite parent) { setControl(parent); wizard = (PdfExportWizard) this.getWizard(); provider = (PdfProvider) AeExportCoreProvider.getInstance().getWizardProvider(wizard); String pluginId = provider.pluginId(); container = new Composite(parent, SWT.NONE); container.setLayout(new GridLayout(3, false)); // label preview tree, row 1 Label outputLabel = new Label(container, SWT.NONE); outputLabel.setText(NLMessages.getString("export.select.data.lbl")); outputLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1)); new Label(container, SWT.NONE); // pdr objects selection preview as a checkbox tree viewer provider.preview = new PdrObjectsPreview(pluginId, this, container); provider.registerWidget(provider.preview); new Label(container, SWT.NONE); // TODO: implement switch for output type: user should be allowed // TODO: to choose from several options: // TODO: allow to choose between exporting PDF of FO // TODO: and allow to save FO dump to file // TODO: OR allow to dynamically change generated FO source before exporting? // file selection control widgets group template for export destination provider.outputSelector = new FileSelectionGroup(pluginId, this, container, SWT.SAVE); provider.outputSelector.init(NLMessages.getString("export.fileselector.save.caption"), NLMessages.getString("export.fileselector.save.desc"), 3); provider.registerWidget(provider.outputSelector); // and style sheet file selection provider.styleSelector = new FileSelectionGroup(pluginId, this, container, SWT.OPEN); provider.styleSelector.init(NLMessages.getString("export.fileselector.stylesheet.caption"), 3, "stylesheets"); provider.registerWidget(provider.outputSelector); // Options Panel Group optsGrp = new Group(container, SWT.BORDER | SWT.SHADOW_ETCHED_IN); optsGrp.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); optsGrp.setLayout(new GridLayout(3, false)); optsGrp.setText("Options"); //TODO nl // 'open result in external' checkbox provider.opnExtBtn = new Button(optsGrp, SWT.CHECK); provider.opnExtBtn.setText("Open result in external viewer."); //TODO nl provider.opnExtBtn.setSelection( provider.getSettings().getBoolean("open_ext_viewer")); container.pack(); container.layout(true, true); } @Override public IWizardPage getPreviousPage() { return null; } @Override public IWizardPage getNextPage() { return isPageComplete() ? null : null; } @Override public boolean isPageComplete() { // FIXME: copied as-is from xml plugin. Re-evaluate! // FIXME: nullpointer exception weil provider noch nicht initialisiert ist?? if (wizard == null || provider.outputSelector == null || provider.styleSelector == null || provider.preview == null) return false; // TODO: das alles wird viel schöner und besser, wenn wir nur noch widgets in die registry // schmeißen und den ganzen krempel nicht mehr selber machen müssen. einmal über alle widgets // in der registry rübergucken, und wenn alle valid sind, kanns losgehen. bevor die nicht komplett // initialisiert sind, werden die auch nicht registriert. boolean complete = provider.outputSelector.isValid() && provider.preview.isValid() && provider.styleSelector.isValid(); if (!complete) { String message = provider.outputSelector.getMessage(); if (message == null) message = provider.preview.getMessage(); if (message == null) message = provider.styleSelector.getMessage(); this.setErrorMessage(message); } else this.setErrorMessage(null); //FIXME no message shown //this.getContainer().updateMessage(); //this.getContainer().updateTitleBar(); log.log(new Status(IStatus.INFO, CommonActivator.PLUGIN_ID, "Wizard page completeness: "+complete)); return complete; } }