Top > OOoPython > Statusbar

ステータスバー Edit

Py-UNO を使ったステータスバーの作成方法です。

概要 Edit

ステータスバーは com.sun.star.frame.StatusbarController サービスを実装することで作成できます。

必要なインターフェースは一般的なもの以外に次のものが必要です。

  • com.sun.star.frame.XStatusListener
  • com.sun.star.frame.XStatusbarController
  • com.sun.star.lang.XInitialization
  • com.sun.star.util.XUpdatable

ステータスバーコントローラ Edit

利用するにはステータスバーコントローラサービスを実装したサービスを登録しておく必要があります。登録はコンフィグレーションファイルで行います。 /org.openoffice.Office.UI/Controller にメニューコントローラ、ツールバーコントローラおよびステータスバーコントローラが登録されています。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
<?xml version='1.0' encoding='UTF-8'?>
<oor:component-data xmlns:oor="http://openoffice.org/2001/registry" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="Controller" 
oor:package="org.openoffice.Office.UI">
<node oor:name="Registered">
    <node oor:name="StatusBar">
        <node oor:name="mytools.basicide.InputAssistantStatusbar" oor:op="replace">
            <prop oor:name="Command">
                <value>mytools.basicide:InputAssistantStatusbar</value>
            </prop>
            <prop oor:name="Module">
                <value>com.sun.star.script.BasicIDE</value>
            </prop>
            <prop oor:name="Controller">
                <value>mytools.basicide.InputAssistantStatusbar</value>
            </prop>
        </node>
    </node>
</node>
</oor:component-data>
  • Command: ステータスバーはコマンド URL で実行されます。その時のコマンドを記述します。
  • Module: そのステータスバーを利用するモジュール名を記述します。
  • Controller: ステータスバーコントローラを実装したモジュールの実装名を記述します。

ステータスバーの登録 Edit

ステータスバーのカスタマイズは GUI からはできません。手動で設定ファイルを編集する、またはレイアウトマネージャを利用して登録されている項目を変更する必要があります。

レイアウトマネージャを利用した方法はメニューやツールバーの変更と同じです。

設定ファイルは各モジュールごとの statusbar ディレクトリ内の statusbar.xml ファイルに保存されています。普通は変更されないため shared/config/soffice.cfg ディレクトリ以下のモジュールごとの設定ファイルをユーザーディレクトリにコピーして利用することになります。

サービス雛形 Edit

もっとも簡単な構成のステータスバー用の雛形です。Protocol や IM_NAME を変更してください。

  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
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#!
# -*- coding: utf_8 -*-
 
#import uno
import unohelper
 
from com.sun.star.frame import XStatusListener, XStatusbarController
from com.sun.star.lang import XInitialization
from com.sun.star.util import XUpdatable
 
from com.sun.star.awt.MouseButton import LEFT as MB_LEFT, RIGHT as MB_RIGHT
 
Protocol = "mytools.basicide:"
IM_NAME = "mytools.basicide.InputAssistantStatusbar"
 
 
class iasbar(unohelper.Base,
    XStatusListener,XStatusbarController,
    XInitialization,XUpdatable):
    
    """ statusbar implemenation of the basic ide inputassistant """
    
    def __init__(self,ctx,*args):
        self.ctx = ctx
        self.smgr = None
        self.frame = None
        self.parent = None
        
        self.initialize(args)
 
        return
    
    # XInitialization
    def initialize(self,args):
        if not args: return
        for arg in args:
            if not arg: continue
            if arg.Name == "Frame":
                self.frame = arg.Value
            #elif arg.Name == "CommandURL":
            #    pass
            #elif arg.Name == "Module":
            #    pass
            elif arg.Name == "ServiceManager":
                self.smgr = arg.Value
            elif arg.Name == "Parent" or arg.Name == "ParentWindow":
                self.parent = arg.Value
 
        return
    
    
    # XStatusListener
    def statusChanged(self,state):
        pass
    
    # XUpdatable
    def update(self):
        iprint "update"
        pass
    
    # XStatusbarController
    def mouseButtonDown(self,ev):
        print "st: mouse button down"
        pass
    
    def mouseMove(self,ev):
        pass
    
    def mouseButtonUp(self,ev):
        print "st: mouse button down"
        pass
    
    def command(self,pos,cmd,bev,data):
        if bev: # mouse event
            print str(cmd)
            # cmd == 1 is right clicked
        pass
    
    def paint(self,g,rect,id,style):
        """ style is no used """
        if not g: return
        #print rect.X,rect.Y,rect.Width,rect.Height
        g.drawText(rect.X +2,rect.Y +2,"TEST")
        return
    
    def click(self):
        print "st: clicked"
        pass
    
    def doubleClick(self):
        print "st: double clicked"
        pass
 
 
 
g_ImplementationHelper = unohelper.ImplementationHelper()
g_ImplementationHelper.addImplementation(
    iasbar,
    IM_NAME,
    (IM_NAME,
    "com.sun.star.frame.StatusbarController"),)

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