亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? desktopform.java

?? Eclipse編程技術與實例一書配套的光盤代碼全部內容
?? JAVA
字號:
package org.test.custom.shell;

import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

import org.test.custom.internal.DesktopListener;
import org.test.custom.shell.InternalShell;

/**
 * DesktopForm負責管理內部Shell。
 */

public class DesktopForm extends Composite {
	private static final InternalShell[] EMPTY_INTERNALSHELL_ARRAY = new InternalShell[0];

	private static final int FIRST_SHELL_LOCATION = 32;

	private static final int SHELL_LOCATION_OFFSET = 16;

	private InternalShell activeShell;

	private ArrayList desktopListeners = new ArrayList();

	private ArrayList visibleShells = new ArrayList();

	private int nextShellLocation = FIRST_SHELL_LOCATION;

	private boolean showMaximizedTitle;

	private boolean autoMaximize = true;

	private boolean enableCtrlTab = true;

	/**
	 * DesktopForm類的構造函數; 參數:Composite類和樣式; 功能:調用父類的構造函數、設定背景顏色以及添加listeners;
	 * 
	 * 注冊了Resize、MouseDown、FocusIn、Traverse和Dispose五個事件的偵聽器;
	 */

	public DesktopForm(Composite parent, int style) {
		super(parent, style);
		final Display display = getDisplay();
		final Shell shell = getShell();

		setBackground(display
				.getSystemColor(SWT.COLOR_TITLE_INACTIVE_BACKGROUND));

		addListener(SWT.Resize, new Listener() {
			public void handleEvent(Event event) {
				Rectangle ca = getClientArea();
				Control[] control = getChildren();

				int size = control.length;
				int i = 0;

				for (; i < size; i++) {
					if (control[i] instanceof InternalShell)
						((InternalShell) control[i]).desktopResized(ca);
				}
			}
		});

		final Listener mouseDownFilter = new Listener() {
			public void handleEvent(Event event) {
				if (!(event.widget instanceof Control))
					return;
				Control c = (Control) event.widget;
				if (c.getShell() != shell)
					return;
				InternalShell ishell = getInternalShell(c);
				if (ishell == null)
					return;
				activate(ishell);
			}
		};

		final Listener focusInFilter = new Listener() {
			public void handleEvent(Event event) {
				if (!(event.widget instanceof Control))
					return;
				Control c = (Control) event.widget;
				if (c.getShell() != shell)
					return;
				InternalShell ishell = getInternalShell(c);
				if (ishell == null)
					return;
				ishell.focusControl = c;
			}
		};

		final Listener traverseFilter = new Listener() {
			public void handleEvent(Event event) {
				if (!enableCtrlTab)
					return;
				if (!event.doit)
					return;
				if ((event.stateMask & SWT.CTRL) == 0)
					return;
				if (event.detail != SWT.TRAVERSE_TAB_NEXT
						&& event.detail != SWT.TRAVERSE_TAB_PREVIOUS)
					return;
				if (!(event.widget instanceof Control))
					return;
				Control c = (Control) event.widget;
				if (c.getShell() != shell)
					return;
				InternalShell ishell = getInternalShell(c);
				if (ishell == null)
					return;

				if (event.detail == SWT.TRAVERSE_TAB_NEXT)
					activateNextShell();
				else
					activatePreviousShell();
				event.doit = false;
			}
		};

		// 為display添加事件偵聽器,這樣它就能接收任何地方的發生的這些事件
		display.addFilter(SWT.MouseDown, mouseDownFilter);
		display.addFilter(SWT.FocusIn, focusInFilter);
		display.addFilter(SWT.Traverse, traverseFilter);

		addListener(SWT.Dispose, new Listener() {
			public void handleEvent(Event event) {
				display.removeFilter(SWT.MouseDown, mouseDownFilter);
				display.removeFilter(SWT.FocusIn, focusInFilter);
				display.removeFilter(SWT.Traverse, traverseFilter);
			}
		});
	}

	/**
	 * DesktopForm類的manage方法; 參數:InternalShell類; 功能:管理主窗口里的Shell;
	 */

