Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[gef-dev] doubts with Logic Example

Hi! All
Im new to the world of GEF and SWT.
While going through the class LogicEditor.java of Logic Example ,  im unable to figure out the funtionality of some of the methods written in it.
Can any one pleez throw some light on it,so that it becomes easy to understand.
 
Below are the methods which needs little explanation 
 
1) configureGraphicalViewer()
2) createActions()
3) getAdapter(Class)
4) getCommonKeyHandler()
5)handleActivationChanged(Event)
 
The complete class is...........
/*
 * Created on Mar 3, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package simple.display.editor;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.EventObject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.gef.ContextMenuProvider;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.KeyHandler;
import org.eclipse.gef.KeyStroke;
import org.eclipse.gef.dnd.TemplateTransferDragSourceListener;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.gef.ui.actions.AlignmentAction;
import org.eclipse.gef.ui.actions.CopyTemplateAction;
import org.eclipse.gef.ui.actions.DirectEditAction;
import org.eclipse.gef.ui.actions.GEFActionConstants;
import org.eclipse.gef.ui.actions.MatchHeightAction;
import org.eclipse.gef.ui.actions.MatchWidthAction;
import org.eclipse.gef.ui.palette.PaletteViewer;
import org.eclipse.gef.ui.palette.PaletteViewerProvider;
import org.eclipse.gef.ui.palette.FlyoutPaletteComposite.FlyoutPreferences;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;
import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
import org.eclipse.gef.ui.rulers.RulerComposite;
import org.eclipse.gef.ui.stackview.CommandStackInspectorPage;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.part.IPageSite;
import simple.display.model.ContentModel;
import simple.display.part.editpartfactory.DisplayEditPartFactory;
import SimpleDisplay.SimpleDisplayPlugin;
/**
 * @author Ved Gunjan
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class SimpleDisplayEditor extends GraphicalEditorWithFlyoutPalette {
   private ContentModel contentModel =  new ContentModel();
   private boolean editorSaving = false;
   private KeyHandler sharedKeyHandler;
   private RulerComposite rulerComp;
   private boolean savePreviouslyNeeded = false;
   protected static final String PALETTE_DOCK_LOCATION = "Dock location";
   protected static final String PALETTE_SIZE = "Palette Size";
   protected static final String PALETTE_STATE = "Palette state";
   protected static final int DEFAULT_PALETTE_SIZE = 130;
   private ResourceTracker resourceListener = new ResourceTracker();
   class ResourceTracker implements IResourceChangeListener, IResourceDeltaVisitor
 {
  public void resourceChanged(IResourceChangeEvent event) {
   IResourceDelta delta = event.getDelta();
   try {
    if (delta != null)
     delta.accept(this);
   }
   catch (CoreException exception) {
   }
  }
  public boolean visit(IResourceDelta delta) {
   if (delta == null || !delta.getResource().equals(((FileEditorInput)getEditorInput()).getFile()))
    return true;
   if (delta.getKind() == IResourceDelta.REMOVED) {
    Display display = getSite().getShell().getDisplay();
    if ((IResourceDelta.MOVED_TO & delta.getFlags()) == 0) { // if the file was deleted
     // NOTE: The case where an open, unsaved file is deleted is being handled by the
     // PartListener added to the Workbench in the initialize() method.
     display.asyncExec(new Runnable() {
      public void run() {
       if (!isDirty())
        closeEditor(false);
      }
     });
    } else { // else if it was moved or renamed
     final IFile newFile = ResourcesPlugin.getWorkspace().getRoot().getFile(delta.getMovedToPath());
     display.asyncExec(new Runnable() {
      public void run() {
       superSetInput(new FileEditorInput(newFile));
      }
     });
    }
   } else if (delta.getKind() == IResourceDelta.CHANGED) {
    if (!editorSaving) {
     // the file was overwritten somehow (could have been replaced by another/ version in the respository)
     final IFile newFile = ResourcesPlugin.getWorkspace().getRoot().getFile(delta.getFullPath());
     Display display = getSite().getShell().getDisplay();
     display.asyncExec(new Runnable() {
      public void run() {
       setInput(new FileEditorInput(newFile));
       getCommandStack().flush();
      }
     });
    }
   }
   return false;
  }
 }
   static {
    SimpleDisplayPlugin.getDefault().getPreferenceStore().setDefault(
   PALETTE_SIZE, DEFAULT_PALETTE_SIZE);
}
 public SimpleDisplayEditor() {
  setEditDomain(new DefaultEditDomain(this));
 }
 protected void closeEditor(boolean save) {
  getSite().getPage().closeEditor(SimpleDisplayEditor.this, save);
 }
 
 public void commandStackChanged(EventObject event) {
  if (isDirty()){
   if (!savePreviouslyNeeded()) {
    setSavePreviouslyNeeded(true);
    firePropertyChange(IEditorPart.PROP_DIRTY);
   }
  }
  else {
   setSavePreviouslyNeeded(false);
   firePropertyChange(IEditorPart.PROP_DIRTY);
  }
  super.commandStackChanged(event);
 }
 protected FlyoutPreferences getPalettePreferences() {
  return new FlyoutPreferences() {
   public int getDockLocation() {
    return SimpleDisplayPlugin.getDefault().getPreferenceStore()
      .getInt(PALETTE_DOCK_LOCATION);
   }
   public int getPaletteState() {
    return SimpleDisplayPlugin.getDefault().getPreferenceStore().getInt(PALETTE_STATE);
   }
   public int getPaletteWidth() {
    return SimpleDisplayPlugin.getDefault().getPreferenceStore().getInt(PALETTE_SIZE);
   }
   public void setDockLocation(int location) {
    SimpleDisplayPlugin.getDefault().getPreferenceStore()
      .setValue(PALETTE_DOCK_LOCATION, location);
   }
   public void setPaletteState(int state) {
    SimpleDisplayPlugin.getDefault().getPreferenceStore()
      .setValue(PALETTE_STATE, state);
   }
   public void setPaletteWidth(int width) {
    SimpleDisplayPlugin.getDefault().getPreferenceStore()
      .setValue(PALETTE_SIZE, width);
   }
  };
 }

 protected PaletteRoot getPaletteRoot() {
  return new PaletteViewerCreator().createPaletteRoot();
 
 }
 
 
 protected void initializeGraphicalViewer(){
  
  super.initializeGraphicalViewer();
  getGraphicalViewer().setContents(getContentModel());
 }
 protected void createActions() {
  super.createActions();
  ActionRegistry registry = getActionRegistry();
  IAction action = "" DirectEditAction((IWorkbenchPart) this);
  registry.registerAction(action);
  
  getSelectionActions().add(action.getId());
  action = "" CopyTemplateAction(this);
  registry.registerAction(action);
 }
 
 protected void createGraphicalViewer(Composite parent) {
  rulerComp = new RulerComposite(parent, SWT.NONE);
  super.createGraphicalViewer(rulerComp);
  rulerComp.setGraphicalViewer((ScrollingGraphicalViewer)getGraphicalViewer());
 }
 
 protected FigureCanvas getEditor(){
  return (FigureCanvas)getGraphicalViewer().getControl();
 }
 protected void configureGraphicalViewer() {
  super.configureGraphicalViewer();
  GraphicalViewer viewer = getGraphicalViewer();
  ScalableFreeformRootEditPart root = new ScalableFreeformRootEditPart();
  
  viewer.setRootEditPart(root);
  viewer.setEditPartFactory(new DisplayEditPartFactory());
  ContextMenuProvider provider = new SimpleContextMenuProvider(viewer, getActionRegistry());
  viewer.setContextMenu(provider);
  getSite().registerContextMenu("simple.display.editor.contextmenu",provider, viewer);
  viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer).setParent(getCommonKeyHandler()));
  Listener listener = new Listener() {
   public void handleEvent(Event event) {
    handleActivationChanged(event);
   }
  };
  getGraphicalControl().addListener(SWT.Activate, listener);
  getGraphicalControl().addListener(SWT.Deactivate, listener);
 }
 protected CustomPalettePage createPalettePage() {
  return new CustomPalettePage(getPaletteViewerProvider()) {
   public void init(IPageSite pageSite) {
    super.init(pageSite);
    IAction copy = getActionRegistry().getAction(ActionFactory.COPY.getId());
    pageSite.getActionBars().setGlobalActionHandler(
      ActionFactory.COPY.getId(), copy);
   }
  };
 }
 protected PaletteViewerProvider createPaletteViewerProvider() {
  return new PaletteViewerProvider(getEditDomain()) {
   private IMenuListener menuListener;
   protected void configurePaletteViewer(PaletteViewer viewer) {
    super.configurePaletteViewer(viewer);
    viewer.setCustomizer(new SimplePaletteCustomizer());
    viewer.addDragSourceListener(new TemplateTransferDragSourceListener(viewer));
   }
   protected void hookPaletteViewer(PaletteViewer viewer) {
    super.hookPaletteViewer(viewer);
    final CopyTemplateAction copy = (CopyTemplateAction)getActionRegistry()
      .getAction(ActionFactory.COPY.getId());
    viewer.addSelectionChangedListener(copy);
    if (menuListener == null)
     menuListener = new IMenuListener() {
      public void menuAboutToShow(IMenuManager manager) {
       manager.appendToGroup(GEFActionConstants.GROUP_COPY, copy);
      }
     };
    viewer.getContextMenu().addMenuListener(menuListener);
   }
  };
 }
 private IPartListener partListener = new IPartListener() {
  // If an open, unsaved file was deleted, query the user to either do a "Save As"
  // or close the editor.
  public void partActivated(IWorkbenchPart part) {
   if (part != SimpleDisplayEditor.this)
    return;
   if (!((FileEditorInput)getEditorInput()).getFile().exists()) {
    Shell shell = getSite().getShell();
    String title = "file deleted";
    String message = "Delete Without Saving";
    String[] buttons ={"No","Yes"};
    MessageDialog dialog = new MessageDialog(shell, title, null, message, MessageDialog.QUESTION, buttons, 0);   
    if (dialog.open() == 0) {
     if (!performSaveAs())
      partActivated(part);
    }
    else {
     closeEditor(false);
    }
   }
  }
  public void partBroughtToTop(IWorkbenchPart part) {}
  public void partClosed(IWorkbenchPart part) {}
  public void partDeactivated(IWorkbenchPart part) {}
  public void partOpened(IWorkbenchPart part) {}
 };
 public void dispose() {
  getSite().getWorkbenchWindow().getPartService().removePartListener(partListener);
  partListener = null;
  ((FileEditorInput)getEditorInput()).getFile().getWorkspace().removeResourceChangeListener(resourceListener);
  super.dispose();
 }
 protected KeyHandler getCommonKeyHandler(){
  if (sharedKeyHandler == null){
   sharedKeyHandler = new KeyHandler();
   sharedKeyHandler.put(
    KeyStroke.getPressed(SWT.DEL, 127, 0),
    getActionRegistry().getAction(ActionFactory.DELETE.getId()));
   sharedKeyHandler.put(
    KeyStroke.getPressed(SWT.F2, 0),
    getActionRegistry().getAction(GEFActionConstants.DIRECT_EDIT));
  }
  return sharedKeyHandler;
 }
 protected void handleActivationChanged(Event event) {
  IAction copy = null;
  if (event.type == SWT.Deactivate)
   copy = getActionRegistry().getAction(ActionFactory.COPY.getId());
  if (getEditorSite().getActionBars().getGlobalActionHandler(ActionFactory.COPY.getId())
    != copy) {
   getEditorSite().getActionBars().setGlobalActionHandler(
     ActionFactory.COPY.getId(), copy);
   getEditorSite().getActionBars().updateActionBars();
  }
 }
 protected Control getGraphicalControl() {
  return rulerComp;
 }
 public void doSave(IProgressMonitor monitor) {
 try
 {
  editorSaving = true;
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  createOutputStream(out);
  IFile file = ((IFileEditorInput)getEditorInput()).getFile();
  file.setContents(new ByteArrayInputStream(out.toByteArray()),true,false, monitor);
  out.close();
  getCommandStack().markSaveLocation();
 }
 catch (Exception e) {
  e.printStackTrace();
 }
 finally {
  editorSaving = false;
 }
 }
 public Object getAdapter(Class type){
  if (type == CommandStackInspectorPage.class)
   return new CommandStackInspectorPage(getCommandStack());
  return super.getAdapter(type);
 }
 protected void createOutputStream(OutputStream os)throws IOException {
  ObjectOutputStream out = new ObjectOutputStream(os);
  out.writeObject(getContentModel());
  out.close();
 }
 protected ContentModel getContentModel()
 {
 return contentModel;
 }
 public void doSaveAs() {
  performSaveAs();
 }
 protected boolean performSaveAs() {
  SaveAsDialog dialog = new SaveAsDialog(getSite().getWorkbenchWindow().getShell());
  dialog.setOriginalFile(((IFileEditorInput)getEditorInput()).getFile());
  dialog.open();
  IPath path= dialog.getResult();
  if (path == null)
   return false;
  IWorkspace workspace = ResourcesPlugin.getWorkspace();
  final IFile file= workspace.getRoot().getFile(path);
  if (!file.exists()) {
   WorkspaceModifyOperation op= new WorkspaceModifyOperation() {
    public void execute(final IProgressMonitor monitor) {
     try {
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      createOutputStream(out);
      file.create(new ByteArrayInputStream(out.toByteArray()), true, monitor);
      out.close();
     }
     catch (Exception e) {
     }
    }
   };
   try {
    new ProgressMonitorDialog(getSite().getWorkbenchWindow().getShell()).run(false, true, op);
   }
   catch (Exception e) {
    }
  }
  try {
   superSetInput(new FileEditorInput(file));
   getCommandStack().markSaveLocation();
  }
  catch (Exception e) {
   e.printStackTrace();
  }
  return true;
 }
 protected void superSetInput(IEditorInput input) {
  // The workspace never changes for an editor.  So, removing and re-adding the
  // resourceListener is not necessary.  But it is being done here for the sake
  // of proper implementation.  Plus, the resourceListener needs to be added
  // to the workspace the first time around.
  if(getEditorInput() != null) {
   IFile file = ((FileEditorInput)getEditorInput()).getFile();
   file.getWorkspace().removeResourceChangeListener(resourceListener);
  }
  super.setInput(input);
  if(getEditorInput() != null)
  {
   IFile file = ((FileEditorInput)getEditorInput()).getFile();
   file.getWorkspace().addResourceChangeListener(resourceListener);
   setPartName(file.getName());
  }
 }
 public void setInput(IEditorInput input) {
  superSetInput(input);
  IFile file = ((IFileEditorInput)input).getFile();
  try {
   InputStream is = file.getContents(false);
   ObjectInputStream ois = new ObjectInputStream(is);
   setContentModel((ContentModel)ois.readObject());
   ois.close();
  }
  catch (Exception e) {
  }
  if (!editorSaving) {
   if (getGraphicalViewer() != null) {
    getGraphicalViewer().setContents(getContentModel());
   }
  }
 }
 public void setContentModel(ContentModel model) {
  contentModel = model;
 }
 
 private void setSavePreviouslyNeeded(boolean value) {
  savePreviouslyNeeded = value;
 }
 public boolean isDirty() {
  boolean boolDirty = getCommandStack().isDirty();
  return boolDirty;
  }
 public boolean isSaveAsAllowed() {
  return true;
 }
 
 
 private boolean savePreviouslyNeeded() {
  return savePreviouslyNeeded;
 }
 
 protected void setSite(IWorkbenchPartSite site){
  super.setSite(site);
  getSite().getWorkbenchWindow().getPartService().addPartListener(partListener);
 }
}
 
 


Ved Gunjan
SCJP1.4


Celebrate Yahoo!'s 10th Birthday!
Yahoo! Netrospective: 100 Moments of the Web

Back to the top