Viewer

Viewer는 MVC 패턴을 가지고 있다.

Viewer의 하위 클래스인 ContentVier와 StructuredViewer가 있다.

 

ContentViewer는 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들 인터페이스는 이름 앞에 I를 붙인다. 이러한 인터페이스는 확장점을 표시하며 이를 사용하여 애플리케이션의 맞춘 로직을 프레임워크에 넣을 수 있다.

 

StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화는 필터링, 정렬 기능 같은 일반적인 작업을 실행하는 메도드들이 이 계층에서 구현된다.

 

각 위젯인 Tree, List, Table 등은 이에 맞는 Viewer의 하위 클래스로 ListViewer나 tableViewer 등이 있다.

 

위젯은 기껏해야 하나의 Viewer와 연결하도록 되어 있고, 연결이 완료되고 나면 모든 작업은 Viewer를 통해서만 해야한다. 위젯과 뷰어에서 동작을 섞어서 처리하다 보면 나중에 꼬일 수 있다.


viewer은 대부분 구성이 비슷하여 하나의 viewer만 잘 공부하면 나머지도 어느 정도 이해할 수 있다.

 

 

주요 Viewer 메소드

getControl()

GetSelection()

Refresh()

SetInput()

 

주요 ContentViewer 메소드

setContentProvider()

SetLabelProvider()

 

주요 StructuredViewer

addFilter()

Reveal()

SetSorter()

 

ContentViewer의 프로 바이더

프로바이더에는 두 개가 존재한다. ContentProvider, LabelProvider.

 

컨텐츠 프로바이더는 화면에 나타날  있는 항목의 전체 집합을 반환한다

 집합을 뷰어에 부착된 뷰어에 부착된 어떤필터에든 넘길  있다.


레이블 프로바이더는 이들을 어떻게 화면에 나타낼지 결정한다.

 

 

Viewer의 첫 번째 하위 클래스인 ContentViewer는 위젯에서 보일 데이터를 다루는 기능을 추가하며, MVC의 M(모델) 부분을 제공한다.

 

1) LabelProvider

레이블 프로바더는 ILabelProvider나 ITableLabelProvider를 구현하는데, 두 인터페이스 모두 IBaseLabelProvider를 확장 했다.

 

ILabelProvider와 ITableLabelProvider는 비슷한 성향을 가지며, ITableLabelProvider는 테이블열을 다루지만 ILabelProvider는 일차원 데이터만 가정한다.

 

레이블 프로바이더의 로직은 세 개의 메소드로 작성할 수 있다.

첫 번째는 isLabelProperty()로 IBaseLabelProvider에서 정의한다.

-> 객체와 프로퍼티 이름을 받아 부울 값을 반환한다. 해당 부울값은 주어진 프로퍼티를 변경할 때 시각적으로 보이는 레이블을 업데이트 해야하는지 나타낸다.

 

두 번째로 getText()와 getImage() 메소드를 통해 해당 객체에 보여줄 텍스트랑 이미지를 설정한다.

 

2) ContentProvider

ContentProvider 레이블 프로바이더로 관여하기도 하지만 컨텐트 프로바이더로도 역할을 한다.

 

레이블 프로바이더가 요소를 보이기 위한 텍스트이미지를 제공하는 반면에 컨텐츠 프로바이더는 실제적으로 요소를 보이게끔 해준다.

 

IStructuredContentProvider getElements() 메소드를 정의하는데, getElements() 메소드는 Object 입력으로 받아들여서 위젯에 보여줄 Object 배열을 반환한다. Viewer에서 setInput() 호출할 객체는 컨텐트 뷰어에게 매개변수로 전달한다컨텐트 프로바이더는 위젯에 의해 보여지는 도메인 객체들의 콜렉션을 반환하기 위해  매개변수를 이용한다.

 

 개의 메소드는 필수로 구현하지 않아도 되는데  것은 dispose() inputChanged(Viewer viewer, Object oldInput, Object newInput)이다우선 dispose() 페기될  깨끗이 정리할때 정의하는 메소드이다.

inputChanged 뷰어가 컨텐츠 프로바이더에게 최상위 입력 객체를 바꾸웠다고 통지할  사용한다.

 

 

트리(Tree)

SWT에서 제공하는 Tree 위젯과 Jface에서의 TreeViewer 트리를 사용할  있다.

 

1. SWT 트리

일반적인 Tree 특별하게 유용한 인터페이스를 가지지 않는다.

