Top > OOoPython > DockingWindow

ドッキングウィンドウ Edit

ドキュメントのウィンドウ上に表示されているダイアログがウィンドウにドッキングできるウィンドウを作成します。

filedockingexample.oxt

コンポーネントの実装と設定が必要ですが、一般的なコンポーネントを含む拡張機能と基本的には同じです。

以下のコードで表示と非表示を切り替えられます。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
' Switch through layout manager.
const RESOURCE_URL = "private:resource/dockingwindow/9809"
 
Sub SwitchDockingWindow
  layoutmgr = ThisComponent.getCurrentController().getFrame().LayoutManager
  if layoutmgr.isElementVisible(RESOURCE_URL) then
    layoutmgr.hideElement(RESOURCE_URL)
  else
    layoutmgr.requestElement(RESOURCE_URL)
  end if
End Sub

説明は拡張機能パッケージを解凍した中に入っている factory.py ファイルにあります。

リソース名 Edit

ドッキングウィンドウは独自の名前を持っていなければいけません。リソース名は private:resource/dockingwindow/ で始まり、ウィンドウ名を 9800 - 9809 間の数値で指定します。 このリソース名はドッキングウィンドウをレイアウトマネージャから表示したり、見つけるために使用します。

ここでは 9809 をドッキングウィンドウ名とし、リソース名は private:resource/dockingwindow/9809 です。

ファクトリ登録 Edit

/org.openoffice.Office.UI.WindowContentFactories/Registered/ContentFactories 以下に、コンポーネントの実装名を oor:name 属性として持つノードを追加して必要な情報を記載します。

  • Type: dockingwindow
  • Name: ドッキングウィンドウ名。リソース名の一部
  • FactoryImplementation: css.awt.XWindow インターフェースを返すコンポーネントの実装名。コンポーネントは css.lang.XSingleComponentFactory インターフェースを実装している必要があります。

コンポーネント Edit

コンポーネントは登録された実装名を持ち、css.lang.XSingleComponentFactory インターフェースを実装していなければいけません。XSingleComponentFactory インターフェースの createInstanceWithArgumentsAndContext メソッドが呼び出されると、css.awt.XWindow インターフェースを返すように実装します。返したウィンドウがドッキングウィンドウになります。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
import uno
import unohelper
 
from com.sun.star.lang import (XSingleComponentFactory, 
    XServiceInfo)
 
class Factory(unohelper.Base, XSingleComponentFactory, XServiceInfo):
    """ This factory instantiate new window content. 
    Registration of this class have to be there under 
    /org.openoffice.Office.UI/WindowContentFactories/Registered/ContentFactories.
    See its schema for detail. """
    
    # Implementation name should be match with name of 
    # the configuration node and FactoryImplementation value.
    IMPLE_NAME = "mytools.window.DockingWindowFactory"
    SERVICE_NAMES = IMPLE_NAME,
    
    @classmethod
    def get_imple(klass):
        return klass, klass.IMPLE_NAME, klass.SERVICE_NAMES
    
    def __init__(self, ctx, *args):
        self.ctx = ctx
        print("init")
    
    # XSingleComponentFactory
    def createInstanceWithContext(self, ctx):
        # No way to get the parent frame, not called
        return self.createInstanceWithArgumentsAndContext((), ctx)
    
    def createInstanceWithArgumentsAndContext(self, args, ctx):
        try:
            return create_window(ctx, args)
        except Exception as e:
            print(e)
    
    # XServiceInfo
    def supportedServiceNames(self):
        return self.SERVICE_NAMES
    
    def supportsService(self, name):
        return name in self.SERVICE_NAMES
    
    def getImplementationName(self):
        return self.IMPLE_NAME
 
 
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(*Factory.get_imple())

示したのは実装の一部です。create_window 関数については拡張機能ファイル内のコードを参照してください。 createInstanceWithArgumentsAndContext メソッドに渡される引数は css.beans.PropertyValues のタプルで、以下の要素を含みます。

  • ResourceURL: 要求のあったリソース名。ここで作成するリソースを確認します。
  • Frame: ドッキングウィンドウを開くドキュメントフレームオブジェクト。ドキュメントへのアクセスが必要な場合、これを保持しておく必要があります。

その他 Edit

拡張機能パッケージ内のファイルを参照してください。


Attach file: filedockingexample.oxt 245 download [Information]

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes