Áö´Ï°¡ GEF¸¦ ¸¸³µÀ»¶§2(Viewer)(2008/10/28)

JLab Çã¿øÁø

¡¡

À̹ø ±â»ç¿¡¼­´Â GEF °³¹ß¿¡ À־ GEFÀÇ ¿ä¼ÒµéÀ» ÇÁ·¹ÀÓ¿öÅ© °³¹ßÀÚÀÇ ½ÃÁ¡À¸·Î º¸°í, GEF Ä˹ö½º¿¡ ¸ðµ¨À» ±×¸®´Â ¿¹Á¦¸¦ ÅëÇØ GEFÀÇ Viewer ±âº»¿ä¼Ò¿¡ ´ëÇØ ¾Ë¾Æ º»´Ù.

¡¡

ÇÁ·¹ÀÓ¿öÅ© °³¹ßÀÚÀÇ ½ÃÁ¡À¸·Î º¸¶ó

ÇÁ·¹ÀÓ¿öÅ© »ç¿ë Ãʱâ ÁøÀÔ ¹æ¹ýÀº º¸Åë Æ©Å丮¾ËÀ» ÀÛ¼º ½ÇÇà Çϰí ÇÊ¿äÇÑ ¿ä¼ÒµéÀ» ¹Ù²ã º¸°í Çϴ½ÄÀ¸·Î ´ëºÎºÐ ÁøÇà µÈ´Ù. ÇÊÀÚ°¡ ÀÌÀü¿¡ ½è´ø Ã¥ÀÌ ±×·¯Çß°í ÁøÇàÇß´ø ¼¼¹Ì³ª°¡ ±×·¯Çß°í ´Ù¸¥ºÐµéµµ ºñ½ÁÇß´Ù. ÀÌ ¹æ½ÄÀº Ãʱâ ÁøÀÔ ºñ¿ëÀ» ÁÙÀδٴ ÀÌÁ¡ÀÌ Àִµ¥ Áß°£À¸·Î ³Ñ¾î°¡±â´Â ¿©ÀüÈ÷ ¾î·Æ´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. Áï ¼¼¹Ì³ª¸¦ ¿¹·Î µé¸é ÃÊ±Þ ¼¼¹Ì³ª¸¦ ÃÊûÀ» ¹Þ¾Æ ÁøÇàÇÏ¸é ¸î ´Þ ÈÄ ´Ù½Ã °¡¼­ Áß±Þ ¼¼¹Ì³ª¸¦ ÇØ¾ßÇÑ´Ù. ¾îÂî º¸¸é ´ç¿¬ÇÑ ¼ø ÀÌÁö¸¸, ÇÊÀÚ°¡ º¼¶§´Â ºñ »ý»êÀûÀ̶ó »ý°¢ÇÑ´Ù. ÀÌ¿¡ ÇÊÀÚ°¡ »ý°¢ÇѰÍÀÌ ÀÏÁ¾ÀÇ ¿ª¹ß»óÀÎ ÇÁ·¹ÀÓ¿öÅ© °³¹ßÀÚÀÇ ½ÃÁ¡À¸·Î Á¢±Ù Çϴ°ÍÀÌ´Ù. ÀÌ·± ¿ª¹ß»óÀÌ ÇÁ·¹ÀÓ¿öÅ©ÀÇ µðÀÜÀÎ¿Í ºí·çÇÁ¸°Æ®¿¡ ²À ¸Â´Â°ÍÀº ¾Æ´ÏÁö¸¸ ÇÁ·¹ÀÓ¿öÅ© ÁøÇà¿¡ ÀÖ¾î ÂѾư¡´Â°ÍÀÌ ¾Æ´Ñ ÇÁ·¹ÀÓ¿öÅ©¸¦ Áö¹èÇÒ ¼ö ÀÖ´Â À§Ä¡¿¡ ¼³ ¼ö ÀÖ´Ù. ÀÌ ±â»ç¿¡¼­´Â È¿À²»ó ÇÊÀÚÀÇ ¸Á»óÀ» ¹èÁ¦Çϰí GEF ÄÁ¼Á¿¡ ¸Â´Â ¿ª¹ß»óÀ» ÇßÁö¸¸ ¿©·¯ºÐµéµµ ÀÌ ¹æ¹ýÀ» »ç¿ëÇϱ⸦ ±ÇÇÑ´Ù.

