RCP

RCP

    RCP ActivePage Hide and Show

    IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();IViewReference viewReference = activePage.findViewReference(ContentTreeViewer.ID);if (viewReference == null) {try {activePage.showView(ContentTreeViewer.ID);} catch (PartInitException e) {LOGGER.error("OpenSlipView Error : " , e);}} else {activePage.hideView(viewReference);}

    RCP ProgressDialog를 이용한 TableViewer 데이터 엑셀로 내보내기

    public void processExcelExport(ExcelExportActionNotification object) { Display.getDefault().syncExec(new Runnable() { public void run() { try { FileDialog fd = new FileDialog(object.getTable().getControl().getShell(), SWT.SAVE); fd.setText("Save"); fd.setFilterPath("C:/"); String[] filterExt = {"*.xls", "*.*" }; fd.setFilterExtensions(filterExt); String path = fd.open(); if (path == null || path..

    RCP workbench 글로벌 후크

    글로벌 application의 키, 마우스 이벤트를 감지하기 위해서는 워크벤치에서 activeWorkbenchWindow의 shell에서 getdisplay().addfilter를 통해 등록을 해줘야 한다. addFilter(swt.keydown, new listener() {Public void handle(event e) { }} Shell에 있는 filter에 있는 리스너는 다른 위젯 리스너에 도달하기전에 모든 이벤트를 먼저 필터한다. 그렇기 때문에 해당 이벤트 필터는 다른 이벤트를 못가게 막을 수도 있고 이벤트 사이에 필드를 지정할 수 있다. 그래서 event 필터는 강력하지만 위험하다. 그래서 잘 하지않는다.

    shell Listener

    shell에 리스너를 추가하여 shell이 최소화 되었을 때, 다시 최대화 되었을 때, 활성화 됬을 때 종료됬을 때 등 shell 자체의 이벤트에 대한 리스너를 설정할 수 있다. shell.addShellListener(new ShellListener() { public void shellActivated(ShellEvent event) { System.out.println("activate"); } public void shellClosed(ShellEvent arg0) { System.out.println("close"); } public void shellDeactivated(ShellEvent arg0) { } public void shellDeiconified(ShellEvent arg0) { ..

    RCP ActivePage에 특정 View 열기

    RCP ActivePage에 특정 View 열기 IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();IViewReference viewReference = activePage.findViewReference(SlipView.ID); if (viewReference == null) { try { activePage.showView(SlipView.ID); } catch (PartInitException e) { LOGGER.error("OpenSlipView Error : " , e); }}

    rcp 구조 및 기초

    WorkbenchAdvisor( 대상 선정)WorkbenchAdvisor는 애플리케이션 생명 주기의 각 단계전에 작업을 처리한다.어떻게 그리고 누구를 그릴지 설정한다. Public class ExampleAdvisor extends WorkbenchAdvisor{Public String getInitialWindowPerspectiveID() {} Public void preWindow(IWorkbenchWindowConfigurer configurer) // 워크 벤치 외양에 대한 설정{Configurer.setText("test");Configurer.setInitialSize(new Point(10,10)_); } } preStartup() 시작전에 나타낼 부분 사용prewindowOpen() 윈도..

    스플래시 이미지를 png 파일로 할 수 없는이유

    Look here http://wiki.eclipse.org/Equinox_Launcherfor some details on the -showsplash argument which controls the initialdisplaying of the splash screen in the launcher. There are really three phases to the splash screen when eclipse starts:1) Native code, before java starts2) Java calling out to Native code from Main, before OSGi starts3) Java code working through SWT, after workbench starts Fo..

    대용량 테이블 조회가 가능한 Nattable 예제 실행 방법

    TableViewer로는 대용량 데이터를 가져오는데 한계가 있다. 그래서 이클립스에서 제공하는 nattable을 사용하면 조금 더 빠르게 대용량 데이터를 가져올 수 있다. 그 nattable의 예제와 소스코드를 볼 수 있는 방법을 소개한다. 첨부된 파일 두개를 모두 다운 받고 cmd 창에서 다음 명령어를 실행시킨다. java -cp org.eclipse.swt.win32.win32.x86_64-4.3.jar;NatTableExamples-0.9.0.jar org.eclipse.nebula.widgets.nattable.examples.NatTableExamples 관련 주소https://eclipse.org/nattable/documentation.php?page=getting_started

    OSGI & Platform

    OSGI?다양한 이클립스의 런타임 매커니즘을 하나로 묶어서 사용할 수 있도록 만든 런타임 모델이 OSGI 런타임 모델이다. Platform현재 실행중인 이클립스 환경에 대한 정보를 제공한다. 이 클래스를 사용해 설치되어 있는 플러그인(번들),. 확장, 확장점, 명령행 인자 , 작업관리자 등의 정보를 얻을 수 있다.Ex ) getProduct() 현재 실행 중인 이클립스 제품 정보를 반환한다.

    RCP 프레임워크 프로젝트의 플러그인 클래스

    플러그인 클래스모든 플러그인은 프로그램 관저에서 플러그인을 대표하는 클래스를 내역서 편집기의 개요 페이지에서 선언할 수 있다. (Menifest의 OverView 페이지 이기도 하며, 3.2 이상부터는 Activator라고 부른다.)플러그인과 연관된 정적 리소스에 접근하거나, 플러그인별 환경설정 또는 기타 상태 정보에 접근해 초기화 하기 위한 메소드를 제공한다.반드시 필요한 것은 아니지만 플러그인 내역서에 플러그인 클래스가 지정되어 있는 경우에 플러그인이 로딩 되었음을 전달 받는 첫 번째 클래스이며, 또한 종료되었을 때 전달 받는 마지막 클래스 이다. (그를 이용해서 해당 플러그인의 시작과 끝의 새로운 동작을 추가할 수 있다.) UI를 사용하는 플러그인의 경우 AbstractUIPlugin을 상속받아서 ..

    Menifest 파일 설명

    Menifest Dependencies 페이지1. Menifest는 플러그인들의 의존관계를 표시Require-Bundle: org.eclipse.ui,Org.eclipse.core.runtime 이 뜻은 해당 두개의 플러그인에 현재 플러그인이 종속된다는 것을 의미한다.해당 의미는 컴파일시 결정되는 종속성이 아닌 플러그인의 실행시에 사용되는 종속성이다.실행 중 참조해야 할 플러그인이 어떤 것인지 확인한다. 클래스 로드 중 Require-Bundle에 명시된 항목 중 클래스를 찾을 수 없을 경우 NoClassDefFoundError 예외가 발생한다. Require-Bundle: org.eclipse.ui,Org.eclipse.core.runtime;resolutoin=optional // 없어도 실행되는것(..

    Action 클래스 살펴보기

    필요한 액션을 구현하기 위해서 action클래스를 상속받아서 구현한다. Action 클래스의 메소드 Run() - action에 해당하는 이벤트 처리 수행Action() - 디폴트 생성자Action(String, ImageDescriptor) - text 필드를 생성하고 이미지를 action에 연결하는 생성자Action(String, int) - TEXT와 STYLE 필드를 설정하는 생성자. ImageDescriptor 객체는 이미지가 아니고 이미지를 생성하기 위해 필요한 정보를 가진 객체이다. getStyle() - STYLE 필드를 반환한다.setEnabled(boolean) - ENABLED 필드를 설정한다.getEnabled() - ENABLED 필드를 반환한다.setChecked(boolean)..

    rcp프레임워크의 shell객체의 이벤트 처리 설명

    Shell 객체는 이벤트를 위젯에 보내고 위젯은 이정보를 리스너로 불리는 인터페이스로 전달하고 리소드 메소드 중에 동작을 처리하는 이벤트 핸들러를 호출한다. 어댑터어댑터는 추상클래스로서 Listener 인터페이스를 구현하고 필요한 각 메소드의 기본적인 구현을 제공한다.필요한 메소드만 작성하면 된다.(리스너로 코딩하면 필요하지 않은 부분도 코딩해야 한다.)즉, 위젯을 리스너가 아닌 어댑터와 연결한다면 조금더 편리하다. 케이스 1.리스너로 코딩하기Button.addMouseListener(new MouseListener(){Public void mouseDown(MosueEvent e){Clkdevent();} 어댑터로 코딩하기Button.addMouseListener(new MouseAdapter(){Pu..

    IWizardPage 인터페이스

    Jface는 IWizardPage 인터페이스를 사용하여 마법사의 페이지 하나를 표현한다. getName() : 위자드의 유일한 이름을 가진다.getNextPage(), getPreviousPage() 이 메소드들은 다음이나 이전의 페이지로 이동한다.isPageComplete() 사용자가 해당 페이지에서 필요한 모든 내용을 채웠는지 알아낸다.canFlipToNextPage() : 다음 버튼을 사용할 수 있는지 체크 한다. 마법사를 담는 부분은 Iwizard 인터페이스이고 각 페이지는 wizardpage가 나타낸다. 마법사 컨테이너 마법사 컨테이너는 하나 이상의 마법사에 대한 호스트로서의 역할을 수행한다. Dialog SettingDialogSetting은 IDialogSettings 인터페이스를 구현한다...

    Draw2d 설명

    Draw2d 툴은 사용자가 좋아하는 모든 외형과 기능을 포함함 GUI 컴포넌트를 만들 수 있게 한다. Draw2d의 기본 클래스클래스기능유사 SWT 클래스LightweightSystem이미지를 만들기 위한 상위 레벨 환경DisplayFigureLightweightSystem 내에 컴포넌트 또는 컨테이너Shell, Control, CompositeGraphicsFigure 내에 그래픽 영역을 제공GCGC LightweightSystem 클래스는 Display 클래스와 유사하다. 시각적으로 보여주는 것은 없지만, 이벤트 핸들링을 제공하고 외부환경과상호 작용을 하는 역할을 한다. LightweightSystem 클래스는 운영체제와 동 떨어진 계층에서 작동한다. Draw2d의 기본적인 구조는 Canvas -> ..

    이벤트로 받은 키보드 멀티 인식 방법

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

    RCP 확장점 소개

    확장점은 기능 단위를 느슨하게 결합시키기 위한 메커니즘으로 이클립스 전반에 걸쳐 사용된다. 하나의 플러그인은 플러그인 내역서(Menefiset.MF)에서 확장점을 선언하며. 다른 개발자가 사용할최소한의 인터페이스와 관련 클래스를 노출시킨다. 다른 플러그인은 확장점에 대한 확장을 선언하고 적절한 인터페이스를 구현하며제공된 클래스를 기반으로 구성 요소를 참조하거나 구축한다. 각 확장점은 플러그인의 식별자와 마침표 뒤에 알파벳,숫자, 밑줄(_)로 이루어진 단순 식별자를 붙여 구성한 유일한 식별자를 갖는다.확장점을 선언할때는 단순식별자만을 사용한다. 확장점에 대한 확장을 선언할때는 확장점에 대한 전체 식별자를 사용한다. 확장점의 사용되어야할 스키마 정의를 나타내는 exsd모든 확장점은 확장점이 어떻게 사용되어야..

    rcp toolbar에서 label등 각종 contribution item 생성방법

    ToolBarManager manager = new ToolBarManager(SWT.FLAT | SWT.HORIZONTAL); LabelContributionItem labelItem = new LabelContributionItem("myLabelId"); //Label ContibutionItem 생성 manager.add(labelItem); TextContributionItem textItem = new TextContributionItem("myTextId"); manager.add(textItem); ToolBar toolbar = manager.createControl(parent); return toolbar; 출처:

    rcp dialog 화면 가운데 출력

    public Point getCenterPoint() { Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); Rectangle shellBounds = parentShell.getBounds(); return new Point(shellBounds.x + shellBounds.width / 2, (shellBounds.y + shellBounds.height) / 2); }Then simply override the getInitialLocation method of Dialog; @Override protected Point getInitialLocation(Point initialSize) { Poin..

    JFace Dialog에서 레이아웃 설정으로 버튼 바 숨기기

    JFace Dialog에서 레이아웃 설정으로 버튼 바 숨기기 protected void createButtonsForButtonBar(final Composite parent){ GridLayout layout = (GridLayout)parent.getLayout(); layout.marginHeight = 0; }

    eclipse 범용 UI JFace 소개

    Jface - SWT는 윈도우에서 정의한 위젯에 대한 접근을 제공한다면, JFace는 범용 UI 개념을 위한 구조와 편의기능을 제공한다. - JFace는 SWT와 다르게 윈도우 시스템에 독립적이며 SWT와 동시에 활용될 수 있다. - JFace는 UI 툴킷 컴포넌트의 모든 영역을 담당한다. 이미지, 폰트, 레지스트리 텍스트 지원, 대화창 ,환경설정, 마법사를 위한 프레임워크, Action, Viewer같은 것들을 담당한다.

    RCP프레임워크 재료인 SWT 소개와 단점

    SWT swt 소개 SWT는 각 운영체제마다 운영체제 고유의 UI 모양과 동작을 제공하는데, 실제로 UI를 운영체제의 자원을 이용하여 구성하고, 그 동작을 운영하는 것도 운영체제이기 때문이다. 예를 들어 윈도우즈용 SWT는 GDI(Graphic Device Interface. 마이크로 소프트 윈도우즈의 어플리케이션 개발 API)자원을 이용하여 UI를 만든다. swt 단점 - 자원의 한계 단점으로, 운영체제 자원을 추상화한 SWT 객체는 사용이 끝나면 dispose() 메서드를 호출해 반드시 운영체제에게 돌려주어야 한다. 만약 너무 많은 수의 운영체제 자원을 할당 받으면, 실행중인 다른 응용프로그램까지 악영향을 미칠 수 있고, 운영체제가 더이상 자원을 할당하는 것을 거부할 수 도 있다. swt 단점 - 메..

    RCP 프레임워크의 Extension and Extension Points

    Extension and Extension Points 모듈 소프트웨어를 만드는 기본적인 규칙은 컴포넌트간 커플링을 피하는 것이다. 만약 컴포넌트가 강력하게 통합되어 있다면, 서로 다른 설정들을 조작하거나 시스템의 변화없이 다르게 구현된 컴포넌트로 교체하는 것이 힘들게 된다. 이클립스에서 커플링을 줄이는 것은 extensions / extension points(이하 확장/확장지점)를 통해서 이루어진다. - Extension자신의 플러그인에 다른 플러그인(view, editor)등을 사용하여 기능적으로 확장하고 싶은경우에 플러그인의 extension에 정의를 한다. - Extension pointsextension point는 extension이 반드시 따라야 하는 자바 인터페이스와 xml을 조합한 명세..

    JFace의 treeList 예제

    Ch8List.Javapackage Ch8; import java.util.ArrayList;import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider;import org.eclipse.jface.viewers.LabelProvider;import org.eclipse.jface.viewers.ListViewer;import org.eclipse.jface.viewers.ViewerFilter;import org.eclipse.jface.viewers.ViewerSorter;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.ec..

    Viwer의 종류와 프로바이더 종류 및 설명

    Viewer - ContentViewer, StructuredViewer이 존재한다.1. ContentViewer - 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들 인터페이스는 JFace 관례에 따라 이름 앞에 I가 붙는다.- StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화하는 것은 넒은 범위를 의미하지만 필터링이나 정렬 같은 일반적인 작업을 실행하는 메소드들이 이계층에서 구현된다. 프로바이더(Provider)- 애플리케이션에 고유한 작업을 수행하여 위젯에서 사용가능한 데이터 부분을 만들어 낸다. - 리스트에서 도메인 객체를 나태내기위해 화면에 보여야 할 텍스트를 반환하는 일 등을 한다.1. LabelProvider-..

    JFACE TreeViewer 예제

    TreeViewer 메뉴- 모든 TreeViewr 구조의 예제를 제작해보았다. 1. Ch8TreeCompositepackage Ch8Tree; import java.util.ArrayList;import java.util.List; import org.eclipse.jface.viewers.ITreeContentProvider;import org.eclipse.jface.viewers.TreeViewer;import org.eclipse.jface.viewers.Viewer;import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.Composite; public class Ch8Tree..

    SashForm 소개와 예제

    SashForm은 이동이 가능한 경계선을 자식 위젯 사이에 생성함으로써 하나의 위젯을 늘리면 다른 한쪽이 감소하게 만들 수있다. Sash 클래스는 대부분 위젯처럼 org.eclipse.swt.widges패키지에 위치하지만 SashForm 크래스는 org.eclipse.swt.custom 패키지에서 찾을 수 있다. Public Ch3_SashForm(Composite parent){Super(parent, SWT.NONE); SashForm sf = new SashForm(this, SWT.VERTICAL);Sf.setsize(120,80); Button button1 = new Button(sf, SWT.ARROW | SWT.UP);Button1.setSize(120,40); Button button2 ..