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

com.cedarsoft.spring.rcp.editor.ExtendedEditor Maven / Gradle / Ivy

The newest version!
package com.cedarsoft.spring.rcp.editor;

import com.cedarsoft.spring.rcp.events.SelectionEvent;
import com.cedarsoft.spring.rcp.events.UiUpdateEvent;
import com.cedarsoft.lookup.Lookup;
import com.cedarsoft.lookup.Lookups;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.richclient.application.docking.jide.editor.AbstractEditor;

import javax.swing.JComponent;

/**
 * Extended editor
 *
 * @param  the type
 */
public abstract class ExtendedEditor extends AbstractEditor implements ApplicationListener {
  private boolean updating = true;
  private T editorObject;

  @Override
  public void componentFocusGained() {
    getApplicationContext().publishEvent( new SelectionEvent( SelectionEvent.Type.SELECT, getSelectedObjects() ) );
    super.componentFocusGained();
  }

  @Override
  public void componentFocusLost() {
    getApplicationContext().publishEvent( new SelectionEvent( SelectionEvent.Type.UNSELECT, getSelectedObjects() ) );
    super.componentFocusLost();
  }

  @Override
  public boolean isSaveAsSupported() {
    return false;
  }

  /**
   * Returns the currently selected objects.
   * This default implementation returns the editor object.
   *
   * @return the currently selected objects
   */
  @NotNull
  protected Lookup getSelectedObjects() {
    return Lookups.dynamicLookup( getEditorObject() );
  }

  protected JComponent control;

  @Override
  public JComponent getControl() {
    if ( control == null ) {
      control = createControl();
    }
    return control;
  }

  @Override
  public final void onApplicationEvent( ApplicationEvent event ) {
    if ( event instanceof UiUpdateEvent ) {
      UiUpdateEvent.Type type = ( ( UiUpdateEvent ) event ).getType();
      updating = type == UiUpdateEvent.Type.ACTIVATE_UPDATES;
    }

    if ( !updating ) {
      return;
    }

    handleApplicationEvent( event );
  }

  /**
   * @noinspection ParameterHidesMemberVariable
   */
  @Override
  public void initialize( Object editorObject ) {
    this.editorObject = ( T ) editorObject;
  }

  @NotNull
  public T getEditorObject() {
    if ( editorObject == null ) {
      throw new IllegalStateException( "No editor object set" );
    }
    return editorObject;
  }

  @NotNull
  protected abstract JComponent createControl();

  /**
   * Is called when the editor should handle the event
   *
   * @param event the event that is handled
   */
  protected abstract void handleApplicationEvent( @NotNull ApplicationEvent event );
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy