August 2007

Editor에서 하위 Widget에 대한 키 바인딩 또는 액션 처리

Text Editor가 아니라 Structured Data를 다루는 Editor인 경우, 일반적으로 여러개의 하위 위젯을 가지게 됩니다. 대표적인 예로 Plug-in Manifest Editor를 들 수 있습니다.

요즘 EMF Generated Editor를 확장하는 Editor를 하나 만들어보고 있는데 커스터마이징하면서 에디터에 Text 위젯을 몇 개 추가하였습니다. 문제는 Text 위젯에서 Copy를 하려고 Command+C(Ctrl+C)를 누르면 원래 에디터에 이미 생성되어 있는 Copy 액션이 연동되어 버려서 Text 위젯에 아예 관련 이벤트가 가질 않습니다. EMF를 조금 해본 분이라면 아시겠지만 생성해주는 거말고 따로 더 붙이려면 여간 귀찮은게 아닙니다. ^^ (물론 제대로 한다면 금방 뚝딱뚝딱하기 좋은 구조입니다만)

텍스트 위젯이라면 어디서나 기본으로 동작하는 Copy,Cut,Paste 때문에 EMF 생성 액션을 고치기는 귀찮아서 이래저래 꼼수를 생각해보았으나 제 결론은 다음과 같습니다.

  • 원론적으로 에디터라면 키 바인딩은 액션을 통해서 처리하는 게 맞다.
  • 이를 강제하듯 Text 위젯 내에서 이벤트를 처리할 때 Display에 설정된 global Event Table이 우선 동작하도록 구현되어 있기 때문에 아무리 용써봐야 액션을 통해서 실행하거나 최소한 텍스트 위젯에 포커스가 갈 때 액션을 죽이는 처리 정도는 해야 한다.
  • 이래저래 편법 쓰느니 액션과 위젯 연동을 추상화해서 일반화된 방법으로 액션에서 제어하도록 하는 게 제일 낫다.

결론은 저렇습니다만 키바인딩 문제로 시작해서 UI에 대해 다시 고민을 하다보니 Text 위젯을 별도의 뷰로 빼버리는 것으로 구현하기로 했습니다. CopyAction 고치기가 너무 싫어서일까요~

위와 관련하여 PDE Manifest Editor를 참고한 추천 프랙티스는 다음과 같습니다.

  • 각 위젯에 대해 필요한 정보 : canCopy, canPasteFromClipboard, isEditable
    • canCut = isEditable && canCopy
  • 각 위젯에 대해 구현할 동작 : selection provider, copy, delete, paste
    • cut = copy + delete
  • canCopy와 copy 구현은 특별한 위젯을 제외하고는 ISelection의 유형에 따라 동작을 구현 가능
    • ITextSelection : 클립보드에 String 복사
    • IStructuredSelection : 클립보드에 Object 복사
  • 위젯 유형 별로 위와 같은 정보와 동작을 제공하는 Helper 클래스를 작성해서 재활용한다.
  • canPaste와 paste 구현은 위젯과 클립보드 데이터에 의존하므로 현재 포커스를 가진 위젯을 기준으로 판단하고 동작하도록 구현

위와 같은 내용은 JFace TableViewer와 CellEditor의 관계와 거의 비슷합니다. CellEditor가 TableViewer에 출력중인 데이터에서 셀 하나에 해당하는 부분을 편집하듯, Editor의 데이터 일부를 개별 위젯에서 편집하기 때문입니다. 다만 Editor의 데이터와 UI는 TableViewer의 contents에 비해 훨씬 자유롭게 구성된다는 차이일 뿐입니다. 기본 프레임워크에서 이와 같은 사항을 지원하는 부분은 아직 찾지 못했습니다. Forms UI도 PDE로부터 분리된 프로젝트니 하위 위젯에 대응하는 액션 관련 부분도 PDE에서 분리되길 기대해보죠. 그전에는 PDE의 소스를 참고해보세요.

Eclipse

Comments (1)

Permalink

Mac에서 이클립스 대화창의 버튼 사이즈 문제

다음 그림에서 보듯 이클립스를 맥에서 사용할 때 대화창에서 특수 형태의 버튼(라디오, 체크박스 등)의 레이블 사이즈가 제대로 맞지 않아 중간에서 잘립니다.

eclipse_dialog_gothic.png 클릭하면 확대

폰트 크기를 제대로 계산하지 못해서 레이아웃이 제대로 되지 않는 문제인 듯 하여 혹시나 하고 폰트를 바꿔봤더니 잘 됩니다. 고정폭 폰트가 확실할 듯 한데 기본 폰트인 AppleGothic 말고는 다 잘되네요. Courier New가 아무래도 무난합니다만 Optima라는 폰트를 써봤더니 대화창이 훨씬 고급스러워 보입니다.

