package com.topsun.posclient.application; import java.util.Calendar; import java.util.Date; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IStatusLineManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.CoolBar; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.application.ActionBarAdvisor; import org.eclipse.ui.application.IActionBarConfigurer; import org.eclipse.ui.application.IWorkbenchWindowConfigurer; import org.eclipse.ui.application.WorkbenchWindowAdvisor; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.topsun.posclient.common.POSClientApp; import com.topsun.posclient.common.ProjectUtil; import com.topsun.posclient.common.service.IBaseService; import com.topsun.posclient.common.service.impl.BaseServiceImpl; import com.topsun.posclient.datamodel.User; public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { private CoolBar coolBar; private Composite titleBar; private Composite titleBar2; private Composite statusLine; private int coolBarBgImgHeight; public ApplicationWorkbenchWindowAdvisor( IWorkbenchWindowConfigurer configurer) { super(configurer); } public ActionBarAdvisor createActionBarAdvisor( IActionBarConfigurer configurer) { return new ApplicationActionBarAdvisor(configurer); } @Override public boolean preWindowShellClose() { boolean flag = MessageDialog.openConfirm(this.getWindowConfigurer().getWindow().getShell(), "关闭", "确认是否关闭系统吗?"); if(!flag){ return false; }else{ return super.preWindowShellClose(); } } public void preWindowOpen() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); configurer.setShowCoolBar(true);// 显示工具条区域 configurer.setShowStatusLine(true);// 显示状态栏区域 configurer.setShowProgressIndicator(false); // 显示进度条区域 configurer.setTitle("豫园POS客户端"); // configurer.setShellStyle(SWT.CLOSE | SWT.MIN |SWT.MAX); configurer.setShowMenuBar(false);// 显示菜单区域 configurer.setShowFastViewBars(false); TopSunApplicationActivator.getCustomization().getWindowListener() .preWindowOpen(getWindowConfigurer()); // PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseUp, new // Listener() { // public void handleEvent(final Event event) { // int hwndCursor = OS.GetCapture(); // OS.PostMessage(hwndCursor, OS.WM_LBUTTONDOWN, hwndCursor, OS.HTCLIENT // | (OS.WM_MOUSEMOVE << 16)); // } // }); } @Override public void postWindowCreate() { IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); Shell shell = configurer.getWindow().getShell(); customizationWindow(shell); coolBar = (CoolBar) getWindowConfigurer().createCoolBarControl(shell); statusLine = (Composite) getWindowConfigurer().createStatusLineControl( shell); customizationWindow(shell); customizationCoolBar(coolBar, shell); // customizationStatusLine(statusLine, shell); TopSunApplicationActivator.getDefault().createTitleBarManager(titleBar); // TopSunApplicationActivator.getDefault().createStatusLineManager(statusLine); TopSunApplicationActivator.getDefault().createToolBarManager(coolBar); TopSunApplicationActivator.getDefault().setTitleBar2(titleBar2); TopSunApplicationActivator.getCustomization().getWindowListener() .postWindowCreate(getWindowConfigurer()); IStatusLineManager statusLine = configurer.getActionBarConfigurer() .getStatusLineManager(); User user = POSClientApp.get().getLoginUser(); String userName = ""; if(user != null){ userName = user.getUserName(); }else{ return; } String luts = ""; String lastUpdateTimeStr = POSClientApp.get().getSysConfig().getLastUpdateTime(); if(null != lastUpdateTimeStr && lastUpdateTimeStr.length() > 0){ long lastUpdateTime = Long.valueOf(lastUpdateTimeStr); luts = ProjectUtil.getDateTime(new Date(lastUpdateTime)); } IBaseService baseService = new BaseServiceImpl(); int shopId = Integer.valueOf(POSClientApp.get().getSysConfig().getOwnerShop()); try { String shopname = baseService.getShopNameById(shopId); statusLine.setMessage("姓名:" + userName + " 店铺:" + shopname + " 登录时间:" + ProjectUtil.getDateTime(Calendar.getInstance().getTime()) + " 最后更新:" + luts); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //} // statusLine.setMessage("姓名:" + userName + " 店铺:" // + POSClientApp.get().getSysConfig().getOwnerShop() // + " 登录时间:" + ProjectUtil.getDateTime(Calendar.getInstance().getTime()) // + " 最后更新:" // + luts); } private void customizationWindow(Shell shell) { shell.setMaximized(true); // frozenWindow(shell); } private void frozenWindow(final Shell shell) { final AtomicBoolean windowOpened = new AtomicBoolean(false); final AtomicInteger frozenWidth = new AtomicInteger(); final AtomicInteger frozenHeight = new AtomicInteger(); final AtomicInteger frozenX = new AtomicInteger(); final AtomicInteger frozenY = new AtomicInteger(); getWindowConfigurer().getWorkbenchConfigurer().getWorkbench() .addWindowListener(new WindowListenerAdaptor() { public void windowOpened(IWorkbenchWindow window) { Rectangle bounds = shell.getBounds(); windowOpened.set(true); frozenX.set(bounds.x); frozenY.set(bounds.y); frozenWidth.set(bounds.width); frozenHeight.set(bounds.height); } }); shell.addControlListener(new ControlListener() { public void controlResized(ControlEvent e) { if (windowOpened.get()) { if (!shell.getMinimized() && !shell.getMaximized()) { shell.setLocation(frozenX.get(), frozenY.get()); shell.setSize(frozenWidth.get(), frozenHeight.get()); } } } public void controlMoved(ControlEvent e) { if (windowOpened.get()) { if (shell.getLocation().x != frozenX.get() || shell.getLocation().y != frozenY.get()) { shell.setLocation(frozenX.get(), frozenY.get()); shell.setSize(frozenWidth.get(), frozenHeight.get()); } } } }); } @Override public void postWindowOpen() { /* 重画titleBar */ titleBar.layout(true); /* 重画coolBar,用于让coolBar的GridLayout.marginWidth生效 */ coolBar.layout(true); /* 根据coolBarParent的背景图片,重设置coolBar的高度以完全展现图片,再重画 */ if (coolBarBgImgHeight > 0) { ((FormData) coolBar.getLayoutData()).height = coolBarBgImgHeight - titleBar.getBounds().height; // ((FormData) coolBar.getLayoutData()).width = 300; coolBar.getParent().layout(true); } /* 重画statusLine */ statusLine.layout(true); super.postWindowOpen(); } private void customizationCoolBar(CoolBar coolBar, Shell shell) { FormLayout formLayout = new FormLayout(); Composite coolBarParent = coolBar.getParent(); coolBarParent.setLayout(formLayout); titleBar = new Composite(coolBarParent, SWT.NONE); { // 创建一个titleBar,将它放在coolbar的第一行 FormData formData = new FormData(); formData.top = new FormAttachment(0, 0); formData.left = new FormAttachment(0, 0); formData.right = new FormAttachment(100, 0); formData.bottom = new FormAttachment(0, 20); /* 设置titleBar的高度为20 */ titleBar.setLayoutData(formData); // 设置titleBar的layout GridLayout gridLayout = new GridLayout(); gridLayout.horizontalSpacing = gridLayout.marginWidth = 0; gridLayout.verticalSpacing = gridLayout.marginHeight = 0; titleBar.setLayout(gridLayout); } { // 将coolBar放在titleBar的下一行 FormData formData = new FormData(); formData.top = new FormAttachment(titleBar, 0, SWT.BOTTOM); formData.left = new FormAttachment(0, -10); formData.right = new FormAttachment(100, 0); // formData.bottom = new FormAttachment(0, 70); /*设置titleBar的高度为20*/ coolBar.setLayoutData(formData); coolBar.setLocked(true); // 设置coolBar的layout /* * 不能给coolbar设置gridlayout,否则当view最大化之后,coolbar会移动位置 * 这里给coolbar设置gridlayout只是想让第一个tool * item更靠近左边,现在这个通过上面的formData.left = new FormAttachment(0, -10); * GridLayout gridLayout = new GridLayout(); * gridLayout.horizontalSpacing = gridLayout.marginWidth = 2; * gridLayout.verticalSpacing = gridLayout.marginHeight = 0; * coolBar.setLayout(gridLayout); */ } titleBar2 = new Composite(coolBarParent, SWT.NONE); { FormData formData = new FormData(); formData.top = new FormAttachment(coolBar, 0, SWT.BOTTOM); formData.left = new FormAttachment(0, 0); formData.right = new FormAttachment(100, 0); titleBar2.setLayoutData(formData); Image image = AbstractUIPlugin.imageDescriptorFromPlugin( TopSunApplicationActivator.PLUGIN_ID, "icons/title-bar2-bg.png").createImage(); titleBar2.setBackgroundImage(image); formData.height = titleBar2.getBackgroundImage().getBounds().height; titleBar2.setLayout(new FillLayout()); titleBar2.setBackgroundMode(SWT.INHERIT_FORCE); } TopSunApplicationActivator.getDefault().setTitleBar2(titleBar2); customizationTitleBar(titleBar, shell); setCoolbarBackgroundImage(coolBar, shell); } private void customizationTitleBar(Composite titleBar, Shell shell) { int expectedChildrenNum = calculateContributionItemsNum(IContributionItemService.CATEGORY_TITLE_BAR); Composite titleBarToUse = createTitleBarToUse(titleBar, SWT.NONE, expectedChildrenNum); boolean filledItems = fillCompositeWithContributionItems(titleBarToUse, IContributionItemService.CATEGORY_TITLE_BAR); if (!filledItems) { ((FormData) titleBar.getLayoutData()).height = 0; } } private void setCoolbarBackgroundImage(CoolBar coolBar, Shell shell) { Image image = AbstractUIPlugin.imageDescriptorFromPlugin( TopSunApplicationActivator.PLUGIN_ID, "icons/coolbar-high-bg.png").createImage(); // kBgImgHeight = 80; // Image image = // TopSunApplicationActivator.getCustomization().getToolBarBackgroundImage(); if (image != null) { coolBar.getParent().setBackgroundImage(image); coolBar.getParent().setBackgroundMode(SWT.INHERIT_FORCE); coolBarBgImgHeight = 80; } } private int calculateContributionItemsNum(String itemCategroy) { IContributionItemService itemService = TopSunApplicationActivator .getContributionItemService(); IContributionItem[] items = itemService.getItems(itemCategroy); int length = 0; if (items != null) { for (int i = 0; i < items.length; i++) { if (items[i] != null && items[i].isVisible()) { length++; } } } return length; } private Composite createTitleBarToUse(Composite composite, int style, int expectedChildrenNum) { return TopSunApplicationActivator.getCustomization() .getTitleBarCreator() .createComposite(composite, style, expectedChildrenNum); } private boolean fillCompositeWithContributionItems(Composite parent, String itemCategroy) { IContributionItemService itemService = TopSunApplicationActivator .getContributionItemService(); IContributionItem[] items = itemService.getItems(itemCategroy); if (items != null) { for (IContributionItem item : items) { if (item != null && item.isVisible()) { item.fill(parent); } } } return items.length > 0; } }