2005年05月24日
DB Explorerのタブ
DB Explorerは順調に、ゆっくり開発進行中。
このツールのエディタ部分はタブになっていて一度に複数のSQLを編集できるわけだが、タブの順番を入れ替えたい場合がある。
Eclipseではエディタのタブをドラッグアンドドロップで位置を変更できるのでSWTでもできるだろう。
と言うことでやってみたのだがいまいちうまくいかない。
CTabFolderに対してTransferを作成し、TransferにダミーとしてFileTransfer.getInstance()を設定すると見た目だけのドラッグアンドドロップを実現できる。
が、
・CTabFolderの中のどのタブからどのタブにドロップされたかがわからない。
・ドラッグ中にどの位置にタブを挿入するか表示されない。
と言う問題がある。
一応強引な手段を使えば回避はできそうだ。
どのタブからどのタブにドラッグされたかはマウスカーソルの位置から割り出すことは可能だし、ドラッグ位置の表示も、CTabFolderのGCに対して強引に上書きしてしまえばいけそうだ。
でもEclipseではそんな変な方法では実装していないだろう。
う~む、Eclipseのソースを読むしかないのか・・・。
膨大なソースのどこにその機能があるかわからないがまぁ読んでみるだけ読んでみよう。
んで読んでみた。
Eclipseのエディタタブ部分のドラッグアンドドロップはドロップ先の枠の表示にTrackerを使っていて、ドロップ先のアイテムの取得にorg.eclipse.ui.internal.dnd.DragUtilのgetDropTargetメソッドを使っているようだ。
詳細は
org.eclipse.ui.internal.dnd.DragUtil#dragToTarget
Eclipseのソースを読んでみると簡単に俺のツールには移植できない模様。
仕組みはわかったのでそれの簡易版を俺のツールに実装すると言うことになりそうだ。
Eclipseはドラッグアンドドロップでレイアウトを自由に変更できるため複雑な仕組みになっているが、俺のツールはタブしか変更しないのでまぁ簡単にできるかもしれない。
アイデアとしてはドラッグが開始されたらtracker.setStippled(true)なTrackerを作成し、trackerのMoveListenerにマウスカーソルの真下にあるタブを検索、タブが存在すればTrackerをタブの形に合うように整形、ドロップされればそのタブの間にドラッグ開始タブを挿入。という感じか。
この場合SWTのドラッグアンドドロップの仕組みを使用せずにすべて自前で実装することになる。ちとメンドイ・・・。
ドロップ位置の取得はdisplay.getCursorLocation()で。
Trackback on "DB Explorerのタブ"
このエントリーのトラックバックURL:
"DB Explorerのタブ"へのトラックバックはまだありません。
"DB Explorerのタブ"へのコメントはまだありません。