Package cz.mp.k3bg.gui

Source Code of cz.mp.k3bg.gui.KindlegenPanel

/*
* KindlegenPanel.java
*
*  created: 7.10.2011
*  charset: UTF-8
*  license: MIT (X11) (See LICENSE file for full license)
*/
package cz.mp.k3bg.gui;


import static cz.mp.k3bg.Constants.*;
import static cz.mp.k3bg.Images.*;
import cz.mp.k3bg.*;
import static cz.mp.k3bg.TextSource.getLocText;
import cz.mp.k3bg.core.Kindlegen;
import cz.mp.k3bg.core.KindlegenRunner;
import cz.mp.k3bg.gui.component.FileChooserField;
import cz.mp.k3bg.gui.component.LabelForMandatory;
import cz.mp.k3bg.gui.component.LinkLabel;
import cz.mp.k3bg.log.LoggerManager;
import cz.mp.k3bg.util.DesktopUtils;
import cz.mp.util.GuiUtils;
import cz.mp.util.StringUtils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.MalformedURLException;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import net.miginfocom.swing.MigLayout;

/**
* Panel pro definování příkazu {@code kindlegen} a pro spuštění
* vytvoření knihy.
*
* @author Martin Pokorný
* @version 0.1
* @see MainTabbedPane
* @see KindlegenRunner
* @see GenerateMobiDialog
*/
public class KindlegenPanel extends TabPanel {

    private static final boolean DEBUG = false;
    private static final Logger logger =
            LoggerManager.getLogger(KindlegenPanel.class, DEBUG);

    private ImageIcon IMG_EBOOK = Images.getImage(EBOOK_32);
   
   
    private JLabel outDirLabel = new LabelForMandatory(getLocText("gui.kindlegen.output_dir"));
    private FileChooserField outDirField = new FileChooserField();

    private JLabel kindlegenLabel = new LabelForMandatory(getLocText("gui.kindlegen.path"));
    private FileChooserField kindlegenField = new FileChooserField(false);
   
    private JLabel kindlegenFoundedLabel = new JLabel(Images.getImage(Images.OK));
   
    private LinkLabel getKindlegenLink = new LinkLabel(getLocText("gui.kindlegen.get_from_web"));
   
    private JButton generateButton = new JButton(
            getLocText("gui.kindlegen.generate"), Images.getImage(GEAR));
   
    private JCheckBox c2CheckBox = new JCheckBox(getLocText("gui.kindlegen.c2"));
   
    private KindlegenRunner kindlegenRunner;
           
    // ------
   
    /** */
    public KindlegenPanel() {
        super();
        initComponents();
        initLayout();
        initEventHandlers();
    }
   
    /** */
    private void initComponents() {
        outDirLabel.setLabelFor(outDirField);
        kindlegenLabel.setLabelFor(kindlegenField);

        generateButton.setEnabled(false);

        outDirField.setEditable(false);
        outDirField.setSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (Application.OS_IS_WINDOWS) {
            outDirLabel.setText(getLocText("gui.kindlegen.output_dir.windows"));
        }

        getKindlegenLink.setToolTipText(Constants.KINDLEGEN_DOWNLOAD_URL);
    }

    /** */
    private void initLayout() {
        this.setLayout(new MigLayout("",
                "unrel[label]rel[fill,grow]rel[]rel[]rel[]unrel",
                "unrel[]rel[]"));

        this.add(outDirLabel);
        this.add(outDirField, "spanx 3, sgy, wrap 2*para");

        this.add(kindlegenLabel);
        this.add(kindlegenField, "spanx 3, sgy");

        this.add(kindlegenFoundedLabel, "hidemode 0, gapleft rel, split, wrap rel");

        this.add(getKindlegenLink, "hidemode 3, skip, spanx 3, right, growx 0, wrap 0");
        this.add(c2CheckBox, "hidemode 3, skip, wrap 0");
        this.add(new JLabel(), "hidemode 3, skip, wrap 2*para");

        this.add(generateButton, "spanx, center, wrap 2*para");
       
        this.add(statusPanel, "spanx, grow");
    }