	void manage(final InternalShell ishell) {
		Rectangle bounds = getBounds();
		if (nextShellLocation > bounds.height - 100
				|| nextShellLocation > bounds.width - 100)
			nextShellLocation = FIRST_SHELL_LOCATION;
		ishell.setLocation(bounds.x + nextShellLocation, bounds.y
				+ nextShellLocation);
		nextShellLocation += SHELL_LOCATION_OFFSET;

		ishell.addListener(SWT.Dispose, new Listener() {
			public void handleEvent(Event event) {
				visibleShells.remove(ishell);
				if (ishell == activeShell) {
					activateTopmostVisibleShellExcept(ishell);
					if (autoMaximize && !hasVisibleMaximizedShell())
						setAllMaximized(false);
				}
				notifyDesktopListenersDispose(ishell);
			}
		});
		if (ishell.isVisible())
			visibleShells.add(ishell);
		notifyDesktopListenersCreate(ishell);
	}

	// 激活除了except以外的InternalShell
	private InternalShell activateTopmostVisibleShellExcept(InternalShell except) {
		Control[] children = getChildren();
		for (int i = 0; i < children.length; i++) {
			Control c = children[i];
			if (c == except)
				continue;
			if (c instanceof InternalShell && c.isVisible()) {
				InternalShell ishell = (InternalShell) c;
				activate(ishell);
				return ishell;
			}
		}
		activeShell = null;
		notifyDesktopListenersActivate(null);
		return null;
	}

	// 激活ishell窗口
	void activate(InternalShell ishell) {
		if (ishell == activeShell)
			return;
		checkWidget();
		if ((ishell.getStyle() & SWT.ON_TOP) != 0)
			ishell.moveAbove(null);
		else {
			InternalShell firstRegular = getTopmostRegularShell();
			if (firstRegular != null && firstRegular != ishell)
				ishell.moveAbove(firstRegular);
		}
		InternalShell oldActiveShell = activeShell;
		activeShell = ishell;
		if (oldActiveShell != null)
			oldActiveShell.redrawDecorationsAfterActivityChange();
		if (activeShell.isVisible())
			activeShell.redrawDecorationsAfterActivityChange();
		setTabList(new Control[] { activeShell });
		activeShell.setFocus();
		notifyDesktopListenersActivate(ishell);
	}

	// 返回最上層的InternalShell
	private InternalShell getTopmostRegularShell() {
		Control[] control = getChildren();

		int size = control.length;
		int i;

		for (i = 0; i < size; i++) {
			if (!(control[i] instanceof InternalShell))
				continue;
			if ((control[i].getStyle() & SWT.ON_TOP) == 0)
				return (InternalShell) control[i];
		}
		return null;
	}

	// 返回最底層的InternalShell
	private InternalShell getBottommostOnTopShell() {
		Control[] ch = getChildren();
		for (int i = ch.length - 1; i >= 0; i--) {
			Control c = ch[i];
			if (!(c instanceof InternalShell))
				continue;
			if ((c.getStyle() & SWT.ON_TOP) != 0)
				return (InternalShell) c;
		}
		return null;
	}

	// 改變InternalShell的可見性
	void shellVisibilityChanged(InternalShell ishell, boolean visible) {
		if (visible) {
			if (!visibleShells.contains(ishell)) {
				visibleShells.add(ishell);
				if (autoMaximize && !ishell.getMaximized()
						&& (ishell.getStyle() & SWT.MAX) != 0
						&& hasVisibleMaximizedShell())
					ishell.setMaximizedWithoutNotification(true);
			}
		} else {
			visibleShells.remove(ishell);
			if (ishell == activeShell) {
				activateTopmostVisibleShellExcept(ishell);
				if (autoMaximize && !hasVisibleMaximizedShell())
					setAllMaximized(false);
			}
		}
	}

	// 得到InternalShell
	private InternalShell getInternalShell(Control c) {
		while (c != null && c != DesktopForm.this) {
			if (c instanceof InternalShell
					&& ((InternalShell) c).getParent() == this)
				return (InternalShell) c;
			c = c.getParent();
		}
		return null;
	}

	/**
	 * DesktopForm的公共方法;
	 * 
	 * 返回當前處于活動狀態的內部窗口;
	 */
	public InternalShell getActiveShell() {
		return activeShell;
	}

