EclipseRCP 퍼스펙티브 다루기(EclipseRCP perspective handling)[퍼스펙티브,perspective,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 퍼스펙티브 다루기(EclipseRCP perspective handling)






등록된 퍼스펙티브 배열 받아오기 (Getting registered perspective array)

IPerspectiveRegistry perspectiveRegistry = window.getWorkbench().getPerspectiveRegistry();
IPerspectiveDescriptor[] perspectiveDescriptors = perspectiveRegistry.getPerspectives();


현재의 퍼스팩티브 받아오기 (Getting current perspective)
WorkbenchWindow.getActivePage().getPerspective();


퍼스펙티브 전환하기 (Changing perspective)
WorkbenchWindow.getActivePage().setPerspective(IPerspectiveDescriptor perspective);




by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 선택제공 중재자 (EclipseRCP SelectionProviderMediator)[SelectionProviderMediator,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 선택제공 중재자 (EclipseRCP SelectionProviderMediator)
org.eclipse.jdt.internal.ui.typehierarchy.
SelectionProviderMediator

어디에 사용하는 클래스인가?

ViewSite에는 하나의 SelectionProvider를 설정할 수 있다.

두개 이상의 프로바이더를 설정해주고 싶다면, 이 클래스를 이용하면된다.

----

When I use this?

Selection provider for viewparts can be setted one viewer.

It helps selection provider that can be setted more viewer.


예제(Example)

StructuredViewer[] viewers = new StructuredViewer[2];
viewers[0] = resultTreeViewer;
viewers[1] = resultComboViewer;
SelectionProviderMediator mediator = new SelectionProviderMediator(viewers,null);
getViewSite().setSelectionProvider(mediator );

사용을 위해 추가한 플러그인들 (Require plugins)



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 체크박스에서 재귀선택 이벤트 (EclipseRCP recursive selection event in checkbox viewer)[checkbox viewer,체크박스,selection event,선택 이벤트,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 체크박스에서 재귀선택 이벤트 (EclipseRCP recursive selection event in checkbox viewer)







It’s Tips for CheckboxViewer.



I found bug that throw selection event three times in CheckboxViewer(CheckboxTreeViewer,CheckboxTableViewer).



This bug appear when user click checkbox on selected object.



Then I disable selection as well as “viewer.setSelection(null);";



And I need the checkbox behave likes the radio button.



I implemented it through history clear.





Code:


boolean isHistory;
Object currentObject;
 
public void selectionChanged(SelectionChangedEvent event) {
    if(isHistory) {
      isHistory = false;
      return;
    }
  if (!event.getSelection().isEmpty()) {

      if (event.getSelection() instanceof IStructuredSelection) {

          if(currentObject!= null) {

            if(! currentObject.equals((IStructuredSelection)event.getSelection()).getFirstElement())) {

              isHistory = true;

            viewer.setChecked(currentObject, false);

              viewer.setSelection(new StructuredSelection(currentObject);

              isHistory = false;

              viewer.setSelection(null);

            }

          }

        currentObject = (IStructuredSelection)event.getSelection()).getFirstElement();

            viewer.setChecked(currentObject , !viewer.getChecked(currentObject ));

            viewer.getTable().setSelection(currentObject.index);

          viewer.setSelection(null);

      }

    }

  }



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 문제해결 (EclipseRCP Trouble Shooting)[Trouble shooting,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 문제해결 (EclipseRCP Trouble Shooting)







Product export errors



Q. I did product exported. But it can not run properly. Why?!



A. I recommend you to confirm ‘Build Configuration’ for missing any folders and files to include in the binary build.



Q. How can I ignore check event in CheckedTableViewer or CheckedTreeViewer?



A. You can use this trick.


Code:



//// ignore Check Event  //

    table = viewer.getTable();

    table.addListener(SWT.Selection,new Listener() {

         public void handleEvent(Event event) {

             if( event.detail == SWT.CHECK ) {

                    event.detail = SWT.NONE;

                    event.type   = SWT.None;

                    event.doit   = false;

                    try {

                      table.setRedraw(false);

                       TableItem item = (TableItem)table.getItem(0);

                       item.setChecked(! item.getChecked() );

                    } finally {

                      table.setRedraw(true);

                    }

             }

         }

      });



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 다른플러그인에서 환경설정 가져오기. (EclipseRCP How to get Preferences from other Plug-ins?)[다른 플러그인 환경가져오기,get preferences,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 다른플러그인에서 환경설정 가져오기. (EclipseRCP How to get Preferences from other Plug-ins?)






최신의 이클립스 RCP 어플리케이션에서 Platform.getPlugin("plugin name") 을 사용하지 말라고 권고하기 때문에

Platform.getPlugin("plugin name").getPluginPreferences() 를 이용해서 가져올 수가 없다.



Latest Eclipse RCP Application API not recommended to use Platform.getPlugin("plugin name"). Then we can not get preferences from

Platform.getPlugin("plugin name").getPluginPreferences();



그럼 어떻게 다른 플러그인에서 Preference를 가져오느냐?

How to get Preference from other Plug-ins?

다음을 이용하면 다른 플러그인의 환경을 가져올 수 있다.

You can get Preferences use these.



IEclipsePreferences pref = [each scope what your need.]



new ConfigurationScope().getNode("plugin name");

or

new InstanceScope().getNode("plugin name");




Reference : http://dev.eclipse.org/newslists/news.eclipse.platform/msg72722.html



by


Tags : , , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 번들 네이티브코드 사용하기.(EclipseRCP  Bundle-NativeCode)[Bundle-NativeCode,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 번들 네이티브코드 사용하기.(EclipseRCP  Bundle-NativeCode)







번들네이티브 코드는 무엇인가?



이클립스 RCP 환경에서 개발시에, 네이티브 코드 사용을 편리하게 하기위해,



manifest 파일에 사용할수 있도록 Bundle-NativeCode라는 헤더를 만들어 놨다.




어떻게 사용하는가?



예시)



LWJGL을 사용하기위해 번들화하여, 실행을 했는데,



분명 jar파일을 의존성에 추가했는데도 불구하고,아래와 같은 에러가 난다.



java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path



LWJGL 포럼을 찾아보니, 실행할때 자바 VM Arguments로 네이티브 코드의 패스를 넣어주라고 한다.



-Djava.library.path="native code path”



이때 물론 실핼할때마다 VM Arguments에 넣어줄 수도 있지만,



Manifest.MF 파일에 다음과 같이 추가해주면 같은 효과를 볼 수 있다.




Tip.



만약 No Bundle-NativeCode match 라는 에러를 만난다면? Alias를 사용하지말고 os.name 프로퍼티를 확인하여, 그대로 써보자.



If you meet error that “No Bundle-NativeCode match", recommand you just confirm os.name property and use it.



Code:



Bundle-NativeCode: native/windowslib.dll;

native/windowslib2.dll;

osname=Windows95; osname=Windows 95; osname=Win95;

osname=Windows98; osname=Windows 98; osname=Win98;

osname=WindowsNT; osname=Windows NT; osname=WinNT;

osname=WindowsCE; osname=Winndows CE; osname=WinCE;

osname=WindowsXP; osname=Windows XP; osname=WinXP;

osname=WindowsVista; osname=Windows Vista;

processor = i386; processor = x86

native/linuxlib.so;

osname=Linux; processor=x86

(processordef | osnamedef | osversiondef | languagedef)


Reference

secrets-of-bundle-nativecode

Processor aliases

OS aliases



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)[Custom Dialog,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 사용자 정의 다이얼로그 사용하기.( EclipseRCP SWT Custom dialog)







SWT에서는 다음의 5가지 Dialog를 제공하고 있다.


  • ColorDialog
  • DirectoryDialog
  • FileDialog
  • FontDialog
  • MessageBox


하지만 필요에따라 자신만의 Dialog를 만들어 쓸 일이 생기는데..



간단한 SlideDialog의 예제로 알아보자.



Code:


private IWorkbenchWindow window;

  private Shell customDialog;

  private Button buttonOK;

  private Button buttonCancel;

  private boolean isSetting;

  private float density;

 

    private Listener listener = new Listener() {

        public void handleEvent(Event event) {

          if (event.widget == buttonOK) {

            isSetting = true;

          } else {

            isSetting = false;

          }

          customDialog.close();

          customDialog.dispose();

        }

 

      };

     

    private void initialize() {

      customDialog = new Shell(window.getShell(), SWT.APPLICATION_MODAL| SWT.DIALOG_TRIM);

    customDialog.setText("Setting Density");

    customDialog.setSize(210, 100);

   

    buttonOK = new Button(customDialog, SWT.PUSH);

      buttonOK.setText("OK");

      buttonOK.setBounds(10, 40, 80, 25);

 

      buttonCancel = new Button(customDialog, SWT.PUSH);

      buttonCancel.setText("Cancel");

      buttonCancel.setBounds(110, 40, 80, 25);

     

      final Slider slider = new Slider (customDialog, SWT.HORIZONTAL);

      slider.setBounds (10, 10, 180, 24);

      slider.setIncrement(10);

      slider.setMaximum(109);

      slider.setToolTipText("MIN <--!--> MAX");

      buttonOK.addListener(SWT.Selection, listener);

      buttonCancel.addListener(SWT.Selection, listener);

    slider.addListener (SWT.Selection, new Listener () {

      public void handleEvent (Event event) {

        density = slider.getSelection()*0.01f;

      }

    });

    }

  public void run(IAction action) {

    initialize();

    customDialog.open();

 

    // sleep during dialog work. dialog 가 닫힐때까지 기다리게 해준다.

     while (!customDialog.isDisposed()) {

          if (!window.getShell().getDisplay().readAndDispatch())

            window.getShell().getDisplay().sleep();

        }

 

     if(isSetting) {

        System.out.println("Density : "+density);

      }

  }


코드 후반의 while문 부분이 없다면, Dialog에서 어떤 조작을 하기도 전에 if문이 실행되버리니 유의해야 한다.



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 마법사 사용하기(EclipseRCP Wizard)[마법사,wizard,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 마법사 사용하기(EclipseRCP Wizard)







When you use wizard, you and users probably will be happy.

마법사를 이용하면 개발자 사용자 모두 편해 질 수 있습니다.

Wizard can have one ore more pages.

마법사는 하나 또는 여러개의 페이지를 가질 수 있습니다.

I wrote simple single page wizard code in this post.

이 포스트에는 간단하게 만들수 있는 단일 페이지 마법사 코드를 작성 해 봤습니다.



MyWizard.java


Code:



public class MyWizard extends Wizard {

 

  MyWizardPage mainPage;

 

  public MyWizard() {    

  }

 

    public void addPages() {

          super.addPages();

          mainPage = new MyWizardPage();

      addPage(mainPage);

      }

   

    public boolean performFinish() {

      if(mainpage.isActionValid()) return true;

      return false;

    }

 

  public boolean performCancel() {

    return true;

  }

}


MyWizardPage.java


Code:



public class MyWizardPage  extends WizardPage {

 

   public MyWizardPage() {

      super("pageName");

      setTitle("Title");

      setDescription("Description");

//    super(pageName,title,titleImage);

   }

 

   public void createControl(Composite parent) {

      // $begin code generated by SWT-Designer$

      Composite container = new Composite(parent, SWT.NULL);

      final GridLayout gridLayout = new GridLayout();

      gridLayout.numColumns = 3;

      container.setLayout(gridLayout);

      setControl(container);

      //add Components

    //....    

   }

 

   public void init(ISelection selection) {

   if (!(selection instanceof IStructuredSelection)) return;

   //init..

   }

 

}



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 환경설정 페이지 사용하기(EclipseRCP Preference Page)[Preference Page,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 환경설정 페이지 사용하기(EclipseRCP Preference Page)







1. add (org.eclipse.ui.preferencePages)extension to plugin.xml

- plugin.xml파일에 환경설정 확장점을 추가해준다.

2. create new class that implements IWorkbenchPreferencePage

- IWorkbenchPreferencePage를 구현한 클래스를 생성한다.

3. If you need to adjust, you can make Preference constants and Preference initializer classes.

- 필요하다면, 환경설정 상수나, 초기화 클래스관련 클래스를 생성할 수 있습니다.

범위 : 기본, 환경, 인스턴스

scopes : default , configuration , instance



Preference.java


Code:

public class PreferencePage
  extends FieldEditorPreferencePage
  implements IWorkbenchPreferencePage {
 
  public PreferencePage() {
    super(GRID);
    setPreferenceStore(Plugin.getDefault().getPreferenceStore());
    setDescription("Preferences");
  }

 

  public void createFieldEditors() {

    String[] filterExtension = { "*.file extension" };

    addField(new DirectoryFieldEditor(PreferenceConstants.DIR_PATH,         "&Directory preference:", getFieldEditorParent()));

                      FileFieldEditor filePathPrefEditor = new FileFieldEditor(PreferenceConstants.FILE_PATH,

        "&File Path preference:", getFieldEditorParent());

    filePathPrefEditor.setFileExtensions(filterExtension);

    addField(filePathPrefEditor);

    addField(

      new BooleanFieldEditor(

        PreferenceConstants.P_BOOLEAN,

        "&An example of a boolean preference",

        getFieldEditorParent()));

 

    addField(new RadioGroupFieldEditor(

        PreferenceConstants.P_CHOICE,

      "An example of a multiple-choice preference",

      1,

      new String[][] { { "&Choice 1", "choice1" }, {

        "C&hoice 2", "choice2" }

    }, getFieldEditorParent()));

    addField(

      new StringFieldEditor(PreferenceConstants.P_STRING, "A &text preference:", getFieldEditorParent()));

  }

 

  /* (non-Javadoc)

   * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)

   */

  public void init(IWorkbench workbench) {

  }

 

}

PreferenceConstants.java


Code:










public class PreferenceConstants {
  public static final String DIR_PATH = "dirPath";
  public static final String FILE_PATH = "filePath";
 
  public static final String P_PATH = "pathPreference";
  public static final String P_BOOLEAN = "booleanPreference";
  public static final String P_CHOICE = "choicePreference";
  public static final String P_STRING = "stringPreference";
}

PreferenceInitializer.java


Code:







public class PreferenceInitializer extends AbstractPreferenceInitializer {
  public void initializeDefaultPreferences() {
    IPreferenceStore store = Plugin.getDefault().getPreferenceStore();
    store.setDefault(PreferenceConstants.DIR_PATH,"C:\\Program Files");
  }
}


RadioGroupFieldEditor 사용팁

만약 아직 지원하지 않는 값을 사용자가 클릭했을 경우,

다음과 같이 propertyChange를 overriding하여 필드값을 Initializer에서 설정해준 값으로 불러와 변경시키는 방법을 사용 하면된다.



Code:

public void propertyChange(PropertyChangeEvent event) {
    super.propertyChange(event);
    if(event.getProperty().equals(FieldEditor.VALUE)) {
      if(event.getSource() instanceof RadioGroupFieldEditor) {
        if(!event.getNewValue().equals("available value")){
          Dialog.showWarningMessageDialog(getFieldEditorParent(), "Not available", "Sorry, Now available only for available value.");
          RadioGroupFieldEditor radioGroupEditor = (RadioGroupFieldEditor) event.getSource();
          radioGroupEditor .loadDefault();
        }   

      }

    }

  }



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

EclipseRCP 백그라운드잡 템플릿 (EclipseRCP Background Job Template)[Background Job,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

EclipseRCP 백그라운드잡 템플릿 (EclipseRCP Background Job Template)







Code:

Job job = new Job("Title") {
          protected IStatus run(IProgressMonitor monitor) {
           monitor.beginTask(TaskName, totalWork);
              monitor.subTask(SubTaskName);
                  monitor.worked(work);
                  if (monitor.isCanceled()){
                    return Status.CANCEL_STATUS;
                  }
//                  try { Thread.sleep(1000); } catch (Exception e) { }
                        Display.getDefault().asyncExec(new Runnable() {
                           public void run() {
                                           //  UI Update Jobs
                           }
                        });
                 
               return endJob(monitor);
            }
         };
 
//         job.setUser(true);
         job.schedule();
 
   public boolean isModal(Job job) {
          Boolean isModal = (Boolean)job.getProperty(
                                 IProgressConstants.PROPERTY_IN_DIALOG);
          if(isModal == null) return false;
          return isModal.booleanValue();
       }
   protected  Action getCompletedAction() {
      return new Action("View status") {
        public void run() {
         
          MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                  dialogTitle,
                  dialogContent);
        }
      };
    }
   
    protected  void showResults() {
          Display.getDefault().asyncExec(new Runnable() {
             public void run() {
                getCompletedAction().run();
             }
          });
       }
   
    protected IStatus endJob(IProgressMonitor monitor) {
    if (isModal(this)) {
          // The progress dialog is still open so
          // just open the message
          showResults();
       } else {
       setProperty(IProgressConstants.KEEP_PROPERTY, Boolean.TRUE);
       setProperty(IProgressConstants.ACTION_PROPERTY,
              getCompletedAction());
       }
      monitor.done();
       return Status.OK_STATUS;
      
  }



by


Tags : , , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때[TableViewer,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때..









TableViewer에

setCellEditors(CellEditor[])와

setCellModifier(ICellModifier)를 해 주어도.

셀 에디트가 되지 않을때에는,

setColumnProperties(String[] colimnNames)

를 이용하여 컬럼 프로퍼티를 정해주면 에디트가 가능하다.



by


Tags : , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.