def createWindowStateNodes(self, c, xdic):  # ツールバーの設定。
     '''
     Properties for ToolBar
     
     :param DIC: PYTHON_UNO_Component,IMPLE_NAME,SERVICE_NAME,HANDLED_PROTOCOL
     :type DIC: dict
     :param xdic: Xml Attributes
     :type xdic: dict
     :returns: a list of nodes
     :rtype: list
     '''
     ORDER = "UIName", "ContextSensitive", "Visible", "Docked"  # ノードの順を指定。
     lst_nd = list()  # ノードをいれるリスト。
     for key in ORDER:
         if key in xdic:
             val = xdic[key]
             if key == "UIName":  # タイトルノードのとき
                 nd = Elem("prop", {
                     "oor:name": key,
                     "oor:type": "xs:string"
                 })
                 for lang, txt in val.items():
                     nd.append(Elem("value", {"xml:lang": lang}, text=txt))
                 lst_nd.append(nd)
             else:  # それ以外のノードの時。
                 nd = Elem("prop", {
                     "oor:name": key,
                     "oor:type": "xs:boolean"
                 })
                 nd.append(Elem("value", text=val))
                 lst_nd.append(nd)
     return lst_nd
def createProtocolHandlerXcu(c):
    #Creation of ProtocolHandler.xcu
    os.chdir(c["src_path"])  # srcフォルダに移動。
    if c["HANDLED_PROTOCOL"] is not None:  # HANDLED_PROTOCOLの値があるとき
        filename = "ProtocolHandler.xcu"
        c["backup"](filename)  # すでにあるファイルをバックアップ
        with open(filename, "w",
                  encoding="utf-8") as f:  # ProtocolHandler.xcuファイルの作成
            rt = Elem(
                "oor:component-data", {
                    "oor:name": "ProtocolHandler",
                    "oor:package": "org.openoffice.Office",
                    "xmlns:oor": "http://openoffice.org/2001/registry",
                    "xmlns:xs": "http://www.w3.org/2001/XMLSchema",
                    "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance"
                })  # 根の要素を作成。
            rt.append(Elem("node", {'oor:name': "HandlerSet"}))
            rt[-1].append(
                Elem("node", {
                    'oor:name': c["IMPLE_NAME"],
                    "oor:op": "replace"
                }))
            rt[-1][-1].append(
                Elem("prop", {
                    'oor:name': "Protocols",
                    "oor:type": "oor:string-list"
                }))
            rt[-1][-1][-1].append(
                Elem("value", text="{}:*".format(c["HANDLED_PROTOCOL"])))
            tree = ET.ElementTree(
                rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
            tree.write(f.name, "utf-8",
                       True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
            print("{} has been created.".format(filename))
        #Creation of Addons.xcu
        filename = "Addons.xcu"
        c["backup"](filename)  # すでにあるファイルをバックアップ
        with open(filename, "w", encoding="utf-8") as f:  # Addons.xcuファイルの作成。
            rt = Elem(
                "oor:component-data", {
                    "oor:name": "Addons",
                    "oor:package": "org.openoffice.Office",
                    "xmlns:oor": "http://openoffice.org/2001/registry",
                    "xmlns:xs": "http://www.w3.org/2001/XMLSchema"
                })  # 根の要素を作成。
            rt.append(Elem("node", {'oor:name': "AddonUI"}))
            rt[-1].extend([
                AddonMenu(c),
                OfficeMenuBar(c),
                OfficeToolBar(c),
                Images(c),
                OfficeHelp(c)
            ])  # 追加するノード。
            tree = ET.ElementTree(
                rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
            tree.write(f.name, "utf-8",
                       True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
            print("{} has been created.".format(filename))
 def subMenu2(self, c, val):
     nd = Elem("node", {"oor:name": "Submenu"})  # 変更不可。
     i = 0
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(
         c, {
             "URL": "{}:Function2".format(c["HANDLED_PROTOCOL"]),
             "Title": {
                 "en-US": "Add-On Function 2"
             },
             "Target": "_self",
             "Context": "com.sun.star.sheet.SpreadsheetDocument"
         }))
     return nd
 def subMenu(self, c, val):
     '''
     サブメニューの作成。 
     
     :param DIC: PYTHON_UNO_Component,IMPLE_NAME,SERVICE_NAME,HANDLED_PROTOCOL
     :type DIC: dict
     :param val: Submenu IDs
     :type val: list
     :returns:  a node for submenu
     :rtype: xml.etree.ElementTree.Element
     
     '''
     nd = Elem("node", {"oor:name": "Submenu"})  # 変更不可。
     i = 0
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(
         c, {
             "URL": "{}:Function1".format(c["HANDLED_PROTOCOL"]),
             "Title": {
                 "en-US": "Add-On Function 1"
             },
             "Target": "_self"
         }))
     i += 1
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(
         c, {
             "URL": "{}:Function2".format(c["HANDLED_PROTOCOL"]),
             "Title": {
                 "en-US": "Add-On Function 2"
             },
             "Target": "_self"
         }))
     return nd
 def createWindwStatexcu(self, c, ctxt):  # ツールバーのプロパティの設定。
     #Creation of WriterWindwState.xcu、Calcの場合はCalcWindwState.xcu
     filename = "{}WindowState.xcu".format(ctxt)
     c["backup"](filename)  # すでにあるファイルをbkに改名
     with open(filename, "w", encoding="utf-8") as f:
         rt = Elem(
             "oor:component-data", {
                 "oor:name": "{}WindowState".format(ctxt),
                 "oor:package": "org.openoffice.Office.UI",
                 "xmlns:oor": "http://openoffice.org/2001/registry",
                 "xmlns:xs": "http://www.w3.org/2001/XMLSchema"
             })  # 根の要素を作成。
         rt.append(Elem("node", {'oor:name': "UIElements"}))
         rt[-1].append(Elem("node", {'oor:name': "States"}))
         rt[-1][-1].append(
             Elem(
                 "node", {
                     'oor:name':
                     "private:resource/toolbar/addon_{}".format(
                         c["HANDLED_PROTOCOL"]),
                     "oor:op":
                     "replace"
                 }))
         rt[-1][-1][-1].extend(super().createWindowStateNodes(
             c, {
                 "UIName": {
                     "en-US": "OfficeToolBar Title"
                 },
                 "ContextSensitive": "false",
                 "Visible": "true",
                 "Docked": "false"
             }))  # ツールバーのプロパティを設定。
         tree = ET.ElementTree(
             rt)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
         tree.write(f.name, "utf-8",
                    True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
         print("{} has been created.".format(filename))
 def createNodes(self, c, xdic):
     '''
     oor:node-type="MenuItem"のElementのリストを返す。
     
     :param DIC: PYTHON_UNO_Component,IMPLE_NAME,SERVICE_NAME,HANDLED_PROTOCOL
     :type DIC: dict
     :param xdic: Xml Attributes
     :type xdic: dict
     :returns: a list of nodes
     :rtype: list
     '''
     ORDER = "URL", "Title", "Target", "Context", "Submenu", "ControlType", "Width"  # ノードの順を指定。 "ImageIdentifier"ノードは使わないので無視する。
     lst_nd = list()  # ノードをいれるリスト。
     for key in ORDER:
         if key in xdic:
             val = xdic[key]
             if key == "Title":  # タイトルノードのとき
                 nd = Elem("prop", {
                     "oor:name": key,
                     "oor:type": "xs:string"
                 })
                 for lang, txt in val.items():
                     nd.append(Elem("value", {"xml:lang": lang}, text=txt))
                 lst_nd.append(nd)
             elif key == "Submenu":  # サブメニューノードのとき
                 fn = val.pop()  # サブメニュー設定のための関数を取得。
                 if type(fn) is types.MethodType:
                     lst_nd.append(fn(c, val))
             else:  # それ以外のノードの時。
                 nd = Elem("prop", {
                     "oor:name": key,
                     "oor:type": "xs:string"
                 })
                 nd.append(Elem("value", text=val))
                 lst_nd.append(nd)
     return lst_nd
 def userDefinedImages(self, name, url, dic_image):
     '''
     アイコンの設定。
     
     :param name: name of icon
     :type name: str
     :param url: uri of icon
     :type url: str
     :param dic_image:  a dictionary of the same image with different sizes
     :type dic_image: dict
     :returns: a node for an image
     :rtype: xml.etree.ElementTree.Element
     '''
     nd = Elem("node", {
         "oor:name": name,
         "oor:op": "replace"
     })  # oor:nameの値はノードの任意の固有名。
     nd.append(Elem("prop", {"oor:name": "URL"}))
     nd[-1].append(Elem("value", text=url))  # アイコンを表示させるコマンドURLを設定。
     nd.append(Elem("node", {"oor:name": "UserDefinedImages"}))
     ORDER = "ImageSmall", "ImageBig", "ImageSmallHC", "ImageBigHC"
     for key in ORDER:
         if key in dic_image:
             snd = Elem("prop", {
                 "oor:name": key,
                 "oor:type": "xs:hexBinary"
             })
             snd.append(Elem("value", text=dic_image[key]))
             nd[-1].append(snd)
     ORDER = "ImageSmallURL", "ImageBigURL"  # "ImageSmallHCURL","ImageBigHCURL" valueノードのテキストノードの空白があると画像が表示されない。HC画像が優先して表示されてしまうのでHC画像は使わない。
     for key in ORDER:
         if key in dic_image:
             snd = Elem("prop", {"oor:name": key, "oor:type": "xs:string"})
             snd.append(Elem("value", text=dic_image[key]))
             nd[-1].append(snd)
     return nd
 def subMenu(self, c, val):
     nd = Elem("node", {"oor:name": "Submenu"})  # 変更不可。
     i = 0
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(
         c, {
             "URL": "{}:Function1".format(c["HANDLED_PROTOCOL"]),
             "Title": {
                 "en-US": "Add-On Function 1"
             },
             "Target": "_self",
             "Context": "com.sun.star.text.TextDocument"
         }))
     i += 1
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(c, {"URL": "private:separator"}))
     i += 1
     nd.append(Elem("node", {
         "oor:name": val[i],
         "oor:op": "replace"
     }))  # oor:nameの値はノードの任意の固有名。この順でソートされる。
     nd[i].extend(super().createNodes(
         c, {
             "URL": "",
             "Title": {
                 "en-US": "Add-On sub menu"
             },
             "Target": "_self",
             "Submenu": ["m1", self.subMenu2]
         }))
     return nd