	/**
	 * DesktopForm的公共方法;
	 * 
	 * 返回DesktopForm中所有可見的窗口;
	 */
	public InternalShell[] getVisibleShells() {
		checkWidget();
		return (InternalShell[]) visibleShells
				.toArray(EMPTY_INTERNALSHELL_ARRAY);
	}

	// 設置是否最大化InternalShell時顯示它的菜單欄
	public void setShowMaximizedTitle(boolean b) {
		checkWidget();
		showMaximizedTitle = b;
		Rectangle ca = getClientArea();

		Control[] control = getChildren();
		int size = control.length;
		int i = 0;

		for (; i < size; i++) {
			if (control[i] instanceof InternalShell)
				((InternalShell) control[i]).desktopResized(ca);
		}
	}

	/**
	 * DesktopForm的公共方法
	 * 
	 * 返回boolean變量,判斷是否顯示標題欄
	 */
	public boolean getShowMaximizedTitle() {
		checkWidget();
		return showMaximizedTitle;
	}

	public void setAutoMaximize(boolean b) {
		checkWidget();
		autoMaximize = b;
		boolean hasMax = false;

		Object[] internalShell = visibleShells.toArray();
		int size = internalShell.length;
		int i;

		InternalShell myShell;
		for (i = 0; i < size; i++) {
			myShell = (InternalShell) internalShell[i];
			if (myShell.getMaximized()) {
				hasMax = true;
				break;
			}
		}

		if (hasMax) {
			// Maximize all shells
			for (i = 0; i < size; i++) {
				myShell = (InternalShell) internalShell[i];
				if ((myShell.getStyle() & SWT.MAX) != 0)
					myShell.setMaximized(true);
			}
		}
	}

	/**
	 * DesktopForm的公共方法
	 * 
	 * 返回一個boolean變量,判斷是否允許其自動最大化;
	 */
	public boolean getAutoMaximize() {
		checkWidget();
		return autoMaximize;
	}

	/**
	 * DesktopForm的公共方法 參數:boolean
	 * 
	 * 功能:設定enableCtrlTab的值;
	 */
	public void setEnableCtrlTab(boolean b) {
		checkWidget();
		this.enableCtrlTab = b;
	}

	/**
	 * DesktopForm的公共方法
	 * 
	 * 返回一個boolean變量,判斷是否允許使用Ctrl+Tab遍歷內部窗口;
	 */
	public boolean getEnableCtrlTab() {
		return enableCtrlTab;
	}

	// 最大化或返回原始大小
	void shellMaximizedOrRestored(InternalShell ishell, boolean maximized) {
		setAllMaximized(maximized);
	}

	// 使所有的InternalShell最大化
	private void setAllMaximized(boolean maximized) {
		if (autoMaximize) // maximize or restore all shells
		{
			Control[] control = getChildren();
			int size = control.length;
			int i;

			for (i = 0; i < size; i++) {
				if (control[i] instanceof InternalShell) {
					InternalShell ishell = (InternalShell) control[i];
					if ((ishell.getStyle() & SWT.MAX) != 0)
						((InternalShell) control[i])
								.setMaximizedWithoutNotification(maximized);
				}
			}
		}
	}

	// 在遍歷InternalShell時,激發下一個InternalShell
	private void activateNextShell() {
		if (visibleShells.size() < 2)
			return;
		InternalShell topReg = getTopmostRegularShell();
		InternalShell botTop = getBottommostOnTopShell();
		if ((activeShell.getStyle() & SWT.ON_TOP) != 0) {
			activeShell.moveBelow(botTop);
			if (topReg != null)
				activate(topReg);
			else
				activateTopmostVisibleShellExcept(null);
		} else {
			activeShell.moveBelow(null);
			activateTopmostVisibleShellExcept(null);
		}
	}

	// 激發前一個InternalShell
	private void activatePreviousShell() {
		if (visibleShells.size() < 2)
			return;
		InternalShell topReg = getTopmostRegularShell();
		InternalShell botTop = getBottommostOnTopShell();
		if (activeShell == topReg && botTop != null)
			activate(botTop);
		else {
			Control[] ch = getChildren();
			for (int i = ch.length - 1; i >= 0; i--) {
				if (ch[i] instanceof InternalShell && ch[i].isVisible()) {
					activate((InternalShell) ch[i]);
					break;
				}
			}
		}
	}

	public void addDesktopListener(DesktopListener l) {
		desktopListeners.add(l);
	}