±×·¡ÇÈÄà ¿¡µðÅͶó Çϸé ÇÊÀÚ°¡ ¶°¿À¸£´Â ¾îÇø®ÄÉÀ̼ÇÀº Jasc»çÀÇ ÆäÀÎÆ®¼¥, Microsoft»çÀÇ ÆÄ¿öÆ÷ÀÎÆ® µîÀÌ ÀÖ´Ù. (±¹¿Ü¿Í ±¹³»ÀÇ UMLÅøµµ ¶°¿À¸£´Âµ¥ »óǰ¸í°ú ȸ»ç¸íÀÌ Á¤È®ÇÏ°Ô »ý°¢³ªÁö ¾Ê´Â´Ù.) GEFÀÇ ¿ªÇÒÀº ÆäÀÎÆ® ¼¥À̳ª ÆÄ¿öÆ÷ÀÎÆ® µîÀ» ¸¸µé ¼ö ÀÖ´Â ÀϹݷÐÀ» Á¦°øÇÏ´Â ±×·¢ÇÈÄà ¿¡µðÅÍ ÀϹݷРÁ¦°øÀÚÀÌ´Ù.

PowerPoint

PaintShop

Text Editor°¡ ¾Æ´Ñ Graphical Editor À̹ǷΠGUIÀûÀÎ ¿ä¼Òµµ Áß¿äÇÏ´Ù. ¾Õ¼­ ¿­°ÅÇÑ ¾îÇø®ÄÉÀ̼ǵéÀ» »ìÆì º¸¸é Á¦°øµÈ ¿ä¼Òµé(¹®ÀÚ, µµÇü µî)À» ƯÁ¤ ¿µ¿ª¿¡ ¹èÄ¡Çϰí ÀÌ ¹èÄ¡ÇÑ ¿ä¼ÒµéÀ» Á¶Àý ÇÒ ¼ö ÀÖ´Â ±â´ÉÀÌ ÀÖ´Ù. Áï ±×·¡ÇÈÄà ¿¡µðÅÍ¿¡´Â ±âº»ÀûÀ¸·Î ÆíÁýÇÒ ¿ä¼ÒµéÀÌ ¿­°ÅµÈ ÆÈ·§Æ®¿Í À̸¦ ¹èÄ¡ÇÒ Ä˹ö½º°¡ ÇÊ¿äÇÏ´Ù. GEF´Â ÀÌ ÆÈ·§Æ®¿Í Ä˹ö½º¸¦ ¾î¶²½ÄÀ¸·Îµç Á¦°øÇßÀ» °ÍÀÌ´Ù.

½Ã½ºÅÛ ÀûÀ¸·Î´Â ¹®ÀÚ µµÇüµéÀ» ¹èÄ¡Çϰí À̸¦ Á¶Àý Çϱâ À§Çؼ­´Â ¹®ÀÚ, ¸ðÇüµîÀÇ ÆÈ·§Æ® ¿ä¼ÒµéÀÌ ¸Þ¸ð¸®¿¡¼­ ±¸ºÐµÇ¾î °ü¸®µÇ¾î¾ß ÇÑ´Ù.

¹®ÀÚ
µµÇü
µµÇü

¶ÇÇÑ ¿¡µðÅÍ »óÀÇ Á¶ÀÛ(µå·¹±× ³ª Űº¸µå ÀԷµî)ÀÌ ³»¿ë¿¡ ¹Ý¿µµÇ¾î¾ß ÇÑ´Ù. ¿©±â ±îÁö Á¤¸® ÇÏ¿© ÀϹÝÈ­ ÇØº¸ÀÚ.