Beispiel #9
0
def createOptionsDialogXcu(c):  #Creation of OptionsDialog.xcu
    os.chdir(c["src_path"])  # srcフォルダに移動。
    filename = "OptionsDialog.xcu"
    c["backup"](filename)  # すでにあるファイルをバックアップ
    with open(filename, "w",
              encoding="utf-8") as f:  # OptionsDialog.xcuファイルの作成
        root = Elem(
            "oor:component-data", {
                "oor:name": "OptionsDialog",
                "oor:package": "org.openoffice.Office",
                "xmlns:oor": "http://openoffice.org/2001/registry",
                "xmlns:xs": "http://www.w3.org/2001/XMLSchema",
                "xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance"
            })  # 根の要素を作成。

        #オプションページの作成。拡張機能IDのc["ExtentionID"]をNameに使った時はLeafを一つにしないと拡張機能マネージャーでフリーズする。
        root.append(Elem("node", {'oor:name': "Nodes"}))  # セットノードNodesを追加。
        leaf = ElemLeaf(
            c, {
                "Name": c["ExtentionID"],
                "Label": {
                    "en-US": "Maximum Paper Size",
                    "ja-JP": "最大用紙サイズ"
                }
            })  # node-type=Leaf。小項目の設定。Idを拡張機能Idと同じc["ExtentionID"]にする。
        name = "{}.Node1".format(
            c["ExtentionID"]
        )  # ロードマップコントロールに表示させる大項目のID。ユニークの必要があると考えるので拡張機能IDにくっつける。
        node = ElemNode(c, {
            "Name": name,
            "Label": {
                "en-US": "Extensions Example",
                "ja-JP": "拡張機能の例"
            },
            "AllModules": "false"
        },
                        leaves=(leaf, ))  # node-type=Node。大項目の設定。
        root[-1].append(node)  #  node-type=NodeをセットノードNodesに追加。

        # オプションページを表示させるモジュールを限定する。
        root.append(Elem("node", {'oor:name': "Modules"}))  # セットノードModulesを追加。
        orderednode = ElemOrderdNode(
            name)  #  node-type=OrderdNode。node-type=NodeのNameで表示させる大項目を指定。
        node = ElemModeule(
            "com.sun.star.text.TextDocument", (orderednode, )
        )  # node-type=Module。表示させるモジュールを指定。第一引数はhttps://wiki.openoffice.org/wiki/Framework/Article/Options_Dialog_Configurationのいずれか。
        root[-1].append(node)  #  node-type=ModuleをセットノードModulesに追加。

        # 一部のオプションページを非表示にする。
        root.append(Elem("node", {'oor:name': "OptionsDialogGroups"
                                  }))  # セットノードOptionsDialogGroupを追加。
        security = ElemOptionsPage(
            "Security", hide=True)  #  node-type=OptionsPage。非表示にする小項目。セキュリティー。
        memory = ElemOptionsPage(
            "Memory", hide=True)  #  node-type=OptionsPage。非表示にする小項目。メモリー。
        productname = ElemOptionsGroup(
            "ProductName", optionspages=(security, memory)
        )  #  node-type=OptionsGroup。非表示にする大項目。hide=Trueにしていないときは第2引数の小項目のみ非表示にする。
        root[-1].append(
            productname
        )  #  node-type=OptionsGroupをセットノードOptionsDialogGroupsに追加。
        internet = ElemOptionsGroup(
            "Internet",
            hide=True)  #  node-type=OptionsGroup。非表示にする大項目。Internet。
        root[-1].append(
            internet)  #  node-type=OptionsGroupをセットノードOptionsDialogGroupsに追加。

        tree = ET.ElementTree(
            root)  # 根要素からxml.etree.ElementTree.ElementTreeオブジェクトにする。
        tree.write(f.name, "utf-8",
                   True)  # xml_declarationを有効にしてutf-8でファイルに出力する。
    print("{} has been created.".format(filename))