	public void removeDesktopListener(DesktopListener l) {
		desktopListeners.remove(l);
	}

	/**
	 * DesktopForm的私有方法;
	 * 
	 * 產生InternalShell被創建的事件通知
	 */
	private void notifyDesktopListenersCreate(InternalShell ishell) {
		Event event = new Event();
		event.widget = ishell;

		Object[] listener = desktopListeners.toArray();
		int size = listener.length;
		int i = 0;

		DesktopListener mylistener;
		for (; i < size; i++) {
			mylistener = (DesktopListener) listener[i];
			mylistener.shellCreated(event);
		}
	}

	// 產生InternalShell被銷毀的事件通知
	private void notifyDesktopListenersDispose(InternalShell ishell) {
		Event event = new Event();
		event.widget = ishell;

		Object[] listener = desktopListeners.toArray();
		int size = listener.length;
		int i = 0;

		DesktopListener mylistener;
		for (; i < size; i++) {
			mylistener = (DesktopListener) listener[i];
			mylistener.shellDisposed(event);
		}
	}

	// InternalShell被激活的事件
	private void notifyDesktopListenersActivate(InternalShell ishell) {
		Event event = new Event();
		event.widget = ishell;

		Object[] listener = desktopListeners.toArray();
		int size = listener.length;
		int i = 0;

		DesktopListener mylistener;
		for (; i < size; i++) {
			mylistener = (DesktopListener) listener[i];
			mylistener.shellActivated(event);
		}
	}