GUI System
ÆÈ·§Æ® + Ä˹ö½º

ÆÈ·§Æ® ¿ä¼ÒµéÀÇ ±¸ºÐµÈ ¸Þ¸ð¸® ¿µ¿ª °ü¸®

GUI ÀÇ Á¶ÀÛÀÌ ÆÈ·§Æ® ¿ä¼ÒµéÀÇ ½ÇÁ¦ ³»¿ë¿¡ ¹Ý¿µµÊ

Graphical Editor Overview

 

 

GEF Overview

GEF Overview

¾Õ ¼­ ¿ì¸®°¡ »ý°¢ÇÑ GEFÀÇ ¿ä¼ÒµéÀº ´ÙÀ½°ú °°Àº ½ÇÁ¦ GEFÀÇ ¿ä¼Òµé°ú ¸ÞÇεǴ °³³äµéÀÌ´Ù.

Model
Memory Block
View(Draw2D Figure)
Cavas
Controller
Controller
Tool
Pallete

ÀϹÝÀûÀÎ ±×·¢ÇÈÄà ¿¡µðÅ͵µ ±×·¸°í GEF ¶ÇÇÑ MVC(Model View Control) ¾ÆÅ°ÅØÆ®·Î µÇ¾î ÀÖ´Ù. ¿©±â¼­ ¿­°ÅµÈ ¿ä¼Òµé¸¸ 4°¡Áö(Model, View, Controller, Tool)ÀÌ´Ù. ÀÌ ¿ä¼ÒµéÀ» »ý¼º ÃʱâÈ­ Çϱâ À§Çؼ­ GEFÀÇ ¿¡µðÅÍ Å¬·¡½º´Â Factory ÆÐÅÏÀ¸·Î µÇ¾î ÀÖ´Ù. GEF¿¡µðÅÍ¿¡ ÀÌ ¿ä¼ÒµéÀ» Çϳª¾¿ ü¿ö ³Ö¾î º¸ÀÚ.

 

GEF¸¦ ÀÌ¿ë ¸ðµ¨À» ±×·Á º¸ÀÚ

ÀÌÀü ±â»ç¿¡¼­ ¿¹Á¦´Â canvas, pallete ¸ðµÎ ¾Æ¹«°Íµµ ¾Èº¸ÀÌ´Â »óÅ¿´´Ù. »ý¼º ÃʱâÈ­ °úÁ¤ÀÌ ¾ø¾ú±â ¶§¹®ÀÌ´Ù. ÀÏ´Ü Ä˹ö½º¿¡ ¿ì¸®°¡ Á¤ÀÇÇÑ ¸ðµ¨ÀÌ º¸ÀÏ ¼ö ÀÖ°Ô ÇØº¸ÀÚ. GEF Ä˹ö½º¿¡ ¸ðµ¨ÀÌ ±×·ÁÁö´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù.

1. ºä¾î ÄÁÅÙÆ®ÀÇ ¸ðµ¨À» °¡Á® ¿Â´Ù.

-À̰ÍÀÌ ¸ðµç ¸ðµ¨À» °¡Áö°í ÀÖ´Â ÃÖ»óÀ§ ¸ðµ¨ÀÌ´Ù.

2. ÇØ´ç ¸ðµ¨ÀÇ ¿¡µðÆ® ÆÄÆ®¸¦ ã´Â´Ù.

-°¢ ¸ðµ¨ÀÇ °¢°¢ÀÇ ¿¡µðÆ® ÆÄÆ®¸¦ °¡Áø´Ù. °°Àº ¿¡µðÅÍ ÆÄÆ®¸¦ »ç¿ëÇØµµ µÈ´Ù.

