com.sshtools.powervnc.PowerVNCFullScreenWindowContainer.java Source code

Java tutorial

Introduction

Here is the source code for com.sshtools.powervnc.PowerVNCFullScreenWindowContainer.java

Source

//Changes (c) STFC/CCLRC 2007
package com.sshtools.powervnc;

/*
 *  Sshtools - SSHTerm
 *
 *  Copyright (C) 2002 Lee David Painter.
 *
 *  Written by: 2002 Lee David Painter <lee@sshtools.com>
 *
 *  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; either version 2 of
 *  the License, or (at your option) any later version.
 *  This program 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 Library General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public
 *  License along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.GridLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.sshtools.common.ui.AboutAction;
import com.sshtools.common.ui.ExitAction;
import com.sshtools.common.ui.NewWindowAction;
import com.sshtools.common.ui.SshToolsApplication;
import com.sshtools.common.ui.SshToolsApplicationContainer;
import com.sshtools.common.ui.SshToolsApplicationException;
import com.sshtools.common.ui.SshToolsApplicationFrame;
import com.sshtools.common.ui.SshToolsApplicationPanel;
import com.sshtools.common.ui.StandardAction;

public class PowerVNCFullScreenWindowContainer extends JFrame implements SshToolsApplicationContainer {

    private final static long VDU_EVENTS = AWTEvent.KEY_EVENT_MASK | AWTEvent.FOCUS_EVENT_MASK
            | AWTEvent.ACTION_EVENT_MASK | AWTEvent.WINDOW_EVENT_MASK /*| AWTEvent.WINDOW_FOCUS_EVENT_MASK*/
            | AWTEvent.MOUSE_MOTION_EVENT_MASK | AWTEvent.MOUSE_EVENT_MASK;
    protected StandardAction exitAction;
    protected StandardAction aboutAction;
    protected StandardAction newWindowAction;
    protected StandardAction fullScreenAction;
    protected Log log = LogFactory.getLog(SshToolsApplicationFrame.class);
    //
    private SshToolsApplicationPanel panel;
    private SshToolsApplication application;
    private JSeparator toolSeperator;

    public void init(final SshToolsApplication application, SshToolsApplicationPanel panel)
            throws SshToolsApplicationException {
        getContentPane().invalidate();
        //setUndecorated(true);
        this.panel = panel;
        this.application = application;
        setJMenuBar(((PowerVNCPanel) panel).getJMenuBar());
        // We dont want the status bar, menu bar or tool bar showing in full screen mode by default
        ((PowerVNCPanel) panel).setToolsVisible(false);
        panel.registerActionMenu(new SshToolsApplicationPanel.ActionMenu("File", "File", 'f', 0));
        panel.registerAction(exitAction = new ExitAction(application, this));
        panel.registerAction(newWindowAction = new NewWindowAction(application));
        panel.registerAction(aboutAction = new AboutAction(this, application));
        panel.registerAction(fullScreenAction = new FullScreenActionImpl(application, this));

        getApplicationPanel().rebuildActionComponents();
        JPanel p = new JPanel(new BorderLayout());
        if (panel.getToolBar() != null) {
            JPanel t = new JPanel(new BorderLayout());
            t.add(panel.getToolBar(), BorderLayout.NORTH);
            t.add(toolSeperator = new JSeparator(JSeparator.HORIZONTAL), BorderLayout.SOUTH);
            final SshToolsApplicationPanel pnl = panel;
            panel.getToolBar().addComponentListener(new ComponentAdapter() {
                public void componentHidden(ComponentEvent evt) {
                    log.debug("Tool separator is now " + pnl.getToolBar().isVisible());
                    toolSeperator.setVisible(pnl.getToolBar().isVisible());
                }
            });
            p.add(t, BorderLayout.NORTH);
        }
        p.add(panel, BorderLayout.CENTER);
        if (panel.getStatusBar() != null) {
            p.add(panel.getStatusBar(), BorderLayout.SOUTH);
        }
        getContentPane().setLayout(new GridLayout(1, 1));
        getContentPane().add(p);
        // Watch for the frame closing
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent evt) {
                application.closeContainer(PowerVNCFullScreenWindowContainer.this);
            }
        });
        getContentPane().validate();
    }

    public void setContainerTitle(String title) {
    }

    public void setContainerVisible(boolean visible) {
        if (visible && !isContainerVisible()) {
            try {
                setVisible(true);
                GraphicsDevice device = panel.getGraphicsConfiguration().getDevice();
                //device.setFullScreenWindow(this);
                log.debug("Full screen container made visible");
                // ( (SshVNCPanel) panel).setAutoHideTools(true);
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e);
            }
        } else if (!visible && isContainerVisible()) {
            try {
                GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
                //device.setFullScreenWindow(null);
                setVisible(false);
                log.debug("Full screen container made invisible");
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e);
            }
        }
    }

    public boolean isContainerVisible() {
        return isVisible();
    }

    public SshToolsApplicationPanel getApplicationPanel() {
        return panel;
    }

    public void closeContainer() {
        log.debug("Closing full screen container");
        //( (SshVNCPanel) panel).setAutoHideTools(false);
        getApplicationPanel().deregisterAction(newWindowAction);
        getApplicationPanel().deregisterAction(exitAction);
        getApplicationPanel().deregisterAction(aboutAction);
        getApplicationPanel().deregisterAction(fullScreenAction);
        getApplicationPanel().rebuildActionComponents();
        setContainerVisible(false);
        dispose();
    }

    class FullScreenActionImpl extends VncFullScreenAction {

        public FullScreenActionImpl(SshToolsApplication application, SshToolsApplicationContainer container) {
            super(application, container);
            putValue(StandardAction.ON_CONTEXT_MENU, Boolean.TRUE);
            putValue(StandardAction.CONTEXT_MENU_GROUP, new Integer(50));
            putValue(StandardAction.CONTEXT_MENU_WEIGHT, new Integer(30));
        }
    }

    public java.awt.Component getWindow() {
        return this;
    }
}