Package cz.mp.k3bg.gui

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

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

import cz.mp.k3bg.Application;
import cz.mp.k3bg.Images;
import cz.mp.k3bg.Preferences;
import cz.mp.k3bg.BookState;
import cz.mp.k3bg.core.BookFiles;
import cz.mp.k3bg.core.Metadata;
import cz.mp.k3bg.log.LoggerManager;
import cz.mp.util.StringUtils;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.logging.Logger;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import static cz.mp.k3bg.TextSource.*;
import static cz.mp.k3bg.Application.*;

/**
* Hlavní okno programu.
*
* @author Martin Pokorný
* @version 0.1
* @see MainFrameMenu
* @see MainFrameTabbedPane
* @see TabPanel
*/
public class MainFrame extends JFrame {

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

    public static final int MINIMAL_WIDTH = 700;

    public static final int DEFAULT_WIDTH = 750;
    public static final int DEFAULT_HEIGHT = 550;
   
    private static MainFrame instance = null;

    private MainFrameMenu mainMenu = new MainFrameMenu();

    private MainFrameTabbedPane mainTabbePanel = new MainFrameTabbedPane();

    private MetadataPanel metadataPanel = new MetadataPanel();
    private BookFilesPanel filesPanel = new BookFilesPanel();
    private KindlegenPanel kindlegenPanel = new KindlegenPanel();

    // -----

    /** */
    private MainFrame() {
        super(Application.NAME);
                   
        try {
            initComponents();
            initEventHandlers();
            initFrame();
        } catch (Exception ex) {
            logger.severe(ex.toString());
            if (DEBUG) {  ex.printStackTrace()}           
            Dialogs.showErrorDialog(ex);
        }
    }

    /**
     *
     * @return
     */
    public static MainFrame getInstance() {
        if (instance == null) {
            logger.finer("new!");
            instance = new MainFrame();
        }
        return instance;
    }
   
    /**
     *
     */
    private void initComponents() {
        logger.finer("");
       
        mainTabbePanel.addTab(metadataPanel);
        mainTabbePanel.addTab(filesPanel);
        mainTabbePanel.addTab(kindlegenPanel);
       
        mainTabbePanel.setSelectedComponent(metadataPanel);

        this.getContentPane().add(mainTabbePanel);

        this.setJMenuBar(mainMenu);
    }
   
    /** */
    private void initFrame() {
        logger.finer("");
       
        ArrayList<Image> icons = new ArrayList<Image>();
        icons.add(Images.getImage(Images.LOGO_16).getImage());
        icons.add(Images.getImage(Images.LOGO_32).getImage());
        icons.add(Images.getImage(Images.LOGO_48).getImage());
        icons.add(Images.getImage(Images.LOGO_128).getImage());
        this.setIconImages(icons);

        this.pack();
        this.setMinimumSize(
                new Dimension(
                        Math.min(MINIMAL_WIDTH, this.getWidth()),
                        this.getHeight()));
        this.setSize(Math.max(MINIMAL_WIDTH, this.getWidth()), this.getHeight());

        Preferences.useStoredBounds(this);

        logger.config("size = " + this.getWidth() + " x " + this.getHeight());
    }

    /** */
    private void initEventHandlers() {
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                logger.finer("");
               
                exit(0);
            }
        });

        mainTabbePanel.addChangeListener(new ChangeListener() {
            private TabPanel lastSelectedTab = metadataPanel;

            @Override
            public void stateChanged(ChangeEvent evt) {
                logger.fine("(mainTabbePanel) selected_idx = " +
                        mainTabbePanel.getSelectedIndex());

                Component selected = mainTabbePanel.getSelectedComponent();
                if (! (selected instanceof TabPanel)) {
                    return;
                }
                TabPanel selectedTab = (TabPanel) selected;

                // změna z  MetadataPanel  na cokoliv jiného
                if (lastSelectedTab instanceof MetadataPanel
                        && ! (selectedTab instanceof MetadataPanel)) {
                    Metadata metadata = metadataPanel.createMetadata();
                    if (metadata != null) {
                        logger.info(" MetadataPanel --> * ");
                    }
                    BookState.getMainInstance().setMetadata(metadata);
                }
               
                // změna z  BookFilesPanel  na cokoliv jiného
                if (lastSelectedTab instanceof BookFilesPanel
                        && ! (selectedTab instanceof BookFilesPanel)) {
                    BookFiles bookFiles = filesPanel.createBookFiles();
                    if (bookFiles != null) {
                        logger.info(" BookFilesPanel --> * ");
                    }
                    BookState.getMainInstance().setBookFiles(bookFiles);
                }

                lastSelectedTab = selectedTab;

                selectedTab.update();
            }
        });
    }

    @Override
    public void setVisible(boolean b) {
        super.setVisible(b);

        if (b == true) {
            instance.newVersionDialog();
        }
    }

    /**
     *
     */
    private void newVersionDialog() {       
        String message = getLocText("gui.new_version_popup.message");
        if (Preferences.isVersionChange(this.getClass(), VERSION_NUMBER) &&
                !StringUtils.isEmpty(message) &&
                !message.equals("gui.new_version_popup.message")) {

            JOptionPane.showMessageDialog(this,
                    getLocText("gui.new_version_popup.message"),
                    getLocText("gui.new_version_popup.title", VERSION_NUMBER),
                    JOptionPane.INFORMATION_MESSAGE);
           
            Preferences.putLastRunVersion(this.getClass(), VERSION_NUMBER);
        }
    }
   
    /**
     * Ukončení programu se zadaným návratovým kódem.
     *
     * @param returnCode
     */
    public void exit(int returnCode) {
        logger.info("returnCode = " + returnCode);
       
        Preferences.putWindowArea(this, this.getBounds());

        System.exit(returnCode);       
    }
   
    /**
     *
     */
    public void clearAllPanels() {
        BookState.getMainInstance().clear();
        metadataPanel.clear();
        filesPanel.clear();
        kindlegenPanel.clear();
    }

    /**
     *
     */
    public void selectMetadataPanel() {
        mainTabbePanel.setSelectedComponent(metadataPanel);
    }
   
}   // MainFrame.java
TOP

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

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.