3. ¿¡µðÆ® ÆÄÆ®¸¦ ÂüÁ¶ÇÏ¿© ¸ðµ¨À» ±×¸°´Ù.

-¿¡µðÆ® ÆÄÆ®´Â ¾î¶»°Ô º¸ÀÏÁöÀÇ ViewerÀÇ ¿ªÇÒ°ú ÆíÁýÀÇ Á¦ÇÑ À̶ó´Â ControlÀÇ ¿ä¼Ò¸¦ °¡Áö°í ÀÖ´Ù.

°úÁ¤À» Á¤¸®ÇØ º¸¸é GEF canvas¿¡ ¸ðµ¨À» ±×¸®±â À§Çؼ­´Â Model, Edit Part, 2¹øÀÇ ¿ªÇÒÀ» ÇÏ´Â Áß°³ÀÚ°¡ ÇÊ¿äÇÏ´Ù.(GEF¿¡¼­´Â ÀÌ Áß°³ÀÚ¸¦ Edit Part Factory¶ó ºÎ¸¥´Ù)

Model

±â»ç¿¡ »ç¿ëÇÒ ¿¹Á¦¸¦ »ìÆì º¸ÀÚ. ¸Å¿ì °£´ÜÇÑ ¸ðµ¨·Î ±âº»ÀÌ µÇ´Â ¸ðµ¨°ú ¸ðµ¨°ú ¸ðµ¨À» ¿¬°áÇÒ ¼ö ÀÖ´Â ¿¬°á ¸ðµ¨, ¸ðµ¨µéÀ» Æ÷ÇÔÇÒ ÃÖ»óÀ§ ¸ðµ¨, ÀÌ·¸°Ô 3°¡Áö·Î ±¸¼º µÇ¾î ÀÖ´Ù.

package net.jlab.get.example.editor.model;

import java.util.ArrayList;
import java.util.List;


public class SimpleDiagram {
  private List SimpleModelList = new ArrayList();

   public boolean addChild(SimpleModel s) {
    if (s != null && SimpleModelList.add(s)) {
      return true;
    }
    return false;
  }

  public List getChildren() {
    return SimpleModelList;
  }

  public boolean removeChild(SimpleModel s) {
    if (s != null && SimpleModelList.remove(s)) {
      return true;
    }
    return false;
  }
}
SimpleDiagram.java

¸ðµç ¸ðµ¨ µéÀ» Æ÷ÇÔÇϰí ÀÖ´Â ÃÖ»óÀ§ ¸ðµ¨ ÀÌ´Ù.

package net.jlab.get.example.editor.model;

public class SimpleModel {
  private int type;
  public void setType(int type) {
    this.type = type;
  }
  public int getType() {
    return type;
  }
  
  private String content;
  public String getContent() {
    return content;
  }
  public void setContent(String content) {
    this.content = content;
  }
}

SimpleModel.java

½ÇÁ¦ ±â»ç¿¡¼­ »ç¿ëÇÒ ¸ðµ¨·Î½á ¸ðµ¨ ŸÀÔÀ» ÀúÀåÇÒ type ÇÊµå ³»¿ëÀ» ÀúÀåÇÒ contentÇʵåµîÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.

package net.jlab.get.example.editor.model;

public class SimpleConnection extends SimpleModel {
  private SimpleModel startPoint;

  public SimpleModel getStartPoint() {
    return startPoint;
  }

  public void setStartPoint(SimpleModel startPoint) {
    this.startPoint = startPoint;
  }

  private SimpleModel endPoint;

  public SimpleModel getEndPoint() {
    return endPoint;
  }

  public void setEndPoint(SimpleModel endPoint) {
    this.endPoint = endPoint;
  }

}

SimpleConnection.java

