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

📄 browsertabitem.java

📁 SWT开发的Java调用COM的工具集
💻 JAVA
字号:
/*
 * Copyright (c) 2007 Software Wizards Pty Ltd, Victoria, Australia.
 * mailto:enquires@swz.com.au. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted. See the GNU General Public License
 * for more details.
 *
 * Redistribution of the SWTtoCOM software is not permitted as part of any
 * commercial product. Licensing terms for such distribution may be
 * obtained from the copyright holder.
 *
 * 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 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.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
package au.com.swz.swttocom.example.browser;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.internal.ole.win32.COM;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.ole.win32.OleAutomation;
import org.eclipse.swt.ole.win32.Variant;
import org.eclipse.swt.widgets.Composite;

import au.com.swz.swttocom.example.browser.shdocvw.DWebBrowserEvents2Adapter;
import au.com.swz.swttocom.example.browser.shdocvw.WebBrowser;
import au.com.swz.swttocom.example.browser.shdocvw.WebBrowserComposite;
import au.com.swz.swttocom.example.browser.shdocvw.enums.CommandStateChangeConstants;
import au.com.swz.swttocom.example.browser.shdocvw.enums.OLECMDEXECOPT;
import au.com.swz.swttocom.example.browser.shdocvw.enums.OLECMDID;
import au.com.swz.swttocom.swt.types.IAutomationObject;
import au.com.swz.swttocom.swt.types.pointer.BooleanPointer;
import au.com.swz.swttocom.swt.types.pointer.IDispatchPointer;

public class BrowserTabItem {
	private WebBrowser webBrowser;
	private SWTBrowser swtBrowser;
	private CTabItem tabItem;
	private boolean backEnabled;
	private boolean forwardEnabled;
	private String address;

	BrowserTabItem(SWTBrowser swtBrowser, CTabItem tabItem) {
		this.swtBrowser = swtBrowser;
		this.tabItem    = tabItem;
	}
	
	public Composite createComposite(Composite parent) {
		Composite pnlClient = new Composite(parent, SWT.NONE);
		GridLayout gridLayout = new GridLayout(1, true);
		gridLayout.marginWidth = 0;
		gridLayout.marginHeight = 0;
		gridLayout.numColumns = 1;
		gridLayout.makeColumnsEqualWidth = true;
		gridLayout.horizontalSpacing = 0;
		gridLayout.verticalSpacing = 0;
		pnlClient.setLayout(gridLayout);
		
		WebBrowserComposite webBrowserComposite = new WebBrowserComposite(pnlClient, SWT.NONE);
		webBrowser = webBrowserComposite.getWebBrowserAutomation();
		GridData layoutData = new GridData();
		layoutData.verticalAlignment = GridData.FILL;
		layoutData.horizontalAlignment = GridData.FILL;
		layoutData.widthHint = -1;
		layoutData.heightHint = -1;
		layoutData.horizontalIndent = 0;
		layoutData.horizontalSpan = 1;
		layoutData.verticalSpan = 1;
		layoutData.grabExcessHorizontalSpace = true;
		layoutData.grabExcessVerticalSpace = true;
		webBrowserComposite.setLayoutData(layoutData);
		webBrowserComposite.oleShow();
		webBrowser.setSilent(true);
		
		webBrowserComposite.addDWebBrowserEvents2Listener(new DWebBrowserEvents2Adapter() {
			public void newWindow3(IDispatchPointer ppDisp, BooleanPointer cancel, int dwFlags, String bstrUrlContext, String bstrUrl) {
				BrowserTabItem browserTab = swtBrowser.openNewTab();
				OleAutomation auto = browserTab.getOleAutomation();
				Variant variant = new Variant(auto);
				ppDisp.setValue(variant.getDispatch());
			}
			
			public void navigateComplete2(IAutomationObject pDisp, Variant url) {
				if (url.getType() == COM.VT_EMPTY) {
					address = "";
				} else {
					address = url.getString();
				}
				swtBrowser.setAddressText(address);
			}
			
			public void statusTextChange(String text) {
				swtBrowser.setStatusText(text);
			}
			
			public void progressChange(int progress, int progressMax) {
				swtBrowser.setProgress(progress, progressMax);
			}
			
			public void commandStateChange(int command, boolean enable) {
				CommandStateChangeConstants cmd = CommandStateChangeConstants.getEnumByValue(command);
				if (cmd == CommandStateChangeConstants.CSC_NAVIGATEBACK) {
					backEnabled = enable;
					swtBrowser.enableBack(enable);
				}
				if (cmd == CommandStateChangeConstants.CSC_NAVIGATEFORWARD) {
					forwardEnabled = enable;
					swtBrowser.enableForward(enable);
				}
			}
			public void titleChange(String text) {
				tabItem.setText(text);
			}
			
		});
		return pnlClient;
	}
	
	public void goHome() {
		webBrowser.goHome();
	}

	public void goBack() {
		webBrowser.goBack();
	}

	public void goForward() {
		webBrowser.goForward();
	}

	public void goSearch() {
		webBrowser.goSearch();
	}

	public void stop() {
		webBrowser.stop();
	}

	public void refresh() {
		webBrowser.refresh();
	}

	public void navigate(String url) {
		webBrowser.navigate(url);
	}
	
	public void print() {
		webBrowser.execWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT);
	}

	public void copy() {
		webBrowser.execWB(OLECMDID.OLECMDID_COPY, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT);
	}
	
	public void printPreview() {
		webBrowser.execWB(OLECMDID.OLECMDID_PRINTPREVIEW, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT);
	}

	public void saveAs() {
		webBrowser.execWB(OLECMDID.OLECMDID_SAVEAS, OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT);
	}
	
	public OleAutomation getOleAutomation() {
		return webBrowser.getOleAutomation(); 
	}

	public boolean isBackEnabled() {
		return backEnabled;
	}

	public boolean isForwardEnabled() {
		return forwardEnabled;
	}

	public String getAddress() {
		return address;
	}
}

⌨️ 快捷键说明

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