Package org.eclipse.ecf.presence.ui

Source Code of org.eclipse.ecf.presence.ui.MessageNotificationPopup

/*******************************************************************************
* Copyright (c) 2004 - 2006 University Of British Columbia 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:
*     University Of British Columbia - initial API and implementation
*     Rob Elves - creator of the original TaskListNotificationPopup class
*******************************************************************************/

package org.eclipse.ecf.presence.ui;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.forms.events.HyperlinkAdapter;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.widgets.*;

class MessageNotificationPopup extends PopupDialog {

  private FormToolkit toolkit;

  private Form form;

  private Composite sectionClient;

  private IWorkbenchWindow window;

  private String userName;

  private String message;
  private ID userID;

  MessageNotificationPopup(IWorkbenchWindow window, Shell parent, ID userID) {
    super(parent, PopupDialog.INFOPOPUP_SHELLSTYLE | SWT.ON_TOP, false, false, false, false, false, null, null);
    this.window = window;
    this.userID = userID;
  }

  public boolean close() {
    toolkit.dispose();
    return super.close();
  }

  void setContent(String userName, String message) {
    this.userName = userName;
    this.message = message;
  }

  protected Control createContents(Composite parent) {
    getShell().setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_GRAY));
    toolkit = new FormToolkit(parent.getDisplay());
    form = toolkit.createForm(parent);
    form.getBody().setLayout(new FillLayout());

    Section section = toolkit.createSection(form.getBody(), ExpandableComposite.TITLE_BAR);
    section.setText(userName);
    section.setLayout(new FillLayout());

    sectionClient = toolkit.createComposite(section);
    sectionClient.setLayout(new GridLayout());
    Hyperlink link = toolkit.createHyperlink(sectionClient, message, SWT.NONE);
    link.addHyperlinkListener(new HyperlinkAdapter() {
      public void linkActivated(HyperlinkEvent e) {
        try {
          MessagesView view = (MessagesView) window.getActivePage().showView(MessagesView.VIEW_ID);
          view.selectTab(null, null, null, userID);
        } catch (CoreException ce) {
          ce.printStackTrace();
        }
      }
    });

    section.setClient(sectionClient);

    ImageHyperlink hyperlink = toolkit.createImageHyperlink(section, SWT.NONE);
    hyperlink.setBackground(null);
    hyperlink.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_TOOL_DELETE));
    hyperlink.addHyperlinkListener(new HyperlinkAdapter() {
      public void linkActivated(HyperlinkEvent e) {
        close();
      }
    });

    section.setTextClient(hyperlink);

    form.pack();
    return parent;
  }

  /**
   * Initialize the shell's bounds.
   */
  public void initializeBounds() {
    getShell().setBounds(restoreBounds());
  }

  private Rectangle restoreBounds() {
    Rectangle bounds = form.getBounds();
    Rectangle maxBounds = window.getShell().getMonitor().getClientArea();

    if (bounds.width > -1 && bounds.height > -1) {
      if (maxBounds != null) {
        bounds.width = Math.min(bounds.width, maxBounds.width);
        bounds.height = Math.min(bounds.height, maxBounds.height);
      }
      // Enforce an absolute minimal size
      bounds.width = Math.max(bounds.width, 30);
      bounds.height = Math.max(bounds.height, 30);
    }

    if (bounds.x > -1 && bounds.y > -1 && maxBounds != null) {
      if (bounds.width > -1 && bounds.height > -1) {
        bounds.x = maxBounds.x + maxBounds.width - bounds.width;
        bounds.y = maxBounds.y + maxBounds.height - bounds.height;
      }
    }

    return bounds;
  }
}
TOP

Related Classes of org.eclipse.ecf.presence.ui.MessageNotificationPopup

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.