¸ðµ¨°ú ¸ðµ¨À» ¿¬°áÇÒ ¿¬°áÀÚ ÀÌ´Ù. ½ÇÁ¦ ¸ðµ¨ ¼³°è¿¡ À־´Â ¸ðµ¨¾È¿¡ ´Ù¸¥ ¸ðµ¨¿¡ ´ëÇÑ ·¹ÆÛ·±½º ¸®½ºÆ®¸¦ »ðÀÔÇÏ¸é µÇÁö¸¸ ±â»ç ÁøÇà»ó ÀÌ·¸°Ô º°µµÀÇ ¸ðµ¨·Î Á¤ÀÇ Çß´Ù.

Edit Part

¿©·¯ºÐµéÀÌ ½ÇÁ¦ GEF¸¦ »ç¿ëÇÒ¶§ °¡Àå ¸¹Àº Äڵ带 ÀÛ¼ºÇÏ°Ô µÇ´Â ºÎºÐÀÌ´Ù. MVCÁß V¿Í CÀÇ ¿ä¼Ò¸¦ ¸ðµÎ °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. ÇÏÁö¸¸ ViewerÀÇ ¿ªÇÒÀº GEFÀÇ ±×·¡ÇÈ ¶óÀ̺귯¸®ÀÎ Draw2DÀÇ Figure¿¡ Áß°³ ÇÏ´Â ¿ªÇÒ ¸¸ ÇÔÀ¸·Î MVCÀÇ C ¿ªÇÒÀÎ Controller¿¡ Ä¡ÁߵȴÙ. Controller¿ªÇÒÀº ´ÙÀ½ ±â»ç¿¡¼­ ´Ù·ç °Ú´Ù Viewer Áß½ÉÀ¸·Î º¸ÀÚ.

package net.jlab.get.example.editor.edit;

import net.jlab.get.example.editor.model.SimpleModel;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.Ellipse;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolygonDecoration;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.ConnectionEditPolicy;
import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy;
import org.eclipse.gef.requests.GroupRequest;

public class SimpleModelEditPart extends AbstractGraphicalEditPart {

  @Override
  /*
   * (non-Javadoc)
   
   * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
   */
  protected IFigure createFigure() {
    SimpleModel model = (SimpleModelthis.getModel();
    IFigure f = null;
    if (model.getType() == 1) {
      f = new Ellipse();
      f.setOpaque(true)// non-transparent figure
      f.setBackgroundColor(ColorConstants.green);
      f.setLocation(new Point(100100));
      f.setSize(100100);
    }

    if (model.getType() == 2) {
      f = new RectangleFigure();
      f.setOpaque(true)// non-transparent figure
      f.setBackgroundColor(ColorConstants.yellow);
      f.setLocation(new Point(250100));
      f.setSize(100100);
    }
    return f;
  }

  @Override
  protected void createEditPolicies() {
    // TODO Auto-generated method stub

  }

}

SimpleModelEditPart.java

EditPartÀÇ ¿À¹ö¶óÀÌµå ¸Þ¼Òµå´Â Å©°Ô 2°¡Áö ÀÌ´Ù.

protected IFigure createFigure()

¸ðµ¨À» ¾î¶»°Ô º¸¿©ÁÙÁö °áÁ¤ÇÒ ¸Þ¼Òµå ÀÌ´Ù. À§ Äڵ忡¼­´Â ÁöÁ¤µÈ ¿µ¿ª¿¡ º¸¿©ÁÖ´Â Äڵ带 »ðÀÔÇß´Ù.

protected void createEditPolicies()

ÆíÁý¿¡ Á¦ÇÑÀ» ÁÖ´Â ¸Þ¼Òµå ÀÌ´Ù. Á¦ÇÑ »Ó¸¸ ¾Æ´Ï¶ó ¹æ¹ý ¶ÇÇÑ Á¤ÇØ ÁÖ´Â ¸Þ¼Òµå·Î ÀÌ ¸Þ¼Òµå°¡ ±×³É StubÀ¸·Î ³²¾Æ ÀÖ´Â À§ ¿¹Á¦¿¡¼­´Â ¾Æ¹«·± ÆíÁýÀ» ÇÒ ¼ö ¾ø°Ô µÈ´Ù.

package net.jlab.get.example.editor.edit;

import net.jlab.get.example.editor.model.SimpleConnection;

import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PolygonDecoration;
import org.eclipse.draw2d.Polyline;
import org.eclipse.draw2d.PolylineConnection;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.gef.EditPolicy;
import org.eclipse.gef.editparts.AbstractConnectionEditPart;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy;

public class SimpleConnectionEditPart extends AbstractGraphicalEditPart {

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies()
   */
  protected void createEditPolicies() {

  }

