更新windows内置office目录名, 适配jodconverter

This commit is contained in:
陈精华
2022-12-19 14:45:45 +08:00
parent 7d3a4ebc4e
commit d761d0cc88
12504 changed files with 3 additions and 3 deletions

File diff suppressed because it is too large Load Diff

View 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))

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View 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)

View 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

View 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:

View 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>"

File diff suppressed because it is too large Load Diff

View 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

View 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)

View 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)

View 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

View 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))

File diff suppressed because it is too large Load Diff

View 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

View 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

View File

@@ -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

View 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)

View 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)

View 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"

View 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

View 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

View 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:

View 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)

View 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()

View 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()

View 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:

View 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()

File diff suppressed because it is too large Load Diff

View File

@@ -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)

File diff suppressed because it is too large Load Diff

View File

@@ -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)

View File

@@ -0,0 +1 @@

View 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()

View 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()

View 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
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()

View 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:

View 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()

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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)

View 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