RCP ActivePage Hide and Show

RCP/RCP|2016. 12. 24. 00:51

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);

}

태그 : activepage, RCP

댓글()

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

RCP/RCP|2016. 12. 24. 00:50

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 == "" || fd.getFileName() == null || fd.getFileName() == "") {

exceptionHandler.handleException(Message.ExportcancelMsg);

return;

}

FileContainer.getInstance().setFilePath(path);

new ProgressMonitorDialog(object.getTable().getControl().getShell()).run(false, false,

new LongRunningOperation(object, path));

} catch (Exception e) {

LOGGER.error("Export Error", e);

exceptionHandler.handleException(Message.errExportContent);

}

}

});

}


public class LongRunningOperation implements

IRunnableWithProgress {

ExcelExportActionNotification notification;

String path;


public LongRunningOperation(ExcelExportActionNotification object, String path) {

this.notification = object;

this.path = path;

}


@Override

public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {

try (FileOutputStream out = new FileOutputStream(FileContainer.getInstance().getCurrentFile())) {

//Create Data, 작업량 설정

monitor.beginTask("Export Data",

notification.getTable().getTable().getItemCount() * notification.getColumn_header().length);



//Create workbook and sheet

workbook = new HSSFWorkbook();

HSSFSheet sheet = workbook.createSheet();

sheet.setGridsPrinted(true);

sheet.setFitToPage(true);

sheet.setDisplayGuts(true);


//Header 설정

row = sheet.createRow(0);

for (int colIndex = 0; colIndex < notification.getColumn_header().length; colIndex++) {

cell = row.createCell(colIndex);

cell.setCellValue(notification.getColumn_header()[colIndex]);

}


//Data Input

for (int rowIndex = 0; rowIndex < notification.getTable().getTable().getItemCount(); rowIndex++) {

row = sheet.createRow(rowIndex + 1);

for (int colIndex = 0; colIndex < notification.getColumn_header().length; colIndex++) {

cell = row.createCell(colIndex);

cell.setCellValue(notification.getTable().getTable().getItem(rowIndex).getText(colIndex));

monitor.worked(1);

}

}


monitor.done();

workbook.write(out);


//내보내기가 완료된 엑셀파일 실행

if (MessageDialog.openConfirm(null, Message.successTitle, Message.msgExportSuccess)) {

Program program = Program.findProgram("xls");

program.execute(path);

}

} catch (IOException e) {

LOGGER.error("Export Error", e);

exceptionHandler.handleException(Message.errExportContent);

} finally {

workbook = null;

row = null;

cell = null;

}

}

}


결과 화면

 

댓글()

RCP workbench 글로벌 후크

RCP/RCP|2016. 12. 24. 00:48

글로벌 application 키, 마우스 이벤트를 감지하기 위해서는


워크벤치에서 activeWorkbenchWindow shell에서 getdisplay().addfilter 통해 등록을 해줘야 한다.


addFilter(swt.keydown, new listener() {

Public void handle(event e) {

 

}

}

 

Shell 있는 filter 있는 리스너는 다른 위젯 리스너에 도달하기전에 모든 이벤트를 먼저 필터한다.


그렇기 때문에


해당 이벤트 필터는 다른 이벤트를 못가게 막을 수도 있고 이벤트 사이에 필드를 지정할  있다



그래서 event 필터는 강력하지만 위험하다그래서  하지않는다.

댓글()

RCP ActivePage에 특정 View 열기

RCP/RCP|2016. 12. 24. 00:47

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 구조 및 기초

RCP/RCP|2016. 12. 24. 00:46

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() 윈도우 외양을 워크벤치에서 보이기 전에 설정

 

 

IWorkbenchWindowConfigurer 외양 설정하기

작성하는 워크벤치가 이클립스와 비슷하게 보여도, RCP IWorkbenchWindowConfigurer보다 폭넓은 디자인 유연성을 제공한다.

 

메소드

설명

addEditorAreaTransfer(Transfer)

편집기의 드래그앤드롭을 위해 Transfer 객체를 제공한다.

configureEditorAreaDropListener(DropTargetListener)

드래그앤드롭 이벤트를 위해 필요한 DropTargetListener 설정한다.

createCoolBarControl(Composite)

CoolBar내용을 받기 위한 컨트롤을 명시한다.

createMenuBar()

워크벤치에서 Menu 생성한다.

createPageComposite(Composite)

편집기와 뷰를 위한 컨테이너를 설정한다.

setInitialSize(Point)

워크벤치의 초기 크기를 제공한다.

setShellStyle(int)

워크벤치의 Shell 객체의 스타일 비트를 명시한다.

setShowCoolBar(boolean)

워크벤치에게 CoolBar 화면에 보여야 하는지 알린다.

setShowMenuBar(boolean)

워크벤치에게 메뉴를 화면에 보여야 하는지 알린다.

setShowPerspectiveBar(boolean)

워크벤치에게 다른 워크벤치 퍼스펙티브에서 선택한 바를 보여야 하는지 알린다.

setShowStatusLine(boolean show)

워크벤치에게 상태표시줄을 보여야 하는지 알린다.

setTitle(String title)

워크벤치 애플리케이션을 위해 타이틀을 명시한다.

 

 

 

뷰와 퍼스펙티브 추가

 1.  구축

  • 뷰는 ViewPart 확장하며, ResourceNavigator 같이 사전에 설정한 클래스를 사용하지 않는다 하나의 메소드 createPartControl(Composite) 사용하여 뷰의 외관과 동작을 설정   있다.

Example)