- addSelectionListener() 선택 이벤트의 통지를 가능하게 한다.

- addTreeListener()  TreeListener 인터페이스는 트리의  수준을 펼치거나 줄일  통지하기 위한 콜백을 제공한다.

- Select() / deselect() 현재 선택 사항을 변경한다.

- getSelection() 현재 선택 항목을 얻는다.

- Show() 주어진 항목을 보일 때까지 컨트롤을 스크롤 한다.

 

1-1) TreeItem

TreeItem Tree 항목을 추가하기 위해 사용되는 클래스이다.

TreeItem 내용을 나타내는 것을 덧붙여부모와 자식 항목의 관계를 유지한다.

SWT.SINGLE, SWT.MULTI 스타일을 통해 트리 스타일을 지정할  있으며 SWT.CHECK 체크박스를 사용하여 트리 옆에 checkbox 생성   있다.

TreeItem setText(), setImage() 메소드를 사용하여  보여주고자 텍스트와 이미지를 수정하기 위해 제공한다.

직접 TreeItem들을 생성하고 조작하여 트리를 구축할  있지만 너무 어렵기 때문에 Tree Viewer 사영하여 애플리케이션의 로직에 초점을 맞추고 사용자 인터페이스 요소의 상세 항목에  신경   있다.

 

1-2) TreeViewer

TreeViewer 모든 Viewer 공통적으로 제공하는 필터링과 정렬 기능 뿐만 아니라 레이블 프로바이더 기능도 제공한다


'RCP > SWT & JFACE' 카테고리의 다른 글

rcp프레임워크의 shell객체의 이벤트 처리 설명  (0) 2016.12.24
event doit 설명  (0) 2016.12.24
JFace TreeViewer설명  (0) 2016.12.24
IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24

Jface IWizardPage 인터페이스를 사용하여 마법사의 페이지 하나를 표현한다.

 

getName() : 위자드의 유일한 이름을 가진다.

getNextPage(), getPreviousPage()  메소드들은 다음이나 이전의 페이지로 이동한다.

isPageComplete() 사용자가 해당 페이지에서 필요한 모든 내용을 채웠는지 알아낸다.

canFlipToNextPage() : 다음 버튼을 사용할  있는지 체크 한다.

 

 

마법사를 담는 부분은 Iwizard 인터페이스이고  페이지는 wizardpage 나타낸다.

 

 

 

마법사 컨테이너

 

마법사 컨테이너는 하나 이상의 마법사에 대한 호스트로서의 역할을 수행한다.

 

 

Dialog Setting

DialogSetting IDialogSettings 인터페이스를 구현한다. Xml 형태로 dialog 정보를 저장한다.

 

 

//저장

IDailogSettings setting = new DialogSettings("mydialog");

Settings.put("checkboxOneChecked", true);

Settings.put("defaultName", "TestDialog");

 

Settings.save("Settings.xml");

 

//Load

IDialogSettings loadedSetttings = new DialogSettings(null);

loadedSettings.load("settings.xml");

 

loadSettings.getBoolean("checkboxonechecked");

loadedSettings.get("defaultName");

'RCP > SWT & JFACE' 카테고리의 다른 글

event doit 설명  (0) 2016.12.24
JFace TreeViewer설명  (0) 2016.12.24
IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24
이벤트로 받은 키보드 멀티 인식 방법  (0) 2016.12.24

Draw2d 툴은 사용자가 좋아하는 모든 외형과 기능을 포함함 GUI 컴포넌트를 만들  있게 한다.

 

Draw2d 기본 클래스

클래스

기능

유사 SWT 클래스

LightweightSystem

이미지를 만들기 위한 상위 레벨 환경

Display

Figure

LightweightSystem 내에 컴포넌트 또는 컨테이너

Shell, Control, Composite

Graphics

Figure 내에 그래픽 영역을 제공GC

GC

 

 

LightweightSystem 클래스는 Display 클래스와 유사하다시각적으로 보여주는 것은 없지만이벤트 핸들링을 제공하고 외부환경과상호 작용을 하는 역할을 한다. LightweightSystem 클래스는 운영체제와  떨어진 계층에서 작동한다.

 

Draw2d 기본적인 구조는 Canvas -> Lightweight System -> Container Figure -> 다수의 figure/Graphics

 

 

 

Figure 객체의 메소드

 

