All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.swt.internal.events.EventUtil Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2002, 2012 Innoopract Informationssysteme GmbH 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:
 *    Innoopract Informationssysteme GmbH - initial API and implementation
 *    EclipseSource - ongoing development
 ******************************************************************************/
package org.eclipse.swt.internal.events;

import org.eclipse.rap.rwt.internal.service.ContextProvider;
import org.eclipse.rap.rwt.internal.service.ServiceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Widget;


public final class EventUtil {

  private static final String ATTR_LAST_EVENT_TIME = EventUtil.class.getName() + "#lastEventTime";

  public static int getLastEventTime() {
    Long eventTime;
    if( ContextProvider.hasContext() ) {
      ServiceStore serviceStore = ContextProvider.getContext().getServiceStore();
      eventTime = ( Long )serviceStore.getAttribute( ATTR_LAST_EVENT_TIME );
      if( eventTime == null ) {
        eventTime = Long.valueOf( System.currentTimeMillis() );
      } else {
        eventTime = Long.valueOf( eventTime.longValue() + 1 );
      }
      serviceStore.setAttribute( ATTR_LAST_EVENT_TIME, eventTime );
    } else {
      eventTime = Long.valueOf( System.currentTimeMillis() );
    }
    return ( int )( eventTime.longValue() % Integer.MAX_VALUE );
  }

  public static boolean allowProcessing( Event event ) {
    boolean result;
    if( event.widget.isDisposed() ) {
      result = false;
    } else {
      switch( event.type ) {
        case SWT.Activate:
        case SWT.Deactivate:
        case SWT.Move:
        case SWT.Resize:
        case SWT.Paint:
        case SWT.Modify:
        case SWT.Verify:
        case SWT.SetData:
        case EventTypes.PROGRESS_CHANGED:
        case EventTypes.PROGRESS_COMPLETED:
          result = true;
        break;
        default:
          result = isAccessible( event.widget );
        break;
      }
    }
    return result;
  }

  public static boolean isAccessible( Widget widget ) {
    boolean result;
    result = !widget.isDisposed();
    if( result ) {
      if( widget instanceof Control ) {
        result = isAccessible( ( Control )widget );
      } else if( widget instanceof MenuItem ) {
        MenuItem menuItem = ( MenuItem )widget;
        result = isAccessible( menuItem );
      } else if( widget instanceof ToolItem ) {
        ToolItem toolItem = ( ToolItem )widget;
        result = isAccessible( toolItem );
      } else if( widget instanceof Menu ) {
        Menu menu = ( Menu )widget;
        result = isAccessible( menu );
      }
    }
    return result;
  }

  private static boolean isAccessible( Control control ) {
    return control.getEnabled() && control.getVisible() && isShellAccessible( control.getShell() );
  }

  private static boolean isAccessible( Menu menu ) {
    return menu.getEnabled() && isShellAccessible( menu.getShell() );
  }

  private static boolean isAccessible( MenuItem menuItem ) {
    return menuItem.getEnabled() && isShellAccessible( menuItem.getParent().getShell() );
  }

  private static boolean isAccessible( ToolItem toolItem ) {
    return toolItem.getEnabled() && isShellAccessible( toolItem.getParent().getShell() );
  }

  private static boolean isShellAccessible( Shell shell ) {
    Shell modalShell = null;
    Shell activeShell = shell.getDisplay().getActiveShell();
    if( activeShell != null && activeShell.isVisible() && isModal( activeShell ) ) {
      modalShell = activeShell;
    }
    return modalShell == null || shell == modalShell;
  }

  private static boolean isModal( Shell shell ) {
    return ( shell.getStyle() & SWT.APPLICATION_MODAL ) != 0;
  }

  private EventUtil() {
    // prevent instantiation
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy