前の関連記事:LibreOffice5(120)ドキュメントに埋め込んだモジュールをインポートする
SystemClipboardのサービスとインターフェイスの一覧
def macro(): ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 tcu = smgr.createInstanceWithContext("pq.Tcu", ctx) # サービス名か実装名でインスタンス化。 systemclipboard = smgr.createInstanceWithContext("com.sun.star.datatransfer.clipboard.SystemClipboard", ctx) tcu.wtree(systemclipboard)SystemClipboardの内容はgetContents()で取得しsetContents()で設定できますが、やりとりするのはXTransferable型のオブジェクトになります。
└─.datatransfer.clipboard.SystemClipboard
└─.datatransfer.clipboard.XSystemClipboard
├─.datatransfer.clipboard.XClipboardEx
│ │ byte getRenderingCapabilities()
│ └─.datatransfer.clipboard.XClipboard
│ .datatransfer.XTransferable getContents()
│ string getName()
│ void setContents( [in] .datatransfer.XTransferable xTrans,
│ [in] .datatransfer.clipboard.XClipboardOwner xClipboardOwner)
├─.datatransfer.clipboard.XClipboardNotifier
│ void addClipboardListener( [in] .datatransfer.clipboard.XClipboardListener listener)
│ void removeClipboardListener( [in] .datatransfer.clipboard.XClipboardListener listener)
├─.datatransfer.clipboard.XFlushableClipboard
│ void flushClipboard()
└─.lang.XComponent
void addEventListener( [in] .lang.XEventListener xListener)
void dispose()
void removeEventListener( [in] .lang.XEventListener aListener)
└─.datatransfer.clipboard.XSystemClipboard
├─.datatransfer.clipboard.XClipboardEx
│ │ byte getRenderingCapabilities()
│ └─.datatransfer.clipboard.XClipboard
│ .datatransfer.XTransferable getContents()
│ string getName()
│ void setContents( [in] .datatransfer.XTransferable xTrans,
│ [in] .datatransfer.clipboard.XClipboardOwner xClipboardOwner)
├─.datatransfer.clipboard.XClipboardNotifier
│ void addClipboardListener( [in] .datatransfer.clipboard.XClipboardListener listener)
│ void removeClipboardListener( [in] .datatransfer.clipboard.XClipboardListener listener)
├─.datatransfer.clipboard.XFlushableClipboard
│ void flushClipboard()
└─.lang.XComponent
void addEventListener( [in] .lang.XEventListener xListener)
void dispose()
void removeEventListener( [in] .lang.XEventListener aListener)
SystemClipboardの内容のサービスとインターフェイスの一覧
def macro(): ctx = XSCRIPTCONTEXT.getComponentContext() # コンポーネントコンテクストの取得。 smgr = ctx.getServiceManager() # サービスマネージャーの取得。 tcu = smgr.createInstanceWithContext("pq.Tcu", ctx) # サービス名か実装名でインスタンス化。 systemclipboard = smgr.createInstanceWithContext("com.sun.star.datatransfer.clipboard.SystemClipboard", ctx) tcu.wtree(systemclipboard.getContents())SystemClipboardに渡すXTransferable型のオブジェクトのサービスとインターフェイスですが、実装しているのはXTransferableインターフェイスだけでした。
└─.datatransfer.XTransferable
any getTransferData( [in] .datatransfer.DataFlavor aFlavor
) raises ( .io.IOException,
.datatransfer.UnsupportedFlavorException)
[.datatransfer.DataFlavor] getTransferDataFlavors()
boolean isDataFlavorSupported( [in] .datatransfer.DataFlavor aFlavor)
any getTransferData( [in] .datatransfer.DataFlavor aFlavor
) raises ( .io.IOException,
.datatransfer.UnsupportedFlavorException)
[.datatransfer.DataFlavor] getTransferDataFlavors()
boolean isDataFlavorSupported( [in] .datatransfer.DataFlavor aFlavor)
DataFlavor Structを指定してgetTransferData()でクリップボードの内容を取得できます。
DataFlavorとはJavaで使われている概念のようで、データに関するメタ情報を提供するもののようです(DataFlavor (Java Platform SE 8 ))。
DataFlavor StructにはMimetype、HumanPresentableName、DataTypeの3つのアトリビュートがありますが、必須の情報はMimetypeだけのようです。
Pythonのデバッガで確認するとDataTypeには(type)stringや(type)[]byteが入っていました。
このDataTypeはenum TypeClassに該当すると思ったのですが、これらの値を入れたDataFlavor Structを返すオブジェクトをsetContents()に渡すとLibreOfficeがクラッシュしました。
setContents()に渡すオブジェクトのDataFlavor StructのDataTypeは設定しなくてよいようです(その時voidが入ることになります)。
getTransferDataFlavors()の戻り値がシークエンス型であるように、1つのクリップボードの内容に対して複数のDataFlavorが存在するということが最初は理解できませんでしたが、これはsetContents()に渡すオブジェクトが対応しているDataFlavorに該当しているようです。
OOoBasic/Generic/XTransferable - ...?には各ドキュメントからコピーした場合にクリップボードに入るオブジェクトのDataFlavorのMimeTypeの一覧があります。
LibreOfficeのクリップボードで受け取れる文字列のMimeTypeはtext/plain;charset=utf-16であって、text/plain;charset=utf-8だけにしか対応していないXTransferable型のオブジェクトではペーストできませんでした(linuxBean14.04の場合)。
参考にしたサイト
DataFlavor (Java Platform SE 8 )
DataFlavorとはデータに関するメタ情報を提供するもののようです。
OOoBasic/Generic/XTransferable - ...?
XTransferableインターフェイスの解説。
0 件のコメント:
コメントを投稿