eclipse_dialog_optima.png 클릭하면 확대

폰트는

Menu > Eclipse > Preferences > General > Apprearence > Colors and Fonts > Basic > Dialog Font

에서 변경하시면 됩니다. 처음부터 문제가 없었으면 좋겠지만 그나마 간단히 해결되어 다행입니다. 이젠 정말로 맥이 가장 편리한 개발환경인 것 같아요!

Eclipse
General

Comments (2)

Permalink

맘에 쏙 드는 맥북 프로 가방

그동안 맥북 프로를 지고 다니면서 어깨가 너무 고생을 해서 가방을 바꿔보기로 했습니다. 지금까지 쓰던 켄싱턴 SaddleBag Pro 가방도 쓰기엔 편리했지만 너무 불룩하고 무게도 무거웠거든요.

선택 조건은

  • 가벼울 것
  • 백팩 형태
  • 15″ 맥북 프로를 전부 감쌀 수 있는 충격 흡수 공간
  • 얇을 것
  • 어댑터, 마우스, 아이팟, NDSL 등 잡다한 아이템들을 잘 정리해서 넣을 수 있을 것

뭐 기본적인 조건이지만 다 만족하는 걸 찾으려다 보니 쉽지 않았습니다. 더구나 인터넷 상으로는 도저히 알 수가 없어서 링코 등 여러 매장을 돌아보았는데 가벼우면 충격방지가 부실하고, 튼튼하면 무게가 좀 무거워서 딱 맞는 것은 찾을 수 없었습니다.

그래도 이것저것 살펴보니 감이 생겨서 최종 결정은 인터넷 쇼핑몰에서 찾은 DICOTA BacPac Business로 했습니다. 사용 소감은.. 대만족이었습니다!

가방 자체 무게 0.95kg인데 등과 어깨의 패드도 매우 훌륭해서 맥북만 넣고 등에 매면 거의 무게가 느껴지지 않습니다. 처음 매어봤을 때는 순간 감동의 물결이 흘렀습니다!! 내부에는 잡다한 아이템을 넣을 수 있는 주머니가 20개 정도 군데군데 배치되어 있습니다. 모양은 아주 이쁘다고 할 수는 없지만 보기에 무난합니다. 책을 많이 넣을 수는 없지만 평소에야 하나 정도 가지고 다니니 딱이었습니다. 가방 자체가 얇아서 지하철에 사람이 많아도 걸리적 거리지 않구요. 노트북 충격 보호 폼은 HDF라고 하던데 뭐 만져본 느낌은 그냥 딱딱한 스티로폼 같이.. 하지만 외피가 딱딱한 편인데다 상하좌우 모두 공간이 있어서 맥북에 충격갈 염려도 거의 없을 듯 합니다.

DICOTA는 처음인데 호감이 팍 가네요 ^^ 맥북 프로 들고 지하철로 다니시는 분인 경우 미적인 건 살짝 포기하더라도 몸이 좀 편하고 싶으시다면 이 가방이나 BacPacRun PLUS 추천드립니다!

Gadgets

Comments (0)

Permalink

M2WTP 0.1.2 릴리즈 및 새 프로젝트 멤버

M2WTP 0.1.2를 릴리즈 했습니다.

M2WTP는 maven의 build scope에 따른 구분없이 모든 artifact를 module dependency로 올려버려서 실제 배포할 때와 다소 다른 module dependency를 갖곤 했습니다. (예: test scope에서 사용하는 junit까지 module dependency가 걸림. junit은 build path에만 잡히는 게 적당)

불편한 거 고쳐야지 하면서도 시간이 없어서 미루고 있었는데 제가 이슈 트래커에 올려놓은 태스크를 보고 cyril joui란 프랑스 친구가 고쳐주었습니다. 소스를 지저분하게 해놨으면 어쩌나 걱정했는데 꽤 깔끔하게 한데다 코드도 전반적으로 잘 정리해주었더군요. 프로젝트에 참여하고 싶다고 해서 앞으로 같이 개발해보기로 하였습니다. 프랑스인 친구는 난생 처음이네요! 근데 apache maven 공식 프로젝트로 착각했었나봅니다. ^^

어쨌든 겸사겸사 m2eclipse 최신 개발 버전과 연동시키고 0.1.2로 릴리즈했습니다. 구조도 바뀌고 했으니 0.2.0으로 릴리즈할 걸 그랬나 합니다만 ㅎㅎ 당장은 그럭저럭 쓸만해서 냅두고 있었는데 새 멤버도 생기고 했으니 앞으로는 신경 좀 써야할 것 같네요.

maven + eclipse WTP 사용하시는 분들 아이디어 좀 주세요~

Eclipse
General
My Works

Comments (0)

Permalink