Package de.toaot

Source Code of de.toaot.ApplicationWorkbenchWindowAdvisor

package de.toaot;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tray;
import org.eclipse.swt.widgets.TrayItem;
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.handlers.IHandlerService;
import org.eclipse.ui.plugin.AbstractUIPlugin;

/**
* @author hseifert
*
*/
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {

  private IWorkbenchWindow window;
  private TrayItem trayItem;
  private Image trayImage;
  private final static String COMMAND_ID = "de.toaot.commands.exitCommand";

  /**
   * @param configurer
   */
  public ApplicationWorkbenchWindowAdvisor(
      IWorkbenchWindowConfigurer configurer) {
    super(configurer);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.application.WorkbenchWindowAdvisor#createActionBarAdvisor
   * (org.eclipse.ui.application.IActionBarConfigurer)
   */
  public ActionBarAdvisor createActionBarAdvisor(
      IActionBarConfigurer configurer) {
    return new ApplicationActionBarAdvisor(configurer);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.application.WorkbenchWindowAdvisor#preWindowOpen()
   */
  public void preWindowOpen() {
    IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
    configurer.setInitialSize(new Point(400, 300));
    configurer.setShowCoolBar(true);
    configurer.setShowStatusLine(true);
  }

  @Override
  public void postWindowOpen() {
    super.postWindowOpen();
    window = getWindowConfigurer().getWindow();
    trayItem = initTaskItem(window);
    if (trayItem != null) {
      createMinimize();
      // Create exit and about action on the icon
      hookPopupMenu();
    }
  }

  // Add a listener to the shell
  // If the window is minimized hide the window
  private void createMinimize() {
    window.getShell().addShellListener(new ShellAdapter() {
      public void shellIconified(ShellEvent e) {
        window.getShell().setVisible(false);
      }
    });
    // If user double-clicks on the tray icons the application will be
    // visible again
    trayItem.addListener(SWT.DefaultSelection, new Listener() {
      public void handleEvent(Event event) {
        Shell shell = window.getShell();
        if (!shell.isVisible()) {
          shell.setVisible(true);
          window.getShell().setMinimized(false);
        }
      }
    });
  }

  // We hook up on menu entry which allows to close the application
  private void hookPopupMenu() {
    trayItem.addListener(SWT.MenuDetect, new Listener() {
      public void handleEvent(Event event) {
        Menu menu = new Menu(window.getShell(), SWT.POP_UP);

        // Creates a new menu item that terminates the program
        // when selected
        MenuItem exit = new MenuItem(menu, SWT.NONE);
        exit.setText("Goodbye!");
        exit.addListener(SWT.Selection, new Listener() {
          public void handleEvent(Event event) {
            // Lets call our command
            IHandlerService handlerService = (IHandlerService) window
                .getService(IHandlerService.class);
            try {
              handlerService.executeCommand(COMMAND_ID, null);
            } catch (Exception ex) {
              throw new RuntimeException(COMMAND_ID);
            }
          }
        });
        // We need to make the menu visible
        menu.setVisible(true);
      }
    });
  }

  private TrayItem initTaskItem(IWorkbenchWindow window) {
    final Tray tray = window.getShell().getDisplay().getSystemTray();
    TrayItem trayItem = new TrayItem(tray, SWT.NONE);
    trayImage = AbstractUIPlugin.imageDescriptorFromPlugin(
        "de.toaot", "/icons/16-16/logo.png")
        .createImage();
    trayItem.setImage(trayImage);
    trayItem.setToolTipText("ToaoT\nThe one and only Twitter client");
    return trayItem;

  }

  // We need to clean-up after ourself
  @Override
  public void dispose() {
    if (trayImage != null) {
      trayImage.dispose();
      trayItem.dispose();
    }
  }

}
TOP

Related Classes of de.toaot.ApplicationWorkbenchWindowAdvisor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.