  /*
   * (non-Javadoc)
   
   * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure()
   */
  protected IFigure createFigure() {
    Polyline connection = new Polyline();
    connection.setLineWidth(3);
    connection.setLineStyle(Graphics.LINE_SOLID)// line drawing style

    connection.addPoint(new Point(200150));
    connection.addPoint(new Point(250150));
    return connection;
  }

  private SimpleConnection getCastedModel() {
    return (SimpleConnectiongetModel();
  }

}

SimpleConnectionEditPart.java

¸ðµ¨°ú ¸ðµ¨ÀÇ °ü°è¸¦ Ç¥½ÃÇÒ ¿¬°á¼±ÀÇ ¿¡µðÆ® ÆÄÆ® ÀÌ´Ù.

package net.jlab.get.example.editor.edit;

import java.util.List;

import net.jlab.get.example.editor.model.SimpleDiagram;

import org.eclipse.draw2d.Figure;
import org.eclipse.draw2d.FreeformLayer;
import org.eclipse.draw2d.FreeformLayout;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.MarginBorder;
import org.eclipse.gef.editparts.AbstractGraphicalEditPart;

public class SimpleDiagramEditPart extends AbstractGraphicalEditPart {

  @Override
  protected IFigure createFigure() {
    Figure f = new FreeformLayer();
    f.setBorder(new MarginBorder(3));
    f.setLayoutManager(new FreeformLayout());

    return f;
  }

  @Override
  protected void createEditPolicies() {

  }
  
  private SimpleDiagram getCastedModel() {
    return (SimpleDiagramgetModel();
  }

  /* (non-Javadoc)
   * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren()
   */
  protected List getModelChildren() {
    return getCastedModel().getChildren()// return a list of shapes
  }

}

SimpleDiagramEditPart.java

¸ðµ¨À» ±×·ÁÁÙ Ä˹ö½º ¿ªÇÒÀ» ÇÒ SimpleDiagramÀÇ EditPartÀÌ´Ù. ½ÇÁ¦ ¸ðµ¨µéÀº ÀÌ À§¿¡¼­ ±×·ÁÁö¹Ç·Î ´Ù¸¥ ¿¡µðÆ® ÆÄÆ®¿Í´Â ´Ù¸£°Ô LayoutÀÌ ÇÊ¿äÇÏ´Ù.

package net.jlab.get.example.editor.edit;

import net.jlab.get.example.editor.model.SimpleConnection;
import net.jlab.get.example.editor.model.SimpleDiagram;
import net.jlab.get.example.editor.model.SimpleModel;

import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;

public class SimpleEditPartFactory implements EditPartFactory {