	// 是否含有最大化的InternalShell
	private boolean hasVisibleMaximizedShell() {
		Object[] internalShell = visibleShells.toArray();
		int size = internalShell.length;
		int i;

		InternalShell myShell;
		for (i = 0; i < size; i++) {
			myShell = (InternalShell) internalShell[i];
			if (myShell.getMaximized())
				return true;
		}

		return false;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久免费看| 欧美日韩国产首页| 亚洲国产激情av| 成人亚洲精品久久久久软件| 久久精子c满五个校花| 国产高清成人在线| 久久久久久一级片| 99久久99久久精品国产片果冻 | 日韩一区二区在线播放| 夜夜嗨av一区二区三区| 欧美午夜电影网| 蜜臀久久久99精品久久久久久| 日韩欧美亚洲国产另类| 国产剧情av麻豆香蕉精品| 国产精品区一区二区三| av一区二区三区在线| 综合亚洲深深色噜噜狠狠网站| 丁香啪啪综合成人亚洲小说| 亚洲视频一区二区免费在线观看| 91麻豆精品在线观看| 性欧美大战久久久久久久久| 欧美一级生活片| 国产综合成人久久大片91| 久久久精品蜜桃| 99精品久久99久久久久| 亚洲国产裸拍裸体视频在线观看乱了| 欧美精品v国产精品v日韩精品| 青青草97国产精品免费观看| 欧美精品一区二区三区很污很色的 | 国产一区免费电影| 国产三级欧美三级日产三级99| 风间由美一区二区av101| 国产精品视频一区二区三区不卡| 91原创在线视频| 香港成人在线视频| 久久久一区二区三区捆绑**| 暴力调教一区二区三区| 亚洲人成网站在线| 欧美视频三区在线播放| 青青青伊人色综合久久| 中日韩av电影| 色婷婷亚洲综合| 国产成人亚洲综合色影视| 亚洲一区av在线| 26uuu色噜噜精品一区二区| 91影院在线免费观看| 一二三四社区欧美黄| 欧美一级高清片| 免播放器亚洲一区| 中文字幕av一区二区三区免费看| 一本久道久久综合中文字幕| 精品一区二区综合| 亚洲另类一区二区| 久久婷婷色综合| 色婷婷av一区二区三区软件| 久久精品久久精品| 亚洲欧美偷拍卡通变态| 久久久一区二区三区捆绑**| 在线亚洲+欧美+日本专区| 国产麻豆视频一区二区| 亚洲国产日日夜夜| 国产女主播一区| 欧美一级电影网站| 欧美在线观看一区二区| 色综合久久久久网| 国产一区二区三区免费观看| 日韩主播视频在线| 日韩一区中文字幕| 久久久久久久久久电影| 777奇米成人网| 色丁香久综合在线久综合在线观看| 国内精品久久久久影院薰衣草| 久久久久国产免费免费 | 亚洲一区在线视频| 国产精品卡一卡二| 久久久不卡网国产精品二区| 日韩欧美123| 欧美精品一卡两卡| 欧美性猛交一区二区三区精品| 久久er精品视频| 午夜精品在线看| 亚洲国产aⅴ成人精品无吗| 亚洲视频网在线直播| 中文字幕乱码久久午夜不卡 | 色菇凉天天综合网| 国内成人精品2018免费看| 午夜精品成人在线| 亚洲精品免费在线播放| 亚洲一区二区三区四区五区黄| 亚洲激情图片qvod| 亚洲国产一区二区在线播放| 一级中文字幕一区二区| 亚洲国产精品久久久久婷婷884 | 国产精品二区一区二区aⅴ污介绍| 亚洲精品一区二区三区在线观看 | 久久精品国产999大香线蕉| 午夜精品成人在线视频| 三级在线观看一区二区| 午夜精品久久久久| 日本aⅴ精品一区二区三区| 日日摸夜夜添夜夜添国产精品| 日韩精品五月天| 秋霞电影一区二区| 国产综合色视频| 国产精品亚洲成人| 国产精品一二一区| 成人精品免费看| 一本色道久久综合亚洲精品按摩| 91影视在线播放| 欧美日韩一区二区不卡| 欧美va亚洲va香蕉在线| 久久久99免费| 亚洲综合色噜噜狠狠| 日韩av网站免费在线| 久久精品av麻豆的观看方式| 国产精品一区二区视频| 成人黄色777网| 91福利国产精品| 日韩女优av电影| 欧美国产欧美综合| 自拍偷拍国产亚洲| 亚洲国产成人porn| 久久av资源网| 成人三级在线视频| 欧美日韩久久不卡| 精品乱人伦小说| 日韩一区欧美一区| 日本不卡123| 成人黄色在线视频| 欧美日韩免费不卡视频一区二区三区| 欧美裸体一区二区三区| 久久天天做天天爱综合色| 欧美成人女星排名| 亚洲精品高清在线| 久久成人羞羞网站| 91麻豆swag| 精品久久久网站| 亚洲美女少妇撒尿| 国产99一区视频免费| 欧美日韩高清影院| 日韩理论片网站| 精品一区二区久久| 欧美日韩不卡一区| 国产精品久久久久影视| 免费观看91视频大全| 色综合欧美在线| 国产午夜精品一区二区| 午夜精品一区二区三区三上悠亚| 国产盗摄一区二区| 欧美浪妇xxxx高跟鞋交| 久久精品人人做人人爽人人| 91精品国产综合久久精品| 亚洲自拍偷拍麻豆| 成人黄色片在线观看| 日韩女优视频免费观看| 亚洲国产成人porn| 色综合久久久久| 国产精品青草综合久久久久99| 捆绑调教美女网站视频一区| 欧美亚洲禁片免费| 亚洲欧洲日韩av| 国产成人在线免费| 2017欧美狠狠色| 性欧美疯狂xxxxbbbb| 欧美三电影在线| 亚洲女同女同女同女同女同69| 国产老女人精品毛片久久| 日韩精品一区二区三区蜜臀 | 国内成人精品2018免费看| 日韩一区二区三区视频| 青青国产91久久久久久| 56国语精品自产拍在线观看| 亚洲综合在线免费观看| 99国产麻豆精品| 中文字幕亚洲区| 成人99免费视频| 国产精品免费观看视频| 国产精品羞羞答答xxdd| 日韩精品一区二| 久久精品国产亚洲5555| 91精品国产免费久久综合| 亚洲成va人在线观看| 欧美中文字幕一二三区视频| 亚洲男人天堂av网| 一本大道久久a久久综合婷婷| ...xxx性欧美| av影院午夜一区| 亚洲色图都市小说| 成人高清在线视频| 一区二区三区 在线观看视频| 色婷婷综合视频在线观看| 国产精品色哟哟| 99久久国产综合精品色伊| 国产精品污网站| 菠萝蜜视频在线观看一区| 亚洲视频在线一区二区| 欧美人与性动xxxx| 奇米777欧美一区二区| 国产三级三级三级精品8ⅰ区| av在线播放不卡|