⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xpreviewpane.java

📁 XBrowser是一个完全免费并且开源的Web浏览器
💻 JAVA
字号:
/****************************************************************
*              XBrowser  -  eXtended web Browser                *
*                                                               *
*           Copyright (c) 2000-2001  Armond Avanes              *
*     Refer to ReadMe & License files for more information      *
*                                                               *
*                                                               *
*                      By: Armond Avanes                        *
*       Armond555@yahoo.com     &    Armond333@yahoo.com        *
*                http://xbrowser.sourceforge.net/               *
*****************************************************************/
package xbrowser.widgets;

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.print.*;
import javax.swing.*;
import javax.swing.event.*;

import xbrowser.*;
import xbrowser.doc.*;
import xbrowser.util.*;
import xbrowser.widgets.event.*;

public class XPreviewPane extends JPanel implements XScaleListener
{
    public XPreviewPane(XDocument doc)
    {
	JToolBar tlbMain = new JToolBar();

        document = doc;

        tlbMain.setFloatable(false);
		tlbMain.add( XRepository.getComponentBuilder().buildToolbarButton(new ZoomInAction()) );
		tlbMain.add( XRepository.getComponentBuilder().buildToolbarButton(new ZoomOutAction()) );
		tlbMain.add( XRepository.getComponentBuilder().buildToolbarButton(new PrintAction()) );
		tlbMain.add( XRepository.getComponentBuilder().buildToolbarButton(new CloseAction()) );

        tlbMain.addSeparator();
        tlbMain.add(cmbScale);

        setLayout( new BorderLayout() );
        add(tlbMain, BorderLayout.NORTH);

        previewContainer = new XPreviewContainer(this);
        add(new JScrollPane(previewContainer), BorderLayout.CENTER);
    }

    public void loadPreviews()
    {
        new Thread() {
            public void run()
            {
                XPreviewPane.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                try
                {
                    document.getRenderer().loadPreviews(previewContainer, 10);
                }
                catch( Exception e )
                {
				String title = XRepository.getResourceManager().getProperty(XPreviewPane.this, "Error");

        	        JOptionPane.showMessageDialog(XBrowser.getMainFrame(), e.getMessage(), title, JOptionPane.ERROR_MESSAGE);
                }
                XPreviewPane.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
            }
        }.start();
	}

    public void scaleChanged(final int new_scale)
    {
		new Thread() {
			public void run()
			{
				XPreviewPane.this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
				document.getRenderer().changePreviewScale(previewContainer, new_scale);
				XPreviewPane.this.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
			}
		}.start();
	}

    public void zoomedIn()
    {
	int new_scale = cmbScale.getCurrentScale()*2;

		cmbScale.getEditor().setItem(new_scale+" %");
		scaleChanged(new_scale);
	}

    public void zoomedOut()
    {
	int new_scale = (int)cmbScale.getCurrentScale()/2;

		if( new_scale<1 )
			new_scale = 1;

		cmbScale.getEditor().setItem(new_scale+" %");
		scaleChanged(new_scale);
	}

    private class XScaleComboBox extends JComboBox implements ActionListener
    {
		public XScaleComboBox(XScaleListener scale_listener)
		{
			super( new String[]{ "10 %", "25 %", "50 %", "75 %", "100 %" } );

			scaleListener = scale_listener;

	        addActionListener(this);
	        getEditor().addActionListener(this);
			setMaximumSize(getPreferredSize());
			setEditable(true);
		}

        public int getCurrentScale()
        {
		String str = getEditor().getItem().toString();

			if( str.endsWith("%") )
				str = str.substring(0, str.length()-1);
			str = str.trim();

		int cur_scale;

			try
			{
				cur_scale = (int)Integer.parseInt(str);
				if( cur_scale<1 )
					cur_scale = 1;
			}
			catch( Exception e )
			{
				str = getSelectedItem().toString();

				if( str.endsWith("%") )
					str = str.substring(0, str.length()-1);
				str = str.trim();

				try
				{
					cur_scale = (int)Integer.parseInt(str);
				}
				catch( Exception ex )
				{
					cur_scale = 1;
				}
			}

			return cur_scale;
		}

        public void actionPerformed(ActionEvent e)
	    {
		int cur_scale = getCurrentScale();

			getEditor().setItem(cur_scale+" %");
			scaleListener.scaleChanged(cur_scale);
        }

	// Attributes:
		private XScaleListener scaleListener;
	}

    private class ZoomInAction extends XDefaultAction
    {
        public ZoomInAction()
        {
            super(XPreviewPane.this, "ZoomIn", null);
        }

        public void actionPerformed(ActionEvent e)
        {
			previewContainer.setZoomMode(XProjectConstants.ZOOM_IN);
			zoomedIn();
        }
    }

    private class ZoomOutAction extends XDefaultAction
    {
        public ZoomOutAction()
        {
            super(XPreviewPane.this, "ZoomOut", null);
        }

        public void actionPerformed(ActionEvent e)
        {
			previewContainer.setZoomMode(XProjectConstants.ZOOM_OUT);
			zoomedOut();
        }
    }

    private class PrintAction extends XDefaultAction
    {
        public PrintAction()
        {
            super(XPreviewPane.this, "Print", null);
        }

        public void actionPerformed(ActionEvent e)
        {
		    document.printDocumentImmediately();
        }
    }

    private class CloseAction extends XDefaultAction
    {
        public CloseAction()
        {
            super(XPreviewPane.this, "Stop", null);
        }

        public void actionPerformed(ActionEvent e)
        {
			document.getRenderer().stopPrinting();
        }
    }

// Attributes:
    private int pageWidth;
    private int pageHeight;
    private XDocument document;
    private XPreviewContainer previewContainer;
    private XScaleComboBox cmbScale = new XScaleComboBox(this);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -