前の関連記事:LibreOffice5(61)オプションダイアログの作成例: MaximumPageSize.oxt
(2018.1.22追記。コンテナウィンドウやコンポーネントウィンドウのXUnitConversionインターフェイスのメソッドでma単位とピクセルの変換ができました。
componentwindow.convertPointToLogic(Point(X=x, Y=y), MeasureUnit.APPFONT)これでピクセル単位がma単位に変換できました。componentwindowにはコンポーネントウィンドウが入っており、PointはStruct、MeasureUnitは定数です。)
ダイアログエディタで作成したダイアログの単位はMap AppFont (ma)
LibreOffice5(21)ダイアログエディタでGUIを作成しPythonで利用する:その1でやったLibreOfficeのダイアログエディタで作成したxdlファイルでの単位はMap AppFont (ma)とわかりました。
Pythonからxdlファイルのダイアログを呼び出すとコントロールモデルのプロパティではma単位、コントロールのgetPosSize()メソッドからはそのピクセル(px)単位が確認できることがわかりました。
ということでLibreOffice5(61)オプションダイアログの作成例: MaximumPageSize.oxtで使ったMaximumPageSize.oxtに含まれているmytoolsExtensionsMaximumPaperSize.xdlで定義されてる各コントロールについて、ma単位とpx単位を調べてみました。
OSはlinxBean 14.04、システムフォントの大きさは豆ボタン→ルックアンドフィールを設定します、で確認するとデフォルトのフォントはSans 10になっています。
dlgで始まる項目はxdlファイルの定義、続いてコントロールの定義、コントロールモデルの定義を書いています。
dlg:window dlg:left="80" dlg:top="79" dlg:width="263" dlg:height="185"
UnoControlDialog X 1 Y 1 Width 644 Height 423
UnoControlDialogModel PositionX 80 PositionY 79 Width 263 Height 185
これがオプションダイアログの位置と大きさです。
dlg:leftがX座標、dlg:topがY座標、dlg:widthがwidth、dlg:heightがHeightに該当します。
xdlファイルの数値とUnoControlDialogModelの数値は一致しています。
デベロッパーガイドのCreating the GUI of the Options Pageにはオプションページの大きさは幅260(263?)、高さ185と書いてあるので、デベロッパーガイドの単位はma単位であることがわかります。
他のコントロールについてもそれぞれ調べました。
dlg:fixedline dlg:left="5" dlg:top="13" dlg:width="250" dlg:height="10"
UnoControlFixedLine x12 y23 w581 h18
UnoControlFixedLineModel x5 y13 w250 h10
dlgの単位とコントロールモデルの単位は同一とわかったので、以下はコントロールモデルの値は書いていません。
dlg:text dlg:left="11" dlg:top="39" dlg:width="49" dlg:height="15"
UnoControlFixedText x26 y68 w114 h26
dlg:numericfield dlg:left="65" dlg:top="39" dlg:width="60" dlg:height="15"
UnoControlNumericField x151 Y68 W140 H26
dlg:numericfield dlg:left="65" dlg:top="64" dlg:width="60" dlg:height="15"
UnoControlNumericField x151 Y112 W140 H26
dlg:text dlg:left="11" dlg:top="66" dlg:width="49" dlg:height="15"
UnoControlFixedText x26 y116 w114 h26
dlg:text dlg:left="127" dlg:top="42" dlg:width="25" dlg:height="15"
UnoControlFixedText x295 y74 w58 h26
dlg:text dlg:left="127" dlg:top="68" dlg:width="25" dlg:height="15"
UnoControlFixedText x295 y119 w58 h26
dlg:button dlg:left="155" dlg:top="39" dlg:width="50" dlg:height="15"
UnoControlButton x360 y68 w116 h26
dlg:button dlg:left="155" dlg:top="64" dlg:width="50" dlg:height="15"
UnoControlButton x360 y112 w116 h26
うーん、maとpxの換算は簡単にはいかなさそうに見えるし、システムフォントの大きさが違うとpxが変わってきそうなのでmaも使っていこうかと思いました。
コントロールをma単位で設定するにはコントロールモデルをダイアログモデルから生成しないといけない
GUI/modelessdialog2macro_unocontroldialog.py at 8d6d24ee0b718b0685efd3671ce66ea70f91a016 · p--q/GUI
これではコントロールモデルをサービスマネージャーからインスタンス化していましたが、これだとma単位では設定できませんでした。
その理由はma単位でコントロールを設定するUnoControlDialogElementサービスがないからです。
このサービスはサービスマネージャーからではなく、UnoControlDialogModelサービスからインスタンス化されないとサポートされないのでした。
GUI/modelessdialog2macro_unocontroldialog.py at 5f47812af955e4bdba46b753a5f9f1553c0101a2 · p--q/GUI
ということで、コントロールモデルをサービスマネージャーからではなく、ダイアログモデルからインスタンス化するとma単位でコントロールの位置と大きさを設定できるようになりました。
(2017.8.19追記。UnoControlContainer自体はma単位で設定できるのにこれからはコントロールをインスタンス化できないので LibreOffice5(58)モードレスダイアログの例をPythonに翻訳する:その4にあるようなcreateWindow()やTaskCreatorからウィンドウを作成してそこにコントロールを載せる場合はピクセル単位を使用することになります。)
参考にしたサイト
Creating the GUI of the Options Page - Apache OpenOffice Wiki
オプションページの大きさは幅260ma、高さ185maです。
0 件のコメント:
コメントを投稿