  @Override
  public EditPart createEditPart(EditPart context, Object model) {
    EditPart part = null;
    
    if (model instanceof SimpleDiagram) {
      part = new SimpleDiagramEditPart();
    }
    if (model instanceof SimpleModel) {
      part = new SimpleModelEditPart();
    }
    if (model instanceof SimpleConnection) {
      part = new SimpleConnectionEditPart();
    }
    part.setModel(model);
    return part;
  }

}

SimpleEditPartFactory.java

¾î¶°ÇÑ ¸ðµ¨À» ¾î¶°ÇÑ ¿¡µðÆ® ÆÄÆ®·Î ¿¬°áÇÒÁö Áß°³ÀÚ ¿ªÇÒÀ» ÇÏ´Â EditPartFactoryÀÌ´Ù.

Editor

package net.jlab.get.example.editor;

import net.jlab.get.example.editor.edit.SimpleEditPartFactory;
import net.jlab.get.example.editor.model.SimpleConnection;
import net.jlab.get.example.editor.model.SimpleDiagram;
import net.jlab.get.example.editor.model.SimpleModel;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.GraphicalViewer;
import org.eclipse.gef.commands.CommandStack;
import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
import org.eclipse.gef.ui.parts.GraphicalViewerKeyHandler;

public class SimpleEditor extends GraphicalEditorWithFlyoutPalette {
  CommandStack command;
  DefaultEditDomain domain;
  SimpleDiagram diagram;

  public SimpleEditor() {
    super();
    domain = new DefaultEditDomain(this);
    this.setEditDomain(domain);

    command = new CommandStack();
    this.getEditDomain().setCommandStack(command);
    this.createModelMap();
  }

  /**
   * ¸ðµ¨ °´Ã¼¸¦ »ý¼ºÇϰí À̵éÀÇ °ü°è¸¦ ¸¸µç´Ù.
   */
  private void createModelMap() {
    System.err.println("** createModelMap. **");
    diagram = new SimpleDiagram();

    SimpleModel model1 = new SimpleModel();
    model1.setContent("Model1");
    model1.setType(1);
    diagram.addChild(model1);

    SimpleModel model2 = new SimpleModel();
    model2.setContent("Model2");
    model2.setType(2);
    diagram.addChild(model2);

    SimpleConnection connection = new SimpleConnection();
    connection.setType(1);
    connection.setStartPoint(model1);
    connection.setEndPoint(model2);
    diagram.addChild(connection);
  }

  protected void configureGraphicalViewer() {
    System.err.println("** configureGraphicalViewer. **");
    super.configureGraphicalViewer();

    GraphicalViewer viewer = getGraphicalViewer();
    viewer.setEditPartFactory(new SimpleEditPartFactory());
    viewer.setRootEditPart(new ScalableFreeformRootEditPart());
    viewer.setKeyHandler(new GraphicalViewerKeyHandler(viewer));

  }

  @Override
  protected void initializeGraphicalViewer() {
    System.err.println("** initializeGraphicalViewer. **");
    super.initializeGraphicalViewer();
    GraphicalViewer viewer = getGraphicalViewer();
    viewer.setContents(diagram);

  }

  @Override
  protected PaletteRoot getPaletteRoot() {
    // TODO Auto-generated method stub
    return null;
  }

