'RCP/RCP'에 해당되는 글 6건

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/RCP

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 == "" || 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/RCP

RCP workbench 글로벌 후크

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


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


addFilter(swt.keydown, new listener() {

Public void handle(event e) {

 

}

}

 

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


그렇기 때문에


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



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

RCP/RCP

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/RCP

rcp 구조 및 기초

WorkbenchAdvisor( 대상 선정)

WorkbenchAdvisor 애플리케이션 생명 주기의  단계전에 작업을 처리한다.

어떻게 그리고 누구를 그릴지 설정한다.

 

Public class ExampleAdvisor extends WorkbenchAdvisor

{

Public String getInitialWindowPerspectiveID() {

}

 

Public void preWindow(IWorkbenchWindowConfigurer configurer) // 워크 벤치 외양에 대한 설정

{

Configurer.setText("dbsafer");

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() 메소드를 이용하여 초기 크기 제목상태 표시줄툴바 설정 등을 지정한다


 [ 1 ]  [ 2 ] 

푸터바

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

  • Today : 13
  • Yesterday : 460
  • Total : 82,704