| /******************************************************************************* |
| * Copyright (c) 2004, 2005 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.presentations.util; |
| |
| import org.eclipse.core.commands.common.EventManager; |
| import org.eclipse.jface.action.ContributionItem; |
| import org.eclipse.jface.action.ToolBarManager; |
| import org.eclipse.jface.util.Geometry; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.MouseAdapter; |
| import org.eclipse.swt.events.MouseEvent; |
| import org.eclipse.swt.events.MouseListener; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.graphics.Rectangle; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.ToolBar; |
| import org.eclipse.swt.widgets.ToolItem; |
| import org.eclipse.ui.IPropertyListener; |
| import org.eclipse.ui.internal.IWorkbenchGraphicConstants; |
| import org.eclipse.ui.internal.WorkbenchImages; |
| import org.eclipse.ui.internal.WorkbenchMessages; |
| import org.eclipse.ui.presentations.IStackPresentationSite; |
| |
| /** |
| * @since 3.1 |
| */ |
| public class StandardSystemToolbar extends EventManager { |
| private ToolBarManager toolbarManager; |
| private Composite control; |
| |
| private class SystemMenuContribution extends ContributionItem { |
| ToolItem item; |
| Image img; |
| String text; |
| int flags; |
| |
| public SystemMenuContribution() { |
| this(SWT.PUSH); |
| } |
| |
| public SystemMenuContribution(int flags) { |
| this.flags = flags; |
| } |
| |
| public void setToolTipText(String text) { |
| this.text = text; |
| if (item != null) { |
| item.setToolTipText(text); |
| } |
| } |
| |
| public void setImage(Image img) { |
| this.img = img; |
| |
| if (item != null) { |
| item.setImage(img); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.action.ContributionItem#setVisible(boolean) |
| */ |
| public void setVisible(boolean visible) { |
| if (visible != isVisible()) { |
| toolbarManager.markDirty(); |
| } |
| |
| super.setVisible(visible); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.ToolBar, int) |
| */ |
| public void fill(ToolBar parent, int index) { |
| if (!isVisible()) { |
| return; |
| } |
| |
| item = new ToolItem(parent, flags, index); |
| if (img != null) { |
| item.setImage(img); |
| } |
| if (text != null) { |
| item.setToolTipText(text); |
| } |
| item.addSelectionListener(selectionListener); |
| } |
| } |
| |
| private class PaneMenu extends SystemMenuContribution { |
| |
| public PaneMenu() { |
| super(SWT.NONE); |
| } |
| |
| public void setToolTipText(String text) { |
| super.setToolTipText(text); |
| } |
| |
| public void setImage(Image img) { |
| |
| super.setImage(img); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.ToolBar, int) |
| */ |
| public void fill(ToolBar parent, int index) { |
| if (!isVisible()) { |
| return; |
| } |
| super.fill(parent, index); |
| } |
| } |
| |
| |
| private MouseListener mouseListener = new MouseAdapter() { |
| /* (non-Javadoc) |
| * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent) |
| */ |
| public void mouseDown(MouseEvent e) { |
| ToolItem item = toolbarManager.getControl().getItem(new Point(e.x, e.y)); |
| |
| if (item == paneMenu.item && e.button == 1) { |
| fireEvent(TabFolderEvent.EVENT_PANE_MENU); |
| } |
| } |
| }; |
| |
| private SystemMenuContribution paneMenu = new PaneMenu(); |
| private SystemMenuContribution showToolbar = new SystemMenuContribution(); |
| private SystemMenuContribution min = new SystemMenuContribution(); |
| private SystemMenuContribution max = new SystemMenuContribution(); |
| private SystemMenuContribution close = new SystemMenuContribution(); |
| |
| private int state = IStackPresentationSite.STATE_RESTORED; |
| private boolean showingToolbar = true; |
| |
| private SelectionAdapter selectionListener = new SelectionAdapter() { |
| public void widgetSelected(SelectionEvent e) { |
| if (e.widget == paneMenu.item) { |
| //fireEvent(TabFolderEvent.EVENT_PANE_MENU); |
| } else if (e.widget == showToolbar.item) { |
| if (showingToolbar) { |
| fireEvent(TabFolderEvent.EVENT_HIDE_TOOLBAR); |
| } else { |
| fireEvent(TabFolderEvent.EVENT_SHOW_TOOLBAR); |
| } |
| } else if (e.widget == min.item) { |
| if (state == IStackPresentationSite.STATE_MINIMIZED) { |
| fireEvent(TabFolderEvent.EVENT_RESTORE); |
| } else { |
| fireEvent(TabFolderEvent.EVENT_MINIMIZE); |
| } |
| } else if (e.widget == max.item) { |
| if (state == IStackPresentationSite.STATE_MAXIMIZED) { |
| fireEvent(TabFolderEvent.EVENT_RESTORE); |
| } else { |
| fireEvent(TabFolderEvent.EVENT_MAXIMIZE); |
| } |
| } else if (e.widget == close.item) { |
| fireEvent(TabFolderEvent.EVENT_CLOSE); |
| } |
| } |
| }; |
| |
| public StandardSystemToolbar(Composite parent, boolean showPaneMenu, |
| boolean showHideToolbar, boolean showMinimize, boolean showMaximize, boolean enableClose) { |
| |
| control = new Composite(parent, SWT.NONE); |
| control.setLayout(new EnhancedFillLayout()); |
| |
| toolbarManager = new ToolBarManager(SWT.FLAT); |
| toolbarManager.createControl(control); |
| toolbarManager.getControl().addMouseListener(mouseListener); |
| |
| toolbarManager.add(paneMenu); |
| paneMenu.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_VIEW_MENU_THIN)); |
| paneMenu.setVisible(showPaneMenu); |
| paneMenu.setToolTipText(WorkbenchMessages.Menu); |
| |
| toolbarManager.add(showToolbar); |
| showToolbar.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_HIDE_TOOLBAR_THIN)); |
| showToolbar.setVisible(showHideToolbar); |
| |
| toolbarManager.add(min); |
| min.setVisible(showMinimize); |
| |
| toolbarManager.add(max); |
| max.setVisible(showMaximize); |
| |
| toolbarManager.add(close); |
| close.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_CLOSE_VIEW_THIN)); |
| close.setVisible(enableClose); |
| |
| setState(IStackPresentationSite.STATE_RESTORED); |
| |
| toolbarManager.update(true); |
| } |
| |
| public Point getPaneMenuLocation() { |
| |
| Rectangle bounds = Geometry.toDisplay(paneMenu.item.getParent(), paneMenu.item.getBounds()); |
| return new Point(bounds.x, bounds.y + bounds.height); |
| } |
| |
| public void enableClose(boolean enabled) { |
| close.setVisible(enabled); |
| toolbarManager.update(false); |
| } |
| |
| public void enableMinimize(boolean enabled) { |
| min.setVisible(enabled); |
| toolbarManager.update(false); |
| } |
| |
| public void enableMaximize(boolean enabled) { |
| max.setVisible(enabled); |
| toolbarManager.update(false); |
| } |
| |
| public void enableShowToolbar(boolean enabled) { |
| showToolbar.setVisible(enabled); |
| toolbarManager.update(false); |
| } |
| |
| public void enablePaneMenu(boolean enabled) { |
| paneMenu.setVisible(enabled); |
| toolbarManager.update(false); |
| } |
| |
| /** |
| * Updates the icons on the state buttons to match the given state |
| * @param newState |
| * @since 3.1 |
| */ |
| public void setState(int newState) { |
| if (min != null) { |
| if (newState == IStackPresentationSite.STATE_MINIMIZED) { |
| min.setToolTipText(WorkbenchMessages.StandardSystemToolbar_Restore); |
| min.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_RESTORE_VIEW_THIN)); |
| } else { |
| min.setToolTipText(WorkbenchMessages.StandardSystemToolbar_Minimize); |
| min.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_MIN_VIEW_THIN)); |
| } |
| } |
| if (max != null) { |
| if (newState == IStackPresentationSite.STATE_MAXIMIZED) { |
| max.setToolTipText(WorkbenchMessages.StandardSystemToolbar_Restore); |
| max.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_RESTORE_VIEW_THIN)); |
| } else { |
| max.setToolTipText(WorkbenchMessages.StandardSystemToolbar_Maximize); |
| max.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_MAX_VIEW_THIN)); |
| } |
| } |
| |
| state = newState; |
| } |
| |
| public void setToolbarShowing(boolean isShowing) { |
| showingToolbar = isShowing; |
| if (showToolbar != null) { |
| if (isShowing) { |
| showToolbar.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_HIDE_TOOLBAR_THIN)); |
| } else { |
| showToolbar.setImage(WorkbenchImages.getImage(IWorkbenchGraphicConstants.IMG_LCL_SHOW_TOOLBAR_THIN)); |
| } |
| } |
| } |
| |
| public void addListener(IPropertyListener propertyListener) { |
| addListenerObject(propertyListener); |
| } |
| |
| public void removeListener(IPropertyListener propertyListener) { |
| removeListenerObject(propertyListener); |
| } |
| |
| public Control getControl() { |
| return control; |
| } |
| |
| private void fireEvent(int event) { |
| Object[] list = getListeners(); |
| |
| for (int i = 0; i < list.length; i++) { |
| IPropertyListener listener = (IPropertyListener)list[i]; |
| |
| listener.propertyChanged(this, event); |
| } |
| } |
| } |