SWT Control 클래스와 마찬가지로 Figure 클래스는  프로퍼티를 조작하기 위한 많은 메소드를 가지고 있다크게 하단의 4가지로나눠서 설명할  있다.

  1. Figure 객체의 외형을 이용한 작업
  • Figure 객체의 경계위치크기 값을 얻어내고설정하는 것을 포함한다. Figure 객체의 경계선 크기와 실제 영역 뿐만 아니라 최대최소 크기도 제어할  있다또한 Figure 객체의 전경색과 배경색을 변경하고 컨트롤 외형에 관련된 매개변수를 얻어내고설정하는 방법을 제공한다.
  1. 이벤트 핸들링
  • Draw2D 이벤트 핸들링 과정 또한 SWT 비슷하지만 개의 새로운 이벤트와 리스너를 제공한다. SWT 달리, Figure 객체는 여러가지 자신만의 이벤트를 다룰  있다전체 리스터의 목록과 이벤트 핸들링 메소드는 다음과 같다.
  • Draw2d 리스너

    이벤트 핸들링 메소드

    addFocusListener()

    Handlefocusgained()

    handleFocusLost()

    addKeyListener()

     

    handleKeyPressed()

    handleKeyReleased()

    addMouseListener()

    handleMouseDoubleClicked()

    handleMousePressed()

    handleMouseReleased()

    addMouseMotionListener()

    handleMouseDragged()

    handleMouseEntered()

    handleMouseExited()

    handelMouseHovered()

    handelMouseMoved()

    addListender()

     

    addAncestorListener()

     

    addFigureListener()

     

    addPropertyChangeListener()

     

 

  1. 부모와 자식의 관계 정보 유지
  • SWT Jface Composite 클래스를 제공하여 다른 컴포넌트에 컴포넌트를 추가하는 것을 허용한다그러나 Draw2D에서는 Figure 객체에 따라 컨테이너일 수도 있고컨테이너에 포함될 수도 있다.  Figure 언급하기 위해 부모(parent)라는 용어를 사용하고내부에 포함되는 Figure 언급하기 위해 자식(child)이라는 용어를 사용한다.

메소드

기능

Add(Figure, Object, int)

주어진 제약 조건을 가진 자식 Figure 객체와 List 인덱스를 추가한다.

getChildren()

자식 Figure 객체의 List 반환한다.

getParent()

Figure 객체의 부모 Figure 객체를 반환한다.

setChildrenEnabled(boolean)

Figure 객체의 자식을 사용 가능하게 하거나 금지한다.

setConstraint(Figure, object)

주어진 자식 Figure 객체의 제약 조건을 지정한다.

 

SWT에서 button 객체와 Label 객체는 생성자에서 부모를 명시하여 Composite 자신을 추가한다. Draw2D에서는 부모 Figure 객체가 자식 List 객체에 Figure 객체를 포함하기 위해 add() 메소드를 사용한다 메소드는 부모 List 객체에 임의에 제약 사항(자식 객체의 크기 또는 위치 )이나 인덱스를 선택적으로 포함할  있따부모 Figure getChildren() 메소드를 이용하여  List 객체를 얻을수 있고자식 객체는 getParent() 이용하여 부모에게 접근할  있다부모는 또한 setChildrenEnabled() 이용하여 자식 객체를 허용하거나 금지 시킬  있고, setConstraint() 이용하여 자식의 제약사항을변경할  있다.

  1. 그래픽 관리
  • Draw2D SWT GC 대부분의 임무를 수행하는 Graphics 클래스를 제공하지만, Figure 객체는 자기만의  가지 그래픽 메소드를 가지고 있다 paint() 이용하여 화면 표시를 제어   있을  아니라어떤 부분을 보여줄지 선택하기 위한 paintBorder() paintClientArea() 사용할  있다. Figure 객체는 paintChildren() 이용하여 자식 객체를 보여줄  있고오직 자기 자신을 보여주기 위해서는 paintFigure() 사용한다또한 SWT 비슷하게 작동하는 여러 가지 repaint() 메소드도사용 가능하다. Draw2D 사용자가 선택한 위치에 대한 정보를 얻기 위한 메소드를 포함한다특히 Draw2D 정확한 마우스위치를 다루는 반면 SWT 오직 선택된 Control 고려한다는 점이 다르다관련 메소드로는 FindMouseEventAt(), FindFigureAt() 등이 있다.

 

 

Figure  객체