  @Override
  public void doSave(IProgressMonitor monitor) {
    // TODO Auto-generated method stub

  }

}

SimpleEditor.java

GEF¿¡¼­ ¸ðµ¨ °£ÀÇ °ü°è´Â ÀúÀåµÈ ÆÄÀÏÀ» Àаųª ±âÁ¸ÀÇ ¸ðµ¨À» ºÐ¼® ÇÏ¿© »ý¼ºÇÏ°Ô µÈ´Ù. ±â»ç ÁøÇà»ó ¸ðµ¨°£ÀÇ °ü°è¸¦ ÀÓÀÇ·Î ¸¸µé¾ú´Ù. »ý¼ºµÈ ¸ðµ¨À» ÃÖ»óÀÇ ¸ðµ¨¿¡ ³Ö´Â ÄÚµå´Â GEF ÇÁ·¹ÀÓ¿öÅ©»ó ÇÊ¿äÇÑ ÄÚµåÀÌ´Ù. GEF°¡ ¸ðµ¨À» Viewer¿¡ Ãâ·ÂÇϱâ À§Çؼ­ ¸ðµ¨ÀÇ ºÐ¼®À» ÃÖÃÊ·Î ½ÃÀÛÇÒ Å¸°ÙÀÌ ÇÊ¿äÇѵ¥ À̰ÍÀ» ÄÁÅ×ÀÌ³Ê ¿ªÇÒÀ» ÇÏ´Â ¸ðµ¨ÀÌ ´ã´çÇÏ°Ô µÈ´Ù.

ºä¾î¸¦ ±¸¼ºÇϱâ À§ÇÑ Áغñ ÄÚµåÀÌ´Ù. GEF °³¹ß½Ã °ÅÀÌ ÀÌ ÄÚµå ±×´ë·Î °íÁ¤ÀûÀ¸·Î ¾²°Ô µÈ´Ù. À̰÷¿¡ EditPartFactory¸¦ µî·ÏÇØ¾ß ÇÑ´Ù.

ºä¾î¸¦ ÃʱâÈ­ ÇÏ°í ºä¾î¿¡ ºÐ¼®À» ½ÃÀÛÇÒ ÃÖÃÊÀÇ ¸ðµ¨À» ¾Ë·ÁÁØ´Ù.

¿©±â ±îÁö°¡ ¸ðµ¨À» ºä¾î¿¡ º¸À̱â À§ÇÑ ÃÖ¼Ò ÄÚµå ÀüºÎ ÀÌ´Ù.

Simple Graphical Editor

ÀÌ Äڵ带 ½ÇÇàÇÏ¸é ¸ðµ¨À» º¸¿©Áֱ⸸ ÇÒ»Ó, ÆÈ·§Æ®µµ µ¿ÀÛÇÏÁö ¾Ê°í Ä˹ö½º¿¡ ±×·ÁÁø ¸ðµ¨µµ ÆíÁý ÇÒ ¼ö ¾ø´Ù. ÀÌÀ¯´Â ¿©±â ±îÁö ±â»ç¸¦ ÁÖÀÇ ±í°Ô ÀÐ¾î º¸¾Ò´Ù¸é ½±°Ô ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ´ÙÀ½ ±â»ç¿¡¼­´Â EditPartPolicy¿Í Pallete ±â´ÉÀ» Ãß°¡ÇØ º¸ÀÚ.

°ü·Ã Á¦ÀÌ·¦ ±â»ç
Áö´Ï°¡ GEF¸¦ ¸¸³µÀ» ¶§ 1 http://www.jlab.net/news/20051107/news.htm
Áö´Ï°¡ GEF¸¦ ¸¸³µÀ» ¶§ 2 http://www.jlab.net/news/20051206/news.htm
Áö´Ï°¡ GEF¸¦ ¸¸³µÀ» ¶§ 1 (Renewer) http://www.jlab.net/news/20081023/news.htm

 

Á¤º¸
ÀÌ ±â»ç´Â 2005³âµµÀÇ ±â»ç¸¦ ÀçÆíÁý ÇÏ¿© ¿¬ÀçÇÏ´Â ±â»çÀÔ´Ï´Ù.
¿¹Á¦ ÇÁ·ÎÁ§Æ® ´Ù¿î·Îµå

 


About Author

Çã¿øÁø

Á¦ÀÌ·¦ ´ëÇ¥ ¿î¿µÀÚ, Total Eclipse ´ëÇ¥ ÀúÀÚ, Eclipse Consultant, Juliet Scandal Project Leader. ÀÌŬ¸³½º ÇÁ·ÎÁ§Æ®µéÀ» Àû±Ø ÀÌ¿ëÇØ¼­ Àúºñ¿ëÀ¸·Î Äè¼Ó°³¹ßÀ» Çϴµ¥ °ü½ÉÀÌ ¸¹´Ù. Contact


www.jlab.net

ÀÌ ÄÁÅÙÃ÷´Â JPL¿¡ ÀÇÇØ¼­ º¸È£ ¹Þ½À´Ï´Ù. ¿ÀÅ» ÀÚ³ª °ÇÀÇ´Â À̰÷¿¡ ÇØÁֽʽÿÀ