mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2026-05-13 18:27:04 +00:00
更新windows内置office目录名, 适配jodconverter
This commit is contained in:
0
server/libreoffice/program/wizards/__init__.py
Normal file
0
server/libreoffice/program/wizards/__init__.py
Normal file
924
server/libreoffice/program/wizards/agenda/AgendaDocument.py
Normal file
924
server/libreoffice/program/wizards/agenda/AgendaDocument.py
Normal file
File diff suppressed because it is too large
Load Diff
320
server/libreoffice/program/wizards/agenda/AgendaWizardDialog.py
Normal file
320
server/libreoffice/program/wizards/agenda/AgendaWizardDialog.py
Normal file
@@ -0,0 +1,320 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..ui.WizardDialog import WizardDialog, uno, UIConsts, PropertyNames
|
||||
from .AgendaWizardDialogConst import AgendaWizardDialogConst, HID
|
||||
from .AgendaWizardDialogResources import AgendaWizardDialogResources
|
||||
|
||||
from com.sun.star.awt.FontUnderline import SINGLE
|
||||
|
||||
class AgendaWizardDialog(WizardDialog):
|
||||
|
||||
def __init__(self, xmsf):
|
||||
super(AgendaWizardDialog,self).__init__(xmsf, HID )
|
||||
|
||||
#Load Resources
|
||||
self.resources = AgendaWizardDialogResources()
|
||||
|
||||
#set dialog properties...
|
||||
self.setDialogProperties(True, 210, True, 200, 52, 1, 1,
|
||||
self.resources.resAgendaWizardDialog_title, 310)
|
||||
|
||||
self.PROPS_LIST = ("Dropdown",
|
||||
PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_LABEL_B = ("FontDescriptor",
|
||||
PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_LABEL,
|
||||
PropertyNames.PROPERTY_MULTILINE,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_CHECK = (PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_LABEL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STATE,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_BUTTON = (PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_LABEL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_X = (PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_TEXTAREA = (PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_LABEL,
|
||||
PropertyNames.PROPERTY_MULTILINE,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_TEXT = (PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_LABEL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
self.PROPS_IMAGE = ("Border",
|
||||
PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_IMAGEURL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
"ScaleImage", PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH)
|
||||
|
||||
self.fontDescriptor4 = \
|
||||
uno.createUnoStruct('com.sun.star.awt.FontDescriptor')
|
||||
self.fontDescriptor4.Weight = 150
|
||||
|
||||
def buildStep1(self):
|
||||
self.insertLabel("lblTitle1", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle1_value,
|
||||
True, 91, 8, 1, 100,212))
|
||||
self.insertLabel("lblPageDesign", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblPageDesign_value, 97, 32, 1, 101, 66))
|
||||
self.listPageDesign = self.insertListBox("listPageDesign",
|
||||
None, AgendaWizardDialogConst.LISTPAGEDESIGN_ACTION_PERFORMED,
|
||||
self.PROPS_LIST,
|
||||
(True, 12, AgendaWizardDialogConst.LISTPAGEDESIGN_HID,
|
||||
166, 30, 1, 102, 70), self)
|
||||
self.chkMinutes = self.insertCheckBox("chkMinutes", None,
|
||||
self.PROPS_CHECK, (9, AgendaWizardDialogConst.CHKMINUTES_HID,
|
||||
self.resources.reschkMinutes_value, 97, 50, 0, 1, 103, 203), self)
|
||||
self.insertImage("imgHelp1", self.PROPS_IMAGE,
|
||||
(0, 10, "", UIConsts.INFOIMAGEURL, 92, 145, False, 1, 104, 10))
|
||||
self.insertLabel("lblHelp1", self.PROPS_TEXTAREA,
|
||||
(39, self.resources.reslblHelp1_value,
|
||||
True, 104, 145, 1, 105, 199))
|
||||
|
||||
def buildStep2(self):
|
||||
self.insertLabel("lblTitle2", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle2_value,
|
||||
True, 91, 8, 2, 200, 212))
|
||||
self.insertLabel("lblDate", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblDate_value, 97, 32, 2, 201,66))
|
||||
self.txtDate = self.insertDateField(
|
||||
"txtDate", AgendaWizardDialogConst.TXTDATE_TEXT_CHANGED,
|
||||
self.PROPS_LIST,
|
||||
(True, 12, AgendaWizardDialogConst.TXTDATE_HID,
|
||||
166,30, 2, 202, 70), self)
|
||||
self.insertLabel("lblTime", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblTime_value, 97, 50, 2, 203, 66))
|
||||
self.txtTime = self.insertTimeField("txtTime",
|
||||
AgendaWizardDialogConst.TXTTIME_TEXT_CHANGED,
|
||||
(PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
"StrictFormat",
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH),
|
||||
(12, AgendaWizardDialogConst.TXTTIME_HID,
|
||||
166, 48, 2, True, 204, 70), self)
|
||||
self.insertLabel("lblTitle", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblTitle_value, 97, 68, 2, 205, 66))
|
||||
self.txtTitle = self.insertTextField(
|
||||
"txtTitle", AgendaWizardDialogConst.TXTTITLE_TEXT_CHANGED,
|
||||
(PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_MULTILINE,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH),
|
||||
(26, AgendaWizardDialogConst.TXTTITLE_HID,
|
||||
True, 166, 66, 2, 206, 138), self)
|
||||
self.insertLabel("lblLocation", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblLocation_value, 97, 100, 2, 207, 66))
|
||||
self.cbLocation = self.insertTextField(
|
||||
"cbLocation", AgendaWizardDialogConst.TXTLOCATION_TEXT_CHANGED,
|
||||
(PropertyNames.PROPERTY_HEIGHT,
|
||||
PropertyNames.PROPERTY_HELPURL,
|
||||
PropertyNames.PROPERTY_MULTILINE,
|
||||
PropertyNames.PROPERTY_POSITION_X,
|
||||
PropertyNames.PROPERTY_POSITION_Y,
|
||||
PropertyNames.PROPERTY_STEP,
|
||||
PropertyNames.PROPERTY_TABINDEX,
|
||||
PropertyNames.PROPERTY_WIDTH),
|
||||
(34, AgendaWizardDialogConst.CBLOCATION_HID,
|
||||
True, 166,98, 2, 208, 138), self)
|
||||
self.insertImage("imgHelp2", self.PROPS_IMAGE,
|
||||
(0, 10, "", UIConsts.INFOIMAGEURL, 92, 145, False, 2, 209, 10))
|
||||
self.insertLabel("lblHelp2", self.PROPS_TEXTAREA,
|
||||
(39, self.resources.reslblHelp2_value,
|
||||
True, 104, 145, 2, 210, 199))
|
||||
|
||||
def buildStep3(self):
|
||||
self.insertLabel("lblTitle3", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle3_value,
|
||||
True, 91, 8, 3, 300,212))
|
||||
self.chkMeetingTitle = self.insertCheckBox("chkMeetingTitle",
|
||||
AgendaWizardDialogConst.CHKUSEMEETINGTYPE_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKMEETINGTITLE_HID,
|
||||
self.resources.reschkMeetingTitle_value,
|
||||
97, 32, 1, 3, 301, 69), self)
|
||||
self.chkRead = self.insertCheckBox("chkRead",
|
||||
AgendaWizardDialogConst.CHKUSEREAD_ITEM_CHANGED, self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKREAD_HID,
|
||||
self.resources.reschkRead_value, 97, 46, 0, 3, 302, 162), self)
|
||||
self.chkBring = self.insertCheckBox("chkBring",
|
||||
AgendaWizardDialogConst.CHKUSEBRING_ITEM_CHANGED, self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKBRING_HID,
|
||||
self.resources.reschkBring_value,
|
||||
97, 60, 0, 3, 303, 162), self)
|
||||
self.chkNotes = self.insertCheckBox("chkNotes",
|
||||
AgendaWizardDialogConst.CHKUSENOTES_ITEM_CHANGED, self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKNOTES_HID,
|
||||
self.resources.reschkNotes_value,
|
||||
97, 74, 1, 3, 304, 160), self)
|
||||
self.insertImage("imgHelp3", self.PROPS_IMAGE, (0, 10,
|
||||
"", UIConsts.INFOIMAGEURL, 92, 145, False, 3, 305, 10))
|
||||
self.insertLabel("lblHelp3", self.PROPS_TEXTAREA,
|
||||
(39, self.resources.reslblHelp3_value, True,104, 145, 3, 306, 199))
|
||||
|
||||
def buildStep4(self):
|
||||
self.insertLabel("lblTitle5", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle5_value,
|
||||
True, 91, 8, 4, 400, 212))
|
||||
self.chkConvenedBy = self.insertCheckBox("chkConvenedBy",
|
||||
AgendaWizardDialogConst.CHKUSECALLEDBYNAME_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKCONVENEDBY_HID,
|
||||
self.resources.reschkConvenedBy_value,
|
||||
97, 32, 1, 4, 401, 150), self)
|
||||
self.chkPresiding = self.insertCheckBox("chkPresiding",
|
||||
AgendaWizardDialogConst.CHKUSEFACILITATOR_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKPRESIDING_HID,
|
||||
self.resources.reschkPresiding_value,
|
||||
97, 46, 0, 4, 402, 150), self)
|
||||
self.chkNoteTaker = self.insertCheckBox("chkNoteTaker",
|
||||
AgendaWizardDialogConst.CHKUSENOTETAKER_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKNOTETAKER_HID,
|
||||
self.resources.reschkNoteTaker_value,
|
||||
97, 60, 0, 4, 403, 150), self)
|
||||
self.chkTimekeeper = self.insertCheckBox("chkTimekeeper",
|
||||
AgendaWizardDialogConst.CHKUSETIMEKEEPER_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKTIMEKEEPER_HID,
|
||||
self.resources.reschkTimekeeper_value,
|
||||
97, 74, 0, 4, 404, 150), self)
|
||||
self.chkAttendees = self.insertCheckBox("chkAttendees",
|
||||
AgendaWizardDialogConst.CHKUSEATTENDEES_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKATTENDEES_HID,
|
||||
self.resources.reschkAttendees_value,
|
||||
97, 88, 1, 4, 405, 150), self)
|
||||
self.chkObservers = self.insertCheckBox("chkObservers",
|
||||
AgendaWizardDialogConst.CHKUSEOBSERVERS_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKOBSERVERS_HID,
|
||||
self.resources.reschkObservers_value,
|
||||
97, 102, 0, 4, 406, 150), self)
|
||||
self.chkResourcePersons = self.insertCheckBox("chkResourcePersons",
|
||||
AgendaWizardDialogConst.CHKUSERESOURCEPERSONS_ITEM_CHANGED,
|
||||
self.PROPS_CHECK,
|
||||
(8, AgendaWizardDialogConst.CHKRESOURCEPERSONS_HID,
|
||||
self.resources.reschkResourcePersons_value,
|
||||
97, 116, 0, 4, 407, 150), self)
|
||||
self.insertImage("imgHelp4", self.PROPS_IMAGE,
|
||||
(0, 10, "", UIConsts.INFOIMAGEURL,
|
||||
92, 145, False, 4, 408, 10))
|
||||
self.insertLabel("lblHelp4", self.PROPS_TEXTAREA,
|
||||
(39, self.resources.reslblHelp4_value, True, 104, 145, 4, 409, 199))
|
||||
|
||||
def buildStep5(self):
|
||||
self.insertLabel("lblTitle4", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle4_value,
|
||||
True, 91, 8, 5, 500, 212))
|
||||
self.insertLabel("lblTopic", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblTopic_value, 107, 28, 5, 71, 501))
|
||||
self.insertLabel("lblResponsible", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblResponsible_value, 195, 28, 5, 72, 502))
|
||||
self.insertLabel("lblDuration", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblDuration_value, 267, 28, 5, 73, 503))
|
||||
self.btnInsert = self.insertButton("btnInsert",
|
||||
AgendaWizardDialogConst.BTNINSERT_ACTION_PERFORMED,
|
||||
self.PROPS_BUTTON, (14, AgendaWizardDialogConst.BTNINSERT_HID,
|
||||
self.resources.resButtonInsert, 92, 136, 5, 580, 40), self)
|
||||
self.btnRemove = self.insertButton("btnRemove",
|
||||
AgendaWizardDialogConst.BTNREMOVE_ACTION_PERFORMED,
|
||||
self.PROPS_BUTTON, (14, AgendaWizardDialogConst.BTNREMOVE_HID,
|
||||
self.resources.resButtonRemove, 134, 136, 5, 581, 40), self)
|
||||
self.btnUp = self.insertButton("btnUp",
|
||||
AgendaWizardDialogConst.BTNUP_ACTION_PERFORMED,
|
||||
self.PROPS_BUTTON, (14, AgendaWizardDialogConst.BTNUP_HID,
|
||||
self.resources.resButtonUp, 180, 136, 5, 582, 60), self)
|
||||
self.btnDown = self.insertButton("btnDown",
|
||||
AgendaWizardDialogConst.BTNDOWN_ACTION_PERFORMED,
|
||||
self.PROPS_BUTTON, (14, AgendaWizardDialogConst.BTNDOWN_HID,
|
||||
self.resources.resButtonDown, 244, 136, 5, 583, 60), self)
|
||||
|
||||
def buildStep6(self):
|
||||
self.insertLabel("lblTitle6", self.PROPS_LABEL_B,
|
||||
(self.fontDescriptor4, 16, self.resources.reslblTitle6_value,
|
||||
True, 91, 8, 6, 600, 212))
|
||||
self.insertLabel("lblHelpPg6", self.PROPS_TEXTAREA,
|
||||
(24, self.resources.reslblHelpPg6_value, True,
|
||||
97, 32, 6, 601,204))
|
||||
self.insertLabel("lblTemplateName", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblTemplateName_value,
|
||||
97, 62, 6, 602, 101))
|
||||
self.txtTemplateName = self.insertTextField("txtTemplateName",
|
||||
None, self.PROPS_X,
|
||||
(12, AgendaWizardDialogConst.TXTTEMPLATENAME_HID,
|
||||
202, 60, 6, 603, 100), self)
|
||||
self.insertLabel("lblProceed", self.PROPS_TEXT,
|
||||
(8, self.resources.reslblProceed_value, 97, 101, 6, 607,204))
|
||||
self.optCreateAgenda = self.insertRadioButton("optCreateAgenda", None,
|
||||
self.PROPS_CHECK, (8, AgendaWizardDialogConst.OPTCREATEAGENDA_HID,
|
||||
self.resources.resoptCreateAgenda_value,
|
||||
103, 113, 1, 6, 608, 198), self)
|
||||
self.optMakeChanges = self.insertRadioButton("optMakeChanges", None,
|
||||
self.PROPS_BUTTON, (8, AgendaWizardDialogConst.OPTMAKECHANGES_HID,
|
||||
self.resources.resoptMakeChanges_value,
|
||||
103, 125, 6, 609, 198), self)
|
||||
self.insertImage("imgHelp6", self.PROPS_IMAGE, (0, 10, "",
|
||||
UIConsts.INFOIMAGEURL, 92, 145, False, 6, 610, 10))
|
||||
self.insertLabel("lblHelp6", self.PROPS_TEXTAREA,
|
||||
(39, self.resources.reslblHelp6_value, True, 104, 145, 6, 611, 199))
|
||||
@@ -0,0 +1,77 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.HelpIds import HelpIds
|
||||
|
||||
HID = 41051
|
||||
|
||||
class AgendaWizardDialogConst:
|
||||
|
||||
TXTTITLE_TEXT_CHANGED = "txtTitleTextChanged"
|
||||
TXTDATE_TEXT_CHANGED = "txtDateTextChanged"
|
||||
TXTTIME_TEXT_CHANGED = "txtTimeTextChanged"
|
||||
TXTLOCATION_TEXT_CHANGED = "txtLocationTextChanged"
|
||||
CHKMINUTES_ITEM_CHANGED = "chkMinutesItemChanged"
|
||||
CHKUSEMEETINGTYPE_ITEM_CHANGED = "chkUseMeetingTypeItemChanged"
|
||||
CHKUSEREAD_ITEM_CHANGED = "chkUseReadItemChanged"
|
||||
CHKUSEBRING_ITEM_CHANGED = "chkUseBringItemChanged"
|
||||
CHKUSENOTES_ITEM_CHANGED = "chkUseNotesItemChanged"
|
||||
CHKUSECALLEDBYNAME_ITEM_CHANGED = "chkUseCalledByItemChanged"
|
||||
CHKUSEFACILITATOR_ITEM_CHANGED = "chkUseFacilitatorItemChanged"
|
||||
CHKUSENOTETAKER_ITEM_CHANGED = "chkUseNoteTakerItemChanged"
|
||||
CHKUSETIMEKEEPER_ITEM_CHANGED = "chkUseTimeKeeperItemChanged"
|
||||
CHKUSEATTENDEES_ITEM_CHANGED = "chkUseAttendeesItemChanged"
|
||||
CHKUSEOBSERVERS_ITEM_CHANGED = "chkUseObserversItemChanged"
|
||||
CHKUSERESOURCEPERSONS_ITEM_CHANGED = "chkUseResourcePersonsItemChanged"
|
||||
LISTPAGEDESIGN_ACTION_PERFORMED = "pageDesignChanged"
|
||||
BTNTEMPLATEPATH_ACTION_PERFORMED = "saveAs"
|
||||
BTNINSERT_ACTION_PERFORMED = "insertRow"
|
||||
BTNREMOVE_ACTION_PERFORMED = "removeRow"
|
||||
BTNUP_ACTION_PERFORMED = "rowUp"
|
||||
BTNDOWN_ACTION_PERFORMED = "rowDown"
|
||||
|
||||
LISTPAGEDESIGN_HID = HelpIds.getHelpIdString(HID + 6)
|
||||
CHKMINUTES_HID = HelpIds.getHelpIdString(HID + 7)
|
||||
TXTTIME_HID = HelpIds.getHelpIdString(HID + 8)
|
||||
TXTDATE_HID = HelpIds.getHelpIdString(HID + 9)
|
||||
TXTTITLE_HID = HelpIds.getHelpIdString(HID + 10)
|
||||
CBLOCATION_HID = HelpIds.getHelpIdString(HID + 11)
|
||||
|
||||
CHKMEETINGTITLE_HID = HelpIds.getHelpIdString(HID + 12)
|
||||
CHKREAD_HID = HelpIds.getHelpIdString(HID + 13)
|
||||
CHKBRING_HID = HelpIds.getHelpIdString(HID + 14)
|
||||
CHKNOTES_HID = HelpIds.getHelpIdString(HID + 15)
|
||||
|
||||
CHKCONVENEDBY_HID = HelpIds.getHelpIdString(HID + 16)
|
||||
CHKPRESIDING_HID = HelpIds.getHelpIdString(HID + 17)
|
||||
CHKNOTETAKER_HID = HelpIds.getHelpIdString(HID + 18)
|
||||
CHKTIMEKEEPER_HID = HelpIds.getHelpIdString(HID + 19)
|
||||
CHKATTENDEES_HID = HelpIds.getHelpIdString(HID + 20)
|
||||
CHKOBSERVERS_HID = HelpIds.getHelpIdString(HID + 21)
|
||||
CHKRESOURCEPERSONS_HID = HelpIds.getHelpIdString(HID + 22)
|
||||
|
||||
TXTTEMPLATENAME_HID = HelpIds.getHelpIdString(HID + 23)
|
||||
TXTTEMPLATEPATH_HID = HelpIds.getHelpIdString(HID + 24)
|
||||
BTNTEMPLATEPATH_HID = HelpIds.getHelpIdString(HID + 25)
|
||||
|
||||
OPTCREATEAGENDA_HID = HelpIds.getHelpIdString(HID + 26)
|
||||
OPTMAKECHANGES_HID = HelpIds.getHelpIdString(HID + 27)
|
||||
|
||||
BTNINSERT_HID = HelpIds.getHelpIdString(HID + 28)
|
||||
BTNREMOVE_HID = HelpIds.getHelpIdString(HID + 29)
|
||||
BTNUP_HID = HelpIds.getHelpIdString(HID + 30)
|
||||
BTNDOWN_HID = HelpIds.getHelpIdString(HID + 31)
|
||||
@@ -0,0 +1,384 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import traceback
|
||||
import os.path
|
||||
from .AgendaWizardDialog import AgendaWizardDialog, uno
|
||||
from .AgendaWizardDialogConst import HID
|
||||
from .AgendaDocument import AgendaDocument, TextElement
|
||||
from .TemplateConsts import TemplateConsts
|
||||
from .TopicsControl import TopicsControl
|
||||
from .CGAgenda import CGAgenda
|
||||
from ..ui.PathSelection import PathSelection
|
||||
from ..ui.event.UnoDataAware import UnoDataAware
|
||||
from ..ui.event.RadioDataAware import RadioDataAware
|
||||
from ..ui.event.CommonListener import TerminateListenerProcAdapter
|
||||
from ..common.NoValidPathException import NoValidPathException
|
||||
from ..common.SystemDialog import SystemDialog
|
||||
from ..common.Desktop import Desktop
|
||||
from ..common.HelpIds import HelpIds
|
||||
from ..common.Configuration import Configuration
|
||||
from ..common.FileAccess import FileAccess
|
||||
from ..document.OfficeDocument import OfficeDocument
|
||||
|
||||
from com.sun.star.util import CloseVetoException
|
||||
from com.sun.star.view.DocumentZoomType import OPTIMAL
|
||||
from com.sun.star.awt.VclWindowPeerAttribute import YES_NO, DEF_NO
|
||||
|
||||
class AgendaWizardDialogImpl(AgendaWizardDialog):
|
||||
|
||||
def __init__(self, xmsf):
|
||||
super(AgendaWizardDialogImpl, self).__init__(xmsf)
|
||||
self.filenameChanged = False
|
||||
self.pageDesign = -1
|
||||
|
||||
def enterStep(self, OldStep, NewStep):
|
||||
pass
|
||||
|
||||
def leaveStep(self, OldStep, NewStep):
|
||||
pass
|
||||
|
||||
def startWizard(self, xMSF):
|
||||
self.running = True
|
||||
try:
|
||||
#Number of steps on WizardDialog
|
||||
self.nMaxStep = 6
|
||||
|
||||
self.agenda = CGAgenda()
|
||||
|
||||
# read configuration data before we initialize the topics
|
||||
root = Configuration.getConfigurationRoot(
|
||||
self.xMSF, "/org.openoffice.Office.Writer/Wizards/Agenda",
|
||||
False)
|
||||
self.agenda.readConfiguration(root, "cp_")
|
||||
|
||||
self.templateConsts = TemplateConsts
|
||||
|
||||
self.initializePaths()
|
||||
# initialize the agenda template
|
||||
self.terminateListener = TerminateListenerProcAdapter(self.queryTermination)
|
||||
self.myAgendaDoc = AgendaDocument(
|
||||
self.xMSF, self.agenda, self.resources,
|
||||
self.templateConsts, self.terminateListener)
|
||||
self.initializeTemplates()
|
||||
|
||||
self.myAgendaDoc.load(
|
||||
self.agendaTemplates[1][self.agenda.cp_AgendaType])
|
||||
self.drawConstants()
|
||||
|
||||
# build the dialog.
|
||||
self.drawNaviBar()
|
||||
|
||||
self.buildStep1()
|
||||
self.buildStep2()
|
||||
self.buildStep3()
|
||||
self.buildStep4()
|
||||
self.buildStep5()
|
||||
self.buildStep6()
|
||||
|
||||
self.topicsControl = TopicsControl(self, self.xMSF, self.agenda)
|
||||
|
||||
#special Control for setting the save Path:
|
||||
self.insertPathSelectionControl()
|
||||
|
||||
# synchronize GUI and CGAgenda object.
|
||||
self.initConfiguration()
|
||||
|
||||
if self.myPathSelection.xSaveTextBox.Text.lower() == "":
|
||||
self.myPathSelection.initializePath()
|
||||
|
||||
# create the peer
|
||||
xContainerWindow = self.myAgendaDoc.xFrame.ContainerWindow
|
||||
self.createWindowPeer(xContainerWindow)
|
||||
|
||||
# initialize roadmap
|
||||
self.insertRoadmap()
|
||||
|
||||
self.executeDialogFromComponent(self.myAgendaDoc.xFrame)
|
||||
self.removeTerminateListener()
|
||||
self.closeDocument()
|
||||
self.running = False
|
||||
except Exception:
|
||||
self.removeTerminateListener()
|
||||
traceback.print_exc()
|
||||
self.running = False
|
||||
return
|
||||
|
||||
def insertPathSelectionControl(self):
|
||||
self.myPathSelection = PathSelection(
|
||||
self.xMSF, self, PathSelection.TransferMode.SAVE,
|
||||
PathSelection.DialogTypes.FILE)
|
||||
self.myPathSelection.insert(6, 97, 70, 205, 45,
|
||||
self.resources.reslblTemplatePath_value, True,
|
||||
HelpIds.getHelpIdString(HID + 24),
|
||||
HelpIds.getHelpIdString(HID + 25))
|
||||
self.myPathSelection.sDefaultDirectory = self.sUserTemplatePath
|
||||
self.myPathSelection.sDefaultName = "myAgendaTemplate.ott"
|
||||
self.myPathSelection.sDefaultFilter = "writer8_template"
|
||||
self.myPathSelection.addSelectionListener(self)
|
||||
|
||||
'''
|
||||
bind controls to the agenda member (DataAware model)
|
||||
'''
|
||||
|
||||
def initConfiguration(self):
|
||||
self.xDialogModel.listPageDesign.StringItemList = \
|
||||
tuple(self.agendaTemplates[0])
|
||||
UnoDataAware.attachListBox(
|
||||
self.agenda, "cp_AgendaType", self.listPageDesign, True).updateUI()
|
||||
self.pageDesign = self.agenda.cp_AgendaType
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_IncludeMinutes", self.chkMinutes, True).updateUI()
|
||||
UnoDataAware.attachEditControl(
|
||||
self.agenda, "cp_Title", self.txtTitle, True).updateUI()
|
||||
UnoDataAware.attachDateControl(
|
||||
self.agenda, "cp_Date", self.txtDate, True).updateUI()
|
||||
UnoDataAware.attachTimeControl(
|
||||
self.agenda, "cp_Time", self.txtTime, True).updateUI()
|
||||
UnoDataAware.attachEditControl(
|
||||
self.agenda, "cp_Location", self.cbLocation, True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowMeetingType", self.chkMeetingTitle,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowRead", self.chkRead, True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowBring", self.chkBring, True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowNotes", self.chkNotes, True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowCalledBy", self.chkConvenedBy,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowFacilitator", self.chkPresiding,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowNotetaker", self.chkNoteTaker,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowTimekeeper", self.chkTimekeeper,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowAttendees", self.chkAttendees,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowObservers", self.chkObservers,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachCheckBox(
|
||||
self.agenda, "cp_ShowResourcePersons",self.chkResourcePersons,
|
||||
True).updateUI()
|
||||
UnoDataAware.attachEditControl(
|
||||
self.agenda, "cp_TemplateName", self.txtTemplateName,
|
||||
True).updateUI()
|
||||
RadioDataAware.attachRadioButtons(
|
||||
self.agenda, "cp_ProceedMethod",
|
||||
(self.optCreateAgenda, self.optMakeChanges), True).updateUI()
|
||||
|
||||
def insertRoadmap(self):
|
||||
self.addRoadmap()
|
||||
self.insertRoadMapItems(
|
||||
self.resources.RoadmapLabels, [True, True, True, True, True, True])
|
||||
self.setRoadmapInteractive(True)
|
||||
self.setRoadmapComplete(True)
|
||||
self.setCurrentRoadmapItemID(1)
|
||||
|
||||
'''
|
||||
read the available agenda wizard templates.
|
||||
'''
|
||||
|
||||
def initializeTemplates(self):
|
||||
try:
|
||||
sAgendaPath = self.sTemplatePath + "/wizard/agenda"
|
||||
self.agendaTemplates = FileAccess.getFolderTitles(
|
||||
self.xMSF, "aw", sAgendaPath, self.resources.dictPageDesign)
|
||||
return True
|
||||
except NoValidPathException:
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
'''
|
||||
first page, page design listbox changed.
|
||||
'''
|
||||
|
||||
def pageDesignChanged(self):
|
||||
try:
|
||||
SelectedItemPos = self.listPageDesign.SelectedItemPos
|
||||
#avoid to load the same item again
|
||||
if self.pageDesign is not SelectedItemPos:
|
||||
self.pageDesign = SelectedItemPos
|
||||
self.myAgendaDoc.load(
|
||||
self.agendaTemplates[1][SelectedItemPos])
|
||||
self.drawConstants()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
#textFields listeners
|
||||
def txtTitleTextChanged(self):
|
||||
self.myAgendaDoc.redrawTitle("txtTitle")
|
||||
|
||||
def txtDateTextChanged(self):
|
||||
self.myAgendaDoc.redrawTitle("txtDate")
|
||||
|
||||
def txtTimeTextChanged(self):
|
||||
self.myAgendaDoc.redrawTitle("txtTime")
|
||||
|
||||
def txtLocationTextChanged(self):
|
||||
self.myAgendaDoc.redrawTitle("cbLocation")
|
||||
|
||||
#checkbox listeners
|
||||
def chkUseMeetingTypeItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_MEETING_TYPE)
|
||||
|
||||
def chkUseReadItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_READ)
|
||||
|
||||
def chkUseBringItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_BRING)
|
||||
|
||||
def chkUseNotesItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_NOTES)
|
||||
|
||||
def chkUseCalledByItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_CALLED_BY)
|
||||
|
||||
def chkUseFacilitatorItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_FACILITATOR)
|
||||
|
||||
def chkUseNoteTakerItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_NOTETAKER)
|
||||
|
||||
def chkUseTimeKeeperItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_TIMEKEEPER)
|
||||
|
||||
def chkUseAttendeesItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_PARTICIPANTS)
|
||||
|
||||
def chkUseObserversItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_OBSERVERS)
|
||||
|
||||
def chkUseResourcePersonsItemChanged(self):
|
||||
self.myAgendaDoc.redraw(self.templateConsts.FILLIN_RESOURCE_PERSONS)
|
||||
|
||||
def insertRow(self):
|
||||
self.topicsControl.insertRow()
|
||||
|
||||
def removeRow(self):
|
||||
self.topicsControl.removeRow()
|
||||
|
||||
def rowUp(self):
|
||||
self.topicsControl.rowUp()
|
||||
|
||||
def rowDown(self):
|
||||
self.topicsControl.rowDown()
|
||||
|
||||
def cancelWizard(self):
|
||||
self.xUnoDialog.endExecute()
|
||||
self.running = False
|
||||
|
||||
def finishWizard(self):
|
||||
self.switchToStep(self.getCurrentStep(), self.nMaxStep)
|
||||
bSaveSuccess = False
|
||||
endWizard = True
|
||||
try:
|
||||
self.sPath = self.myPathSelection.getSelectedPath()
|
||||
if not self.sPath or not os.path.exists(self.sPath):
|
||||
self.myPathSelection.triggerPathPicker()
|
||||
self.sPath = self.myPathSelection.getSelectedPath()
|
||||
|
||||
#first, if the filename was not changed, thus
|
||||
#it is coming from a saved session, check if the
|
||||
# file exists and warn the user.
|
||||
if not self.filenameChanged:
|
||||
answer = SystemDialog.showMessageBox(
|
||||
self.xMSF, "MessBox", YES_NO + DEF_NO,
|
||||
self.resources.resOverwriteWarning,
|
||||
self.xUnoDialog.Peer)
|
||||
if answer == 3:
|
||||
# user said: no, do not overwrite
|
||||
endWizard = False
|
||||
return False
|
||||
|
||||
xDocProps = self.myAgendaDoc.xTextDocument.DocumentProperties
|
||||
xDocProps.Title = self.txtTemplateName.Text
|
||||
self.myAgendaDoc.setWizardTemplateDocInfo( \
|
||||
self.resources.resAgendaWizardDialog_title,
|
||||
self.resources.resTemplateDescription)
|
||||
bSaveSuccess = OfficeDocument.store(
|
||||
self.xMSF, self.myAgendaDoc.xTextDocument, self.sPath,
|
||||
"writer8_template")
|
||||
|
||||
if bSaveSuccess:
|
||||
self.topicsControl.saveTopics(self.agenda)
|
||||
root = Configuration.getConfigurationRoot(
|
||||
self.xMSF, "/org.openoffice.Office.Writer/Wizards/Agenda",
|
||||
True)
|
||||
self.agenda.writeConfiguration(root, "cp_")
|
||||
root.commitChanges()
|
||||
|
||||
self.myAgendaDoc.finish(self.topicsControl.scrollfields)
|
||||
|
||||
loadValues = list(range(2))
|
||||
loadValues[0] = uno.createUnoStruct( \
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
loadValues[0].Name = "AsTemplate"
|
||||
if self.agenda.cp_ProceedMethod == 1:
|
||||
loadValues[0].Value = True
|
||||
else:
|
||||
loadValues[0].Value = False
|
||||
|
||||
loadValues[1] = uno.createUnoStruct( \
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
loadValues[1].Name = "InteractionHandler"
|
||||
|
||||
xIH = self.xMSF.createInstance(
|
||||
"com.sun.star.comp.uui.UUIInteractionHandler")
|
||||
loadValues[1].Value = xIH
|
||||
|
||||
oDoc = OfficeDocument.load(
|
||||
Desktop.getDesktop(self.xMSF),
|
||||
self.sPath, "_default", loadValues)
|
||||
oDoc.CurrentController.ViewSettings.ZoomType = OPTIMAL
|
||||
else:
|
||||
pass
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
if endWizard:
|
||||
self.xUnoDialog.endExecute()
|
||||
self.running = False
|
||||
return True
|
||||
|
||||
def closeDocument(self):
|
||||
try:
|
||||
self.myAgendaDoc.xFrame.close(False)
|
||||
except CloseVetoException:
|
||||
traceback.print_exc()
|
||||
|
||||
def drawConstants(self):
|
||||
'''Localise the template'''
|
||||
constRangeList = self.myAgendaDoc.searchFillInItems(1)
|
||||
|
||||
for i in constRangeList:
|
||||
text = i.String.lower()
|
||||
aux = TextElement(i, self.resources.dictConstants[text])
|
||||
aux.write()
|
||||
|
||||
def validatePath(self):
|
||||
if self.myPathSelection.usedPathPicker:
|
||||
self.filenameChanged = True
|
||||
self.myPathSelection.usedPathPicker = False
|
||||
@@ -0,0 +1,145 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
class AgendaWizardDialogResources(object):
|
||||
|
||||
SECTION_ITEMS = "AGENDA_ITEMS"
|
||||
SECTION_TOPICS = "AGENDA_TOPICS"
|
||||
SECTION_MINUTES_ALL = "MINUTES_ALL"
|
||||
SECTION_MINUTES = "MINUTES"
|
||||
|
||||
def __init__(self):
|
||||
import sys, os
|
||||
|
||||
# imp is deprecated since Python v.3.4
|
||||
if sys.version_info >= (3,3):
|
||||
from importlib.machinery import SourceFileLoader
|
||||
SourceFileLoader('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc')).load_module()
|
||||
else:
|
||||
import imp
|
||||
imp.load_source('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc'))
|
||||
|
||||
import strings
|
||||
|
||||
self.resAgendaWizardDialog_title = strings.RID_AGENDAWIZARDDIALOG_START_1
|
||||
self.resoptMakeChanges_value = strings.RID_AGENDAWIZARDDIALOG_START_2
|
||||
self.reslblTemplateName_value = strings.RID_AGENDAWIZARDDIALOG_START_3
|
||||
self.reslblTemplatePath_value = strings.RID_AGENDAWIZARDDIALOG_START_4
|
||||
self.reslblProceed_value = strings.RID_AGENDAWIZARDDIALOG_START_5
|
||||
self.reslblTitle1_value = strings.RID_AGENDAWIZARDDIALOG_START_6
|
||||
self.reslblTitle3_value = strings.RID_AGENDAWIZARDDIALOG_START_7
|
||||
self.reslblTitle2_value = strings.RID_AGENDAWIZARDDIALOG_START_8
|
||||
self.reslblTitle4_value = strings.RID_AGENDAWIZARDDIALOG_START_9
|
||||
self.reslblTitle5_value = strings.RID_AGENDAWIZARDDIALOG_START_10
|
||||
self.reslblTitle6_value = strings.RID_AGENDAWIZARDDIALOG_START_11
|
||||
self.reschkMinutes_value = strings.RID_AGENDAWIZARDDIALOG_START_12
|
||||
self.reslblHelp1_value = strings.RID_AGENDAWIZARDDIALOG_START_13
|
||||
self.reslblTime_value = strings.RID_AGENDAWIZARDDIALOG_START_14
|
||||
self.reslblTitle_value = strings.RID_AGENDAWIZARDDIALOG_START_15
|
||||
self.reslblLocation_value = strings.RID_AGENDAWIZARDDIALOG_START_16
|
||||
self.reslblHelp2_value = strings.RID_AGENDAWIZARDDIALOG_START_17
|
||||
self.resbtnTemplatePath_value = strings.RID_AGENDAWIZARDDIALOG_START_18
|
||||
self.resoptCreateAgenda_value = strings.RID_AGENDAWIZARDDIALOG_START_19
|
||||
self.reslblHelp6_value = strings.RID_AGENDAWIZARDDIALOG_START_20
|
||||
self.reslblTopic_value = strings.RID_AGENDAWIZARDDIALOG_START_21
|
||||
self.reslblResponsible_value = strings.RID_AGENDAWIZARDDIALOG_START_22
|
||||
self.reslblDuration_value = strings.RID_AGENDAWIZARDDIALOG_START_23
|
||||
self.reschkConvenedBy_value = strings.RID_AGENDAWIZARDDIALOG_START_24
|
||||
self.reschkPresiding_value = strings.RID_AGENDAWIZARDDIALOG_START_25
|
||||
self.reschkNoteTaker_value = strings.RID_AGENDAWIZARDDIALOG_START_26
|
||||
self.reschkTimekeeper_value = strings.RID_AGENDAWIZARDDIALOG_START_27
|
||||
self.reschkAttendees_value = strings.RID_AGENDAWIZARDDIALOG_START_28
|
||||
self.reschkObservers_value = strings.RID_AGENDAWIZARDDIALOG_START_29
|
||||
self.reschkResourcePersons_value = strings.RID_AGENDAWIZARDDIALOG_START_30
|
||||
self.reslblHelp4_value = strings.RID_AGENDAWIZARDDIALOG_START_31
|
||||
self.reschkMeetingTitle_value = strings.RID_AGENDAWIZARDDIALOG_START_32
|
||||
self.reschkRead_value = strings.RID_AGENDAWIZARDDIALOG_START_33
|
||||
self.reschkBring_value = strings.RID_AGENDAWIZARDDIALOG_START_34
|
||||
self.reschkNotes_value = strings.RID_AGENDAWIZARDDIALOG_START_35
|
||||
self.reslblHelp3_value = strings.RID_AGENDAWIZARDDIALOG_START_36
|
||||
self.reslblDate_value = strings.RID_AGENDAWIZARDDIALOG_START_38
|
||||
self.reslblHelpPg6_value = strings.RID_AGENDAWIZARDDIALOG_START_39
|
||||
self.reslblPageDesign_value = strings.RID_AGENDAWIZARDDIALOG_START_40
|
||||
self.resDefaultFilename = strings.RID_AGENDAWIZARDDIALOG_START_41
|
||||
self.resDefaultFilename = self.resDefaultFilename[:-4] + ".ott"
|
||||
self.resDefaultTitle = strings.RID_AGENDAWIZARDDIALOG_START_42
|
||||
self.resErrSaveTemplate = strings.RID_AGENDAWIZARDDIALOG_START_43
|
||||
self.resPlaceHolderTitle = strings.RID_AGENDAWIZARDDIALOG_START_44
|
||||
self.resPlaceHolderDate = strings.RID_AGENDAWIZARDDIALOG_START_45
|
||||
self.resPlaceHolderTime = strings.RID_AGENDAWIZARDDIALOG_START_46
|
||||
self.resPlaceHolderLocation = strings.RID_AGENDAWIZARDDIALOG_START_47
|
||||
self.resPlaceHolderHint = strings.RID_AGENDAWIZARDDIALOG_START_48
|
||||
self.resErrOpenTemplate = strings.RID_AGENDAWIZARDDIALOG_START_56
|
||||
self.itemMeetingType = strings.RID_AGENDAWIZARDDIALOG_START_57
|
||||
self.itemBring = strings.RID_AGENDAWIZARDDIALOG_START_58
|
||||
self.itemRead = strings.RID_AGENDAWIZARDDIALOG_START_59
|
||||
self.itemNote = strings.RID_AGENDAWIZARDDIALOG_START_60
|
||||
self.itemCalledBy = strings.RID_AGENDAWIZARDDIALOG_START_61
|
||||
self.itemFacilitator = strings.RID_AGENDAWIZARDDIALOG_START_62
|
||||
self.itemAttendees = strings.RID_AGENDAWIZARDDIALOG_START_63
|
||||
self.itemNotetaker = strings.RID_AGENDAWIZARDDIALOG_START_64
|
||||
self.itemTimekeeper = strings.RID_AGENDAWIZARDDIALOG_START_65
|
||||
self.itemObservers = strings.RID_AGENDAWIZARDDIALOG_START_66
|
||||
self.itemResource = strings.RID_AGENDAWIZARDDIALOG_START_67
|
||||
self.resButtonInsert = strings.RID_AGENDAWIZARDDIALOG_START_68
|
||||
self.resButtonRemove = strings.RID_AGENDAWIZARDDIALOG_START_69
|
||||
self.resButtonUp = strings.RID_AGENDAWIZARDDIALOG_START_70
|
||||
self.resButtonDown = strings.RID_AGENDAWIZARDDIALOG_START_71
|
||||
|
||||
#Create a dictionary for localised string in the template
|
||||
self.dictConstants = {
|
||||
"#datetitle#" : strings.RID_AGENDAWIZARDDIALOG_START_72,
|
||||
"#timetitle#" : strings.RID_AGENDAWIZARDDIALOG_START_73,
|
||||
"#locationtitle#" : strings.RID_AGENDAWIZARDDIALOG_START_74,
|
||||
"#topics#" : strings.RID_AGENDAWIZARDDIALOG_START_75,
|
||||
"#num.#" : strings.RID_AGENDAWIZARDDIALOG_START_76,
|
||||
"#topicheader#" : strings.RID_AGENDAWIZARDDIALOG_START_77,
|
||||
"#responsibleheader#" : strings.RID_AGENDAWIZARDDIALOG_START_78,
|
||||
"#timeheader#" : strings.RID_AGENDAWIZARDDIALOG_START_79,
|
||||
"#additional-information#" : strings.RID_AGENDAWIZARDDIALOG_START_80,
|
||||
"#minutes-for#" : strings.RID_AGENDAWIZARDDIALOG_START_81,
|
||||
"#discussion#" : strings.RID_AGENDAWIZARDDIALOG_START_82,
|
||||
"#conclusion#" : strings.RID_AGENDAWIZARDDIALOG_START_83,
|
||||
"#to-do#" : strings.RID_AGENDAWIZARDDIALOG_START_84,
|
||||
"#responsible-party#" : strings.RID_AGENDAWIZARDDIALOG_START_85,
|
||||
"#deadline#" : strings.RID_AGENDAWIZARDDIALOG_START_86}
|
||||
|
||||
#Create a dictionary for localising the page design
|
||||
self.dictPageDesign = {
|
||||
"Blue" : strings.RID_AGENDAWIZARDDIALOG_START_87,
|
||||
"Classic" : strings.RID_AGENDAWIZARDDIALOG_START_88,
|
||||
"Colorful" : strings.RID_AGENDAWIZARDDIALOG_START_89,
|
||||
"Elegant" : strings.RID_AGENDAWIZARDDIALOG_START_90,
|
||||
"Green" : strings.RID_AGENDAWIZARDDIALOG_START_91,
|
||||
"Grey" : strings.RID_AGENDAWIZARDDIALOG_START_92,
|
||||
"Modern" : strings.RID_AGENDAWIZARDDIALOG_START_93,
|
||||
"Orange" : strings.RID_AGENDAWIZARDDIALOG_START_94,
|
||||
"Red" : strings.RID_AGENDAWIZARDDIALOG_START_95,
|
||||
"Simple" : strings.RID_AGENDAWIZARDDIALOG_START_96}
|
||||
|
||||
#Common Resources
|
||||
self.resOverwriteWarning = strings.RID_COMMON_START_19
|
||||
self.resTemplateDescription = strings.RID_COMMON_START_20
|
||||
|
||||
self.RoadmapLabels = []
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_50)
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_51)
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_52)
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_53)
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_54)
|
||||
self.RoadmapLabels.append(strings.RID_AGENDAWIZARDDIALOG_START_55)
|
||||
46
server/libreoffice/program/wizards/agenda/CGAgenda.py
Normal file
46
server/libreoffice/program/wizards/agenda/CGAgenda.py
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
from ..common.ConfigSet import ConfigSet
|
||||
from .CGTopic import CGTopic
|
||||
|
||||
class CGAgenda(ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
self.cp_AgendaType = int()
|
||||
self.cp_IncludeMinutes = bool()
|
||||
self.cp_Title = ""
|
||||
self.cp_Date = str()
|
||||
self.cp_Time = str()
|
||||
self.cp_Location = ""
|
||||
self.cp_ShowMeetingType = bool()
|
||||
self.cp_ShowRead = bool()
|
||||
self.cp_ShowBring = bool()
|
||||
self.cp_ShowNotes = bool()
|
||||
self.cp_ShowCalledBy = bool()
|
||||
self.cp_ShowFacilitator = bool()
|
||||
self.cp_ShowNotetaker = bool()
|
||||
self.cp_ShowTimekeeper = bool()
|
||||
self.cp_ShowAttendees = bool()
|
||||
self.cp_ShowObservers = bool()
|
||||
self.cp_ShowResourcePersons = bool()
|
||||
self.cp_TemplateName = str()
|
||||
self.cp_TemplatePath = str()
|
||||
self.cp_ProceedMethod = int()
|
||||
|
||||
self.cp_Topics = ConfigSet(CGTopic)
|
||||
60
server/libreoffice/program/wizards/agenda/CGTopic.py
Normal file
60
server/libreoffice/program/wizards/agenda/CGTopic.py
Normal file
@@ -0,0 +1,60 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
|
||||
'''
|
||||
CGTopic means: Configuration Group Topic.
|
||||
This object encapsulates a configuration group with topic information.
|
||||
Since the topic's gui control uses its own data model, there is
|
||||
also code here to convert from the data model to CGTopic object (the constructor)
|
||||
and vice versa (setDataToRow method - used when loading the last session...)
|
||||
'''
|
||||
|
||||
class CGTopic(ConfigGroup):
|
||||
|
||||
'''
|
||||
create a new CGTopic object with data from the given row.
|
||||
the row object is a PropertyValue array, as used
|
||||
by the TopicsControl's data model.
|
||||
@param row PropertyValue array as used by the TopicsControl's data model.
|
||||
'''
|
||||
|
||||
def __init__(self, row=None):
|
||||
if row is None:
|
||||
self.cp_Index = int()
|
||||
self.cp_Topic = str()
|
||||
self.cp_Responsible = str()
|
||||
self.cp_Time = str()
|
||||
else:
|
||||
self.cp_Index = int(row[0].Value[:-1])
|
||||
self.cp_Topic = row[1].Value
|
||||
self.cp_Responsible = row[2].Value
|
||||
self.cp_Time = row[3].Value
|
||||
|
||||
'''
|
||||
copies the data in this CGTopic object
|
||||
to the given row.
|
||||
@param row the row object (PropertyValue array) to
|
||||
copy the data to.
|
||||
'''
|
||||
|
||||
def setDataToRow(self, row):
|
||||
row[0].Value = "" + str(self.cp_Index) + "."
|
||||
row[1].Value = self.cp_Topic
|
||||
row[2].Value = self.cp_Responsible
|
||||
row[3].Value = self.cp_Time
|
||||
75
server/libreoffice/program/wizards/agenda/CallWizard.py
Normal file
75
server/libreoffice/program/wizards/agenda/CallWizard.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import unohelper
|
||||
import traceback
|
||||
|
||||
from .AgendaWizardDialogImpl import AgendaWizardDialogImpl, Desktop
|
||||
|
||||
from com.sun.star.lang import XServiceInfo
|
||||
from com.sun.star.task import XJobExecutor
|
||||
|
||||
# pythonloader looks for a static g_ImplementationHelper variable
|
||||
g_ImplementationHelper = unohelper.ImplementationHelper()
|
||||
g_implName = "com.sun.star.wizards.agenda.CallWizard"
|
||||
|
||||
# implement a UNO component by deriving from the standard unohelper.Base class
|
||||
# and from the interface(s) you want to implement.
|
||||
class CallWizard(unohelper.Base, XJobExecutor, XServiceInfo):
|
||||
def __init__(self, ctx):
|
||||
# store the component context for later use
|
||||
self.ctx = ctx
|
||||
|
||||
def trigger(self, args):
|
||||
try:
|
||||
fw = AgendaWizardDialogImpl(self.ctx.ServiceManager)
|
||||
fw.startWizard(self.ctx.ServiceManager)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
@classmethod
|
||||
def callRemote(self):
|
||||
#Call the wizard remotely(see README)
|
||||
try:
|
||||
ConnectStr = \
|
||||
"uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"
|
||||
xLocMSF = Desktop.connect(ConnectStr)
|
||||
lw = AgendaWizardDialogImpl(xLocMSF)
|
||||
lw.startWizard(xLocMSF)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
def getImplementationName(self):
|
||||
return g_implName
|
||||
|
||||
def supportsService(self, ServiceName):
|
||||
return g_ImplementationHelper.supportsService(g_implName, ServiceName)
|
||||
|
||||
def getSupportedServiceNames(self):
|
||||
return g_ImplementationHelper.getSupportedServiceNames(g_implName)
|
||||
|
||||
g_ImplementationHelper.addImplementation( \
|
||||
CallWizard, # UNO object class
|
||||
g_implName, # implementation name
|
||||
("com.sun.star.task.Job",),) # list of implemented services
|
||||
# (the only service)
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab:
|
||||
83
server/libreoffice/program/wizards/agenda/TemplateConsts.py
Normal file
83
server/libreoffice/program/wizards/agenda/TemplateConsts.py
Normal file
@@ -0,0 +1,83 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
class TemplateConsts:
|
||||
FILLIN_TITLE = "<title>"
|
||||
FILLIN_TITLE = "<title>"
|
||||
FILLIN_DATE = "<date>"
|
||||
FILLIN_TIME = "<time>"
|
||||
FILLIN_LOCATION = "<location>"
|
||||
'''
|
||||
section name <b>prefix</b> for sections that contain items.
|
||||
this is also used as table name prefix, since each items section
|
||||
must contain a table whose name is identical name to the section's name.
|
||||
'''
|
||||
SECTION_ITEMS = "AGENDA_ITEMS"
|
||||
'''
|
||||
the name of the section which contains the topics.
|
||||
'''
|
||||
SECTION_TOPICS = "AGENDA_TOPICS"
|
||||
'''
|
||||
the name of the parent minutes section.
|
||||
'''
|
||||
SECTION_MINUTES_ALL = "MINUTES_ALL"
|
||||
'''
|
||||
the name of the child minutes section.
|
||||
This section will be duplicated for each topic.
|
||||
'''
|
||||
SECTION_MINUTES = "MINUTES"
|
||||
'''
|
||||
tagged headings and names.
|
||||
These will be searched in item tables (in the template) and will be
|
||||
replaced with resource strings.
|
||||
|
||||
headings...
|
||||
'''
|
||||
FILLIN_MEETING_TYPE = "<meeting-type>"
|
||||
FILLIN_BRING = "<bring>"
|
||||
FILLIN_READ = "<read>"
|
||||
FILLIN_NOTES = "<notes>"
|
||||
'''
|
||||
names...
|
||||
'''
|
||||
FILLIN_CALLED_BY = "<called-by>"
|
||||
FILLIN_FACILITATOR = "<facilitator>"
|
||||
FILLIN_PARTICIPANTS = "<attendees>"
|
||||
FILLIN_NOTETAKER = "<notetaker>"
|
||||
FILLIN_TIMEKEEPER = "<timekeeper>"
|
||||
FILLIN_OBSERVERS = "<observers>"
|
||||
FILLIN_RESOURCE_PERSONS = "<resource-persons>"
|
||||
|
||||
'''
|
||||
fillins for minutes.
|
||||
These will be searched in the minutes section and will be replaced
|
||||
with the appropriate data.
|
||||
'''
|
||||
FILLIN_MINUTES_TITLE = "<minutes-title>"
|
||||
FILLIN_MINUTES_LOCATION = "<minutes-location>"
|
||||
FILLIN_MINUTES_DATE = "<minutes-date>"
|
||||
FILLIN_MINUTES_TIME = "<minutes-time>"
|
||||
'''
|
||||
Minutes-topic fillins
|
||||
These will be searched in the minutes-child-section, and
|
||||
will be replaced with topic data.
|
||||
'''
|
||||
FILLIN_MINUTE_NUM = "<mnum>"
|
||||
FILLIN_MINUTE_TOPIC = "<mtopic>"
|
||||
FILLIN_MINUTE_RESPONSIBLE = "<mresponsible>"
|
||||
FILLIN_MINUTE_TIME = "<mtime>"
|
||||
857
server/libreoffice/program/wizards/agenda/TopicsControl.py
Normal file
857
server/libreoffice/program/wizards/agenda/TopicsControl.py
Normal file
File diff suppressed because it is too large
Load Diff
59
server/libreoffice/program/wizards/common/ConfigGroup.py
Normal file
59
server/libreoffice/program/wizards/common/ConfigGroup.py
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import inspect
|
||||
|
||||
class ConfigGroup(object):
|
||||
|
||||
root = None
|
||||
|
||||
def __init__(self):
|
||||
self.root = None
|
||||
|
||||
def writeConfiguration(self, configurationView, param):
|
||||
for name,data in inspect.getmembers(self):
|
||||
if name.startswith(param):
|
||||
self.writeField( name, configurationView, param)
|
||||
|
||||
def writeField(self, field, configView, prefix):
|
||||
propertyName = field[len(prefix):]
|
||||
child = getattr(self, field)
|
||||
if isinstance(child, ConfigGroup):
|
||||
child.writeConfiguration(configView.getByName(propertyName),
|
||||
prefix)
|
||||
else:
|
||||
setattr(configView,propertyName,getattr(self,field))
|
||||
|
||||
def readConfiguration(self, configurationView, param):
|
||||
for name,data in inspect.getmembers(self):
|
||||
if name.startswith(param):
|
||||
self.readField( name, configurationView, param)
|
||||
|
||||
def readField(self, field, configView, prefix):
|
||||
propertyName = field[len(prefix):]
|
||||
child = getattr(self, field)
|
||||
if isinstance(child, ConfigGroup):
|
||||
child.setRoot(self.root);
|
||||
child.readConfiguration(configView.getByName(propertyName),
|
||||
prefix)
|
||||
else:
|
||||
value = configView.getByName(propertyName)
|
||||
if value is not None:
|
||||
setattr(self,field, value)
|
||||
|
||||
def setRoot(self, newRoot):
|
||||
self.root = newRoot
|
||||
67
server/libreoffice/program/wizards/common/ConfigSet.py
Normal file
67
server/libreoffice/program/wizards/common/ConfigSet.py
Normal file
@@ -0,0 +1,67 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import traceback
|
||||
from .ConfigGroup import ConfigGroup
|
||||
|
||||
class ConfigSet(ConfigGroup):
|
||||
'''
|
||||
After reading the configuration set items,
|
||||
the ConfigSet checks this field.
|
||||
If it is true, it will remove any nulls from
|
||||
the vector.
|
||||
subclasses can change this field in the constructor
|
||||
to avoid this "deletion" of nulls.
|
||||
'''
|
||||
|
||||
def __init__(self, childType):
|
||||
self.childType = childType
|
||||
self.childrenList = []
|
||||
self.childrenListLen = 0
|
||||
|
||||
def writeConfiguration(self, configurationView, param):
|
||||
for i in range(self.childrenListLen):
|
||||
#remove previous configuration
|
||||
configurationView.removeByName(i)
|
||||
for index,item in enumerate(self.childrenList):
|
||||
try:
|
||||
childView = configurationView.createInstance()
|
||||
configurationView.insertByName(index, childView)
|
||||
if callable( self.childType ):
|
||||
topic = self.childType()
|
||||
topic.cp_Index = item[0].Value
|
||||
topic.cp_Topic = item[1].Value
|
||||
topic.cp_Responsible = item[2].Value
|
||||
topic.cp_Time = item[3].Value
|
||||
topic.writeConfiguration(childView, param)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def readConfiguration(self, configurationView, param):
|
||||
#each iteration represents a Topic row
|
||||
names = configurationView.ElementNames
|
||||
if names:
|
||||
for i in names:
|
||||
try:
|
||||
if callable( self.childType ):
|
||||
topic = self.childType()
|
||||
topic.readConfiguration(
|
||||
configurationView.getByName(i), param)
|
||||
self.childrenList.append(topic)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
self.childrenListLen = len(self.childrenList)
|
||||
70
server/libreoffice/program/wizards/common/Configuration.py
Normal file
70
server/libreoffice/program/wizards/common/Configuration.py
Normal file
@@ -0,0 +1,70 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import uno
|
||||
import traceback
|
||||
|
||||
class Configuration(object):
|
||||
'''This class gives access to the OO configuration api.'''
|
||||
|
||||
@classmethod
|
||||
def getConfigurationRoot(self, xmsf, sPath, updateable):
|
||||
oConfigProvider = xmsf.createInstance(
|
||||
"com.sun.star.configuration.ConfigurationProvider")
|
||||
args = []
|
||||
|
||||
aPathArgument = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
aPathArgument.Name = "nodepath"
|
||||
aPathArgument.Value = sPath
|
||||
|
||||
args.append(aPathArgument)
|
||||
|
||||
if updateable:
|
||||
sView = "com.sun.star.configuration.ConfigurationUpdateAccess"
|
||||
else:
|
||||
sView = "com.sun.star.configuration.ConfigurationAccess"
|
||||
|
||||
return oConfigProvider.createInstanceWithArguments(sView, tuple(args))
|
||||
|
||||
@classmethod
|
||||
def getProductName(self, xMSF):
|
||||
try:
|
||||
oProdNameAccess = self.getConfigurationRoot(xMSF, "org.openoffice.Setup/Product", False);
|
||||
return oProdNameAccess.getByName("ooName")
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return "Unknown"
|
||||
|
||||
@classmethod
|
||||
def getNode(self, name, parent):
|
||||
return parent.getByName(name)
|
||||
|
||||
@classmethod
|
||||
def commit(self, configView):
|
||||
configView.commitChanges()
|
||||
|
||||
@classmethod
|
||||
def getInt(self, name, parent):
|
||||
o = getNode(name, parent)
|
||||
if (com.sun.star.uno.AnyConverter.isVoid(o)):
|
||||
return 0
|
||||
return com.sun.star.uno.AnyConverter.toInt(o)
|
||||
|
||||
@classmethod
|
||||
def set(self, value, name, parent):
|
||||
parent.setHierarchicalPropertyValue(name, value)
|
||||
96
server/libreoffice/program/wizards/common/Desktop.py
Normal file
96
server/libreoffice/program/wizards/common/Desktop.py
Normal file
@@ -0,0 +1,96 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import uno
|
||||
import traceback
|
||||
|
||||
from com.sun.star.frame.FrameSearchFlag import ALL
|
||||
from com.sun.star.util import URL
|
||||
from com.sun.star.i18n.KParseTokens import ANY_LETTER_OR_NUMBER, ASC_UNDERSCORE
|
||||
|
||||
class Desktop(object):
|
||||
|
||||
@classmethod
|
||||
def getDesktop(self, xMSF):
|
||||
xDesktop = None
|
||||
if xMSF is not None:
|
||||
try:
|
||||
xDesktop = xMSF.createInstance( "com.sun.star.frame.Desktop")
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
else:
|
||||
print ("Can't create a desktop. null pointer !")
|
||||
return xDesktop
|
||||
|
||||
@classmethod
|
||||
def getActiveFrame(self, xMSF):
|
||||
xDesktop = self.getDesktop(xMSF)
|
||||
return xDesktop.getActiveFrame()
|
||||
|
||||
@classmethod
|
||||
def getDispatcher(self, xMSF, xFrame, _stargetframe, oURL):
|
||||
try:
|
||||
xDispatch = xFrame.queryDispatch(oURL, _stargetframe, ALL)
|
||||
return xDispatch
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def connect(self, connectStr):
|
||||
localContext = uno.getComponentContext()
|
||||
resolver = localContext.ServiceManager.createInstanceWithContext(
|
||||
"com.sun.star.bridge.UnoUrlResolver", localContext)
|
||||
ctx = resolver.resolve( connectStr )
|
||||
orb = ctx.ServiceManager
|
||||
return orb
|
||||
|
||||
@classmethod
|
||||
def getIncrementSuffix(self, xElementContainer, sElementName):
|
||||
bElementexists = True
|
||||
i = 1
|
||||
sIncSuffix = ""
|
||||
BaseName = sElementName
|
||||
while bElementexists:
|
||||
try:
|
||||
bElementexists = xElementContainer.hasByName(sElementName)
|
||||
except:
|
||||
bElementexists = xElementContainer.hasByHierarchicalName(
|
||||
sElementName)
|
||||
if bElementexists:
|
||||
i += 1
|
||||
sElementName = BaseName + str(i)
|
||||
|
||||
if i > 1:
|
||||
sIncSuffix = str(i)
|
||||
|
||||
return sIncSuffix
|
||||
|
||||
'''
|
||||
Checks if the passed Element Name already exists in the ElementContainer.
|
||||
If yes it appends a suffix to make it unique
|
||||
@param xElementContainer
|
||||
@param sElementName
|
||||
@return a unique Name ready to be added to the container.
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def getUniqueName(self, xElementContainer, sElementName):
|
||||
sIncSuffix = self.getIncrementSuffix(xElementContainer, sElementName)
|
||||
return sElementName + sIncSuffix
|
||||
|
||||
226
server/libreoffice/program/wizards/common/FileAccess.py
Normal file
226
server/libreoffice/program/wizards/common/FileAccess.py
Normal file
@@ -0,0 +1,226 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import traceback
|
||||
|
||||
from os import sep as FileSeparator
|
||||
|
||||
'''
|
||||
This class delivers static convenience methods
|
||||
to use with ucb SimpleFileAccess service.
|
||||
You can also instantiate the class, to encapsulate
|
||||
some functionality of SimpleFileAccess. The instance
|
||||
keeps a reference to an XSimpleFileAccess and an
|
||||
XFileIdentifierConverter, saves the permanent
|
||||
overhead of querying for those interfaces, and delivers
|
||||
convenience methods for using them.
|
||||
These Convenience methods include mainly Exception-handling.
|
||||
'''
|
||||
|
||||
class FileAccess(object):
|
||||
|
||||
def __init__(self, xmsf):
|
||||
#get the file identifier converter
|
||||
self.filenameConverter = xmsf.createInstance(
|
||||
"com.sun.star.ucb.FileContentProvider")
|
||||
self.xInterface = xmsf.createInstance(
|
||||
"com.sun.star.ucb.SimpleFileAccess")
|
||||
|
||||
@classmethod
|
||||
def deleteLastSlashfromUrl(self, _sPath):
|
||||
if _sPath.endswith("/"):
|
||||
return _sPath[:-1]
|
||||
else:
|
||||
return _sPath
|
||||
|
||||
'''
|
||||
Further information on arguments value see in OO Developer Guide,
|
||||
chapter 6.2.7
|
||||
@param xMSF
|
||||
@param sPath
|
||||
@param xSimpleFileAccess
|
||||
@return the respective path of the office application.
|
||||
A probable following "/" at the end is trimmed.
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def getOfficePath(self, xMSF, sPath, xSimpleFileAccess):
|
||||
try:
|
||||
ResultPath = ""
|
||||
xInterface = xMSF.createInstance("com.sun.star.util.PathSettings")
|
||||
ResultPath = str(getattr(xInterface, sPath))
|
||||
ResultPath = self.deleteLastSlashfromUrl(ResultPath)
|
||||
return ResultPath
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return ""
|
||||
|
||||
@classmethod
|
||||
def getFolderTitles(self, xMSF, FilterName, FolderName, resDict=None):
|
||||
#Returns and ordered dict containing the template's name and path
|
||||
|
||||
locLayoutFiles = []
|
||||
try:
|
||||
xDocInterface = xMSF.createInstance(
|
||||
"com.sun.star.document.DocumentProperties")
|
||||
xInterface = xMSF.createInstance(
|
||||
"com.sun.star.ucb.SimpleFileAccess")
|
||||
nameList = xInterface.getFolderContents(FolderName, False)
|
||||
if FilterName is None or FilterName == "":
|
||||
FilterName = None
|
||||
else:
|
||||
FilterName += "-"
|
||||
|
||||
locLayoutDict = {}
|
||||
for i in nameList:
|
||||
fileName = self.getFilename(i)
|
||||
if FilterName is None or fileName.startswith(FilterName):
|
||||
xDocInterface.loadFromMedium(i, tuple())
|
||||
if resDict is None:
|
||||
title = xDocInterface.Title
|
||||
else:
|
||||
if xDocInterface.Title in resDict:
|
||||
# localise string at runtime
|
||||
title = resDict[xDocInterface.Title]
|
||||
else:
|
||||
title = xDocInterface.Title
|
||||
locLayoutDict[title] = i
|
||||
|
||||
#sort the dictionary and create a list containing the
|
||||
#keys list and the values list
|
||||
keysList = sorted(locLayoutDict.keys())
|
||||
valuesList= []
|
||||
for i in keysList:
|
||||
valuesList.append(locLayoutDict[i])
|
||||
locLayoutFiles.append(keysList)
|
||||
locLayoutFiles.append(valuesList)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return locLayoutFiles
|
||||
|
||||
@classmethod
|
||||
def getTitle(self, xMSF, _sFile):
|
||||
sTitle = ""
|
||||
try:
|
||||
xDocInterface = xMSF.createInstance(
|
||||
"com.sun.star.document.DocumentProperties")
|
||||
noArgs = []
|
||||
xDocInterface.loadFromMedium(_sFile, noArgs)
|
||||
sTitle = xDocInterface.getTitle()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return sTitle
|
||||
|
||||
def getPath(self, parentURL, childURL):
|
||||
string = ""
|
||||
if childURL is not None and childURL != "":
|
||||
string = "/" + childURL
|
||||
return self.filenameConverter.getSystemPathFromFileURL(
|
||||
parentURL + string)
|
||||
|
||||
def copy(self, source, target):
|
||||
try:
|
||||
self.xInterface.copy(source, target)
|
||||
return True
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
def exists(self, filename, default):
|
||||
try:
|
||||
return self.xInterface.exists(filename)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return default
|
||||
|
||||
def delete(self, filename):
|
||||
try:
|
||||
self.xInterface.kill(filename)
|
||||
return True
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
# lists the files in a given directory
|
||||
# @param dir
|
||||
# @param includeFolders
|
||||
# @return
|
||||
def listFiles(self, folder, includeFolders):
|
||||
try:
|
||||
return self.xInterface.getFolderContents(folder, includeFolders)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return [""]
|
||||
|
||||
def getSize(self, url):
|
||||
try:
|
||||
return self.xInterface.getSize(url)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return -1
|
||||
|
||||
def getURL(self, parentURL, childPath):
|
||||
if len(childPath) > 0 and childPath[0] == "/":
|
||||
path = parentURL + childPath
|
||||
else:
|
||||
path = parentURL + "/" + childPath
|
||||
return path
|
||||
|
||||
@classmethod
|
||||
def getFilename(self, path, pathSeparator = "/"):
|
||||
return path.split(pathSeparator)[-1]
|
||||
|
||||
'''
|
||||
if the path points to file, gives the directory in which the file is.
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def getParentDir(self, url):
|
||||
while url[-1] == "/":
|
||||
url = url[:-1]
|
||||
return url[:url.rfind("/")]
|
||||
|
||||
@classmethod
|
||||
def connectURLs(self, urlFolder, urlFilename):
|
||||
stringFolder = ""
|
||||
stringFileName = urlFilename
|
||||
if not urlFolder.endswith("/"):
|
||||
stringFolder = "/"
|
||||
if urlFilename.startswith("/"):
|
||||
stringFileName = urlFilename[1:]
|
||||
return urlFolder + stringFolder + stringFileName
|
||||
|
||||
# @param filename
|
||||
# @return the extension of the given filename.
|
||||
@classmethod
|
||||
def getExtension(self, filename):
|
||||
p = filename.find(".")
|
||||
if (p == -1):
|
||||
return ""
|
||||
else:
|
||||
while (True):
|
||||
filename = filename[(p+1):]
|
||||
p = filename.find(".")
|
||||
if (p == -1):
|
||||
break
|
||||
return filename
|
||||
|
||||
@classmethod
|
||||
def filename(self, name, ext, i):
|
||||
return name + ("" if (i == 0) else str(i)) + ("" if (ext == "") else ("." + ext))
|
||||
1028
server/libreoffice/program/wizards/common/HelpIds.py
Normal file
1028
server/libreoffice/program/wizards/common/HelpIds.py
Normal file
File diff suppressed because it is too large
Load Diff
28
server/libreoffice/program/wizards/common/IRenderer.py
Normal file
28
server/libreoffice/program/wizards/common/IRenderer.py
Normal file
@@ -0,0 +1,28 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
|
||||
from abc import abstractmethod
|
||||
|
||||
# A General interface which gives a string
|
||||
# that represents the rendered argument object.
|
||||
# Can be used to reference resources, internationalizartion
|
||||
# a.s.o
|
||||
class IRenderer:
|
||||
|
||||
@abstractmethod
|
||||
def render(object):
|
||||
pass
|
||||
35
server/libreoffice/program/wizards/common/ListModel.py
Normal file
35
server/libreoffice/program/wizards/common/ListModel.py
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
from abc import abstractmethod
|
||||
|
||||
class ListModel(object):
|
||||
|
||||
@abstractmethod
|
||||
def getSize(self):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def getElementAt(self, arg0):
|
||||
pass
|
||||
|
||||
def addListDataListener(self, listener):
|
||||
pass
|
||||
|
||||
def removeListDataListener(self, listener):
|
||||
pass
|
||||
@@ -0,0 +1,37 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
class NoValidPathException(Exception):
|
||||
|
||||
def __init__(self, xMSF, _sText):
|
||||
super(NoValidPathException,self).__init__(_sText)
|
||||
# TODO: NEVER open a dialog in an exception
|
||||
from .SystemDialog import SystemDialog
|
||||
if xMSF:
|
||||
import sys, os
|
||||
|
||||
# imp is deprecated since Python v.3.4
|
||||
if sys.version_info >= (3,3):
|
||||
from importlib.machinery import SourceFileLoader
|
||||
SourceFileLoader('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc')).load_module()
|
||||
else:
|
||||
import imp
|
||||
imp.load_source('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc'))
|
||||
|
||||
import strings
|
||||
SystemDialog.showErrorBox(xMSF, strings.RID_COMMON_START_21) #OfficePathnotavailable
|
||||
|
||||
86
server/libreoffice/program/wizards/common/NumberFormatter.py
Normal file
86
server/libreoffice/program/wizards/common/NumberFormatter.py
Normal file
@@ -0,0 +1,86 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import traceback
|
||||
from com.sun.star.lang import Locale
|
||||
|
||||
class NumberFormatter(object):
|
||||
|
||||
def __init__(self, _xNumberFormatsSupplier, _aLocale, _xMSF=None):
|
||||
self.iDateFormatKey = -1
|
||||
self.iDateTimeFormatKey = -1
|
||||
self.iNumberFormatKey = -1
|
||||
self.iTextFormatKey = -1
|
||||
self.iTimeFormatKey = -1
|
||||
self.iLogicalFormatKey = -1
|
||||
self.bNullDateCorrectionIsDefined = False
|
||||
self.aLocale = _aLocale
|
||||
if _xMSF is not None:
|
||||
self.xNumberFormatter = _xMSF.createInstance(
|
||||
"com.sun.star.util.NumberFormatter")
|
||||
self.xNumberFormats = _xNumberFormatsSupplier.NumberFormats
|
||||
self.xNumberFormatSettings = \
|
||||
_xNumberFormatsSupplier.NumberFormatSettings
|
||||
self.xNumberFormatter.attachNumberFormatsSupplier(
|
||||
_xNumberFormatsSupplier)
|
||||
|
||||
'''
|
||||
@param _xMSF
|
||||
@param _xNumberFormatsSupplier
|
||||
@return
|
||||
@throws Exception
|
||||
@deprecated
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def createNumberFormatter(self, _xMSF, _xNumberFormatsSupplier):
|
||||
oNumberFormatter = _xMSF.createInstance(
|
||||
"com.sun.star.util.NumberFormatter")
|
||||
oNumberFormatter.attachNumberFormatsSupplier(_xNumberFormatsSupplier)
|
||||
return oNumberFormatter
|
||||
|
||||
'''
|
||||
gives a key to pass to a NumberFormat object. <br/>
|
||||
example: <br/>
|
||||
<pre>
|
||||
XNumberFormatsSupplier nsf =
|
||||
(XNumberFormatsSupplier)UnoRuntime.queryInterface(...,document)
|
||||
int key = Desktop.getNumberFormatterKey(
|
||||
nsf, ...star.i18n.NumberFormatIndex.DATE...)
|
||||
XNumberFormatter nf = Desktop.createNumberFormatter(xmsf, nsf);
|
||||
nf.convertNumberToString( key, 1972 );
|
||||
</pre>
|
||||
@param numberFormatsSupplier
|
||||
@param type - a constant out of i18n.NumberFormatIndex enumeration.
|
||||
@return a key to use with a util.NumberFormat instance.
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def getNumberFormatterKey(self, numberFormatsSupplier, Type):
|
||||
return numberFormatsSupplier.NumberFormats.getFormatIndex(
|
||||
Type, Locale())
|
||||
|
||||
def convertNumberToString(self, _nkey, _dblValue, _xNumberFormatter=None):
|
||||
if _xNumberFormatter is None:
|
||||
return self.xNumberFormatter.convertNumberToString(
|
||||
_nkey, _dblValue)
|
||||
else:
|
||||
return _xNumberFormatter.convertNumberToString(_nkey, _dblValue)
|
||||
|
||||
def convertStringToNumber(self, _nkey, _sString):
|
||||
return self.xNumberFormatter.convertStringToNumber(_nkey, _sString)
|
||||
|
||||
62
server/libreoffice/program/wizards/common/Properties.py
Normal file
62
server/libreoffice/program/wizards/common/Properties.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from com.sun.star.beans import PropertyValue
|
||||
|
||||
'''
|
||||
Simplifies handling Arrays of PropertyValue.
|
||||
To make a use of this class, instantiate it, and call
|
||||
the put(propName,propValue) method.
|
||||
caution: propName should always be a String.
|
||||
When finished, call the getProperties() method to get an array of the set properties.
|
||||
'''
|
||||
|
||||
class Properties(dict):
|
||||
|
||||
@classmethod
|
||||
def getPropertyValue(self, props, propName):
|
||||
for i in props:
|
||||
if propName == i.Name:
|
||||
return i.Value
|
||||
|
||||
raise AttributeError ("Property '" + propName + "' not found.")
|
||||
|
||||
@classmethod
|
||||
def hasPropertyValue(self, props, propName):
|
||||
for i in props:
|
||||
if propName == i.Name:
|
||||
return True
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def getProperties(self, _map):
|
||||
pv = []
|
||||
for k,v in _map.items():
|
||||
pv.append(self.createProperty(k, v))
|
||||
return pv
|
||||
|
||||
@classmethod
|
||||
def createProperty(self, name, value, handle=None):
|
||||
pv = PropertyValue()
|
||||
pv.Name = name
|
||||
pv.Value = value
|
||||
if handle is not None:
|
||||
pv.Handle = handle
|
||||
return pv
|
||||
|
||||
def getProperties1(self):
|
||||
return self.getProperties(self)
|
||||
34
server/libreoffice/program/wizards/common/PropertyNames.py
Normal file
34
server/libreoffice/program/wizards/common/PropertyNames.py
Normal file
@@ -0,0 +1,34 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
class PropertyNames:
|
||||
PROPERTY_ENABLED = "Enabled"
|
||||
PROPERTY_HEIGHT = "Height"
|
||||
PROPERTY_HELPURL = "HelpURL"
|
||||
PROPERTY_POSITION_X = "PositionX"
|
||||
PROPERTY_POSITION_Y = "PositionY"
|
||||
PROPERTY_LABEL = "Label"
|
||||
PROPERTY_MULTILINE = "MultiLine"
|
||||
PROPERTY_NAME = "Name"
|
||||
PROPERTY_STEP = "Step"
|
||||
PROPERTY_WIDTH = "Width"
|
||||
PROPERTY_TABINDEX = "TabIndex"
|
||||
PROPERTY_STATE = "State"
|
||||
PROPERTY_IMAGEURL = "ImageURL"
|
||||
PROPERTY_TITLE = "Title"
|
||||
PROPERTY_MOVEABLE = "Moveable"
|
||||
PROPERTY_CLOSEABLE = "Closeable"
|
||||
180
server/libreoffice/program/wizards/common/SystemDialog.py
Normal file
180
server/libreoffice/program/wizards/common/SystemDialog.py
Normal file
@@ -0,0 +1,180 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import traceback
|
||||
from .Desktop import Desktop
|
||||
|
||||
from com.sun.star.ui.dialogs.TemplateDescription import \
|
||||
FILESAVE_AUTOEXTENSION, FILEOPEN_SIMPLE
|
||||
from com.sun.star.ui.dialogs.ExtendedFilePickerElementIds import \
|
||||
CHECKBOX_AUTOEXTENSION
|
||||
from com.sun.star.awt import WindowDescriptor
|
||||
from com.sun.star.awt.WindowClass import MODALTOP
|
||||
from com.sun.star.lang import IllegalArgumentException
|
||||
from com.sun.star.awt.VclWindowPeerAttribute import OK
|
||||
|
||||
class SystemDialog(object):
|
||||
|
||||
def __init__(self, xMSF, ServiceName, Type):
|
||||
try:
|
||||
self.xMSF = xMSF
|
||||
self.systemDialog = xMSF.createInstance(ServiceName)
|
||||
self.xStringSubstitution = self.createStringSubstitution(xMSF)
|
||||
|
||||
# Add a name textbox to the filepicker
|
||||
if self.systemDialog is not None:
|
||||
if (hasattr(self.systemDialog, "initialize")):
|
||||
self.systemDialog.initialize((Type,))
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
@classmethod
|
||||
def createStoreDialog(self, xmsf):
|
||||
return SystemDialog(
|
||||
xmsf, "com.sun.star.ui.dialogs.FilePicker",
|
||||
FILESAVE_AUTOEXTENSION)
|
||||
|
||||
def subst(self, path):
|
||||
try:
|
||||
s = self.xStringSubstitution.substituteVariables(path, False)
|
||||
return s
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return path
|
||||
|
||||
def callStoreDialog(self, displayDir, defaultName, sDocuType=None):
|
||||
if sDocuType is not None:
|
||||
self.addFilterToDialog(defaultName[-3:], sDocuType, True)
|
||||
|
||||
self.sStorePath = None
|
||||
try:
|
||||
self.systemDialog.setValue(CHECKBOX_AUTOEXTENSION, 0, True)
|
||||
self.systemDialog.setDefaultName(defaultName)
|
||||
self.systemDialog.setDisplayDirectory(self.subst(displayDir))
|
||||
if self.execute(self.systemDialog):
|
||||
sPathList = self.systemDialog.getFiles()
|
||||
self.sStorePath = sPathList[0]
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return self.sStorePath
|
||||
|
||||
def execute(self, execDialog):
|
||||
return execDialog.execute() == 1
|
||||
|
||||
def addFilterToDialog(self, sExtension, filterName, setToDefault):
|
||||
try:
|
||||
#get the localized filtername
|
||||
uiName = self.getFilterUIName(filterName)
|
||||
pattern = "*." + sExtension
|
||||
#add the filter
|
||||
self.addFilter(uiName, pattern, setToDefault)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def addFilter(self, uiName, pattern, setToDefault):
|
||||
try:
|
||||
self.systemDialog.appendFilter(uiName, pattern)
|
||||
if setToDefault:
|
||||
self.systemDialog.setCurrentFilter(uiName)
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
'''
|
||||
note the result should go through conversion of the product name.
|
||||
@param filterName
|
||||
@return the UI localized name of the given filter name.
|
||||
'''
|
||||
|
||||
def getFilterUIName(self, filterName):
|
||||
try:
|
||||
oFactory = self.xMSF.createInstance(
|
||||
"com.sun.star.document.FilterFactory")
|
||||
oObject = oFactory.getByName(filterName)
|
||||
xPropertyValue = list(oObject)
|
||||
for i in xPropertyValue:
|
||||
if i is not None and i.Name == "UIName":
|
||||
return str(i.Value).replace("%productname%", "LibreOffice")
|
||||
|
||||
raise Exception(
|
||||
"UIName property not found for Filter " + filterName);
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def showErrorBox(self, xMSF, sErrorMessage, AddTag=None, AddString=None):
|
||||
sErrorMessage = sErrorMessage.replace("%PRODUCTNAME", "LibreOffice" )
|
||||
sErrorMessage = sErrorMessage.replace(str(13), "<BR>")
|
||||
if AddTag and AddString:
|
||||
sErrorMessage = sErrorMessage.replace( AddString, AddTag)
|
||||
return self.showMessageBox(xMSF, "ErrorBox", OK, sErrorMessage)
|
||||
|
||||
'''
|
||||
example:
|
||||
(xMSF, "ErrorBox", com.sun.star.awt.VclWindowPeerAttribute.OK, "message")
|
||||
|
||||
@param windowServiceName one of the following strings:
|
||||
"ErrorBox", "WarningBox", "MessBox", "InfoBox", "QueryBox".
|
||||
There are other values possible, look
|
||||
under src/toolkit/source/awt/vcltoolkit.cxx
|
||||
@param windowAttribute see com.sun.star.awt.VclWindowPeerAttribute
|
||||
@return 0 = cancel, 1 = ok, 2 = yes, 3 = no(I'm not sure here)
|
||||
other values check for yourself ;-)
|
||||
'''
|
||||
@classmethod
|
||||
def showMessageBox(self, xMSF, windowServiceName, windowAttribute,
|
||||
MessageText, peer=None):
|
||||
|
||||
if MessageText is None:
|
||||
return 0
|
||||
|
||||
iMessage = 0
|
||||
try:
|
||||
# If the peer is null we try to get one from the desktop...
|
||||
if peer is None:
|
||||
xFrame = Desktop.getActiveFrame(xMSF)
|
||||
peer = xFrame.getComponentWindow()
|
||||
|
||||
xToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit")
|
||||
oDescriptor = WindowDescriptor()
|
||||
oDescriptor.WindowServiceName = windowServiceName
|
||||
oDescriptor.Parent = peer
|
||||
oDescriptor.Type = MODALTOP
|
||||
oDescriptor.WindowAttributes = windowAttribute
|
||||
xMsgPeer = xToolkit.createWindow(oDescriptor)
|
||||
xMsgPeer.MessageText = MessageText
|
||||
iMessage = xMsgPeer.execute()
|
||||
xMsgPeer.dispose()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return iMessage
|
||||
|
||||
@classmethod
|
||||
def createStringSubstitution(self, xMSF):
|
||||
xPathSubst = None
|
||||
try:
|
||||
xPathSubst = xMSF.createInstance(
|
||||
"com.sun.star.util.PathSubstitution")
|
||||
return xPathSubst
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return None
|
||||
148
server/libreoffice/program/wizards/common/UCB.py
Normal file
148
server/libreoffice/program/wizards/common/UCB.py
Normal file
@@ -0,0 +1,148 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
|
||||
import uno
|
||||
import traceback
|
||||
|
||||
from abc import abstractmethod
|
||||
|
||||
from ..common.FileAccess import FileAccess
|
||||
|
||||
from com.sun.star.beans import Property
|
||||
|
||||
from com.sun.star.ucb import Command
|
||||
from com.sun.star.ucb import GlobalTransferCommandArgument
|
||||
from com.sun.star.ucb.NameClash import OVERWRITE
|
||||
from com.sun.star.ucb import OpenCommandArgument2
|
||||
from com.sun.star.ucb.OpenMode import ALL
|
||||
from com.sun.star.ucb.TransferCommandOperation import COPY
|
||||
|
||||
|
||||
# This class is used to copy the content of a folder to
|
||||
# another folder.
|
||||
# There is an inconsistency with argument order.
|
||||
# It should be always: dir,filename.
|
||||
class UCB(object):
|
||||
|
||||
ucb = None
|
||||
fa = None
|
||||
xmsf = None
|
||||
|
||||
def __init__(self, xmsf):
|
||||
self.ucb = xmsf.createInstanceWithArguments("com.sun.star.ucb.UniversalContentBroker", ())
|
||||
self.fa = FileAccess(xmsf)
|
||||
self.xmsf = xmsf
|
||||
|
||||
def delete(self, filename):
|
||||
# System.out.println("UCB.delete(" + filename)
|
||||
self.executeCommand(self.getContent(filename),"delete", True)
|
||||
|
||||
def copy(self, sourceDir, targetDir):
|
||||
self.copy1(sourceDir,targetDir, None)
|
||||
|
||||
def copy1(self, sourceDir, targetDir, verifier):
|
||||
files = self.listFiles(sourceDir, verifier)
|
||||
for i in range(len(files)):
|
||||
self.copy2(sourceDir, files[i], targetDir, "")
|
||||
|
||||
def copy2(self, sourceDir, filename, targetDir, targetName):
|
||||
if (not self.fa.exists(targetDir, True)):
|
||||
self.fa.xInterface.createFolder(targetDir)
|
||||
self.executeCommand(self.ucb, "globalTransfer", self.copyArg(sourceDir, filename, targetDir, targetName))
|
||||
|
||||
# target name can be PropertyNames.EMPTY_STRING, in which case the name stays lige the source name
|
||||
# @param sourceDir
|
||||
# @param sourceFilename
|
||||
# @param targetDir
|
||||
# @param targetFilename
|
||||
# @return
|
||||
def copyArg(self, sourceDir, sourceFilename, targetDir, targetFilename):
|
||||
aArg = GlobalTransferCommandArgument()
|
||||
aArg.Operation = COPY
|
||||
aArg.SourceURL = self.fa.getURL(sourceDir, sourceFilename)
|
||||
aArg.TargetURL = targetDir
|
||||
aArg.NewTitle = targetFilename
|
||||
# fail, if object with same name exists in target folder
|
||||
aArg.NameClash = OVERWRITE
|
||||
return aArg
|
||||
|
||||
def executeCommand(self, xContent, aCommandName, aArgument):
|
||||
aCommand = Command()
|
||||
aCommand.Name = aCommandName
|
||||
aCommand.Handle = -1 # not available
|
||||
aCommand.Argument = aArgument
|
||||
return xContent.execute(aCommand, 0, None)
|
||||
|
||||
def listFiles(self, path, verifier):
|
||||
xContent = self.getContent(path)
|
||||
|
||||
aArg = OpenCommandArgument2()
|
||||
aArg.Mode = ALL
|
||||
aArg.Priority = 32768
|
||||
|
||||
# Fill info for the properties wanted.
|
||||
aArg.Properties = (Property(),)
|
||||
|
||||
aArg.Properties[0].Name = "Title"
|
||||
aArg.Properties[0].Handle = -1
|
||||
|
||||
xSet = self.executeCommand(xContent, "open", aArg)
|
||||
|
||||
xResultSet = xSet.getStaticResultSet()
|
||||
|
||||
files = []
|
||||
|
||||
if (xResultSet.first()):
|
||||
# obtain XContentAccess interface for child content access and XRow for properties
|
||||
while (True):
|
||||
# Obtain URL of child.
|
||||
if (hasattr(xResultSet, "queryContentIdentifierString")):
|
||||
aId = xResultSet.queryContentIdentifierString()
|
||||
aTitle = FileAccess.getFilename(aId)
|
||||
elif (hasattr(xResultSet, "getString")):
|
||||
# First column: Title (column numbers are 1-based!)
|
||||
aTitle = xResultSet.getString(1)
|
||||
else:
|
||||
aTitle = ""
|
||||
#if (len(aTitle) == 0 and xResultSet.wasNull()):
|
||||
if (len(aTitle) == 0):
|
||||
# ignore
|
||||
pass
|
||||
else:
|
||||
files.append(aTitle)
|
||||
if (not xResultSet.next()):
|
||||
break
|
||||
# next child
|
||||
if (verifier is not None):
|
||||
for i in range(len(files)):
|
||||
if (not verifier.verify(files[i])):
|
||||
files.pop(i) # FIXME !!! dangerous
|
||||
return files
|
||||
|
||||
def getContent(self, path):
|
||||
try:
|
||||
ident = self.ucb.createContentIdentifier(path)
|
||||
return self.ucb.queryContent(ident)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
class Verifier:
|
||||
@abstractmethod
|
||||
def verify(object):
|
||||
pass
|
||||
|
||||
318
server/libreoffice/program/wizards/common/strings.hrc
Normal file
318
server/libreoffice/program/wizards/common/strings.hrc
Normal file
@@ -0,0 +1,318 @@
|
||||
# -*- tab-width: 4; indent-tabs-mode: nil; py-indent-offset: 4 -*-
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
|
||||
import gettext
|
||||
import uno
|
||||
import unohelper
|
||||
|
||||
localeDir = "$BRAND_BASE_DIR/$BRAND_SHARE_RESOURCE_SUBDIR"
|
||||
|
||||
gettext.bindtextdomain('wiz', unohelper.fileUrlToSystemPath(
|
||||
uno.getComponentContext().getByName(
|
||||
"/singletons/com.sun.star.util.theMacroExpander").expandMacros(localeDir)))
|
||||
|
||||
gettext.textdomain('wiz')
|
||||
|
||||
def NC_(context, string):
|
||||
# Contextual strings are stored with the concatenation of
|
||||
# the context, an EOT byte, and the original string, instead of the original string
|
||||
# see https://www.gnu.org/software/gettext/manual/html_node/MO-Files.html
|
||||
ret = gettext.gettext(context + chr(4) + string)
|
||||
if ret.find(chr(4)) == -1:
|
||||
return ret
|
||||
return string
|
||||
|
||||
# common section
|
||||
RID_COMMON_START_0 = NC_("RID_COMMON_START_0", "The directory '%1' could not be created.<BR>There may not be enough space left on your hard disk.")
|
||||
RID_COMMON_START_1 = NC_("RID_COMMON_START_1", "The text document could not be created.<BR>Please check if the module 'PRODUCTNAME Writer' is installed.")
|
||||
RID_COMMON_START_2 = NC_("RID_COMMON_START_2", "The spreadsheet could not be created.<BR>Please check if the module 'PRODUCTNAME Calc' is installed.")
|
||||
RID_COMMON_START_3 = NC_("RID_COMMON_START_3", "The presentation could not be created.<BR>Please check if the module 'PRODUCTNAME Impress' is installed.")
|
||||
RID_COMMON_START_4 = NC_("RID_COMMON_START_4", "The drawing could not be created.<BR>Please check if the module 'PRODUCTNAME Draw' is installed.")
|
||||
RID_COMMON_START_5 = NC_("RID_COMMON_START_5", "The formula could not be created.<BR>Please check if the module 'PRODUCTNAME Math' is installed.")
|
||||
RID_COMMON_START_6 = NC_("RID_COMMON_START_6", "The files required could not be found.<BR>Please start the %PRODUCTNAME Setup and choose 'Repair'.")
|
||||
RID_COMMON_START_7 = NC_("RID_COMMON_START_7", "The file '<PATH>' already exists.<BR><BR>Would you like to overwrite the existing file?")
|
||||
RID_COMMON_START_8 = NC_("RID_COMMON_START_8", "Yes")
|
||||
RID_COMMON_START_9 = NC_("RID_COMMON_START_9", "Yes to All")
|
||||
RID_COMMON_START_10 = NC_("RID_COMMON_START_10", "No")
|
||||
RID_COMMON_START_11 = NC_("RID_COMMON_START_11", "Cancel")
|
||||
RID_COMMON_START_12 = NC_("RID_COMMON_START_12", "~Finish")
|
||||
RID_COMMON_START_13 = NC_("RID_COMMON_START_13", "< ~Back")
|
||||
RID_COMMON_START_14 = NC_("RID_COMMON_START_14", "~Next >")
|
||||
RID_COMMON_START_15 = NC_("RID_COMMON_START_15", "~Help")
|
||||
RID_COMMON_START_16 = NC_("RID_COMMON_START_16", "Steps")
|
||||
RID_COMMON_START_17 = NC_("RID_COMMON_START_17", "Close")
|
||||
RID_COMMON_START_18 = NC_("RID_COMMON_START_18", "OK")
|
||||
RID_COMMON_START_19 = NC_("RID_COMMON_START_19", "The file already exists. Do you want to overwrite it?")
|
||||
RID_COMMON_START_20 = NC_("RID_COMMON_START_20", "Template created via <wizard_name> on <current_date>.")
|
||||
RID_COMMON_START_21 = NC_("RID_COMMON_START_21", "The wizard could not be run, because important files were not found.\nUnder 'Tools - Options - %PRODUCTNAME - Paths' click the 'Default' button to reset the paths to the original default settings.\nThen run the wizard again.")
|
||||
|
||||
# LETTER WIZARD RESOURCES
|
||||
RID_LETTERWIZARDDIALOG_START_1 = NC_("RID_LETTERWIZARDDIALOG_START_1", "Letter Wizard")
|
||||
RID_LETTERWIZARDDIALOG_START_2 = NC_("RID_LETTERWIZARDDIALOG_START_2", "Label9")
|
||||
RID_LETTERWIZARDDIALOG_START_3 = NC_("RID_LETTERWIZARDDIALOG_START_3", "~Business Letter")
|
||||
RID_LETTERWIZARDDIALOG_START_4 = NC_("RID_LETTERWIZARDDIALOG_START_4", "~Formal Personal Letter")
|
||||
RID_LETTERWIZARDDIALOG_START_5 = NC_("RID_LETTERWIZARDDIALOG_START_5", "~Personal Letter")
|
||||
RID_LETTERWIZARDDIALOG_START_6 = NC_("RID_LETTERWIZARDDIALOG_START_6", "~Use letterhead paper with pre-printed elements")
|
||||
RID_LETTERWIZARDDIALOG_START_7 = NC_("RID_LETTERWIZARDDIALOG_START_7", "~Logo")
|
||||
RID_LETTERWIZARDDIALOG_START_8 = NC_("RID_LETTERWIZARDDIALOG_START_8", "Return address")
|
||||
RID_LETTERWIZARDDIALOG_START_9 = NC_("RID_LETTERWIZARDDIALOG_START_9", "~Include footer")
|
||||
RID_LETTERWIZARDDIALOG_START_10 = NC_("RID_LETTERWIZARDDIALOG_START_10", "~Return address in envelope window")
|
||||
RID_LETTERWIZARDDIALOG_START_11 = NC_("RID_LETTERWIZARDDIALOG_START_11", "~Logo")
|
||||
RID_LETTERWIZARDDIALOG_START_12 = NC_("RID_LETTERWIZARDDIALOG_START_12", "~Return address in envelope window")
|
||||
RID_LETTERWIZARDDIALOG_START_13 = NC_("RID_LETTERWIZARDDIALOG_START_13", "Letter signs")
|
||||
RID_LETTERWIZARDDIALOG_START_14 = NC_("RID_LETTERWIZARDDIALOG_START_14", "S~ubject line")
|
||||
RID_LETTERWIZARDDIALOG_START_15 = NC_("RID_LETTERWIZARDDIALOG_START_15", "Salu~tation")
|
||||
RID_LETTERWIZARDDIALOG_START_16 = NC_("RID_LETTERWIZARDDIALOG_START_16", "Fold ~marks")
|
||||
RID_LETTERWIZARDDIALOG_START_17 = NC_("RID_LETTERWIZARDDIALOG_START_17", "~Complimentary close")
|
||||
RID_LETTERWIZARDDIALOG_START_18 = NC_("RID_LETTERWIZARDDIALOG_START_18", "~Footer")
|
||||
RID_LETTERWIZARDDIALOG_START_19 = NC_("RID_LETTERWIZARDDIALOG_START_19", "~Use user data for return address")
|
||||
RID_LETTERWIZARDDIALOG_START_20 = NC_("RID_LETTERWIZARDDIALOG_START_20", "~New sender address:")
|
||||
RID_LETTERWIZARDDIALOG_START_21 = NC_("RID_LETTERWIZARDDIALOG_START_21", "Use placeholders for ~recipient's address")
|
||||
RID_LETTERWIZARDDIALOG_START_22 = NC_("RID_LETTERWIZARDDIALOG_START_22", "Use address database for ~mail merge")
|
||||
RID_LETTERWIZARDDIALOG_START_23 = NC_("RID_LETTERWIZARDDIALOG_START_23", "Include ~only on second and following pages")
|
||||
RID_LETTERWIZARDDIALOG_START_24 = NC_("RID_LETTERWIZARDDIALOG_START_24", "~Include page number")
|
||||
RID_LETTERWIZARDDIALOG_START_25 = NC_("RID_LETTERWIZARDDIALOG_START_25", "Letter Template")
|
||||
RID_LETTERWIZARDDIALOG_START_26 = NC_("RID_LETTERWIZARDDIALOG_START_26", "Create a ~letter from this template")
|
||||
RID_LETTERWIZARDDIALOG_START_27 = NC_("RID_LETTERWIZARDDIALOG_START_27", "Make ~manual changes to this letter template")
|
||||
RID_LETTERWIZARDDIALOG_START_28 = NC_("RID_LETTERWIZARDDIALOG_START_28", "Page design")
|
||||
RID_LETTERWIZARDDIALOG_START_29 = NC_("RID_LETTERWIZARDDIALOG_START_29", "Page design")
|
||||
RID_LETTERWIZARDDIALOG_START_30 = NC_("RID_LETTERWIZARDDIALOG_START_30", "Page design")
|
||||
RID_LETTERWIZARDDIALOG_START_31 = NC_("RID_LETTERWIZARDDIALOG_START_31", "This wizard helps you to create a letter template. You can then use the template as the basis for writing letters as often as desired.")
|
||||
RID_LETTERWIZARDDIALOG_START_32 = NC_("RID_LETTERWIZARDDIALOG_START_32", "~Height:")
|
||||
RID_LETTERWIZARDDIALOG_START_33 = NC_("RID_LETTERWIZARDDIALOG_START_33", "~Width:")
|
||||
RID_LETTERWIZARDDIALOG_START_34 = NC_("RID_LETTERWIZARDDIALOG_START_34", "S~pacing to left margin:")
|
||||
RID_LETTERWIZARDDIALOG_START_35 = NC_("RID_LETTERWIZARDDIALOG_START_35", "Spacing ~to top margin:")
|
||||
RID_LETTERWIZARDDIALOG_START_36 = NC_("RID_LETTERWIZARDDIALOG_START_36", "Height:")
|
||||
RID_LETTERWIZARDDIALOG_START_37 = NC_("RID_LETTERWIZARDDIALOG_START_37", "Width:")
|
||||
RID_LETTERWIZARDDIALOG_START_38 = NC_("RID_LETTERWIZARDDIALOG_START_38", "S~pacing to left margin:")
|
||||
RID_LETTERWIZARDDIALOG_START_39 = NC_("RID_LETTERWIZARDDIALOG_START_39", "Spacing ~to top margin:")
|
||||
RID_LETTERWIZARDDIALOG_START_40 = NC_("RID_LETTERWIZARDDIALOG_START_40", "Height:")
|
||||
RID_LETTERWIZARDDIALOG_START_42 = NC_("RID_LETTERWIZARDDIALOG_START_42", "Sender's address")
|
||||
RID_LETTERWIZARDDIALOG_START_43 = NC_("RID_LETTERWIZARDDIALOG_START_43", "Name:")
|
||||
RID_LETTERWIZARDDIALOG_START_44 = NC_("RID_LETTERWIZARDDIALOG_START_44", "Street:")
|
||||
RID_LETTERWIZARDDIALOG_START_45 = NC_("RID_LETTERWIZARDDIALOG_START_45", "ZIP code/State/City:")
|
||||
RID_LETTERWIZARDDIALOG_START_46 = NC_("RID_LETTERWIZARDDIALOG_START_46", "Recipient's address")
|
||||
RID_LETTERWIZARDDIALOG_START_47 = NC_("RID_LETTERWIZARDDIALOG_START_47", "Footer")
|
||||
RID_LETTERWIZARDDIALOG_START_48 = NC_("RID_LETTERWIZARDDIALOG_START_48", "This wizard creates a letter template which enables you to create multiple letters with the same layout and settings.")
|
||||
RID_LETTERWIZARDDIALOG_START_49 = NC_("RID_LETTERWIZARDDIALOG_START_49", "To create another new letter out of the template just navigate to the template location and double-click it.")
|
||||
RID_LETTERWIZARDDIALOG_START_50 = NC_("RID_LETTERWIZARDDIALOG_START_50", "Template name:")
|
||||
RID_LETTERWIZARDDIALOG_START_51 = NC_("RID_LETTERWIZARDDIALOG_START_51", "Location and file name:")
|
||||
RID_LETTERWIZARDDIALOG_START_52 = NC_("RID_LETTERWIZARDDIALOG_START_52", "How do you want to proceed?")
|
||||
RID_LETTERWIZARDDIALOG_START_53 = NC_("RID_LETTERWIZARDDIALOG_START_53", "Please choose the type of letter and page design")
|
||||
RID_LETTERWIZARDDIALOG_START_54 = NC_("RID_LETTERWIZARDDIALOG_START_54", "Select the items to be printed")
|
||||
RID_LETTERWIZARDDIALOG_START_55 = NC_("RID_LETTERWIZARDDIALOG_START_55", "Specify items already on your letterhead paper")
|
||||
RID_LETTERWIZARDDIALOG_START_56 = NC_("RID_LETTERWIZARDDIALOG_START_56", "Specify the sender and recipient information")
|
||||
RID_LETTERWIZARDDIALOG_START_57 = NC_("RID_LETTERWIZARDDIALOG_START_57", "Fill in the information you would like in the footer")
|
||||
RID_LETTERWIZARDDIALOG_START_58 = NC_("RID_LETTERWIZARDDIALOG_START_58", "Please specify last settings")
|
||||
RID_LETTERWIZARDDIALOG_START_59 = NC_("RID_LETTERWIZARDDIALOG_START_59", "Subject:")
|
||||
RID_LETTERWIZARDDIALOG_START_60 = NC_("RID_LETTERWIZARDDIALOG_START_60", "Elegant")
|
||||
RID_LETTERWIZARDDIALOG_START_61 = NC_("RID_LETTERWIZARDDIALOG_START_61", "Modern")
|
||||
RID_LETTERWIZARDDIALOG_START_62 = NC_("RID_LETTERWIZARDDIALOG_START_62", "Office")
|
||||
RID_LETTERWIZARDDIALOG_START_63 = NC_("RID_LETTERWIZARDDIALOG_START_63", "Bottle")
|
||||
RID_LETTERWIZARDDIALOG_START_64 = NC_("RID_LETTERWIZARDDIALOG_START_64", "Mail")
|
||||
RID_LETTERWIZARDDIALOG_START_65 = NC_("RID_LETTERWIZARDDIALOG_START_65", "Marine")
|
||||
RID_LETTERWIZARDDIALOG_START_66 = NC_("RID_LETTERWIZARDDIALOG_START_66", "Red Line")
|
||||
|
||||
# Letter Wizard Greeting Start
|
||||
RID_LETTERWIZARDSALUTATION_START_1 = NC_("RID_LETTERWIZARDSALUTATION_START_1", "To Whom it May Concern")
|
||||
RID_LETTERWIZARDSALUTATION_START_2 = NC_("RID_LETTERWIZARDSALUTATION_START_2", "Dear Sir or Madam")
|
||||
RID_LETTERWIZARDSALUTATION_START_3 = NC_("RID_LETTERWIZARDSALUTATION_START_3", "Hello")
|
||||
|
||||
# Letter Wizard Greeting Start
|
||||
RID_LETTERWIZARDGREETING_START_1 = NC_("RID_LETTERWIZARDGREETING_START_1", "Sincerely")
|
||||
RID_LETTERWIZARDGREETING_START_2 = NC_("RID_LETTERWIZARDGREETING_START_2", "Best regards")
|
||||
RID_LETTERWIZARDGREETING_START_3 = NC_("RID_LETTERWIZARDGREETING_START_3", "Cheers")
|
||||
|
||||
# Letter Wizard Roadmap Start
|
||||
RID_LETTERWIZARDROADMAP_START_1 = NC_("RID_LETTERWIZARDROADMAP_START_1", "Page Design")
|
||||
RID_LETTERWIZARDROADMAP_START_2 = NC_("RID_LETTERWIZARDROADMAP_START_2", "Letterhead Layout")
|
||||
RID_LETTERWIZARDROADMAP_START_3 = NC_("RID_LETTERWIZARDROADMAP_START_3", "Printed Items")
|
||||
RID_LETTERWIZARDROADMAP_START_4 = NC_("RID_LETTERWIZARDROADMAP_START_4", "Recipient and Sender")
|
||||
RID_LETTERWIZARDROADMAP_START_5 = NC_("RID_LETTERWIZARDROADMAP_START_5", "Footer")
|
||||
RID_LETTERWIZARDROADMAP_START_6 = NC_("RID_LETTERWIZARDROADMAP_START_6", "Name and Location")
|
||||
|
||||
# FAX WIZARD RESOURCES
|
||||
RID_FAXWIZARDDIALOG_START_1 = NC_("RID_FAXWIZARDDIALOG_START_1", "Fax Wizard")
|
||||
RID_FAXWIZARDDIALOG_START_2 = NC_("RID_FAXWIZARDDIALOG_START_2", "Label9")
|
||||
RID_FAXWIZARDDIALOG_START_3 = NC_("RID_FAXWIZARDDIALOG_START_3", "~Business Fax")
|
||||
RID_FAXWIZARDDIALOG_START_4 = NC_("RID_FAXWIZARDDIALOG_START_4", "~Personal Fax")
|
||||
RID_FAXWIZARDDIALOG_START_5 = NC_("RID_FAXWIZARDDIALOG_START_5", "~Logo")
|
||||
RID_FAXWIZARDDIALOG_START_6 = NC_("RID_FAXWIZARDDIALOG_START_6", "S~ubject line")
|
||||
RID_FAXWIZARDDIALOG_START_7 = NC_("RID_FAXWIZARDDIALOG_START_7", "S~alutation")
|
||||
RID_FAXWIZARDDIALOG_START_8 = NC_("RID_FAXWIZARDDIALOG_START_8", "~Complimentary close")
|
||||
RID_FAXWIZARDDIALOG_START_9 = NC_("RID_FAXWIZARDDIALOG_START_9", "~Footer")
|
||||
RID_FAXWIZARDDIALOG_START_10 = NC_("RID_FAXWIZARDDIALOG_START_10", "~Use user data for return address")
|
||||
RID_FAXWIZARDDIALOG_START_11 = NC_("RID_FAXWIZARDDIALOG_START_11", "~New return address")
|
||||
RID_FAXWIZARDDIALOG_START_12 = NC_("RID_FAXWIZARDDIALOG_START_12", "My Fax Template")
|
||||
RID_FAXWIZARDDIALOG_START_13 = NC_("RID_FAXWIZARDDIALOG_START_13", "Create a ~fax from this template")
|
||||
RID_FAXWIZARDDIALOG_START_14 = NC_("RID_FAXWIZARDDIALOG_START_14", "Make ~manual changes to this fax template")
|
||||
RID_FAXWIZARDDIALOG_START_15 = NC_("RID_FAXWIZARDDIALOG_START_15", "Page design")
|
||||
RID_FAXWIZARDDIALOG_START_16 = NC_("RID_FAXWIZARDDIALOG_START_16", "Page design")
|
||||
RID_FAXWIZARDDIALOG_START_17 = NC_("RID_FAXWIZARDDIALOG_START_17", "This wizard helps you to create a fax template. The template can then be used to create a fax whenever needed.")
|
||||
RID_FAXWIZARDDIALOG_START_18 = NC_("RID_FAXWIZARDDIALOG_START_18", "Return address")
|
||||
RID_FAXWIZARDDIALOG_START_19 = NC_("RID_FAXWIZARDDIALOG_START_19", "Name:")
|
||||
RID_FAXWIZARDDIALOG_START_20 = NC_("RID_FAXWIZARDDIALOG_START_20", "Street:")
|
||||
RID_FAXWIZARDDIALOG_START_21 = NC_("RID_FAXWIZARDDIALOG_START_21", "ZIP code/State/City:")
|
||||
RID_FAXWIZARDDIALOG_START_22 = NC_("RID_FAXWIZARDDIALOG_START_22", "Footer")
|
||||
RID_FAXWIZARDDIALOG_START_23 = NC_("RID_FAXWIZARDDIALOG_START_23", "This wizard creates a fax template which enables you to create multiple faxes with the same layout and settings.")
|
||||
RID_FAXWIZARDDIALOG_START_24 = NC_("RID_FAXWIZARDDIALOG_START_24", "To create another new fax out of the template, go to the location where you saved the template and double-click the file.")
|
||||
RID_FAXWIZARDDIALOG_START_25 = NC_("RID_FAXWIZARDDIALOG_START_25", "Template name:")
|
||||
RID_FAXWIZARDDIALOG_START_26 = NC_("RID_FAXWIZARDDIALOG_START_26", "Location and file name:")
|
||||
RID_FAXWIZARDDIALOG_START_27 = NC_("RID_FAXWIZARDDIALOG_START_27", "What do you want to do next?")
|
||||
RID_FAXWIZARDDIALOG_START_28 = NC_("RID_FAXWIZARDDIALOG_START_28", "Choose the type of fax and a page design")
|
||||
RID_FAXWIZARDDIALOG_START_29 = NC_("RID_FAXWIZARDDIALOG_START_29", "Select items to include in the fax template")
|
||||
RID_FAXWIZARDDIALOG_START_30 = NC_("RID_FAXWIZARDDIALOG_START_30", "Specify sender and recipient information")
|
||||
RID_FAXWIZARDDIALOG_START_31 = NC_("RID_FAXWIZARDDIALOG_START_31", "Enter text for the footer")
|
||||
RID_FAXWIZARDDIALOG_START_32 = NC_("RID_FAXWIZARDDIALOG_START_32", "Choose a name and save the template")
|
||||
RID_FAXWIZARDDIALOG_START_33 = NC_("RID_FAXWIZARDDIALOG_START_33", "Include ~only on second and following pages")
|
||||
RID_FAXWIZARDDIALOG_START_34 = NC_("RID_FAXWIZARDDIALOG_START_34", "~Include page number")
|
||||
RID_FAXWIZARDDIALOG_START_35 = NC_("RID_FAXWIZARDDIALOG_START_35", "~Date")
|
||||
RID_FAXWIZARDDIALOG_START_36 = NC_("RID_FAXWIZARDDIALOG_START_36", "~Type of message")
|
||||
RID_FAXWIZARDDIALOG_START_37 = NC_("RID_FAXWIZARDDIALOG_START_37", "Fax Number:")
|
||||
RID_FAXWIZARDDIALOG_START_38 = NC_("RID_FAXWIZARDDIALOG_START_38", "Use placeholders for ~recipient's address")
|
||||
RID_FAXWIZARDDIALOG_START_39 = NC_("RID_FAXWIZARDDIALOG_START_39", "Use address database for ~mail merge")
|
||||
RID_FAXWIZARDDIALOG_START_40 = NC_("RID_FAXWIZARDDIALOG_START_40", "~New return address")
|
||||
RID_FAXWIZARDDIALOG_START_41 = NC_("RID_FAXWIZARDDIALOG_START_41", "To:")
|
||||
RID_FAXWIZARDDIALOG_START_42 = NC_("RID_FAXWIZARDDIALOG_START_42", "From:")
|
||||
RID_FAXWIZARDDIALOG_START_43 = NC_("RID_FAXWIZARDDIALOG_START_43", "Fax:")
|
||||
RID_FAXWIZARDDIALOG_START_44 = NC_("RID_FAXWIZARDDIALOG_START_44", "Tel:")
|
||||
RID_FAXWIZARDDIALOG_START_45 = NC_("RID_FAXWIZARDDIALOG_START_45", "Email:")
|
||||
RID_FAXWIZARDDIALOG_START_46 = NC_("RID_FAXWIZARDDIALOG_START_46", "This template consists of")
|
||||
RID_FAXWIZARDDIALOG_START_47 = NC_("RID_FAXWIZARDDIALOG_START_47", "page")
|
||||
RID_FAXWIZARDDIALOG_START_48 = NC_("RID_FAXWIZARDDIALOG_START_48", "Please inform us if transmission errors occur.")
|
||||
RID_FAXWIZARDDIALOG_START_49 = NC_("RID_FAXWIZARDDIALOG_START_49", "Bottle")
|
||||
RID_FAXWIZARDDIALOG_START_50 = NC_("RID_FAXWIZARDDIALOG_START_50", "Lines")
|
||||
RID_FAXWIZARDDIALOG_START_51 = NC_("RID_FAXWIZARDDIALOG_START_51", "Marine")
|
||||
RID_FAXWIZARDDIALOG_START_52 = NC_("RID_FAXWIZARDDIALOG_START_52", "Classic Fax")
|
||||
RID_FAXWIZARDDIALOG_START_53 = NC_("RID_FAXWIZARDDIALOG_START_53", "Classic Fax from Private")
|
||||
RID_FAXWIZARDDIALOG_START_54 = NC_("RID_FAXWIZARDDIALOG_START_54", "Modern Fax")
|
||||
RID_FAXWIZARDDIALOG_START_55 = NC_("RID_FAXWIZARDDIALOG_START_55", "Modern Fax from Private")
|
||||
RID_FAXWIZARDDIALOG_START_56 = NC_("RID_FAXWIZARDDIALOG_START_56", "Fax")
|
||||
|
||||
# Fax Wizard Communication Start
|
||||
RID_FAXWIZARDCOMMUNICATION_START_1 = NC_("RID_FAXWIZARDCOMMUNICATION_START_1", "Important Information!")
|
||||
RID_FAXWIZARDCOMMUNICATION_START_2 = NC_("RID_FAXWIZARDCOMMUNICATION_START_2", "For your information")
|
||||
RID_FAXWIZARDCOMMUNICATION_START_3 = NC_("RID_FAXWIZARDCOMMUNICATION_START_3", "News!")
|
||||
|
||||
# Fax Wizard Salutation Start
|
||||
RID_FAXWIZARDSALUTATION_START_1 = NC_("RID_FAXWIZARDSALUTATION_START_1", "To whom it may concern,")
|
||||
RID_FAXWIZARDSALUTATION_START_2 = NC_("RID_FAXWIZARDSALUTATION_START_2", "Dear Sir or Madam,")
|
||||
RID_FAXWIZARDSALUTATION_START_3 = NC_("RID_FAXWIZARDSALUTATION_START_3", "Hello,")
|
||||
RID_FAXWIZARDSALUTATION_START_4 = NC_("RID_FAXWIZARDSALUTATION_START_4", "Hi,")
|
||||
|
||||
# Fax Wizard Greeting Start
|
||||
RID_FAXWIZARDGREETING_START_1 = NC_("RID_FAXWIZARDGREETING_START_1", "Sincerely")
|
||||
RID_FAXWIZARDGREETING_START_2 = NC_("RID_FAXWIZARDGREETING_START_2", "Yours faithfully")
|
||||
RID_FAXWIZARDGREETING_START_3 = NC_("RID_FAXWIZARDGREETING_START_3", "Regards")
|
||||
RID_FAXWIZARDGREETING_START_4 = NC_("RID_FAXWIZARDGREETING_START_4", "Love")
|
||||
|
||||
# Fax Wizard Roadmap Start
|
||||
RID_FAXWIZARDROADMAP_START_1 = NC_("RID_FAXWIZARDROADMAP_START_1", "Page Design")
|
||||
RID_FAXWIZARDROADMAP_START_2 = NC_("RID_FAXWIZARDROADMAP_START_2", "Items to Include")
|
||||
RID_FAXWIZARDROADMAP_START_3 = NC_("RID_FAXWIZARDROADMAP_START_3", "Sender and Recipient")
|
||||
RID_FAXWIZARDROADMAP_START_4 = NC_("RID_FAXWIZARDROADMAP_START_4", "Footer")
|
||||
RID_FAXWIZARDROADMAP_START_5 = NC_("RID_FAXWIZARDROADMAP_START_5", "Name and Location")
|
||||
|
||||
# AGENDA WIZARD RESOURCES
|
||||
RID_AGENDAWIZARDDIALOG_START_1 = NC_("RID_AGENDAWIZARDDIALOG_START_1", "Agenda Wizard")
|
||||
RID_AGENDAWIZARDDIALOG_START_2 = NC_("RID_AGENDAWIZARDDIALOG_START_2", "Make ~manual changes to this agenda template")
|
||||
RID_AGENDAWIZARDDIALOG_START_3 = NC_("RID_AGENDAWIZARDDIALOG_START_3", "Template name:")
|
||||
RID_AGENDAWIZARDDIALOG_START_4 = NC_("RID_AGENDAWIZARDDIALOG_START_4", "Location and file name:")
|
||||
RID_AGENDAWIZARDDIALOG_START_5 = NC_("RID_AGENDAWIZARDDIALOG_START_5", "What do you want to do next?")
|
||||
RID_AGENDAWIZARDDIALOG_START_6 = NC_("RID_AGENDAWIZARDDIALOG_START_6", "Please choose the page design for the agenda")
|
||||
RID_AGENDAWIZARDDIALOG_START_7 = NC_("RID_AGENDAWIZARDDIALOG_START_7", "Please select the headings you wish to include in your agenda template")
|
||||
RID_AGENDAWIZARDDIALOG_START_8 = NC_("RID_AGENDAWIZARDDIALOG_START_8", "Please enter general information for the event")
|
||||
RID_AGENDAWIZARDDIALOG_START_9 = NC_("RID_AGENDAWIZARDDIALOG_START_9", "Please specify items for the agenda")
|
||||
RID_AGENDAWIZARDDIALOG_START_10 = NC_("RID_AGENDAWIZARDDIALOG_START_10", "Please select the names you wish to include in your agenda template")
|
||||
RID_AGENDAWIZARDDIALOG_START_11 = NC_("RID_AGENDAWIZARDDIALOG_START_11", "Choose a name and save the template")
|
||||
RID_AGENDAWIZARDDIALOG_START_12 = NC_("RID_AGENDAWIZARDDIALOG_START_12", "Include form for recording minutes")
|
||||
RID_AGENDAWIZARDDIALOG_START_13 = NC_("RID_AGENDAWIZARDDIALOG_START_13", "This wizard helps you to create an agenda template. The template can then be used to create an agenda whenever needed.")
|
||||
RID_AGENDAWIZARDDIALOG_START_14 = NC_("RID_AGENDAWIZARDDIALOG_START_14", "Time:")
|
||||
RID_AGENDAWIZARDDIALOG_START_15 = NC_("RID_AGENDAWIZARDDIALOG_START_15", "Name:")
|
||||
RID_AGENDAWIZARDDIALOG_START_16 = NC_("RID_AGENDAWIZARDDIALOG_START_16", "Location:")
|
||||
RID_AGENDAWIZARDDIALOG_START_17 = NC_("RID_AGENDAWIZARDDIALOG_START_17", "Placeholders will be used in empty fields. You can replace placeholders with text later.")
|
||||
RID_AGENDAWIZARDDIALOG_START_18 = NC_("RID_AGENDAWIZARDDIALOG_START_18", "...")
|
||||
RID_AGENDAWIZARDDIALOG_START_19 = NC_("RID_AGENDAWIZARDDIALOG_START_19", "Create an ~agenda from this template")
|
||||
RID_AGENDAWIZARDDIALOG_START_20 = NC_("RID_AGENDAWIZARDDIALOG_START_20", "To create a new agenda out of the template, go to the location where you saved the template and double-click the file.")
|
||||
RID_AGENDAWIZARDDIALOG_START_21 = NC_("RID_AGENDAWIZARDDIALOG_START_21", "Agenda item")
|
||||
RID_AGENDAWIZARDDIALOG_START_22 = NC_("RID_AGENDAWIZARDDIALOG_START_22", "Responsible")
|
||||
RID_AGENDAWIZARDDIALOG_START_23 = NC_("RID_AGENDAWIZARDDIALOG_START_23", "Duration")
|
||||
RID_AGENDAWIZARDDIALOG_START_24 = NC_("RID_AGENDAWIZARDDIALOG_START_24", "Meeting called by")
|
||||
RID_AGENDAWIZARDDIALOG_START_25 = NC_("RID_AGENDAWIZARDDIALOG_START_25", "Chairperson")
|
||||
RID_AGENDAWIZARDDIALOG_START_26 = NC_("RID_AGENDAWIZARDDIALOG_START_26", "Minute keeper")
|
||||
RID_AGENDAWIZARDDIALOG_START_27 = NC_("RID_AGENDAWIZARDDIALOG_START_27", "Moderator")
|
||||
RID_AGENDAWIZARDDIALOG_START_28 = NC_("RID_AGENDAWIZARDDIALOG_START_28", "Attendees")
|
||||
RID_AGENDAWIZARDDIALOG_START_29 = NC_("RID_AGENDAWIZARDDIALOG_START_29", "Observers")
|
||||
RID_AGENDAWIZARDDIALOG_START_30 = NC_("RID_AGENDAWIZARDDIALOG_START_30", "Facility personnel")
|
||||
RID_AGENDAWIZARDDIALOG_START_31 = NC_("RID_AGENDAWIZARDDIALOG_START_31", "The agenda template will include placeholders for the names of the selected people. When creating an agenda from the template, you can replace these placeholder with the appropriate names.")
|
||||
RID_AGENDAWIZARDDIALOG_START_32 = NC_("RID_AGENDAWIZARDDIALOG_START_32", "Type of meeting")
|
||||
RID_AGENDAWIZARDDIALOG_START_33 = NC_("RID_AGENDAWIZARDDIALOG_START_33", "Please read")
|
||||
RID_AGENDAWIZARDDIALOG_START_34 = NC_("RID_AGENDAWIZARDDIALOG_START_34", "Please bring")
|
||||
RID_AGENDAWIZARDDIALOG_START_35 = NC_("RID_AGENDAWIZARDDIALOG_START_35", "Notes")
|
||||
RID_AGENDAWIZARDDIALOG_START_36 = NC_("RID_AGENDAWIZARDDIALOG_START_36", "The agenda template will include placeholders for the selected items.")
|
||||
RID_AGENDAWIZARDDIALOG_START_38 = NC_("RID_AGENDAWIZARDDIALOG_START_38", "Date:")
|
||||
RID_AGENDAWIZARDDIALOG_START_39 = NC_("RID_AGENDAWIZARDDIALOG_START_39", "This wizard creates an agenda template which enables you to create multiple agendas with the same layout and settings.")
|
||||
RID_AGENDAWIZARDDIALOG_START_40 = NC_("RID_AGENDAWIZARDDIALOG_START_40", "Page design:")
|
||||
RID_AGENDAWIZARDDIALOG_START_41 = NC_("RID_AGENDAWIZARDDIALOG_START_41", "myAgendaTemplate.stw")
|
||||
RID_AGENDAWIZARDDIALOG_START_42 = NC_("RID_AGENDAWIZARDDIALOG_START_42", "My Agenda Template")
|
||||
RID_AGENDAWIZARDDIALOG_START_43 = NC_("RID_AGENDAWIZARDDIALOG_START_43", "An error occurred while saving the agenda template.")
|
||||
RID_AGENDAWIZARDDIALOG_START_44 = NC_("RID_AGENDAWIZARDDIALOG_START_44", "Name")
|
||||
RID_AGENDAWIZARDDIALOG_START_45 = NC_("RID_AGENDAWIZARDDIALOG_START_45", "Date")
|
||||
RID_AGENDAWIZARDDIALOG_START_46 = NC_("RID_AGENDAWIZARDDIALOG_START_46", "Time")
|
||||
RID_AGENDAWIZARDDIALOG_START_47 = NC_("RID_AGENDAWIZARDDIALOG_START_47", "Location")
|
||||
RID_AGENDAWIZARDDIALOG_START_48 = NC_("RID_AGENDAWIZARDDIALOG_START_48", "Click to replace this text")
|
||||
RID_AGENDAWIZARDDIALOG_START_50 = NC_("RID_AGENDAWIZARDDIALOG_START_50", "Page Design")
|
||||
RID_AGENDAWIZARDDIALOG_START_51 = NC_("RID_AGENDAWIZARDDIALOG_START_51", "General Information")
|
||||
RID_AGENDAWIZARDDIALOG_START_52 = NC_("RID_AGENDAWIZARDDIALOG_START_52", "Headings to Include")
|
||||
RID_AGENDAWIZARDDIALOG_START_53 = NC_("RID_AGENDAWIZARDDIALOG_START_53", "Names")
|
||||
RID_AGENDAWIZARDDIALOG_START_54 = NC_("RID_AGENDAWIZARDDIALOG_START_54", "Agenda Items")
|
||||
RID_AGENDAWIZARDDIALOG_START_55 = NC_("RID_AGENDAWIZARDDIALOG_START_55", "Name and Location")
|
||||
RID_AGENDAWIZARDDIALOG_START_56 = NC_("RID_AGENDAWIZARDDIALOG_START_56", "An error occurred while opening the agenda template.")
|
||||
RID_AGENDAWIZARDDIALOG_START_57 = NC_("RID_AGENDAWIZARDDIALOG_START_57", "Type of meeting")
|
||||
RID_AGENDAWIZARDDIALOG_START_58 = NC_("RID_AGENDAWIZARDDIALOG_START_58", "Please bring")
|
||||
RID_AGENDAWIZARDDIALOG_START_59 = NC_("RID_AGENDAWIZARDDIALOG_START_59", "Please read")
|
||||
RID_AGENDAWIZARDDIALOG_START_60 = NC_("RID_AGENDAWIZARDDIALOG_START_60", "Notes")
|
||||
RID_AGENDAWIZARDDIALOG_START_61 = NC_("RID_AGENDAWIZARDDIALOG_START_61", "Meeting called by")
|
||||
RID_AGENDAWIZARDDIALOG_START_62 = NC_("RID_AGENDAWIZARDDIALOG_START_62", "Chairperson")
|
||||
RID_AGENDAWIZARDDIALOG_START_63 = NC_("RID_AGENDAWIZARDDIALOG_START_63", "Attendees")
|
||||
RID_AGENDAWIZARDDIALOG_START_64 = NC_("RID_AGENDAWIZARDDIALOG_START_64", "Minute keeper")
|
||||
RID_AGENDAWIZARDDIALOG_START_65 = NC_("RID_AGENDAWIZARDDIALOG_START_65", "Moderator")
|
||||
RID_AGENDAWIZARDDIALOG_START_66 = NC_("RID_AGENDAWIZARDDIALOG_START_66", "Observers")
|
||||
RID_AGENDAWIZARDDIALOG_START_67 = NC_("RID_AGENDAWIZARDDIALOG_START_67", "Facility personnel")
|
||||
RID_AGENDAWIZARDDIALOG_START_68 = NC_("RID_AGENDAWIZARDDIALOG_START_68", "Insert")
|
||||
RID_AGENDAWIZARDDIALOG_START_69 = NC_("RID_AGENDAWIZARDDIALOG_START_69", "Remove")
|
||||
RID_AGENDAWIZARDDIALOG_START_70 = NC_("RID_AGENDAWIZARDDIALOG_START_70", "Move up")
|
||||
RID_AGENDAWIZARDDIALOG_START_71 = NC_("RID_AGENDAWIZARDDIALOG_START_71", "Move down")
|
||||
RID_AGENDAWIZARDDIALOG_START_72 = NC_("RID_AGENDAWIZARDDIALOG_START_72", "Date:")
|
||||
RID_AGENDAWIZARDDIALOG_START_73 = NC_("RID_AGENDAWIZARDDIALOG_START_73", "Time:")
|
||||
RID_AGENDAWIZARDDIALOG_START_74 = NC_("RID_AGENDAWIZARDDIALOG_START_74", "Location:")
|
||||
RID_AGENDAWIZARDDIALOG_START_75 = NC_("RID_AGENDAWIZARDDIALOG_START_75", "Topics")
|
||||
RID_AGENDAWIZARDDIALOG_START_76 = NC_("RID_AGENDAWIZARDDIALOG_START_76", "Num.")
|
||||
RID_AGENDAWIZARDDIALOG_START_77 = NC_("RID_AGENDAWIZARDDIALOG_START_77", "Topic")
|
||||
RID_AGENDAWIZARDDIALOG_START_78 = NC_("RID_AGENDAWIZARDDIALOG_START_78", "Responsible")
|
||||
RID_AGENDAWIZARDDIALOG_START_79 = NC_("RID_AGENDAWIZARDDIALOG_START_79", "Time")
|
||||
RID_AGENDAWIZARDDIALOG_START_80 = NC_("RID_AGENDAWIZARDDIALOG_START_80", "Additional information")
|
||||
RID_AGENDAWIZARDDIALOG_START_81 = NC_("RID_AGENDAWIZARDDIALOG_START_81", "Minutes for")
|
||||
RID_AGENDAWIZARDDIALOG_START_82 = NC_("RID_AGENDAWIZARDDIALOG_START_82", "Discussion:")
|
||||
RID_AGENDAWIZARDDIALOG_START_83 = NC_("RID_AGENDAWIZARDDIALOG_START_83", "Conclusion:")
|
||||
RID_AGENDAWIZARDDIALOG_START_84 = NC_("RID_AGENDAWIZARDDIALOG_START_84", "To do:")
|
||||
RID_AGENDAWIZARDDIALOG_START_85 = NC_("RID_AGENDAWIZARDDIALOG_START_85", "Responsible party:")
|
||||
RID_AGENDAWIZARDDIALOG_START_86 = NC_("RID_AGENDAWIZARDDIALOG_START_86", "Deadline:")
|
||||
RID_AGENDAWIZARDDIALOG_START_87 = NC_("RID_AGENDAWIZARDDIALOG_START_87", "Blue")
|
||||
RID_AGENDAWIZARDDIALOG_START_88 = NC_("RID_AGENDAWIZARDDIALOG_START_88", "Classic")
|
||||
RID_AGENDAWIZARDDIALOG_START_89 = NC_("RID_AGENDAWIZARDDIALOG_START_89", "Colorful")
|
||||
RID_AGENDAWIZARDDIALOG_START_90 = NC_("RID_AGENDAWIZARDDIALOG_START_90", "Elegant")
|
||||
RID_AGENDAWIZARDDIALOG_START_91 = NC_("RID_AGENDAWIZARDDIALOG_START_91", "Green")
|
||||
RID_AGENDAWIZARDDIALOG_START_92 = NC_("RID_AGENDAWIZARDDIALOG_START_92", "Grey")
|
||||
RID_AGENDAWIZARDDIALOG_START_93 = NC_("RID_AGENDAWIZARDDIALOG_START_93", "Modern")
|
||||
RID_AGENDAWIZARDDIALOG_START_94 = NC_("RID_AGENDAWIZARDDIALOG_START_94", "Orange")
|
||||
RID_AGENDAWIZARDDIALOG_START_95 = NC_("RID_AGENDAWIZARDDIALOG_START_95", "Red")
|
||||
RID_AGENDAWIZARDDIALOG_START_96 = NC_("RID_AGENDAWIZARDDIALOG_START_96", "Simple")
|
||||
|
||||
# vim: set shiftwidth=4 softtabstop=4 expandtab:
|
||||
208
server/libreoffice/program/wizards/document/OfficeDocument.py
Normal file
208
server/libreoffice/program/wizards/document/OfficeDocument.py
Normal file
@@ -0,0 +1,208 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import uno
|
||||
import traceback
|
||||
from unohelper import systemPathToFileUrl, absolutize
|
||||
from ..common.Desktop import Desktop
|
||||
from ..common.SystemDialog import SystemDialog
|
||||
|
||||
from com.sun.star.awt import WindowDescriptor
|
||||
from com.sun.star.awt import Rectangle
|
||||
from com.sun.star.awt.WindowClass import TOP
|
||||
from com.sun.star.task import ErrorCodeIOException
|
||||
|
||||
#Window Constants
|
||||
com_sun_star_awt_WindowAttribute_BORDER \
|
||||
= uno.getConstantByName( "com.sun.star.awt.WindowAttribute.BORDER" )
|
||||
com_sun_star_awt_WindowAttribute_SIZEABLE \
|
||||
= uno.getConstantByName( "com.sun.star.awt.WindowAttribute.SIZEABLE" )
|
||||
com_sun_star_awt_WindowAttribute_MOVEABLE \
|
||||
= uno.getConstantByName( "com.sun.star.awt.WindowAttribute.MOVEABLE" )
|
||||
com_sun_star_awt_VclWindowPeerAttribute_CLIPCHILDREN \
|
||||
= uno.getConstantByName(
|
||||
"com.sun.star.awt.VclWindowPeerAttribute.CLIPCHILDREN" )
|
||||
|
||||
class OfficeDocument(object):
|
||||
'''Creates a new instance of OfficeDocument '''
|
||||
|
||||
def __init__(self, _xMSF):
|
||||
self.xMSF = _xMSF
|
||||
|
||||
@classmethod
|
||||
def attachEventCall(self, xComponent, EventName, EventType, EventURL):
|
||||
try:
|
||||
oEventProperties = list(range(2))
|
||||
oEventProperties[0] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
oEventProperties[0].Name = "EventType"
|
||||
oEventProperties[0].Value = EventType
|
||||
# "Service", "StarBasic"
|
||||
oEventProperties[1] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
oEventProperties[1].Name = "Script" #"URL";
|
||||
oEventProperties[1].Value = EventURL
|
||||
uno.invoke(xComponent.Events, "replaceByName",
|
||||
(EventName, uno.Any("[]com.sun.star.beans.PropertyValue",
|
||||
tuple(oEventProperties))))
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def dispose(self, xMSF, xComponent):
|
||||
try:
|
||||
if xComponent is not None:
|
||||
xFrame = xComponent.CurrentController.Frame
|
||||
if xComponent.isModified():
|
||||
xComponent.setModified(False)
|
||||
|
||||
Desktop.dispatchURL(xMSF, ".uno:CloseDoc", xFrame)
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
@classmethod
|
||||
def createNewFrame(self, xMSF, listener, FrameName="_blank"):
|
||||
xFrame = None
|
||||
if FrameName.lower() == "WIZARD_LIVE_PREVIEW".lower():
|
||||
xFrame = self.createNewPreviewFrame(xMSF, listener)
|
||||
else:
|
||||
xF = Desktop.getDesktop(xMSF)
|
||||
xFrame = xF.findFrame(FrameName, 0)
|
||||
if listener is not None:
|
||||
xFF = xF.getFrames()
|
||||
xFF.remove(xFrame)
|
||||
xF.addTerminateListener(listener)
|
||||
|
||||
return xFrame
|
||||
|
||||
@classmethod
|
||||
def createNewPreviewFrame(self, xMSF, listener):
|
||||
xToolkit = None
|
||||
try:
|
||||
xToolkit = xMSF.createInstance("com.sun.star.awt.Toolkit")
|
||||
except Exception:
|
||||
# TODO Auto-generated catch block
|
||||
traceback.print_exc()
|
||||
|
||||
#describe the window and its properties
|
||||
aDescriptor = WindowDescriptor()
|
||||
aDescriptor.Type = TOP
|
||||
aDescriptor.WindowServiceName = "window"
|
||||
aDescriptor.ParentIndex = -1
|
||||
aDescriptor.Parent = None
|
||||
aDescriptor.Bounds = Rectangle(10, 10, 640, 480)
|
||||
|
||||
#Set Window Attributes
|
||||
gnDefaultWindowAttributes = \
|
||||
com_sun_star_awt_WindowAttribute_BORDER + \
|
||||
com_sun_star_awt_WindowAttribute_MOVEABLE + \
|
||||
com_sun_star_awt_WindowAttribute_SIZEABLE + \
|
||||
com_sun_star_awt_VclWindowPeerAttribute_CLIPCHILDREN
|
||||
|
||||
aDescriptor.WindowAttributes = gnDefaultWindowAttributes
|
||||
#create a new blank container window
|
||||
xPeer = None
|
||||
try:
|
||||
xPeer = xToolkit.createWindow(aDescriptor)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
#define some further properties of the frame window
|
||||
#if it's needed .-)
|
||||
#xPeer->setBackground(...);
|
||||
#create new empty frame and set window on it
|
||||
xFrame = None
|
||||
try:
|
||||
xFrame = xMSF.createInstance("com.sun.star.frame.Frame")
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
xFrame.initialize(xPeer)
|
||||
#from now this frame is usable ...
|
||||
#and not part of the desktop tree.
|
||||
#You are alone with him .-)
|
||||
if listener is not None:
|
||||
Desktop.getDesktop(xMSF).addTerminateListener(listener)
|
||||
|
||||
return xFrame
|
||||
|
||||
@classmethod
|
||||
def load(self, xInterface, sURL, sFrame, xValues):
|
||||
xComponent = None
|
||||
try:
|
||||
if not sURL.startswith("file://"):
|
||||
sURL = systemPathToFileUrl(sURL)
|
||||
xComponent = xInterface.loadComponentFromURL(
|
||||
sURL, sFrame, 0, tuple(xValues))
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
return xComponent
|
||||
|
||||
@classmethod
|
||||
def store(self, xMSF, xComponent, StorePath, FilterName):
|
||||
try:
|
||||
if len(FilterName):
|
||||
oStoreProperties = list(range(2))
|
||||
oStoreProperties[0] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
oStoreProperties[0].Name = "FilterName"
|
||||
oStoreProperties[0].Value = FilterName
|
||||
oStoreProperties[1] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
oStoreProperties[1].Name = "InteractionHandler"
|
||||
oStoreProperties[1].Value = xMSF.createInstance(
|
||||
"com.sun.star.comp.uui.UUIInteractionHandler")
|
||||
else:
|
||||
oStoreProperties = list(range(0))
|
||||
|
||||
StorePath = systemPathToFileUrl(StorePath)
|
||||
sPath = StorePath[:(StorePath.rfind("/") + 1)]
|
||||
sFile = StorePath[(StorePath.rfind("/") + 1):]
|
||||
xComponent.storeToURL(
|
||||
absolutize(sPath, sFile), tuple(oStoreProperties))
|
||||
return True
|
||||
except ErrorCodeIOException:
|
||||
#Throw this exception when trying to save a file
|
||||
#which is already opened in Libreoffice
|
||||
#TODO: handle it properly
|
||||
return True
|
||||
pass
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
def close(self, xComponent):
|
||||
bState = False
|
||||
if xComponent is not None:
|
||||
try:
|
||||
xComponent.close(True)
|
||||
bState = True
|
||||
except Exception:
|
||||
print ("could not close doc")
|
||||
bState = False
|
||||
|
||||
else:
|
||||
bState = True
|
||||
|
||||
return bState
|
||||
|
||||
def showMessageBox(
|
||||
self, xMSF, windowServiceName, windowAttribute, MessageText):
|
||||
|
||||
return SystemDialog.showMessageBox(
|
||||
xMSF, windowServiceName, windowAttribute, MessageText)
|
||||
48
server/libreoffice/program/wizards/fax/CGFax.py
Normal file
48
server/libreoffice/program/wizards/fax/CGFax.py
Normal file
@@ -0,0 +1,48 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
|
||||
class CGFax(ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
|
||||
self.cp_Style = int()
|
||||
self.cp_PrintCompanyLogo = bool()
|
||||
self.cp_PrintDate = bool()
|
||||
self.cp_PrintSubjectLine = bool()
|
||||
self.cp_PrintSalutation = bool()
|
||||
self.cp_PrintCommunicationType = bool()
|
||||
self.cp_PrintGreeting = bool()
|
||||
self.cp_PrintFooter = bool()
|
||||
self.cp_CommunicationType = str()
|
||||
self.cp_Salutation = str()
|
||||
self.cp_Greeting = str()
|
||||
self.cp_SenderAddressType = int()
|
||||
self.cp_SenderCompanyName = str()
|
||||
self.cp_SenderStreet = str()
|
||||
self.cp_SenderPostCode = str()
|
||||
self.cp_SenderState = str()
|
||||
self.cp_SenderCity = str()
|
||||
self.cp_SenderFax = str()
|
||||
self.cp_ReceiverAddressType = int()
|
||||
self.cp_Footer = str()
|
||||
self.cp_FooterOnlySecondPage = bool()
|
||||
self.cp_FooterPageNumbers = bool()
|
||||
self.cp_CreationType = int()
|
||||
self.cp_TemplateName = str()
|
||||
self.cp_TemplatePath = str()
|
||||
27
server/libreoffice/program/wizards/fax/CGFaxWizard.py
Normal file
27
server/libreoffice/program/wizards/fax/CGFaxWizard.py
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from .CGFax import CGFax
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
|
||||
class CGFaxWizard(ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
self.cp_FaxType = int()
|
||||
self.cp_BusinessFax = CGFax()
|
||||
self.cp_PrivateFax = CGFax()
|
||||
|
||||
75
server/libreoffice/program/wizards/fax/CallWizard.py
Normal file
75
server/libreoffice/program/wizards/fax/CallWizard.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import unohelper
|
||||
import traceback
|
||||
|
||||
from .FaxWizardDialogImpl import FaxWizardDialogImpl, Desktop
|
||||
|
||||
from com.sun.star.lang import XServiceInfo
|
||||
from com.sun.star.task import XJobExecutor
|
||||
|
||||
# pythonloader looks for a static g_ImplementationHelper variable
|
||||
g_ImplementationHelper = unohelper.ImplementationHelper()
|
||||
g_implName = "com.sun.star.wizards.fax.CallWizard"
|
||||
|
||||
# implement a UNO component by deriving from the standard unohelper.Base class
|
||||
# and from the interface(s) you want to implement.
|
||||
class CallWizard(unohelper.Base, XJobExecutor, XServiceInfo):
|
||||
def __init__(self, ctx):
|
||||
# store the component context for later use
|
||||
self.ctx = ctx
|
||||
|
||||
def trigger(self, args):
|
||||
try:
|
||||
fw = FaxWizardDialogImpl(self.ctx.ServiceManager)
|
||||
fw.startWizard(self.ctx.ServiceManager)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
@classmethod
|
||||
def callRemote(self):
|
||||
#Call the wizard remotely(see README)
|
||||
try:
|
||||
ConnectStr = \
|
||||
"uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"
|
||||
xLocMSF = Desktop.connect(ConnectStr)
|
||||
lw = FaxWizardDialogImpl(xLocMSF)
|
||||
lw.startWizard(xLocMSF)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
def getImplementationName(self):
|
||||
return g_implName
|
||||
|
||||
def supportsService(self, ServiceName):
|
||||
return g_ImplementationHelper.supportsService(g_implName, ServiceName)
|
||||
|
||||
def getSupportedServiceNames(self):
|
||||
return g_ImplementationHelper.getSupportedServiceNames(g_implName)
|
||||
|
||||
g_ImplementationHelper.addImplementation( \
|
||||
CallWizard, # UNO object class
|
||||
g_implName, # implementation name
|
||||
("com.sun.star.task.Job",),) # list of implemented services
|
||||
# (the only service)
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab:
|
||||
142
server/libreoffice/program/wizards/fax/FaxDocument.py
Normal file
142
server/libreoffice/program/wizards/fax/FaxDocument.py
Normal file
@@ -0,0 +1,142 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..text.TextDocument import TextDocument, traceback, \
|
||||
TextFieldHandler, Configuration
|
||||
from ..text.TextSectionHandler import TextSectionHandler
|
||||
|
||||
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK
|
||||
from com.sun.star.style.ParagraphAdjust import CENTER
|
||||
from com.sun.star.text.PageNumberType import CURRENT
|
||||
from com.sun.star.style.NumberingType import ARABIC
|
||||
|
||||
class FaxDocument(TextDocument):
|
||||
|
||||
def __init__(self, xMSF, listener):
|
||||
super(FaxDocument,self).__init__(xMSF, listener, None,
|
||||
"WIZARD_LIVE_PREVIEW")
|
||||
self.keepLogoFrame = True
|
||||
self.keepTypeFrame = True
|
||||
|
||||
def switchElement(self, sElement, bState):
|
||||
try:
|
||||
mySectionHandler = TextSectionHandler(self.xMSF,
|
||||
self.xTextDocument)
|
||||
oSection = \
|
||||
mySectionHandler.xTextDocument.TextSections.getByName(sElement)
|
||||
oSection.IsVisible = bState
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def updateDateFields(self):
|
||||
FH = TextFieldHandler(
|
||||
self.xTextDocument, self.xTextDocument)
|
||||
FH.updateDateFields()
|
||||
|
||||
def switchFooter(self, sPageStyle, bState, bPageNumber, sText):
|
||||
if self.xTextDocument is not None:
|
||||
try:
|
||||
self.xTextDocument.lockControllers()
|
||||
xPageStyleCollection = \
|
||||
self.xTextDocument.StyleFamilies.getByName("PageStyles")
|
||||
xPageStyle = xPageStyleCollection.getByName(sPageStyle)
|
||||
|
||||
if bState:
|
||||
xPageStyle.setPropertyValue("FooterIsOn", True)
|
||||
xFooterText = xPageStyle.FooterText
|
||||
xFooterText.String = sText
|
||||
|
||||
if bPageNumber:
|
||||
#Adding the Page Number
|
||||
myCursor = xFooterText.Text.createTextCursor()
|
||||
myCursor.gotoEnd(False)
|
||||
xFooterText.insertControlCharacter(myCursor,
|
||||
PARAGRAPH_BREAK, False)
|
||||
myCursor.setPropertyValue("ParaAdjust", CENTER )
|
||||
|
||||
xPageNumberField = \
|
||||
self.xTextDocument.createInstance(
|
||||
"com.sun.star.text.TextField.PageNumber")
|
||||
xPageNumberField.setPropertyValue("SubType", CURRENT)
|
||||
xPageNumberField.NumberingType = ARABIC
|
||||
xFooterText.insertTextContent(xFooterText.End,
|
||||
xPageNumberField, False)
|
||||
else:
|
||||
xPageStyle.FooterIsOn = False
|
||||
|
||||
self.xTextDocument.unlockControllers()
|
||||
except Exception:
|
||||
self.xTextDocument.lockControllers()
|
||||
traceback.print_exc()
|
||||
|
||||
def hasElement(self, sElement):
|
||||
if self.xTextDocument is not None:
|
||||
mySectionHandler = TextSectionHandler(self.xMSF,
|
||||
self.xTextDocument)
|
||||
return mySectionHandler.hasTextSectionByName(sElement)
|
||||
else:
|
||||
return False
|
||||
|
||||
def switchUserField(self, sFieldName, sNewContent, bState):
|
||||
myFieldHandler = TextFieldHandler( self.xMSF, self.xTextDocument)
|
||||
if bState:
|
||||
myFieldHandler.changeUserFieldContent(sFieldName, sNewContent)
|
||||
else:
|
||||
myFieldHandler.changeUserFieldContent(sFieldName, "")
|
||||
|
||||
def fillSenderWithUserData(self):
|
||||
try:
|
||||
myFieldHandler = TextFieldHandler(self.xTextDocument,
|
||||
self.xTextDocument)
|
||||
oUserDataAccess = Configuration.getConfigurationRoot(
|
||||
self.xMSF, "org.openoffice.UserProfile/Data", False)
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"Company", oUserDataAccess.getByName("o"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"Street", oUserDataAccess.getByName("street"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"PostCode", oUserDataAccess.getByName("postalcode"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"State", oUserDataAccess.getByName("st"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"City", oUserDataAccess.getByName("l"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"Fax", oUserDataAccess.getByName("facsimiletelephonenumber"))
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def killEmptyUserFields(self):
|
||||
myFieldHandler = TextFieldHandler(
|
||||
self.xMSF, self.xTextDocument)
|
||||
myFieldHandler.removeUserFieldByContent()
|
||||
|
||||
def killEmptyFrames(self):
|
||||
try:
|
||||
if not self.keepLogoFrame:
|
||||
xTF = self.getFrameByName("Company Logo",
|
||||
self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
if not self.keepTypeFrame:
|
||||
xTF = self.getFrameByName("Communication Type",
|
||||
self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
660
server/libreoffice/program/wizards/fax/FaxWizardDialog.py
Normal file
660
server/libreoffice/program/wizards/fax/FaxWizardDialog.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,99 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.HelpIds import HelpIds
|
||||
|
||||
HID = 41119 #enter first hid here
|
||||
HIDMAIN = 41180
|
||||
|
||||
class FaxWizardDialogConst:
|
||||
|
||||
OPTBUSINESSFAX_ITEM_CHANGED = "optBusinessFaxItemChanged"
|
||||
LSTBUSINESSSTYLE_ACTION_PERFORMED = None
|
||||
LSTBUSINESSSTYLE_ITEM_CHANGED = "lstBusinessStyleItemChanged"
|
||||
OPTPRIVATEFAX_ITEM_CHANGED = "optPrivateFaxItemChanged"
|
||||
LSTPRIVATESTYLE_ACTION_PERFORMED = None
|
||||
LSTPRIVATESTYLE_ITEM_CHANGED = "lstPrivateStyleItemChanged"
|
||||
CHKUSELOGO_ITEM_CHANGED = "chkUseLogoItemChanged"
|
||||
CHKUSEDATE_ITEM_CHANGED = "chkUseDateItemChanged"
|
||||
CHKUSECOMMUNICATIONTYPE_ITEM_CHANGED = "chkUseCommunicationItemChanged"
|
||||
LSTCOMMUNICATIONTYPE_ACTION_PERFORMED = None
|
||||
LSTCOMMUNICATIONTYPE_ITEM_CHANGED = "lstCommunicationItemChanged"
|
||||
LSTCOMMUNICATIONTYPE_TEXT_CHANGED = "lstCommunicationItemChanged"
|
||||
CHKUSESUBJECT_ITEM_CHANGED = "chkUseSubjectItemChanged"
|
||||
CHKUSESALUTATION_ITEM_CHANGED = "chkUseSalutationItemChanged"
|
||||
LSTSALUTATION_ACTION_PERFORMED = None
|
||||
LSTSALUTATION_ITEM_CHANGED = "lstSalutationItemChanged"
|
||||
LSTSALUTATION_TEXT_CHANGED = "lstSalutationItemChanged"
|
||||
CHKUSEGREETING_ITEM_CHANGED = "chkUseGreetingItemChanged"
|
||||
LSTGREETING_ACTION_PERFORMED = None
|
||||
LSTGREETING_ITEM_CHANGED = "lstGreetingItemChanged"
|
||||
LSTGREETING_TEXT_CHANGED = "lstGreetingItemChanged"
|
||||
CHKUSEFOOTER_ITEM_CHANGED = "chkUseFooterItemChanged"
|
||||
OPTSENDERPLACEHOLDER_ITEM_CHANGED = "optSenderPlaceholderItemChanged"
|
||||
OPTSENDERDEFINE_ITEM_CHANGED = "optSenderDefineItemChanged"
|
||||
TXTSENDERNAME_TEXT_CHANGED = "txtSenderNameTextChanged"
|
||||
TXTSENDERSTREET_TEXT_CHANGED = "txtSenderStreetTextChanged"
|
||||
TXTSENDERPOSTCODE_TEXT_CHANGED = "txtSenderPostCodeTextChanged"
|
||||
TXTSENDERSTATE_TEXT_CHANGED = "txtSenderStateTextChanged"
|
||||
TXTSENDERCITY_TEXT_CHANGED = "txtSenderCityTextChanged"
|
||||
TXTSENDERFAX_TEXT_CHANGED = "txtSenderFaxTextChanged"
|
||||
OPTRECEIVERPLACEHOLDER_ITEM_CHANGED = "optReceiverPlaceholderItemChanged"
|
||||
OPTRECEIVERDATABASE_ITEM_CHANGED = "optReceiverDatabaseItemChanged"
|
||||
TXTFOOTER_TEXT_CHANGED = "txtFooterTextChanged"
|
||||
CHKFOOTERNEXTPAGES_ITEM_CHANGED = "chkFooterNextPagesItemChanged"
|
||||
CHKFOOTERPAGENUMBERS_ITEM_CHANGED = "chkFooterPageNumbersItemChanged"
|
||||
TXTTEMPLATENAME_TEXT_CHANGED = "txtTemplateNameTextChanged"
|
||||
FILETEMPLATEPATH_TEXT_CHANGED = None
|
||||
OPTCREATEFAX_ITEM_CHANGED = "optCreateFromTemplateItemChanged"
|
||||
OPTMAKECHANGES_ITEM_CHANGED = "optMakeChangesItemChanged"
|
||||
|
||||
#Help IDs
|
||||
|
||||
OPTBUSINESSFAX_HID = HelpIds.getHelpIdString(HID + 1)
|
||||
LSTBUSINESSSTYLE_HID = HelpIds.getHelpIdString(HID + 2)
|
||||
OPTPRIVATEFAX_HID = HelpIds.getHelpIdString(HID + 3)
|
||||
LSTPRIVATESTYLE_HID = HelpIds.getHelpIdString(HID + 4)
|
||||
IMAGECONTROL3_HID = HelpIds.getHelpIdString(HID + 5)
|
||||
CHKUSELOGO_HID = HelpIds.getHelpIdString(HID + 6)
|
||||
CHKUSEDATE_HID = HelpIds.getHelpIdString(HID + 7)
|
||||
CHKUSECOMMUNICATIONTYPE_HID = HelpIds.getHelpIdString(HID + 8)
|
||||
LSTCOMMUNICATIONTYPE_HID = HelpIds.getHelpIdString(HID + 9)
|
||||
CHKUSESUBJECT_HID = HelpIds.getHelpIdString(HID + 10)
|
||||
CHKUSESALUTATION_HID = HelpIds.getHelpIdString(HID + 11)
|
||||
LSTSALUTATION_HID = HelpIds.getHelpIdString(HID + 12)
|
||||
CHKUSEGREETING_HID = HelpIds.getHelpIdString(HID + 13)
|
||||
LSTGREETING_HID = HelpIds.getHelpIdString(HID + 14)
|
||||
CHKUSEFOOTER_HID = HelpIds.getHelpIdString(HID + 15)
|
||||
OPTSENDERPLACEHOLDER_HID = HelpIds.getHelpIdString(HID + 16)
|
||||
OPTSENDERDEFINE_HID = HelpIds.getHelpIdString(HID + 17)
|
||||
TXTSENDERNAME_HID = HelpIds.getHelpIdString(HID + 18)
|
||||
TXTSENDERSTREET_HID = HelpIds.getHelpIdString(HID + 19)
|
||||
TXTSENDERPOSTCODE_HID = HelpIds.getHelpIdString(HID + 20)
|
||||
TXTSENDERSTATE_HID = HelpIds.getHelpIdString(HID + 21)
|
||||
TXTSENDERCITY_HID = HelpIds.getHelpIdString(HID + 22)
|
||||
TXTSENDERFAX_HID = HelpIds.getHelpIdString(HID + 23)
|
||||
OPTRECEIVERPLACEHOLDER_HID = HelpIds.getHelpIdString(HID + 24)
|
||||
OPTRECEIVERDATABASE_HID = HelpIds.getHelpIdString(HID + 25)
|
||||
TXTFOOTER_HID = HelpIds.getHelpIdString(HID + 26)
|
||||
CHKFOOTERNEXTPAGES_HID = HelpIds.getHelpIdString(HID + 27)
|
||||
CHKFOOTERPAGENUMBERS_HID = HelpIds.getHelpIdString(HID + 28)
|
||||
TXTTEMPLATENAME_HID = HelpIds.getHelpIdString(HID + 29)
|
||||
FILETEMPLATEPATH_HID = HelpIds.getHelpIdString(HID + 30)
|
||||
OPTCREATEFAX_HID = HelpIds.getHelpIdString(HID + 31)
|
||||
OPTMAKECHANGES_HID = HelpIds.getHelpIdString(HID + 32)
|
||||
IMAGECONTROL2_HID = HelpIds.getHelpIdString(HID + 33)
|
||||
631
server/libreoffice/program/wizards/fax/FaxWizardDialogImpl.py
Normal file
631
server/libreoffice/program/wizards/fax/FaxWizardDialogImpl.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,122 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
class FaxWizardDialogResources(object):
|
||||
|
||||
def __init__(self):
|
||||
import sys, os
|
||||
|
||||
# imp is deprecated since Python v.3.4
|
||||
if sys.version_info >= (3,3):
|
||||
from importlib.machinery import SourceFileLoader
|
||||
SourceFileLoader('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc')).load_module()
|
||||
else:
|
||||
import imp
|
||||
imp.load_source('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc'))
|
||||
|
||||
import strings
|
||||
|
||||
self.resFaxWizardDialog_title = strings.RID_FAXWIZARDDIALOG_START_1
|
||||
self.resoptBusinessFax_value = strings.RID_FAXWIZARDDIALOG_START_3
|
||||
self.resoptPrivateFax_value = strings.RID_FAXWIZARDDIALOG_START_4
|
||||
self.reschkUseLogo_value = strings.RID_FAXWIZARDDIALOG_START_5
|
||||
self.reschkUseSubject_value = strings.RID_FAXWIZARDDIALOG_START_6
|
||||
self.reschkUseSalutation_value = strings.RID_FAXWIZARDDIALOG_START_7
|
||||
self.reschkUseGreeting_value = strings.RID_FAXWIZARDDIALOG_START_8
|
||||
self.reschkUseFooter_value = strings.RID_FAXWIZARDDIALOG_START_9
|
||||
self.resoptSenderPlaceholder_value = strings.RID_FAXWIZARDDIALOG_START_10
|
||||
self.resoptSenderDefine_value = strings.RID_FAXWIZARDDIALOG_START_11
|
||||
self.restxtTemplateName_value = strings.RID_FAXWIZARDDIALOG_START_12
|
||||
self.resoptCreateFax_value = strings.RID_FAXWIZARDDIALOG_START_13
|
||||
self.resoptMakeChanges_value = strings.RID_FAXWIZARDDIALOG_START_14
|
||||
self.reslblBusinessStyle_value = strings.RID_FAXWIZARDDIALOG_START_15
|
||||
self.reslblPrivateStyle_value = strings.RID_FAXWIZARDDIALOG_START_16
|
||||
self.reslblIntroduction_value = strings.RID_FAXWIZARDDIALOG_START_17
|
||||
self.reslblSenderAddress_value = strings.RID_FAXWIZARDDIALOG_START_18
|
||||
self.reslblSenderName_value = strings.RID_FAXWIZARDDIALOG_START_19
|
||||
self.reslblSenderStreet_value = strings.RID_FAXWIZARDDIALOG_START_20
|
||||
self.reslblPostCodeCity_value = strings.RID_FAXWIZARDDIALOG_START_21
|
||||
self.reslblFooter_value = strings.RID_FAXWIZARDDIALOG_START_22
|
||||
self.reslblFinalExplanation1_value = strings.RID_FAXWIZARDDIALOG_START_23
|
||||
self.reslblFinalExplanation2_value = strings.RID_FAXWIZARDDIALOG_START_24
|
||||
self.reslblTemplateName_value = strings.RID_FAXWIZARDDIALOG_START_25
|
||||
self.reslblTemplatePath_value = strings.RID_FAXWIZARDDIALOG_START_26
|
||||
self.reslblProceed_value = strings.RID_FAXWIZARDDIALOG_START_27
|
||||
self.reslblTitle1_value = strings.RID_FAXWIZARDDIALOG_START_28
|
||||
self.reslblTitle3_value = strings.RID_FAXWIZARDDIALOG_START_29
|
||||
self.reslblTitle4_value = strings.RID_FAXWIZARDDIALOG_START_30
|
||||
self.reslblTitle5_value = strings.RID_FAXWIZARDDIALOG_START_31
|
||||
self.reslblTitle6_value = strings.RID_FAXWIZARDDIALOG_START_32
|
||||
self.reschkFooterNextPages_value = strings.RID_FAXWIZARDDIALOG_START_33
|
||||
self.reschkFooterPageNumbers_value = strings.RID_FAXWIZARDDIALOG_START_34
|
||||
self.reschkUseDate_value = strings.RID_FAXWIZARDDIALOG_START_35
|
||||
self.reschkUseCommunicationType_value = strings.RID_FAXWIZARDDIALOG_START_36
|
||||
self.resLabel1_value = strings.RID_FAXWIZARDDIALOG_START_37
|
||||
self.resoptReceiverPlaceholder_value = strings.RID_FAXWIZARDDIALOG_START_38
|
||||
self.resoptReceiverDatabase_value = strings.RID_FAXWIZARDDIALOG_START_39
|
||||
self.resLabel2_value = strings.RID_FAXWIZARDDIALOG_START_40
|
||||
|
||||
#Create a Dictionary for the constants values.
|
||||
self.dictConstants = {
|
||||
"#to#" : strings.RID_FAXWIZARDDIALOG_START_41,
|
||||
"#from#" : strings.RID_FAXWIZARDDIALOG_START_42,
|
||||
"#faxconst#" : strings.RID_FAXWIZARDDIALOG_START_43,
|
||||
"#telconst#" : strings.RID_FAXWIZARDDIALOG_START_44,
|
||||
"#emailconst#" : strings.RID_FAXWIZARDDIALOG_START_45,
|
||||
"#consist1#" : strings.RID_FAXWIZARDDIALOG_START_46,
|
||||
"#consist2#" : strings.RID_FAXWIZARDDIALOG_START_47,
|
||||
"#consist3#" : strings.RID_FAXWIZARDDIALOG_START_48}
|
||||
|
||||
#Create a dictionary for localising the private template
|
||||
self.dictPrivateTemplate = {
|
||||
"Bottle" : strings.RID_FAXWIZARDDIALOG_START_49,
|
||||
"Fax" : strings.RID_FAXWIZARDDIALOG_START_56,
|
||||
"Lines" : strings.RID_FAXWIZARDDIALOG_START_50,
|
||||
"Marine" : strings.RID_FAXWIZARDDIALOG_START_51}
|
||||
|
||||
#Create a dictionary for localising the business template
|
||||
self.dictBusinessTemplate = {
|
||||
"Classic Fax" : strings.RID_FAXWIZARDDIALOG_START_52,
|
||||
"Classic Fax from Private" : strings.RID_FAXWIZARDDIALOG_START_53,
|
||||
"Modern Fax" : strings.RID_FAXWIZARDDIALOG_START_54,
|
||||
"Modern Fax from Private" : strings.RID_FAXWIZARDDIALOG_START_55}
|
||||
|
||||
#Common Resources
|
||||
self.resOverwriteWarning = strings.RID_COMMON_START_19
|
||||
self.resTemplateDescription = strings.RID_COMMON_START_20
|
||||
|
||||
self.RoadmapLabels = []
|
||||
self.RoadmapLabels.append(strings.RID_FAXWIZARDROADMAP_START_1)
|
||||
self.RoadmapLabels.append(strings.RID_FAXWIZARDROADMAP_START_2)
|
||||
self.RoadmapLabels.append(strings.RID_FAXWIZARDROADMAP_START_3)
|
||||
self.RoadmapLabels.append(strings.RID_FAXWIZARDROADMAP_START_4)
|
||||
self.RoadmapLabels.append(strings.RID_FAXWIZARDROADMAP_START_5)
|
||||
self.SalutationLabels = []
|
||||
self.SalutationLabels.append(strings.RID_FAXWIZARDSALUTATION_START_1)
|
||||
self.SalutationLabels.append(strings.RID_FAXWIZARDSALUTATION_START_2)
|
||||
self.SalutationLabels.append(strings.RID_FAXWIZARDSALUTATION_START_3)
|
||||
self.SalutationLabels.append(strings.RID_FAXWIZARDSALUTATION_START_4)
|
||||
self.GreetingLabels = []
|
||||
self.GreetingLabels.append(strings.RID_FAXWIZARDGREETING_START_1)
|
||||
self.GreetingLabels.append(strings.RID_FAXWIZARDGREETING_START_2)
|
||||
self.GreetingLabels.append(strings.RID_FAXWIZARDGREETING_START_3)
|
||||
self.GreetingLabels.append(strings.RID_FAXWIZARDGREETING_START_4)
|
||||
self.CommunicationLabels = []
|
||||
self.CommunicationLabels.append(strings.RID_FAXWIZARDCOMMUNICATION_START_1)
|
||||
self.CommunicationLabels.append(strings.RID_FAXWIZARDCOMMUNICATION_START_2)
|
||||
self.CommunicationLabels.append(strings.RID_FAXWIZARDCOMMUNICATION_START_3)
|
||||
1
server/libreoffice/program/wizards/fax/__init__.py
Normal file
1
server/libreoffice/program/wizards/fax/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
|
||||
53
server/libreoffice/program/wizards/letter/CGLetter.py
Normal file
53
server/libreoffice/program/wizards/letter/CGLetter.py
Normal file
@@ -0,0 +1,53 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from .CGPaperElementLocation import CGPaperElementLocation
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
|
||||
class CGLetter(ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
self.cp_Style = int()
|
||||
self.cp_BusinessPaper = bool()
|
||||
self.cp_CompanyLogo = CGPaperElementLocation()
|
||||
self.cp_CompanyAddress = CGPaperElementLocation()
|
||||
self.cp_PaperCompanyAddressReceiverField = bool()
|
||||
self.cp_PaperFooter = bool()
|
||||
self.cp_PaperFooterHeight = float()
|
||||
self.cp_PrintCompanyLogo = bool()
|
||||
self.cp_PrintCompanyAddressReceiverField = bool()
|
||||
self.cp_PrintLetterSigns = bool()
|
||||
self.cp_PrintSubjectLine = bool()
|
||||
self.cp_PrintSalutation = bool()
|
||||
self.cp_PrintBendMarks = bool()
|
||||
self.cp_PrintGreeting = bool()
|
||||
self.cp_PrintFooter = bool()
|
||||
self.cp_Salutation = str()
|
||||
self.cp_Greeting = str()
|
||||
self.cp_SenderAddressType = int()
|
||||
self.cp_SenderCompanyName = str()
|
||||
self.cp_SenderStreet = str()
|
||||
self.cp_SenderPostCode = str()
|
||||
self.cp_SenderState = str()
|
||||
self.cp_SenderCity = str()
|
||||
self.cp_ReceiverAddressType = int()
|
||||
self.cp_Footer = str()
|
||||
self.cp_FooterOnlySecondPage = bool()
|
||||
self.cp_FooterPageNumbers = bool()
|
||||
self.cp_CreationType = int()
|
||||
self.cp_TemplateName = str()
|
||||
self.cp_TemplatePath = str()
|
||||
27
server/libreoffice/program/wizards/letter/CGLetterWizard.py
Normal file
27
server/libreoffice/program/wizards/letter/CGLetterWizard.py
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
from .CGLetter import CGLetter
|
||||
|
||||
class CGLetterWizard (ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
self.cp_LetterType = int()
|
||||
self.cp_BusinessLetter = CGLetter()
|
||||
self.cp_PrivateOfficialLetter = CGLetter()
|
||||
self.cp_PrivateLetter = CGLetter()
|
||||
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..common.ConfigGroup import ConfigGroup
|
||||
|
||||
class CGPaperElementLocation(ConfigGroup):
|
||||
|
||||
def __init__(self):
|
||||
self.cp_Display = bool()
|
||||
self.cp_Width = float()
|
||||
self.cp_Height = float()
|
||||
self.cp_X = float()
|
||||
self.cp_Y = float()
|
||||
75
server/libreoffice/program/wizards/letter/CallWizard.py
Normal file
75
server/libreoffice/program/wizards/letter/CallWizard.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import unohelper
|
||||
import traceback
|
||||
|
||||
from .LetterWizardDialogImpl import LetterWizardDialogImpl, Desktop
|
||||
|
||||
from com.sun.star.lang import XServiceInfo
|
||||
from com.sun.star.task import XJobExecutor
|
||||
|
||||
# pythonloader looks for a static g_ImplementationHelper variable
|
||||
g_ImplementationHelper = unohelper.ImplementationHelper()
|
||||
g_implName = "com.sun.star.wizards.letter.CallWizard"
|
||||
|
||||
# implement a UNO component by deriving from the standard unohelper.Base class
|
||||
# and from the interface(s) you want to implement.
|
||||
class CallWizard(unohelper.Base, XJobExecutor, XServiceInfo):
|
||||
def __init__(self, ctx):
|
||||
# store the component context for later use
|
||||
self.ctx = ctx
|
||||
|
||||
def trigger(self, args):
|
||||
try:
|
||||
lw = LetterWizardDialogImpl(self.ctx.ServiceManager)
|
||||
lw.startWizard(self.ctx.ServiceManager)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
@classmethod
|
||||
def callRemote(self):
|
||||
#Call the wizard remotely(see README)
|
||||
try:
|
||||
ConnectStr = \
|
||||
"uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext"
|
||||
xLocMSF = Desktop.connect(ConnectStr)
|
||||
lw = LetterWizardDialogImpl(xLocMSF)
|
||||
lw.startWizard(xLocMSF)
|
||||
except Exception as e:
|
||||
print ("Wizard failure exception " + str(type(e)) +
|
||||
" message " + str(e) + " args " + str(e.args) +
|
||||
traceback.format_exc())
|
||||
|
||||
def getImplementationName(self):
|
||||
return g_implName
|
||||
|
||||
def supportsService(self, ServiceName):
|
||||
return g_ImplementationHelper.supportsService(g_implName, ServiceName)
|
||||
|
||||
def getSupportedServiceNames(self):
|
||||
return g_ImplementationHelper.getSupportedServiceNames(g_implName)
|
||||
|
||||
g_ImplementationHelper.addImplementation( \
|
||||
CallWizard, # UNO object class
|
||||
g_implName, # implementation name
|
||||
("com.sun.star.task.Job",),) # list of implemented services
|
||||
# (the only service)
|
||||
|
||||
# vim:set shiftwidth=4 softtabstop=4 expandtab:
|
||||
238
server/libreoffice/program/wizards/letter/LetterDocument.py
Normal file
238
server/libreoffice/program/wizards/letter/LetterDocument.py
Normal file
@@ -0,0 +1,238 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
from ..text.TextDocument import TextDocument, traceback, \
|
||||
TextFieldHandler, Configuration
|
||||
from ..text.TextSectionHandler import TextSectionHandler
|
||||
|
||||
from com.sun.star.table import BorderLine
|
||||
from com.sun.star.text.ControlCharacter import PARAGRAPH_BREAK
|
||||
from com.sun.star.style.ParagraphAdjust import CENTER
|
||||
from com.sun.star.text.PageNumberType import CURRENT
|
||||
from com.sun.star.style.NumberingType import ARABIC
|
||||
from com.sun.star.text.HoriOrientation import NONE as NONEHORI
|
||||
from com.sun.star.text.VertOrientation import NONE as NONEVERT
|
||||
from com.sun.star.text.RelOrientation import PAGE_FRAME
|
||||
from com.sun.star.text.TextContentAnchorType import AT_PAGE
|
||||
from com.sun.star.text.SizeType import FIX
|
||||
from com.sun.star.text.WrapTextMode import THROUGH
|
||||
from com.sun.star.awt.FontWeight import BOLD
|
||||
from com.sun.star.beans import UnknownPropertyException
|
||||
|
||||
class LetterDocument(TextDocument):
|
||||
|
||||
def __init__(self, xMSF, listener):
|
||||
super(LetterDocument,self).__init__(xMSF, listener, None,
|
||||
"WIZARD_LIVE_PREVIEW")
|
||||
self.keepLogoFrame = True
|
||||
self.keepBendMarksFrame = True
|
||||
self.keepLetterSignsFrame = True
|
||||
self.keepSenderAddressRepeatedFrame = True
|
||||
self.keepAddressFrame = True
|
||||
|
||||
def switchElement(self, sElement, bState):
|
||||
try:
|
||||
mySectionHandler = TextSectionHandler(
|
||||
self.xMSF, self.xTextDocument)
|
||||
oSection = \
|
||||
mySectionHandler.xTextDocument.TextSections.getByName(sElement)
|
||||
oSection.IsVisible = bState
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def updateDateFields(self):
|
||||
FH = TextFieldHandler(
|
||||
self.xTextDocument, self.xTextDocument)
|
||||
FH.updateDateFields()
|
||||
|
||||
def switchFooter(self, sPageStyle, bState, bPageNumber, sText):
|
||||
if self.xTextDocument is not None:
|
||||
try:
|
||||
self.xTextDocument.lockControllers()
|
||||
xNameAccess = self.xTextDocument.StyleFamilies
|
||||
xPageStyleCollection = xNameAccess.getByName("PageStyles")
|
||||
xPageStyle = xPageStyleCollection.getByName(sPageStyle)
|
||||
if bState:
|
||||
xPageStyle.FooterIsOn = True
|
||||
xFooterText = xPageStyle.FooterText
|
||||
xFooterText.String = sText
|
||||
if bPageNumber:
|
||||
#Adding the Page Number
|
||||
myCursor = xFooterText.Text.createTextCursor()
|
||||
myCursor.gotoEnd(False)
|
||||
xFooterText.insertControlCharacter(myCursor,
|
||||
PARAGRAPH_BREAK, False)
|
||||
myCursor.setPropertyValue("ParaAdjust", CENTER )
|
||||
|
||||
xPageNumberField = \
|
||||
self.xTextDocument.createInstance(
|
||||
"com.sun.star.text.TextField.PageNumber")
|
||||
xPageNumberField.setPropertyValue("SubType", CURRENT)
|
||||
xPageNumberField.NumberingType = ARABIC
|
||||
xFooterText.insertTextContent(xFooterText.End,
|
||||
xPageNumberField, False)
|
||||
|
||||
else:
|
||||
xPageStyle.FooterIsOn = False
|
||||
|
||||
self.xTextDocument.unlockControllers()
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def hasElement(self, sElement):
|
||||
if self.xTextDocument is not None:
|
||||
SH = TextSectionHandler(self.xMSF, self.xTextDocument)
|
||||
return SH.hasTextSectionByName(sElement)
|
||||
else:
|
||||
return False
|
||||
|
||||
def switchUserField(self, sFieldName, sNewContent, bState):
|
||||
myFieldHandler = TextFieldHandler(
|
||||
self.xMSF, self.xTextDocument)
|
||||
if bState:
|
||||
myFieldHandler.changeUserFieldContent(sFieldName, sNewContent)
|
||||
else:
|
||||
myFieldHandler.changeUserFieldContent(sFieldName, "")
|
||||
|
||||
def fillSenderWithUserData(self):
|
||||
try:
|
||||
myFieldHandler = TextFieldHandler(
|
||||
self.xTextDocument, self.xTextDocument)
|
||||
oUserDataAccess = Configuration.getConfigurationRoot(
|
||||
self.xMSF, "org.openoffice.UserProfile/Data", False)
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"Company", oUserDataAccess.getByName("o"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"Street", oUserDataAccess.getByName("street"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"PostCode", oUserDataAccess.getByName("postalcode"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"City", oUserDataAccess.getByName("l"))
|
||||
myFieldHandler.changeUserFieldContent(
|
||||
"State", oUserDataAccess.getByName("st"))
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def killEmptyUserFields(self):
|
||||
myFieldHandler = TextFieldHandler(
|
||||
self.xMSF, self.xTextDocument)
|
||||
myFieldHandler.removeUserFieldByContent()
|
||||
|
||||
def killEmptyFrames(self):
|
||||
try:
|
||||
if not self.keepLogoFrame:
|
||||
xTF = self.getFrameByName(
|
||||
"Company Logo", self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
if not self.keepBendMarksFrame:
|
||||
xTF = self.getFrameByName(
|
||||
"Bend Marks", self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
if not self.keepLetterSignsFrame:
|
||||
xTF = self.getFrameByName(
|
||||
"Letter Signs", self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
if not self.keepSenderAddressRepeatedFrame:
|
||||
xTF = self.getFrameByName(
|
||||
"Sender Address Repeated", self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
if not self.keepAddressFrame:
|
||||
xTF = self.getFrameByName(
|
||||
"Sender Address", self.xTextDocument)
|
||||
if xTF is not None:
|
||||
xTF.dispose()
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
class BusinessPaperObject(object):
|
||||
|
||||
def __init__(self, xTextDocument, FrameText, Width, Height, XPos, YPos):
|
||||
self.xTextDocument = xTextDocument
|
||||
self.iWidth = Width
|
||||
self.iHeight = Height
|
||||
self.iXPos = XPos
|
||||
self.iYPos = YPos
|
||||
self.xFrame = None
|
||||
try:
|
||||
self.xFrame = \
|
||||
self.xTextDocument.createInstance(
|
||||
"com.sun.star.text.TextFrame")
|
||||
self.setFramePosition()
|
||||
self.xFrame.AnchorType = AT_PAGE
|
||||
self.xFrame.SizeType = FIX
|
||||
|
||||
self.xFrame.TextWrap = THROUGH
|
||||
self.xFrame.Opaque = True
|
||||
self.xFrame.BackColor = 15790320
|
||||
|
||||
myBorder = BorderLine()
|
||||
myBorder.OuterLineWidth = 0
|
||||
self.xFrame.LeftBorder = myBorder
|
||||
self.xFrame.RightBorder = myBorder
|
||||
self.xFrame.TopBorder = myBorder
|
||||
self.xFrame.BottomBorder = myBorder
|
||||
self.xFrame.Print = False
|
||||
xTextCursor = \
|
||||
self.xTextDocument.Text.createTextCursor()
|
||||
xTextCursor.gotoEnd(True)
|
||||
xText = self.xTextDocument.Text
|
||||
xText.insertTextContent(
|
||||
xTextCursor, self.xFrame,
|
||||
False)
|
||||
|
||||
xFrameText = self.xFrame.Text
|
||||
xFrameCursor = xFrameText.createTextCursor()
|
||||
xFrameCursor.setPropertyValue("CharWeight", BOLD)
|
||||
xFrameCursor.setPropertyValue("CharColor", 16777215)
|
||||
xFrameCursor.setPropertyValue("CharFontName", "Albany")
|
||||
xFrameCursor.setPropertyValue("CharHeight", 18)
|
||||
|
||||
xFrameText.insertString(xFrameCursor, FrameText, False)
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def setFramePosition(self):
|
||||
try:
|
||||
self.xFrame.HoriOrient = NONEHORI
|
||||
self.xFrame.VertOrient = NONEVERT
|
||||
self.xFrame.Height = self.iHeight
|
||||
self.xFrame.Width = self.iWidth
|
||||
self.xFrame.HoriOrientPosition = self.iXPos
|
||||
self.xFrame.VertOrientPosition = self.iYPos
|
||||
self.xFrame.HoriOrientRelation = PAGE_FRAME
|
||||
self.xFrame.VertOrientRelation = PAGE_FRAME
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
def removeFrame(self):
|
||||
if self.xFrame is not None:
|
||||
try:
|
||||
self.xTextDocument.Text.removeTextContent(
|
||||
self.xFrame)
|
||||
except UnknownPropertyException:
|
||||
pass
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
1122
server/libreoffice/program/wizards/letter/LetterWizardDialog.py
Normal file
1122
server/libreoffice/program/wizards/letter/LetterWizardDialog.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
HID = 40768
|
||||
HIDMAIN = 40820
|
||||
|
||||
class LetterWizardDialogConst:
|
||||
OPTBUSINESSLETTER_ITEM_CHANGED = "optBusinessLetterItemChanged"
|
||||
OPTBUSINESSLETTER_ITEM_CHANGED = "optBusinessLetterItemChanged"
|
||||
OPTPRIVOFFICIALLETTER_ITEM_CHANGED = "optPrivOfficialLetterItemChanged"
|
||||
OPTPRIVATELETTER_ITEM_CHANGED = "optPrivateLetterItemChanged"
|
||||
LSTBUSINESSSTYLE_ACTION_PERFORMED = None
|
||||
LSTBUSINESSSTYLE_ITEM_CHANGED = "lstBusinessStyleItemChanged"
|
||||
LSTPRIVOFFICIALSTYLE_ACTION_PERFORMED = None
|
||||
LSTPRIVOFFICIALSTYLE_ITEM_CHANGED = "lstPrivOfficialStyleItemChanged"
|
||||
CHKBUSINESSPAPER_ITEM_CHANGED = "chkBusinessPaperItemChanged"
|
||||
LSTPRIVATESTYLE_ACTION_PERFORMED = None
|
||||
LSTPRIVATESTYLE_ITEM_CHANGED = "lstPrivateStyleItemChanged"
|
||||
CHKPAPERCOMPANYLOGO_ITEM_CHANGED = "chkPaperCompanyLogoItemChanged"
|
||||
NUMLOGOHEIGHT_TEXT_CHANGED = "numLogoHeightTextChanged"
|
||||
NUMLOGOX_TEXT_CHANGED = "numLogoXTextChanged"
|
||||
NUMLOGOWIDTH_TEXT_CHANGED = "numLogoWidthTextChanged"
|
||||
NUMLOGOY_TEXT_CHANGED = "numLogoYTextChanged"
|
||||
CHKCOMPANYRECEIVER_ITEM_CHANGED = "chkCompanyReceiverItemChanged"
|
||||
CHKPAPERFOOTER_ITEM_CHANGED = "chkPaperFooterItemChanged"
|
||||
NUMFOOTERHEIGHT_TEXT_CHANGED = "numFooterHeightTextChanged"
|
||||
CHKPAPERCOMPANYADDRESS_ITEM_CHANGED = "chkPaperCompanyAddressItemChanged"
|
||||
NUMADDRESSHEIGHT_TEXT_CHANGED = "numAddressHeightTextChanged"
|
||||
NUMADDRESSX_TEXT_CHANGED = "numAddressXTextChanged"
|
||||
NUMADDRESSWIDTH_TEXT_CHANGED = "numAddressWidthTextChanged"
|
||||
NUMADDRESSY_TEXT_CHANGED = "numAddressYTextChanged"
|
||||
CHKUSELOGO_ITEM_CHANGED = "chkUseLogoItemChanged"
|
||||
CHKUSEADDRESSRECEIVER_ITEM_CHANGED = "chkUseAddressReceiverItemChanged"
|
||||
CHKUSESIGNS_ITEM_CHANGED = "chkUseSignsItemChanged"
|
||||
CHKUSESUBJECT_ITEM_CHANGED = "chkUseSubjectItemChanged"
|
||||
CHKUSEBENDMARKS_ITEM_CHANGED = "chkUseBendMarksItemChanged"
|
||||
CHKUSEFOOTER_ITEM_CHANGED = "chkUseFooterItemChanged"
|
||||
CHKUSESALUTATION_ITEM_CHANGED = "chkUseSalutationItemChanged"
|
||||
CHKUSEGREETING_ITEM_CHANGED = "chkUseGreetingItemChanged"
|
||||
LSTSALUTATION_ACTION_PERFORMED = None
|
||||
LSTSALUTATION_ITEM_CHANGED = "lstSalutationItemChanged"
|
||||
LSTSALUTATION_TEXT_CHANGED = "lstSalutationItemChanged"
|
||||
LSTGREETING_ACTION_PERFORMED = None
|
||||
LSTGREETING_ITEM_CHANGED = "lstGreetingItemChanged"
|
||||
LSTGREETING_TEXT_CHANGED = "lstGreetingItemChanged"
|
||||
OPTSENDERPLACEHOLDER_ITEM_CHANGED = "optSenderPlaceholderItemChanged"
|
||||
OPTSENDERDEFINE_ITEM_CHANGED = "optSenderDefineItemChanged"
|
||||
OPTRECEIVERPLACEHOLDER_ITEM_CHANGED = "optReceiverPlaceholderItemChanged"
|
||||
OPTRECEIVERDATABASE_ITEM_CHANGED = "optReceiverDatabaseItemChanged"
|
||||
TXTSENDERNAME_TEXT_CHANGED = "txtSenderNameTextChanged"
|
||||
TXTSENDERSTREET_TEXT_CHANGED = "txtSenderStreetTextChanged"
|
||||
TXTSENDERCITY_TEXT_CHANGED = "txtSenderCityTextChanged"
|
||||
TXTSENDERPOSTCODE_TEXT_CHANGED = "txtSenderPostCodeTextChanged"
|
||||
TXTSENDERSTATE_TEXT_CHANGED = "txtSenderStateTextChanged"
|
||||
TXTFOOTER_TEXT_CHANGED = "txtFooterTextChanged"
|
||||
CHKFOOTERNEXTPAGES_ITEM_CHANGED = "chkFooterNextPagesItemChanged"
|
||||
CHKFOOTERPAGENUMBERS_ITEM_CHANGED = "chkFooterPageNumbersItemChanged"
|
||||
TXTTEMPLATENAME_TEXT_CHANGED = "txtTemplateNameTextChanged"
|
||||
OPTCREATELETTER_ITEM_CHANGED = "optCreateFromTemplateItemChanged"
|
||||
OPTMAKECHANGES_ITEM_CHANGED = "optMakeChangesItemChanged"
|
||||
FILETEMPLATEPATH_TEXT_CHANGED = None
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
|
||||
class LetterWizardDialogResources(object):
|
||||
|
||||
def __init__(self):
|
||||
import sys, os
|
||||
|
||||
# imp is deprecated since Python v.3.4
|
||||
if sys.version_info >= (3,3):
|
||||
from importlib.machinery import SourceFileLoader
|
||||
SourceFileLoader('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc')).load_module()
|
||||
else:
|
||||
import imp
|
||||
imp.load_source('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc'))
|
||||
|
||||
import strings
|
||||
|
||||
self.resLetterWizardDialog_title = strings.RID_LETTERWIZARDDIALOG_START_1
|
||||
self.resLabel9_value = strings.RID_LETTERWIZARDDIALOG_START_2
|
||||
self.resoptBusinessLetter_value = strings.RID_LETTERWIZARDDIALOG_START_3
|
||||
self.resoptPrivOfficialLetter_value = strings.RID_LETTERWIZARDDIALOG_START_4
|
||||
self.resoptPrivateLetter_value = strings.RID_LETTERWIZARDDIALOG_START_5
|
||||
self.reschkBusinessPaper_value = strings.RID_LETTERWIZARDDIALOG_START_6
|
||||
self.reschkPaperCompanyLogo_value = strings.RID_LETTERWIZARDDIALOG_START_7
|
||||
self.reschkPaperCompanyAddress_value = strings.RID_LETTERWIZARDDIALOG_START_8
|
||||
self.reschkPaperFooter_value = strings.RID_LETTERWIZARDDIALOG_START_9
|
||||
self.reschkCompanyReceiver_value = strings.RID_LETTERWIZARDDIALOG_START_10
|
||||
self.reschkUseLogo_value = strings.RID_LETTERWIZARDDIALOG_START_11
|
||||
self.reschkUseAddressReceiver_value = strings.RID_LETTERWIZARDDIALOG_START_12
|
||||
self.reschkUseSigns_value = strings.RID_LETTERWIZARDDIALOG_START_13
|
||||
self.reschkUseSubject_value = strings.RID_LETTERWIZARDDIALOG_START_14
|
||||
self.reschkUseSalutation_value = strings.RID_LETTERWIZARDDIALOG_START_15
|
||||
self.reschkUseBendMarks_value = strings.RID_LETTERWIZARDDIALOG_START_16
|
||||
self.reschkUseGreeting_value = strings.RID_LETTERWIZARDDIALOG_START_17
|
||||
self.reschkUseFooter_value = strings.RID_LETTERWIZARDDIALOG_START_18
|
||||
self.resoptSenderPlaceholder_value = strings.RID_LETTERWIZARDDIALOG_START_19
|
||||
self.resoptSenderDefine_value = strings.RID_LETTERWIZARDDIALOG_START_20
|
||||
self.resoptReceiverPlaceholder_value = strings.RID_LETTERWIZARDDIALOG_START_21
|
||||
self.resoptReceiverDatabase_value = strings.RID_LETTERWIZARDDIALOG_START_22
|
||||
self.reschkFooterNextPages_value = strings.RID_LETTERWIZARDDIALOG_START_23
|
||||
self.reschkFooterPageNumbers_value = strings.RID_LETTERWIZARDDIALOG_START_24
|
||||
self.restxtTemplateName_value = strings.RID_LETTERWIZARDDIALOG_START_25
|
||||
self.resoptCreateLetter_value = strings.RID_LETTERWIZARDDIALOG_START_26
|
||||
self.resoptMakeChanges_value = strings.RID_LETTERWIZARDDIALOG_START_27
|
||||
self.reslblBusinessStyle_value = strings.RID_LETTERWIZARDDIALOG_START_28
|
||||
self.reslblPrivOfficialStyle_value = strings.RID_LETTERWIZARDDIALOG_START_29
|
||||
self.reslblPrivateStyle_value = strings.RID_LETTERWIZARDDIALOG_START_30
|
||||
self.reslblIntroduction_value = strings.RID_LETTERWIZARDDIALOG_START_31
|
||||
self.reslblLogoHeight_value = strings.RID_LETTERWIZARDDIALOG_START_32
|
||||
self.reslblLogoWidth_value = strings.RID_LETTERWIZARDDIALOG_START_33
|
||||
self.reslblLogoX_value = strings.RID_LETTERWIZARDDIALOG_START_34
|
||||
self.reslblLogoY_value = strings.RID_LETTERWIZARDDIALOG_START_35
|
||||
self.reslblAddressHeight_value = strings.RID_LETTERWIZARDDIALOG_START_36
|
||||
self.reslblAddressWidth_value = strings.RID_LETTERWIZARDDIALOG_START_37
|
||||
self.reslblAddressX_value = strings.RID_LETTERWIZARDDIALOG_START_38
|
||||
self.reslblAddressY_value = strings.RID_LETTERWIZARDDIALOG_START_39
|
||||
self.reslblFooterHeight_value = strings.RID_LETTERWIZARDDIALOG_START_40
|
||||
self.reslblSenderAddress_value = strings.RID_LETTERWIZARDDIALOG_START_42
|
||||
self.reslblSenderName_value = strings.RID_LETTERWIZARDDIALOG_START_43
|
||||
self.reslblSenderStreet_value = strings.RID_LETTERWIZARDDIALOG_START_44
|
||||
self.reslblPostCodeCity_value = strings.RID_LETTERWIZARDDIALOG_START_45
|
||||
self.reslblReceiverAddress_value = strings.RID_LETTERWIZARDDIALOG_START_46
|
||||
self.reslblFooter_value = strings.RID_LETTERWIZARDDIALOG_START_47
|
||||
self.reslblFinalExplanation1_value = strings.RID_LETTERWIZARDDIALOG_START_48
|
||||
self.reslblFinalExplanation2_value = strings.RID_LETTERWIZARDDIALOG_START_49
|
||||
self.reslblTemplateName_value = strings.RID_LETTERWIZARDDIALOG_START_50
|
||||
self.reslblTemplatePath_value = strings.RID_LETTERWIZARDDIALOG_START_51
|
||||
self.reslblProceed_value = strings.RID_LETTERWIZARDDIALOG_START_52
|
||||
self.reslblTitle1_value = strings.RID_LETTERWIZARDDIALOG_START_53
|
||||
self.reslblTitle3_value = strings.RID_LETTERWIZARDDIALOG_START_54
|
||||
self.reslblTitle2_value = strings.RID_LETTERWIZARDDIALOG_START_55
|
||||
self.reslblTitle4_value = strings.RID_LETTERWIZARDDIALOG_START_56
|
||||
self.reslblTitle5_value = strings.RID_LETTERWIZARDDIALOG_START_57
|
||||
self.reslblTitle6_value = strings.RID_LETTERWIZARDDIALOG_START_58
|
||||
|
||||
#Create a Dictionary for the constants values.
|
||||
self.dictConstants = {
|
||||
"#subjectconst#" : strings.RID_LETTERWIZARDDIALOG_START_59}
|
||||
|
||||
#Create a dictionary for localising the business templates
|
||||
self.dictBusinessTemplate = {
|
||||
"Elegant" : strings.RID_LETTERWIZARDDIALOG_START_60,
|
||||
"Modern" : strings.RID_LETTERWIZARDDIALOG_START_61,
|
||||
"Office" : strings.RID_LETTERWIZARDDIALOG_START_62}
|
||||
|
||||
#Create a dictionary for localising the official templates
|
||||
self.dictOfficialTemplate = {
|
||||
"Elegant" : strings.RID_LETTERWIZARDDIALOG_START_60,
|
||||
"Modern" : strings.RID_LETTERWIZARDDIALOG_START_61,
|
||||
"Office" : strings.RID_LETTERWIZARDDIALOG_START_62}
|
||||
|
||||
#Create a dictionary for localising the private templates
|
||||
self.dictPrivateTemplate = {
|
||||
"Bottle" : strings.RID_LETTERWIZARDDIALOG_START_63,
|
||||
"Mail" : strings.RID_LETTERWIZARDDIALOG_START_64,
|
||||
"Marine" : strings.RID_LETTERWIZARDDIALOG_START_65,
|
||||
"Red Line" : strings.RID_LETTERWIZARDDIALOG_START_66}
|
||||
|
||||
#Common Resources
|
||||
self.resOverwriteWarning = strings.RID_COMMON_START_19
|
||||
self.resTemplateDescription = strings.RID_COMMON_START_20
|
||||
|
||||
self.RoadmapLabels = []
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_1)
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_2)
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_3)
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_4)
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_5)
|
||||
self.RoadmapLabels.append(strings.RID_LETTERWIZARDROADMAP_START_6)
|
||||
self.SalutationLabels = []
|
||||
self.SalutationLabels.append(strings.RID_LETTERWIZARDSALUTATION_START_1)
|
||||
self.SalutationLabels.append(strings.RID_LETTERWIZARDSALUTATION_START_2)
|
||||
self.SalutationLabels.append(strings.RID_LETTERWIZARDSALUTATION_START_3)
|
||||
self.GreetingLabels = []
|
||||
self.GreetingLabels.append(strings.RID_LETTERWIZARDGREETING_START_1)
|
||||
self.GreetingLabels.append(strings.RID_LETTERWIZARDGREETING_START_2)
|
||||
self.GreetingLabels.append(strings.RID_LETTERWIZARDGREETING_START_3)
|
||||
258
server/libreoffice/program/wizards/text/TextDocument.py
Normal file
258
server/libreoffice/program/wizards/text/TextDocument.py
Normal file
@@ -0,0 +1,258 @@
|
||||
#
|
||||
# This file is part of the LibreOffice project.
|
||||
#
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# This file incorporates work covered by the following license notice:
|
||||
#
|
||||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed
|
||||
# with this work for additional information regarding copyright
|
||||
# ownership. The ASF licenses this file to you under the Apache
|
||||
# License, Version 2.0 (the "License"); you may not use this file
|
||||
# except in compliance with the License. You may obtain a copy of
|
||||
# the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||
#
|
||||
import uno
|
||||
import traceback
|
||||
import time
|
||||
from datetime import date as dateTimeObject
|
||||
from .TextFieldHandler import TextFieldHandler
|
||||
from ..document.OfficeDocument import OfficeDocument
|
||||
from ..common.Desktop import Desktop
|
||||
from ..common.Configuration import Configuration
|
||||
from ..common.NumberFormatter import NumberFormatter
|
||||
|
||||
from com.sun.star.i18n.NumberFormatIndex import DATE_SYS_DDMMYY
|
||||
from com.sun.star.view.DocumentZoomType import ENTIRE_PAGE
|
||||
from com.sun.star.beans.PropertyState import DIRECT_VALUE
|
||||
|
||||
class TextDocument(object):
|
||||
|
||||
def __init__(self, xMSF,listener=None,bShowStatusIndicator=None,
|
||||
FrameName=None,_sPreviewURL=None,_moduleIdentifier=None,
|
||||
_textDocument=None, xArgs=None):
|
||||
|
||||
self.xMSF = xMSF
|
||||
self.xTextDocument = None
|
||||
|
||||
if listener is not None:
|
||||
if FrameName is not None:
|
||||
'''creates an instance of TextDocument
|
||||
and creates a named frame.
|
||||
No document is actually loaded into this frame.'''
|
||||
self.xFrame = OfficeDocument.createNewFrame(
|
||||
xMSF, listener, FrameName)
|
||||
return
|
||||
|
||||
elif _sPreviewURL is not None:
|
||||
'''creates an instance of TextDocument by
|
||||
loading a given URL as preview'''
|
||||
self.xFrame = OfficeDocument.createNewFrame(xMSF, listener)
|
||||
self.xTextDocument = self.loadAsPreview(_sPreviewURL, True)
|
||||
|
||||
elif xArgs is not None:
|
||||
'''creates an instance of TextDocument
|
||||
and creates a frame and loads a document'''
|
||||
self.xDesktop = Desktop.getDesktop(xMSF);
|
||||
self.xFrame = OfficeDocument.createNewFrame(xMSF, listener)
|
||||
self.xTextDocument = OfficeDocument.load(
|
||||
self.xFrame, URL, "_self", xArgs);
|
||||
self.xWindowPeer = self.xFrame.getComponentWindow()
|
||||
self.m_xDocProps = self.xTextDocument.DocumentProperties
|
||||
CharLocale = self.xTextDocument.CharLocale
|
||||
return
|
||||
|
||||
else:
|
||||
'''creates an instance of TextDocument from
|
||||
the desktop's current frame'''
|
||||
self.xDesktop = Desktop.getDesktop(xMSF);
|
||||
self.xFrame = self.xDesktop.getActiveFrame()
|
||||
self.xTextDocument = self.xFrame.getController().Model
|
||||
|
||||
elif _moduleIdentifier is not None:
|
||||
try:
|
||||
'''create the empty document, and set its module identifier'''
|
||||
self.xTextDocument = xMSF.createInstance(
|
||||
"com.sun.star.text.TextDocument")
|
||||
self.xTextDocument.initNew()
|
||||
self.xTextDocument.setIdentifier(
|
||||
_moduleIdentifier.Identifier)
|
||||
# load the document into a blank frame
|
||||
xDesktop = Desktop.getDesktop(xMSF)
|
||||
loadArgs = list(range(1))
|
||||
loadArgs[0] = "Model"
|
||||
loadArgs[0] = -1
|
||||
loadArgs[0] = self.xTextDocument
|
||||
loadArgs[0] = DIRECT_VALUE
|
||||
xDesktop.loadComponentFromURL(
|
||||
"private:object", "_blank", 0, loadArgs)
|
||||
# remember some things for later usage
|
||||
self.xFrame = self.xTextDocument.CurrentController.Frame
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
elif _textDocument is not None:
|
||||
'''creates an instance of TextDocument
|
||||
from a given XTextDocument'''
|
||||
self.xFrame = _textDocument.CurrentController.Frame
|
||||
self.xTextDocument = _textDocument
|
||||
if bShowStatusIndicator:
|
||||
self.showStatusIndicator()
|
||||
self.init()
|
||||
|
||||
def init(self):
|
||||
self.xWindowPeer = self.xFrame.getComponentWindow()
|
||||
self.m_xDocProps = self.xTextDocument.DocumentProperties
|
||||
self.CharLocale = self.xTextDocument.CharLocale
|
||||
self.xText = self.xTextDocument.Text
|
||||
|
||||
def showStatusIndicator(self):
|
||||
self.xProgressBar = self.xFrame.createStatusIndicator()
|
||||
self.xProgressBar.start("", 100)
|
||||
self.xProgressBar.setValue(5)
|
||||
|
||||
def loadAsPreview(self, sDefaultTemplate, asTemplate):
|
||||
loadValues = list(range(3))
|
||||
# open document in the Preview mode
|
||||
loadValues[0] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
loadValues[0].Name = "ReadOnly"
|
||||
loadValues[0].Value = True
|
||||
loadValues[1] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
loadValues[1].Name = "AsTemplate"
|
||||
if asTemplate:
|
||||
loadValues[1].Value = True
|
||||
else:
|
||||
loadValues[1].Value = False
|
||||
|
||||
loadValues[2] = uno.createUnoStruct(
|
||||
'com.sun.star.beans.PropertyValue')
|
||||
loadValues[2].Name = "Preview"
|
||||
loadValues[2].Value = True
|
||||
|
||||
self.xTextDocument = OfficeDocument.load(
|
||||
self.xFrame, sDefaultTemplate, "_self", loadValues)
|
||||
|
||||
self.DocSize = self.getPageSize()
|
||||
|
||||
try:
|
||||
self.xTextDocument.CurrentController.ViewSettings.ZoomType = ENTIRE_PAGE
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
myFieldHandler = TextFieldHandler(self.xMSF, self.xTextDocument)
|
||||
myFieldHandler.updateDocInfoFields()
|
||||
return self.xTextDocument
|
||||
|
||||
def getPageSize(self):
|
||||
try:
|
||||
xNameAccess = self.xTextDocument.StyleFamilies
|
||||
xPageStyleCollection = xNameAccess.getByName("PageStyles")
|
||||
xPageStyle = xPageStyleCollection.getByName("First Page")
|
||||
return xPageStyle.Size
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
'''creates an instance of TextDocument and creates a
|
||||
frame and loads a document'''
|
||||
|
||||
def createTextCursor(self, oCursorContainer):
|
||||
xTextCursor = oCursorContainer.createTextCursor()
|
||||
return xTextCursor
|
||||
|
||||
def refresh(self):
|
||||
self.xTextDocument.refresh()
|
||||
|
||||
'''
|
||||
This method sets the Author of a Wizard-generated template correctly
|
||||
and adds an explanatory sentence to the template description.
|
||||
@param WizardName The name of the Wizard.
|
||||
@param TemplateDescription The old Description which is being
|
||||
appended with another sentence.
|
||||
@return void.
|
||||
'''
|
||||
|
||||
def setWizardTemplateDocInfo(self, WizardName, TemplateDescription):
|
||||
try:
|
||||
xNA = Configuration.getConfigurationRoot(
|
||||
self.xMSF, "/org.openoffice.UserProfile/Data", False)
|
||||
gn = xNA.getByName("givenname")
|
||||
sn = xNA.getByName("sn")
|
||||
fullname = str(gn) + " " + str(sn)
|
||||
now = time.localtime(time.time())
|
||||
year = time.strftime("%Y", now)
|
||||
month = time.strftime("%m", now)
|
||||
day = time.strftime("%d", now)
|
||||
|
||||
dateObject = dateTimeObject(int(year), int(month), int(day))
|
||||
du = self.DateUtils(self.xMSF, self.xTextDocument)
|
||||
ff = du.getFormat(DATE_SYS_DDMMYY)
|
||||
myDate = du.format(ff, dateObject)
|
||||
xDocProps2 = self.xTextDocument.DocumentProperties
|
||||
xDocProps2.Author = fullname
|
||||
xDocProps2.ModifiedBy = fullname
|
||||
description = xDocProps2.Description
|
||||
description = description + " " + TemplateDescription
|
||||
description = description.replace("<wizard_name>", WizardName)
|
||||
description = description.replace("<current_date>", myDate)
|
||||
xDocProps2.Description = description
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
|
||||
@classmethod
|
||||
def getFrameByName(self, sFrameName, xTD):
|
||||
if xTD.TextFrames.hasByName(sFrameName):
|
||||
return xTD.TextFrames.getByName(sFrameName)
|
||||
|
||||
return None
|
||||
|
||||
def searchFillInItems(self, typeSearch):
|
||||
sd = self.xTextDocument.createSearchDescriptor()
|
||||
|
||||
if typeSearch == 0:
|
||||
sd.setSearchString("<[^>]+>")
|
||||
elif typeSearch == 1:
|
||||
sd.setSearchString("#[^#]+#")
|
||||
|
||||
sd.setPropertyValue("SearchRegularExpression", True)
|
||||
sd.setPropertyValue("SearchWords", True)
|
||||
|
||||
auxList = []
|
||||
allItems = self.xTextDocument.findAll(sd)
|
||||
for i in list(range(allItems.Count)):
|
||||
auxList.append(allItems.getByIndex(i))
|
||||
|
||||
return auxList
|
||||
|
||||
class DateUtils(object):
|
||||
|
||||
def __init__(self, xmsf, document):
|
||||
self.formatSupplier = document
|
||||
formatSettings = self.formatSupplier.getNumberFormatSettings()
|
||||
date = formatSettings.NullDate
|
||||
self.calendar = dateTimeObject(date.Year, date.Month, date.Day)
|
||||
self.formatter = NumberFormatter.createNumberFormatter(xmsf,
|
||||
self.formatSupplier)
|
||||
|
||||
'''
|
||||
@param format a constant of the enumeration NumberFormatIndex
|
||||
@return
|
||||
'''
|
||||
|
||||
def getFormat(self, format):
|
||||
return NumberFormatter.getNumberFormatterKey(
|
||||
self.formatSupplier, format)
|
||||
|
||||
'''
|
||||
@param date a VCL date in form of 20041231
|
||||
@return a document relative date
|
||||
'''
|
||||
|
||||
def format(self, formatIndex, date):
|
||||
difference = date - self.calendar
|
||||
return self.formatter.convertNumberToString(formatIndex,
|
||||
difference.days)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user