결론부터 말하면 SWT 객체가 액션 리스너, view  가지고 나타내지만 Firgure 나타내는 개체와 그의 액션 리스너등을 가진 객체가 서로 상이하다.

  1. Label 객체
  • Draw2D Label 객체는 SWT Label 객체와 비슷하지만텍스트 크기 측정과 이미지 위치를 더한  많은 메소드를 포함하고 있다.
  • getTextBounds() getTextLocation() 통해 Lable 객체의 문자열 매개변수의 화면 출력 크기를 측정할  있다또한 Lable 객체와 이미지와 관련되어 있다면, getIConBounds() getIconAlignment() Image 대한 정보를 제공한다.
  1. Clickable 객체
  • Button Toggle 클래스를 포함하고 있는  클래스는 사용자에게 필요한 선정과 관련된 이진 정보를 제공한다. SWT button 객체와 같이, Button Toggle 클래스는 서로 동일하게 동작한다하지만 두개의 서로 다른점이 존재한다.
  •  째로 Clickable 객체는 Draw2D Figure 객체의 모든 외형을 가질  있다둘째 Clickable 이벤트 핸들링과 함께 동작한다.
  • Draw2D 사용자 인터페이스는 일반적으로 SWT Jface 생성된  보다  복잡하다.

 

 

LayoutManger Pane 사용

-SWT Layout 클래스처럼, LayoutManger 자식 컴포넌트를 콘테이너에 어떻게 배치하고 크기를 정할지 결정한다.

Draw2D Pane객체(ScrollPane, LayerPane) SWT Composite 같이 배경 컨테이너 역할을 한다.

 

LayoutManger 하위 클래스 이해

Figure 자신의 자식 객체들(button, Layout)등을 생성할때 먼저 figure.setLayoutManger() 통해서 설정해주어야 한다.

 

 

메소드

기능

ABstractHintlayout

다른 곳에 설정한 값을 가져와 자식 Figure 객체의 크기를 결정하는 Hint  제약 조건을 사용한다.

DelegatingLayout

자식 객체가 Locator 제약조건에 따라 자신의 크기를 지정하는 것을 허용한다.

XYLayout

Rectangel 제약 조건에 따라 자식 객체의 크기와 위치를 지정하는 책임을 부모에게 부여한다.

 

LayeredPane

  • Figure 객체를 보여주기 위한 여러 단계를 제공한다투명한 Layer객체를 사용하여 사용자 GUI 외관 그래픽을 구분할  있다 Layer 각각의 프로퍼티를 따로 갖고 있고 구분된 LayoutManger 가지고 있다.
  •  중의 하나인 FreeFormLayeredPane 원하는 방향으로 윈도우를 확장할  있다그리고 또다른 종류인 ScalableLayeredPane 윈도우 영역안에서 확장이 가능한다.

 

Graphics 클래스의 사용

  • DecisionFigure : 조건을 나타내는 도형 개의 입력과  개의 출력( 또는 아니오)
  • ProcessFigure  따라 일어나는 행동을 나타내는 도형 개의 입력과  개의 출력
  • TerminatorFigure 플로우차트의 시작 또는 끝을 나타낸다시작으로 사요한다면 오직 출력이 연결될 것이고끝으로 사용한다면 오직 입력이 연결될 것이다.

 경우에, Figure 크기는 bounds라고 불리는 변수에 의해 제어된다. Figure 텍스트는 message 문자열에 설정된다 제약 사항들은 Figure 클래스의 외부에서 제어되므로아직 그것을   없을 것이다.

 

 

Figure Figure 서로 연결하기 위해서는 FixedAnchor 불리는 ConnectionAnchor 객체가 필요하다는 것을 의미한다 

'RCP > SWT & JFACE' 카테고리의 다른 글

JFace TreeViewer설명  (0) 2016.12.24
IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24
이벤트로 받은 키보드 멀티 인식 방법  (0) 2016.12.24
RCP 확장점 소개  (0) 2016.12.24

어플리케이션에 항목 드롭하기

  • 등록된 컨트롤에 데이터를 올려 놓을 경우 데이터를 받아 들일  있으며이때 DropTarget 인스턴스를 사용한다.
  • DropTarget 위젯이 선택할  있는 데이터의 유형과  위젯에서 수행하기로 공인된 동작 가지 모두 저장할  있다운영체제가 이러한 정보를 사용하여 항목이 해당 위젯을 지나갈 때  항목을 놓을  있는지에 대한 가시적인 피드백을 제공한다.
  • 우선 타겟을 등록하면, DropTargetListener DropTargetEvent 받으며 이벤트는 사용자가 컨트롤내에 어떤 것을 놓을 발생한다.

 