Public class ExampleView extends ViewPart

{

Public void createPartControl(Composite parent)

{

}

 

Public void setFocus() // 사용자가 해당 뷰를 선택하면 불러지는 메소드

{

}

 

}

 

  1. 퍼스펙티브로 워크벤치 윈도우 배치

IPerspectiveFactory IPageLayout 객체를 얻어와서 워크벤치의 외양을 제공하도록 환경 설정한다. IPerspectiveFactory유일한 메소드는 createInitialLayout(IPageLayout) 코드를 간소화 한다.

 

IPageLayout 기본 메소드

 

메소드

설명

addShowViewShortCut(String)

메뉴에서 Window > Show 옵션을 생성한다.

addView(String, int, float, String)

명시한 위치와 크기에 주어진 ID 뷰를 워크벤치에 추가한다.

getEditorArea()

워크벤치 편집기의 ID 반환한다.

isFixed()

레이아웃이 변경가능한지 여부를 반환한다.

setEditorAreaVisible(boolean)

편집기 영역을 보일지 설정한다.

setFiexed()

폼에서 레이아웃을 고정할지 설정한다.

addView IPageLayout에서 가장 주요한 메소드이므로 동작 과정에 대한 이해도가 필요하다하단에는 addView() 파라미터에 대한 설명이다.

  1. viewID : 뷰를 표시하는 문자열(plugin.xml에서 명시함)
  2. Relationship : 정수 값으로 기준 위도우 어디에 뷰가 위치하는지 나타낸다. (IPageLayout.TOP, IPageLayout.LEFT ……)
  3. Ratio : 실수 값으로 뷰에서 기준 윈도우 대비 어느 정도의 비율이어야 하는지 나타낸다.
  4. refID L 기준 윈도우를 나타내는 문자열

 

Example)

Public class ExamplePerspective implements IPerspectiveFactory

{

Public void createInitialLayout(IPageLayout layout)

{

String editor = layout.getEditorArea();

Layout.addView("RCPExample.ExampleView", IPageLayout.RIGHT, 0f, editor);

Layout.setEditorAreavisible(false);

Layout.setFixed(true);

}

}

 

 

WorkbenchWindowAdvisor

  • workbenchAdvisor 통해 선정된 대상을 직접 그리는 부분
  • prewindowOpen() 메소드를 이용하여 초기 크기 제목상태 표시줄툴바 설정 등을 지정한다


댓글()

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

RCP/RCP|2016. 12. 23. 23:50

Viewer


- ContentViewer, StructuredViewer이 존재한다.

1. ContentViewer 

- 다양한 인터페이스를 활용해서 도메인 객체 형태를 유지하면서 데이터를 다룬다. 이들 인터페이스는 JFace 관례에 따라 이름 앞에 I가 붙는다.

- StructuredViewer는 ContentViewer에게 제공하는 데이터를 구조화 한다. 구조화하는 것은 넒은 범위를 의미하지만 필터링이나 정렬 같은 일반적인 작업을 실행하는 메소드들이 이계층에서 구현된다.



프로바이더(Provider)

- 애플리케이션에 고유한 작업을 수행하여 위젯에서 사용가능한 데이터 부분을 만들어 낸다. 

- 리스트에서 도메인 객체를 나태내기위해 화면에 보여야 할 텍스트를 반환하는 일 등을 한다.

1. LabelProvider

- 요소를 보여주기 위한 텍스트나 이미지를 제공한다.

2. ContentViewer

- 레이블 프로바이더의 역할에도 관여를 하지만 실제적으로 요소를 보이게끔 해준다.

댓글()