    /** */
    private void initEventHandlers() {
        kindlegenField.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                setUpKindlegenField();
                update(true);
            }
        });

        getKindlegenLink.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    GuiUtils.setWaitCursorForAmoment(MainFrame.getInstance());
                    DesktopUtils.openBrowser(KINDLEGEN_DOWNLOAD_URL);
                } catch (MalformedURLException ex) {
                    logger.warning(ex.toString());
                }
            }
        });

        generateButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                generate();
            }
        });
    }

    @Override
    public void clear() {
        c2CheckBox.setSelected(false);
        update(true);
    }   
   
    @Override
    public ImageIcon getImageIcon() {
        return IMG_EBOOK;
    }

    @Override
    public String getTitle() {
        return getLocText("gui.maintabpane.kindlegen");
    }

    @Override
    public void setVisible(boolean aFlag) {
        super.setVisible(aFlag);
       
        if (aFlag == true ) {
            if (kindlegenRunner == null) {
                setUpKindlegenField();
                update(true);
            }
            else if (generateButton.isEnabled()){
                generateButton.requestFocusInWindow();
            }
        }
    }

    /**
     * Předvyplní {@linkplain #kindlegenField}, pokud ještě nebylo
     * předvyplněno touto metodou.
     *
     * @see Preferences#getKindlegenCmd(java.lang.Class)
     * @see KindlegenRunner#findKindlegenCommand()
     */
    private void setUpKindlegenField() {
        if (kindlegenRunner == null) {
            logger.fine("");
           
            kindlegenRunner = new KindlegenRunner();
       
            String kindlegenCommand =
                    Preferences.getKindlegenCmd(this.getClass());
            Kindlegen kindlegen = Kindlegen.getKindlegen(kindlegenCommand);
            if (kindlegen == null) {
                kindlegen = Kindlegen.findKindlegen();
            }
            kindlegenCommand = (kindlegen == null) ?
                    null : kindlegen.getCommand();

            logger.fine("kindlegenCmd = " + kindlegenCommand);
           
            if (! StringUtils.isBlank(kindlegenCommand)) {
                kindlegenField.setText(kindlegenCommand);
            }
            else {
                kindlegenField.setText("");
            }
        }
    }

    /**
     *
     */
    public void generate() {
        Kindlegen kindlegen = Kindlegen.getKindlegen(
                kindlegenField.getSelectedFilePath());
       
        if (kindlegen == null) {
            return;
        }

        kindlegenRunner.setKindlegen(kindlegen);
        kindlegenRunner.setC2compress(c2CheckBox.isSelected());

        BookState.getMainInstance().setKindlegenRunner(kindlegenRunner);

        GenerateMobiDialog.showDialog();
    }

    /**
     *
     */
    @Override
    public void update() {
        update(false);       
    }
   
   
    /**
     *
     * @param withKindlegenCmd
     */
    void update(boolean withKindlegenCmd) {
        updateWorkingDir();
        if (withKindlegenCmd) {
            updateKindlegen();
        }
        updateStatusPanel();
        updateGenerateButtonEnabled();
    }   
   
    /**
     * Aktualizuje stav {@linkplain #kindlegenField}, podle toho, zda je
     * zadán platný příkaz {@code kindlegen} nebo ne.
     *
     * @see #isKindlegenSelected()
     * @see Preferences#putKindlegenCmd(java.lang.Class, java.lang.String)
     */
    private void updateKindlegen() {
        Kindlegen kindlegen = Kindlegen.getKindlegen(
                kindlegenField.getSelectedFilePath());
               
        getKindlegenLink.setVisible(kindlegen == null);
        c2CheckBox.setVisible(kindlegen != null);
        kindlegenFoundedLabel.setVisible(kindlegen != null);
       
        generateButton.setEnabled(kindlegen != null);
       
        if (kindlegen != null) {
            Preferences.putKindlegenCmd(this.getClass(),
                    kindlegenField.getSelectedFilePath());
        }
    }
   
    /**
     *
     */
    private void updateStatusPanel() {
        statusPanel.clear();
       
        if (BookState.getMainInstance().getMetadata() == null) {
            // Nejsou vyplněny povinné položky s informacemi o knize.
            statusPanel.addError(getLocText("gui.kindlegen.status.err_no_metadata"));
        }

        if (BookState.getMainInstance().getBookFiles() == null) {
            // Nejsou určeny potřebné soubory knihy.
            statusPanel.addError(getLocText("gui.kindlegen.status.err_no_bookfiles"));
        }
       
        if (! kindlegenFoundedLabel.isVisible()) {
            // Není zadáno umístění programu kindlegen
            statusPanel.addError(getLocText("gui.kindlegen.status.err_no_kindlegen"));
        }
    }
   
    /**
     *
     */
    private void updateWorkingDir() {
        outDirField.setSelectedFile(Application.HOME_DIR);
       
        if (BookState.getMainInstance().getBookFiles() != null) {
            String workingDir = BookState.getMainInstance()
                    .getBookFiles().getWorkingDirPath();
            if (! StringUtils.isBlank(workingDir)) {
                outDirField.setSelectedFile(workingDir);
            }           
        }
    }
   
    /**
     *
     */
    private void updateGenerateButtonEnabled() {
        boolean enabled = BookState.getMainInstance().getMetadata() != null
                && BookState.getMainInstance().getBookFiles() != null
                && kindlegenFoundedLabel.isVisible()
                ;
       
        c2CheckBox.setVisible(enabled);
        generateButton.setEnabled(enabled);
    }
   
}   // KindlegenPanel.java
TOP

Related Classes of cz.mp.k3bg.gui.KindlegenPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.