연산 상수

설명

DROP_COPY

 항목을 컨트롤 안이나 밖으로 드래그   복사한다.

DROP_MOVE

마우스를 놓은 위치로 항목을 이동시킨다.

DROP_LINK

항목을 놓으면 원본에 대한 링크를 생성한다.

DROP_NONE

항목을 놓아도 아무런 일이 일어나지 않는다.

 

 

Ex)

 

Int operation = DND.DROP_MOVE | DND.DROP_COPY

DROPTARGET tartget = new DropTarget(control, opration) // 해당 타겟을 지정하고 해당 타겟의 Drag 이벤트가 발생하였을 발생할 동작을 설정한다.

Transfer[] transfer = new Transfer[] { // 데이터의 유형을 선택한다.

TextTransfer.getInstance(),

RTFTransfer.getInstance()

};

Target.setTransfer(transfer);

Target.addDropListener(new DropTargetListener(){..});

 

 

Viewer에서 해당 드래그 이벤트를 실행시킬 경우

Transfer[] types = new Transfer[] {

FileTransfer.getInstance()

};

 

Viewer.addDropSupport(DND.DROP_COPY, types, new FileDropListener(this));

 

가장 중요한 부분은 Listener 동작시키는 작업이다.

  1. dragEnter() 항목을 끌고 가는 동안커서가 컨트롤의 경계부분으로 들어온다.
  2. dragOver() 커서가 항목을 끌고 가면서 컨트롤 위를 이동한다.
  3. dragOperationChanged() 사용자가 사용할 동작 유형을 바꿀 때마다  메소드를 호출 한다 이벤트는 주로 Ctrl이나 Option 등의 기능키를 누르거나   발생한다.
  4. dropAccept() 사용자가 컨트롤에서 항목을 놓는다 때가 애플리케이션이 이런 떨어트리는 작업을 거절하거나 수행할 동작유형을 변경할  있는 마지막 과정이다.
  5. Drop() 데이터를 놓는다리스너에서 주어진 데이터를 적절히 다룰  있는 로직을 구현해야 한다.

 

 메소드 에서는 DropTargetEvent 바등며  이벤트는 현재 동작 정보를 포함한다사용할 데이터 유형과 수행 동작을 변경하기 위해서는 각각의 currentDataType detail 필드를 수정한다.

여섯번재 메소드인 dragLeave() dropAccept()  호출 하기 전에 언제든지 호출   있으며애플리케이션에게 사용자가 커서를컨트롤 밖으로 이동햇지만 드롭하지 않았다고 알려준다.

 

DragSource는컨트롤을 데이터의 소스로 등록하기 위해 생성된다. DragSourListener 드래그 동작을 시작할  이벤트를 받으며 해당 항목을 놓을 때의 처리로직을 구현한다.

 

  1. dragStart() 사용자는  컨트롤에서 데이터 드래그를 시작한다드래그를 진행하기 위해서는 이벤트의 doit 필드를 true 설정해야 한다.
  2. dragSetData() 놓기를 수행한다 메소드 놓을 데이터를 제공하기 위해 이벤트의 data필드에 데이터를 넣는다.
  3. dragFinished() 놓는 동작을 성공적으로 끝낸다마무리 작업 원본데이터 삭제 작업 같은 작업을 여기에서 수행한다.


'RCP > SWT & JFACE' 카테고리의 다른 글

IWizardPage 인터페이스  (0) 2016.12.24
Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24
이벤트로 받은 키보드 멀티 인식 방법  (0) 2016.12.24
RCP 확장점 소개  (0) 2016.12.24
rcp toolbar에서 label등 각종 contribution item 생성방법  (0) 2016.12.24

(event.stateMask & SWT.CTRL) != 0 && event.keyCode == 'p'

 

Ctrl + P

'RCP > SWT & JFACE' 카테고리의 다른 글

Draw2d 설명  (0) 2016.12.24
Drag & Drop 구현 방법  (0) 2016.12.24
이벤트로 받은 키보드 멀티 인식 방법  (0) 2016.12.24
RCP 확장점 소개  (0) 2016.12.24
rcp toolbar에서 label등 각종 contribution item 생성방법  (0) 2016.12.24
rcp dialog 화면 가운데 출력  (0) 2016.12.24

+ Recent posts