Package com.mucommander.ui.viewer

Source Code of com.mucommander.ui.viewer.FileFrame

package com.mucommander.ui.viewer;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Image;

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.WindowConstants;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mucommander.commons.file.AbstractFile;
import com.mucommander.ui.dialog.DialogToolkit;
import com.mucommander.ui.dialog.InformationDialog;
import com.mucommander.ui.helper.FocusRequester;
import com.mucommander.ui.layout.AsyncPanel;
import com.mucommander.ui.main.MainFrame;

/**
* This class is used as an abstraction for the {@link EditorFrame} and {@link ViewerFrame}.
*
* @author Arik Hadas
*/
public abstract class FileFrame extends JFrame {
  private static final Logger LOGGER = LoggerFactory.getLogger(FileFrame.class);

  private final static Dimension WAIT_DIALOG_SIZE = new Dimension(400, 350);

  // The file presenter within this frame
  private FilePresenter filePresenter;
 
  // The main frame from which this frame was initiated
  private MainFrame mainFrame;
 
  FileFrame(MainFrame mainFrame, AbstractFile file, Image icon) {
    this.mainFrame = mainFrame;

    setIconImage(icon);
   
    // Call #dispose() on close (default is hide)
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
       
        setResizable(true);
       
        initContentPane(file);
  }
 
  protected void initContentPane(final AbstractFile file) {
    try {
      filePresenter = createFilePresenter(file);
    } catch (UserCancelledException e) {
      // May get a UserCancelledException if the user canceled (refused to confirm the operation after a warning)
      return;
    }

    // If not suitable presenter was found for the given file
    if (filePresenter == null) {
      showGenericErrorDialog();
      return;
    }

    AsyncPanel asyncPanel = new AsyncPanel() {
         
            @Override
            public JComponent getTargetComponent() {
                try {
                    // Ask the presenter to present the file
                  filePresenter.open(file);
                }
                catch(Exception e) {
                    LOGGER.debug("Exception caught", e);

                    showGenericErrorDialog();

                    dispose();
                    return filePresenter==null?new JPanel():filePresenter;
                }

                setJMenuBar(filePresenter.getMenuBar());
               
                return filePresenter;
            }

            @Override
            protected void updateLayout() {
                super.updateLayout();

                // Sets panel to preferred size, without exceeding a maximum size and with a minimum size
                pack();

                // Request focus on the viewer when it is visible
                FocusRequester.requestFocus(filePresenter);
            }
        };

        // Add the AsyncPanel to the content pane
        JPanel contentPane = new JPanel(new BorderLayout());
        contentPane.add(asyncPanel, BorderLayout.CENTER);
        setContentPane(contentPane);

        setSize(WAIT_DIALOG_SIZE);
        DialogToolkit.centerOnWindow(this, mainFrame);

        setVisible(true);
    }

  private void showGenericErrorDialog() {
    InformationDialog.showErrorDialog(mainFrame, getGenericErrorDialogTitle(), getGenericErrorDialogMessage());
  }

  /**
   * Sets this file presenter to full screen
   */
  public void setFullScreen(boolean on) {
    int currentExtendedState = getExtendedState();
    setExtendedState(on ? currentExtendedState | Frame.MAXIMIZED_BOTH : currentExtendedState & ~Frame.MAXIMIZED_BOTH);
  }

  /**
   * Returns whether this frame is set to be displayed in full screen mode
   *
   * @return true if the frame is set to full screen, false otherwise
   */
  public boolean isFullScreen() {
    return (getExtendedState() & Frame.MAXIMIZED_BOTH) == Frame.MAXIMIZED_BOTH;
  }

  ////////////////////////
    // Overridden methods //
    ////////////////////////

    @Override
    public void pack() {
      if (!isFullScreen()) {
        super.pack();

        DialogToolkit.fitToScreen(this);
        DialogToolkit.fitToMinDimension(this, getMinimumSize());

        DialogToolkit.centerOnWindow(this, mainFrame);
      }
    }
   
    //////////////////////
    // Abstract methods //
    //////////////////////
   
    protected abstract String getGenericErrorDialogTitle();

    protected abstract String getGenericErrorDialogMessage();
   
    protected abstract FilePresenter createFilePresenter(AbstractFile file) throws UserCancelledException;
}
TOP

Related Classes of com.mucommander.ui.viewer.FileFrame

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.