This commit is contained in:
Jane
2024-07-16 15:58:23 +08:00
parent 29bc31ade5
commit 0bbdcd9ef7
1621 changed files with 300787 additions and 0 deletions

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

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

View File

@@ -0,0 +1,976 @@
#
# 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 .LetterWizardDialog import LetterWizardDialog, uno, HelpIds, HID
from .LetterDocument import LetterDocument, BusinessPaperObject
from .CGLetterWizard import CGLetterWizard
from ..common.FileAccess import FileAccess
from ..common.Configuration import Configuration
from ..common.SystemDialog import SystemDialog
from ..common.Desktop import Desktop
from ..ui.PathSelection import PathSelection
from ..ui.event.UnoDataAware import UnoDataAware
from ..ui.event.RadioDataAware import RadioDataAware
from ..ui.event.CommonListener import TerminateListenerProcAdapter
from ..text.TextElement import TextElement
from ..text.TextFieldHandler import TextFieldHandler
from ..document.OfficeDocument import OfficeDocument
from com.sun.star.awt.VclWindowPeerAttribute import YES_NO, DEF_NO
from com.sun.star.util import CloseVetoException
from com.sun.star.view.DocumentZoomType import OPTIMAL
from com.sun.star.document.UpdateDocMode import FULL_UPDATE
from com.sun.star.document.MacroExecMode import ALWAYS_EXECUTE
class LetterWizardDialogImpl(LetterWizardDialog):
RM_TYPESTYLE = 1
RM_BUSINESSPAPER = 2
RM_SENDERRECEIVER = 4
RM_FOOTER = 5
def enterStep(self, OldStep, NewStep):
pass
def leaveStep(self, OldStep, NewStep):
pass
def __init__(self, xmsf):
super(LetterWizardDialogImpl, self).__init__(xmsf)
self.lstBusinessStylePos = None
self.lstPrivateStylePos = None
self.lstPrivOfficialStylePos = None
self.xmsf = xmsf
self.bSaveSuccess = False
self.filenameChanged = False
self.BusCompanyLogo = None
self.BusCompanyAddress = None
self.BusCompanyAddressReceiver = None
self.BusFooter = None
def startWizard(self, xMSF):
self.running = True
try:
#Number of steps on WizardDialog
self.nMaxStep = 6
#instantiate The Document Frame for the Preview
self.terminateListener = TerminateListenerProcAdapter(self.queryTermination)
self.myLetterDoc = LetterDocument(xMSF, self.terminateListener)
#create the dialog
self.drawNaviBar()
self.buildStep1()
self.buildStep2()
self.buildStep3()
self.buildStep4()
self.buildStep5()
self.buildStep6()
self.initializePaths()
self.initializeSalutation()
self.initializeGreeting()
#special Control fFrameor setting the save Path:
self.insertPathSelectionControl()
self.myConfig = CGLetterWizard()
self.initializeTemplates(xMSF)
#load the last used settings
#from the registry and apply listeners to the controls:
self.initConfiguration()
if self.myConfig.cp_BusinessLetter.cp_Greeting :
self.myConfig.cp_BusinessLetter.cp_Greeting = \
self.resources.GreetingLabels[0]
if self.myConfig.cp_BusinessLetter.cp_Salutation:
self.myConfig.cp_BusinessLetter.cp_Salutation = \
self.resources.SalutationLabels[0]
if self.myConfig.cp_PrivateOfficialLetter.cp_Greeting:
self.myConfig.cp_PrivateOfficialLetter.cp_Greeting = \
self.resources.GreetingLabels[1]
if self.myConfig.cp_PrivateOfficialLetter.cp_Salutation:
self.myConfig.cp_PrivateOfficialLetter.cp_Salutation = \
self.resources.SalutationLabels[1]
if self.myConfig.cp_PrivateLetter.cp_Greeting:
self.myConfig.cp_PrivateLetter.cp_Greeting = \
self.resources.GreetingLabels[2]
if self.myConfig.cp_PrivateLetter.cp_Salutation:
self.myConfig.cp_PrivateLetter.cp_Salutation = \
self.resources.SalutationLabels[2]
if self.myPathSelection.xSaveTextBox.Text.lower() == "":
self.myPathSelection.initializePath()
xContainerWindow = self.myLetterDoc.xFrame.ContainerWindow
self.createWindowPeer(xContainerWindow)
self.insertRoadmap()
self.setConfiguration()
self.setDefaultForGreetingAndSalutation()
self.initializeElements()
self.myLetterDoc.xFrame.ComponentWindow.Enable = False
self.executeDialogFromComponent(self.myLetterDoc.xFrame)
self.removeTerminateListener()
self.closeDocument()
self.running = False
except Exception:
self.removeTerminateListener()
traceback.print_exc()
self.running = False
return
def cancelWizard(self):
self.xUnoDialog.endExecute()
self.running = False
def finishWizard(self):
self.switchToStep(self.getCurrentStep(), self.nMaxStep)
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()
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
self.myLetterDoc.setWizardTemplateDocInfo(
self.resources.resLetterWizardDialog_title,
self.resources.resTemplateDescription)
self.myLetterDoc.killEmptyUserFields()
self.myLetterDoc.keepLogoFrame = self.chkUseLogo.State != 0
if self.chkBusinessPaper.State != 0 \
and self.chkPaperCompanyLogo.State != 0:
self.myLetterDoc.keepLogoFrame = False
self.myLetterDoc.keepBendMarksFrame = \
self.chkUseBendMarks.State != 0
self.myLetterDoc.keepLetterSignsFrame = \
self.chkUseSigns.State != 0
self.myLetterDoc.keepSenderAddressRepeatedFrame = \
self.chkUseAddressReceiver.State != 0
if self.optBusinessLetter.State:
if self.chkBusinessPaper.State != 0 \
and self.chkCompanyReceiver.State != 0:
self.myLetterDoc.keepSenderAddressRepeatedFrame = False
if self.chkBusinessPaper.State != 0 \
and self.chkPaperCompanyAddress.State != 0:
self.myLetterDoc.keepAddressFrame = False
self.myLetterDoc.killEmptyFrames()
self.bSaveSuccess = \
OfficeDocument.store(
self.xMSF, self.myLetterDoc.xTextDocument,
self.sPath, "writer8_template")
if self.bSaveSuccess:
self.saveConfiguration()
xIH = self.xMSF.createInstance(
"com.sun.star.comp.uui.UUIInteractionHandler")
loadValues = list(range(4))
loadValues[0] = uno.createUnoStruct( \
'com.sun.star.beans.PropertyValue')
loadValues[0].Name = "AsTemplate"
loadValues[1] = uno.createUnoStruct( \
'com.sun.star.beans.PropertyValue')
loadValues[1].Name = "MacroExecutionMode"
loadValues[1].Value = ALWAYS_EXECUTE
loadValues[2] = uno.createUnoStruct( \
'com.sun.star.beans.PropertyValue')
loadValues[2].Name = "UpdateDocMode"
loadValues[2].Value = FULL_UPDATE
loadValues[3] = uno.createUnoStruct( \
'com.sun.star.beans.PropertyValue')
loadValues[3].Name = "InteractionHandler"
loadValues[3].Value = xIH
if self.bEditTemplate:
loadValues[0].Value = False
else:
loadValues[0].Value = True
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:
xCloseable = self.myLetterDoc.xFrame
xCloseable.close(False)
except CloseVetoException:
traceback.print_exc()
def optBusinessLetterItemChanged(self):
self.lstPrivateStylePos = None
self.lstPrivOfficialStylePos = None
self.xDialogModel.lblBusinessStyle.Enabled = True
self.xDialogModel.lstBusinessStyle.Enabled = True
self.xDialogModel.chkBusinessPaper.Enabled = True
self.xDialogModel.lblPrivOfficialStyle.Enabled = False
self.xDialogModel.lstPrivOfficialStyle.Enabled = False
self.xDialogModel.lblPrivateStyle.Enabled = False
self.xDialogModel.lstPrivateStyle.Enabled = False
self.lstBusinessStyleItemChanged()
self.enableSenderReceiver()
self.setPossibleFooter(True)
if self.myPathSelection.xSaveTextBox.Text.lower() == "":
self.myPathSelection.initializePath()
def optPrivOfficialLetterItemChanged(self):
self.lstBusinessStylePos = None
self.lstPrivateStylePos = None
self.xDialogModel.lblBusinessStyle.Enabled = False
self.xDialogModel.lstBusinessStyle.Enabled = False
self.xDialogModel.chkBusinessPaper.Enabled = False
self.xDialogModel.lblPrivOfficialStyle.Enabled = True
self.xDialogModel.lstPrivOfficialStyle.Enabled = True
self.xDialogModel.lblPrivateStyle.Enabled = False
self.xDialogModel.lstPrivateStyle.Enabled = False
self.lstPrivOfficialStyleItemChanged()
self.disableBusinessPaper()
self.disableSenderReceiver()
self.setPossibleFooter(True)
if self.myPathSelection.xSaveTextBox.Text.lower() == "":
self.myPathSelection.initializePath()
self.myLetterDoc.fillSenderWithUserData()
def optPrivateLetterItemChanged(self):
self.lstBusinessStylePos = None
self.lstPrivOfficialStylePos = None
self.xDialogModel.lblBusinessStyle.Enabled = False
self.xDialogModel.lstBusinessStyle.Enabled = False
self.xDialogModel.chkBusinessPaper.Enabled = False
self.xDialogModel.lblPrivOfficialStyle.Enabled = False
self.xDialogModel.lstPrivOfficialStyle.Enabled = False
self.xDialogModel.lblPrivateStyle.Enabled = True
self.xDialogModel.lstPrivateStyle.Enabled = True
self.lstPrivateStyleItemChanged()
self.disableBusinessPaper()
self.disableSenderReceiver()
self.setPossibleFooter(False)
if self.myPathSelection.xSaveTextBox.Text.lower() == "":
self.myPathSelection.initializePath()
def optSenderPlaceholderItemChanged(self):
self.xDialogModel.lblSenderName.Enabled = False
self.xDialogModel.lblSenderStreet.Enabled = False
self.xDialogModel.lblPostCodeCity.Enabled = False
self.xDialogModel.txtSenderName.Enabled = False
self.xDialogModel.txtSenderStreet.Enabled = False
self.xDialogModel.txtSenderPostCode.Enabled = False
self.xDialogModel.txtSenderState.Enabled = False
self.xDialogModel.txtSenderCity.Enabled = False
self.myLetterDoc.fillSenderWithUserData()
def optSenderDefineItemChanged(self):
self.xDialogModel.lblSenderName.Enabled = True
self.xDialogModel.lblSenderStreet.Enabled = True
self.xDialogModel.lblPostCodeCity.Enabled = True
self.xDialogModel.txtSenderName.Enabled = True
self.xDialogModel.txtSenderStreet.Enabled = True
self.xDialogModel.txtSenderPostCode.Enabled = True
self.xDialogModel.txtSenderState.Enabled = True
self.xDialogModel.txtSenderCity.Enabled = True
self.txtSenderNameTextChanged()
self.txtSenderStreetTextChanged()
self.txtSenderPostCodeTextChanged()
self.txtSenderStateTextChanged()
self.txtSenderCityTextChanged()
def lstBusinessStyleItemChanged(self):
selectedItemPos = self.lstBusinessStyle.SelectedItemPos
if self.lstBusinessStylePos != selectedItemPos:
self.lstBusinessStylePos = selectedItemPos
self.myLetterDoc.loadAsPreview(
self.BusinessFiles[1][selectedItemPos], False)
self.initializeElements()
self.chkBusinessPaperItemChanged()
self.setElements(False)
self.drawConstants()
def lstPrivOfficialStyleItemChanged(self):
selectedItemPos = self.lstPrivOfficialStyle.SelectedItemPos
if self.lstPrivOfficialStylePos != selectedItemPos:
self.lstPrivOfficialStylePos = selectedItemPos
self.myLetterDoc.loadAsPreview(
self.OfficialFiles[1][selectedItemPos], False)
self.initializeElements()
self.setPossibleSenderData(True)
self.setElements(False)
self.drawConstants()
def lstPrivateStyleItemChanged(self):
selectedItemPos = self.lstPrivateStyle.SelectedItemPos
if self.lstPrivateStylePos != selectedItemPos:
self.lstPrivateStylePos = selectedItemPos
self.myLetterDoc.xTextDocument = \
self.myLetterDoc.loadAsPreview(
self.PrivateFiles[1][selectedItemPos], False)
self.initializeElements()
self.setElements(True)
def numLogoHeightTextChanged(self):
self.BusCompanyLogo.iHeight = int(self.numLogoHeight.Value * 1000)
self.BusCompanyLogo.setFramePosition()
def numLogoWidthTextChanged(self):
self.BusCompanyLogo.iWidth = int(self.numLogoWidth.Value * 1000)
self.BusCompanyLogo.setFramePosition()
def numLogoXTextChanged(self):
self.BusCompanyLogo.iXPos = int(self.numLogoX.Value * 1000)
self.BusCompanyLogo.setFramePosition()
def numLogoYTextChanged(self):
self.BusCompanyLogo.iYPos = int(self.numLogoY.Value * 1000)
self.BusCompanyLogo.setFramePosition()
def numAddressWidthTextChanged(self):
self.BusCompanyAddress.iWidth = int(self.numAddressWidth.Value * 1000)
self.BusCompanyAddress.setFramePosition()
def numAddressXTextChanged(self):
self.BusCompanyAddress.iXPos = int(self.numAddressX.Value * 1000)
self.BusCompanyAddress.setFramePosition()
def numAddressYTextChanged(self):
self.BusCompanyAddress.iYPos = int(self.numAddressY.Value * 1000)
self.BusCompanyAddress.setFramePosition()
def numAddressHeightTextChanged(self):
self.BusCompanyAddress.iHeight = int(self.numAddressHeight.Value * 1000)
self.BusCompanyAddress.setFramePosition()
def numFooterHeightTextChanged(self):
self.BusFooter.iHeight = int(self.numFooterHeight.Value * 1000)
self.BusFooter.iYPos = \
self.myLetterDoc.DocSize.Height - self.BusFooter.iHeight
self.BusFooter.setFramePosition()
def chkPaperCompanyLogoItemChanged(self):
if self.chkPaperCompanyLogo.State != 0:
if self.numLogoWidth.Value == 0:
self.numLogoWidth.Value = 0.1
if self.numLogoHeight.Value == 0:
self.numLogoHeight.Value = 0.1
self.BusCompanyLogo = BusinessPaperObject(
self.myLetterDoc.xTextDocument, "Company Logo",
int(self.numLogoWidth.Value * 1000),
int(self.numLogoHeight.Value * 1000),
int(self.numLogoX.Value * 1000),
self.numLogoY.Value * 1000)
self.xDialogModel.numLogoHeight.Enabled = True
self.xDialogModel.numLogoWidth.Enabled = True
self.xDialogModel.numLogoX.Enabled = True
self.xDialogModel.numLogoY.Enabled = True
self.setPossibleLogo(False)
else:
if self.BusCompanyLogo is not None:
self.BusCompanyLogo.removeFrame()
self.xDialogModel.numLogoHeight.Enabled = False
self.xDialogModel.numLogoWidth.Enabled = False
self.xDialogModel.numLogoX.Enabled = False
self.xDialogModel.numLogoY.Enabled = False
self.setPossibleLogo(True)
def chkPaperCompanyAddressItemChanged(self):
if self.chkPaperCompanyAddress.State != 0:
if self.numAddressWidth.Value == 0:
self.numAddressWidth.Value = 0.1
if self.numAddressHeight.Value == 0:
self.numAddressHeight.Value = 0.1
self.BusCompanyAddress = BusinessPaperObject(
self.myLetterDoc.xTextDocument, "Company Address",
int(self.numAddressWidth.Value * 1000),
int(self.numAddressHeight.Value * 1000),
int(self.numAddressX.Value * 1000),
int(self.numAddressY.Value * 1000))
self.xDialogModel.numAddressHeight.Enabled = True
self.xDialogModel.numAddressWidth.Enabled = True
self.xDialogModel.numAddressX.Enabled = True
self.xDialogModel.numAddressY.Enabled = True
if self.myLetterDoc.hasElement("Sender Address"):
self.myLetterDoc.switchElement(
"Sender Address", False)
if self.chkCompanyReceiver.State != 0:
self.setPossibleSenderData(False)
else:
if self.BusCompanyAddress is not None:
self.BusCompanyAddress.removeFrame()
self.xDialogModel.numAddressHeight.Enabled = False
self.xDialogModel.numAddressWidth.Enabled = False
self.xDialogModel.numAddressX.Enabled = False
self.xDialogModel.numAddressY.Enabled = False
if self.myLetterDoc.hasElement("Sender Address"):
self.myLetterDoc.switchElement("Sender Address", True)
self.setPossibleSenderData(True)
if self.optSenderDefine.State:
self.optSenderDefineItemChanged()
if self.optSenderPlaceholder.State:
self.optSenderPlaceholderItemChanged()
def chkCompanyReceiverItemChanged(self):
xReceiverFrame = None
if self.chkCompanyReceiver.State != 0:
try:
xReceiverFrame = self.myLetterDoc.getFrameByName(
"Receiver Address", self.myLetterDoc.xTextDocument)
iFrameWidth = int(xReceiverFrame.Width)
iFrameX = int(xReceiverFrame.HoriOrientPosition)
iFrameY = int(xReceiverFrame.VertOrientPosition)
iReceiverHeight = int(0.5 * 1000)
self.BusCompanyAddressReceiver = BusinessPaperObject(
self.myLetterDoc.xTextDocument, " ", iFrameWidth, iReceiverHeight,
iFrameX, iFrameY - iReceiverHeight)
self.setPossibleAddressReceiver(False)
except Exception:
traceback.print_exc()
if self.chkPaperCompanyAddress.State != 0:
self.setPossibleSenderData(False)
else:
if self.BusCompanyAddressReceiver is not None:
self.BusCompanyAddressReceiver.removeFrame()
self.setPossibleAddressReceiver(True)
self.setPossibleSenderData(True)
if self.optSenderDefine.State:
self.optSenderDefineItemChanged()
if self.optSenderPlaceholder.State:
self.optSenderPlaceholderItemChanged()
def chkPaperFooterItemChanged(self):
if self.chkPaperFooter.State != 0:
if self.numFooterHeight.Value == 0:
self.numFooterHeight.Value = 0.1
self.BusFooter = BusinessPaperObject(
self.myLetterDoc.xTextDocument, "Footer",
self.myLetterDoc.DocSize.Width,
int(self.numFooterHeight.Value * 1000), 0,
int(self.myLetterDoc.DocSize.Height - \
(self.numFooterHeight.Value * 1000)))
self.xDialogModel.numFooterHeight.Enabled = True
self.xDialogModel.lblFooterHeight.Enabled = True
self.setPossibleFooter(False)
else:
if self.BusFooter is not None:
self.BusFooter.removeFrame()
self.xDialogModel.numFooterHeight.Enabled = False
self.xDialogModel.lblFooterHeight.Enabled = False
self.setPossibleFooter(True)
def chkUseLogoItemChanged(self):
try:
if self.myLetterDoc.hasElement("Company Logo"):
logostatus = \
bool(self.xDialogModel.chkUseLogo.Enabled) \
and (self.chkUseLogo.State != 0)
self.myLetterDoc.switchElement(
"Company Logo", logostatus)
except Exception:
traceback.print_exc()
def chkUseAddressReceiverItemChanged(self):
try:
if self.myLetterDoc.hasElement("Sender Address Repeated"):
rstatus = \
bool(self.xDialogModel.chkUseAddressReceiver.Enabled) \
and (self.chkUseAddressReceiver.State != 0)
self.myLetterDoc.switchElement(
"Sender Address Repeated", rstatus)
except Exception:
traceback.print_exc()
def chkUseSignsItemChanged(self):
if self.myLetterDoc.hasElement("Letter Signs"):
self.myLetterDoc.switchElement(
"Letter Signs", self.chkUseSigns.State != 0)
def chkUseSubjectItemChanged(self):
if self.myLetterDoc.hasElement("Subject Line"):
self.myLetterDoc.switchElement(
"Subject Line", self.chkUseSubject.State != 0)
def chkUseBendMarksItemChanged(self):
if self.myLetterDoc.hasElement("Bend Marks"):
self.myLetterDoc.switchElement(
"Bend Marks", self.chkUseBendMarks.State != 0)
def chkUseFooterItemChanged(self):
try:
bFooterPossible = (self.chkUseFooter.State != 0) \
and bool(self.xDialogModel.chkUseFooter.Enabled)
if self.chkFooterNextPages.State != 0:
self.myLetterDoc.switchFooter(
"First Page", False, self.chkFooterPageNumbers.State != 0,
self.txtFooter.Text)
self.myLetterDoc.switchFooter("Standard", bFooterPossible,
self.chkFooterPageNumbers.State != 0, self.txtFooter.Text)
else:
self.myLetterDoc.switchFooter(
"First Page", bFooterPossible,
self.chkFooterPageNumbers.State != 0, self.txtFooter.Text)
self.myLetterDoc.switchFooter(
"Standard", bFooterPossible,
self.chkFooterPageNumbers.State != 0, self.txtFooter.Text)
BPaperItem = \
self.getRoadmapItemByID(LetterWizardDialogImpl.RM_FOOTER)
BPaperItem.Enabled = bFooterPossible
except Exception:
traceback.print_exc()
def chkFooterNextPagesItemChanged(self):
self.chkUseFooterItemChanged()
def chkFooterPageNumbersItemChanged(self):
self.chkUseFooterItemChanged()
def setPossibleFooter(self, bState):
self.xDialogModel.chkUseFooter.Enabled = bState
self.chkUseFooterItemChanged()
def setPossibleAddressReceiver(self, bState):
if self.myLetterDoc.hasElement("Sender Address Repeated"):
self.xDialogModel.chkUseAddressReceiver.Enabled = bState
self.chkUseAddressReceiverItemChanged()
def setPossibleLogo(self, bState):
if self.myLetterDoc.hasElement("Company Logo"):
self.xDialogModel.chkUseLogo.Enabled = bState
self.chkUseLogoItemChanged()
def txtFooterTextChanged(self):
self.chkUseFooterItemChanged()
def txtSenderNameTextChanged(self):
myFieldHandler = TextFieldHandler(
self.myLetterDoc.xMSF, self.myLetterDoc.xTextDocument)
myFieldHandler.changeUserFieldContent(
"Company", self.txtSenderName.Text)
def txtSenderStreetTextChanged(self):
myFieldHandler = TextFieldHandler(
self.myLetterDoc.xMSF, self.myLetterDoc.xTextDocument)
myFieldHandler.changeUserFieldContent(
"Street", self.txtSenderStreet.Text)
def txtSenderCityTextChanged(self):
myFieldHandler = TextFieldHandler(
self.myLetterDoc.xMSF, self.myLetterDoc.xTextDocument)
myFieldHandler.changeUserFieldContent(
"City", self.txtSenderCity.Text)
def txtSenderPostCodeTextChanged(self):
myFieldHandler = TextFieldHandler(
self.myLetterDoc.xMSF, self.myLetterDoc.xTextDocument)
myFieldHandler.changeUserFieldContent(
"PostCode", self.txtSenderPostCode.Text)
def txtSenderStateTextChanged(self):
myFieldHandler = TextFieldHandler(
self.myLetterDoc.xMSF, self.myLetterDoc.xTextDocument)
myFieldHandler.changeUserFieldContent(
"State", self.txtSenderState.Text)
def txtTemplateNameTextChanged(self):
xDocProps = self.myLetterDoc.xTextDocument.DocumentProperties
TitleName = self.txtTemplateName.Text
xDocProps.Title = TitleName
def chkUseSalutationItemChanged(self):
self.myLetterDoc.switchUserField(
"Salutation", self.lstSalutation.Text,
self.chkUseSalutation.State != 0)
self.xDialogModel.lstSalutation.Enabled = \
self.chkUseSalutation.State != 0
def lstSalutationItemChanged(self):
self.myLetterDoc.switchUserField(
"Salutation", self.lstSalutation.Text,
self.chkUseSalutation.State != 0)
def chkUseGreetingItemChanged(self):
self.myLetterDoc.switchUserField(
"Greeting", self.lstGreeting.Text, self.chkUseGreeting.State != 0)
self.xDialogModel.lstGreeting.Enabled = \
self.chkUseGreeting.State != 0
def setDefaultForGreetingAndSalutation(self):
if self.lstSalutation.Text:
self.lstSalutation.Text = self.resources.SalutationLabels[0]
if self.lstGreeting.Text:
self.lstGreeting.Text = self.resources.GreetingLabels[0]
def lstGreetingItemChanged(self):
self.myLetterDoc.switchUserField(
"Greeting", self.lstGreeting.Text, self.chkUseGreeting.State != 0)
def chkBusinessPaperItemChanged(self):
if self.chkBusinessPaper.State != 0:
self.enableBusinessPaper()
else:
self.disableBusinessPaper()
self.setPossibleSenderData(True)
def setPossibleSenderData(self, bState):
self.xDialogModel.optSenderDefine.Enabled = bState
self.xDialogModel.optSenderPlaceholder.Enabled = bState
self.xDialogModel.lblSenderAddress.Enabled = bState
if not bState:
self.xDialogModel.txtSenderCity.Enabled = bState
self.xDialogModel.txtSenderName.Enabled = bState
self.xDialogModel.txtSenderPostCode.Enabled = bState
self.xDialogModel.txtSenderStreet.Enabled = bState
self.xDialogModel.txtSenderCity.Enabled = bState
self.xDialogModel.txtSenderState.Enabled = bState
self.xDialogModel.lblSenderName.Enabled = bState
self.xDialogModel.lblSenderStreet.Enabled = bState
self.xDialogModel.lblPostCodeCity.Enabled = bState
def enableSenderReceiver(self):
BPaperItem = self.getRoadmapItemByID(
LetterWizardDialogImpl.RM_SENDERRECEIVER)
BPaperItem.Enabled = True
def disableSenderReceiver(self):
BPaperItem = self.getRoadmapItemByID(
LetterWizardDialogImpl.RM_SENDERRECEIVER)
BPaperItem.Enabled = False
def enableBusinessPaper(self):
try:
BPaperItem = self.getRoadmapItemByID(
LetterWizardDialogImpl.RM_BUSINESSPAPER)
BPaperItem.Enabled = True
self.chkPaperCompanyLogoItemChanged()
self.chkPaperCompanyAddressItemChanged()
self.chkPaperFooterItemChanged()
self.chkCompanyReceiverItemChanged()
except Exception:
traceback.print_exc()
def disableBusinessPaper(self):
try:
BPaperItem = self.getRoadmapItemByID(
LetterWizardDialogImpl.RM_BUSINESSPAPER)
BPaperItem.Enabled = False
if self.BusCompanyLogo is not None:
self.BusCompanyLogo.removeFrame()
if self.BusCompanyAddress is not None:
self.BusCompanyAddress.removeFrame()
if self.BusFooter is not None:
self.BusFooter.removeFrame()
if self.BusCompanyAddressReceiver is not None:
self.BusCompanyAddressReceiver.removeFrame()
self.setPossibleAddressReceiver(True)
self.setPossibleFooter(True)
self.setPossibleLogo(True)
if self.myLetterDoc.hasElement("Sender Address"):
self.myLetterDoc.switchElement(
"Sender Address", True)
except Exception:
traceback.print_exc()
def initializeSalutation(self):
self.xDialogModel.lstSalutation.StringItemList = \
tuple(self.resources.SalutationLabels)
def initializeGreeting(self):
self.xDialogModel.lstGreeting.StringItemList = \
tuple(self.resources.GreetingLabels)
def initializeTemplates(self, xMSF):
sLetterPath = self.sTemplatePath + "/wizard/letter"
self.BusinessFiles = \
FileAccess.getFolderTitles(
xMSF, "bus", sLetterPath, self.resources.dictBusinessTemplate)
self.OfficialFiles = \
FileAccess.getFolderTitles(
xMSF, "off", sLetterPath, self.resources.dictOfficialTemplate)
self.PrivateFiles = \
FileAccess.getFolderTitles(
xMSF, "pri", sLetterPath, self.resources.dictPrivateTemplate)
self.xDialogModel.lstBusinessStyle.StringItemList = \
tuple(self.BusinessFiles[0])
self.xDialogModel.lstPrivOfficialStyle.StringItemList = \
tuple(self.OfficialFiles[0])
self.xDialogModel.lstPrivateStyle.StringItemList = \
tuple(self.PrivateFiles[0])
self.xDialogModel.lstBusinessStyle.SelectedItems = (0,)
self.xDialogModel.lstPrivOfficialStyle.SelectedItems = (0,)
self.xDialogModel.lstPrivateStyle.SelectedItems = (0,)
return True
def initializeElements(self):
self.xDialogModel.chkUseLogo.Enabled = \
self.myLetterDoc.hasElement("Company Logo")
self.xDialogModel.chkUseBendMarks.Enabled = \
self.myLetterDoc.hasElement("Bend Marks")
self.xDialogModel.chkUseAddressReceiver.Enabled = \
self.myLetterDoc.hasElement("Sender Address Repeated")
self.xDialogModel.chkUseSubject.Enabled = \
self.myLetterDoc.hasElement("Subject Line")
self.xDialogModel.chkUseSigns.Enabled = \
self.myLetterDoc.hasElement("Letter Signs")
self.myLetterDoc.updateDateFields()
def setConfiguration(self):
if self.optBusinessLetter.State:
self.optBusinessLetterItemChanged()
elif self.optPrivOfficialLetter.State:
self.optPrivOfficialLetterItemChanged()
elif self.optPrivateLetter.State:
self.optPrivateLetterItemChanged()
def optReceiverPlaceholderItemChanged(self):
OfficeDocument.attachEventCall(
self.myLetterDoc.xTextDocument, "OnNew", "StarBasic",
"macro:///Template.Correspondence.Placeholder()")
def optReceiverDatabaseItemChanged(self):
OfficeDocument.attachEventCall(
self.myLetterDoc.xTextDocument, "OnNew", "StarBasic",
"macro:///Template.Correspondence.Database()")
def setElements(self, privLetter):
if self.optSenderDefine.State:
self.optSenderDefineItemChanged()
if self.optSenderPlaceholder.State:
self.optSenderPlaceholderItemChanged()
self.chkUseSignsItemChanged()
self.chkUseSubjectItemChanged()
self.chkUseSalutationItemChanged()
self.chkUseGreetingItemChanged()
self.chkUseBendMarksItemChanged()
self.chkUseAddressReceiverItemChanged()
self.txtTemplateNameTextChanged()
if self.optReceiverDatabase.State and not privLetter:
self.optReceiverDatabaseItemChanged()
if self.optReceiverPlaceholder.State and not privLetter:
self.optReceiverPlaceholderItemChanged()
if self.optCreateLetter.State:
self.optCreateFromTemplateItemChanged()
if self.optMakeChanges.State:
self.optMakeChangesItemChanged()
def drawConstants(self):
'''Localise the template'''
constRangeList = self.myLetterDoc.searchFillInItems(1)
for i in constRangeList:
text = i.String.lower()
aux = TextElement(i, self.resources.dictConstants[text])
aux.write()
def insertRoadmap(self):
self.addRoadmap()
self.insertRoadMapItems(
self.resources.RoadmapLabels,
[True, False, True, True, False, True])
self.setRoadmapInteractive(True)
self.setRoadmapComplete(True)
self.setCurrentRoadmapItemID(1)
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 + 47),
HelpIds.getHelpIdString(HID + 48))
self.myPathSelection.sDefaultDirectory = self.sUserTemplatePath
self.myPathSelection.sDefaultName = "myLetterTemplate.ott"
self.myPathSelection.sDefaultFilter = "writer8_template"
self.myPathSelection.addSelectionListener(self)
def initConfiguration(self):
try:
root = Configuration.getConfigurationRoot(
self.xMSF, "/org.openoffice.Office.Writer/Wizards/Letter",
False)
self.myConfig.readConfiguration(root, "cp_")
RadioDataAware.attachRadioButtons(self.myConfig, "cp_LetterType",
(self.optBusinessLetter, self.optPrivOfficialLetter,
self.optPrivateLetter), True).updateUI()
UnoDataAware.attachListBox(
self.myConfig.cp_BusinessLetter, "cp_Style",
self.lstBusinessStyle, True).updateUI()
UnoDataAware.attachListBox(
self.myConfig.cp_PrivateOfficialLetter, "cp_Style",
self.lstPrivOfficialStyle, True).updateUI()
UnoDataAware.attachListBox(
self.myConfig.cp_PrivateLetter, "cp_Style",
self.lstPrivateStyle, True).updateUI()
UnoDataAware.attachCheckBox(
self.myConfig.cp_BusinessLetter, "cp_BusinessPaper",
self.chkBusinessPaper, True).updateUI()
cgl = self.myConfig.cp_BusinessLetter
cgpl = self.myConfig.cp_BusinessLetter.cp_CompanyLogo
cgpa = self.myConfig.cp_BusinessLetter.cp_CompanyAddress
UnoDataAware.attachCheckBox(
cgpl, "cp_Display", self.chkPaperCompanyLogo, True).updateUI()
UnoDataAware.attachNumericControl(
cgpl, "cp_Width", self.numLogoWidth, True).updateUI()
UnoDataAware.attachNumericControl(
cgpl, "cp_Height", self.numLogoHeight, True).updateUI()
UnoDataAware.attachNumericControl(
cgpl, "cp_X", self.numLogoX, True).updateUI()
UnoDataAware.attachNumericControl(
cgpl, "cp_Y", self.numLogoY, True).updateUI()
UnoDataAware.attachCheckBox(
cgpa, "cp_Display", self.chkPaperCompanyAddress, True).updateUI()
UnoDataAware.attachNumericControl(
cgpa, "cp_Width", self.numAddressWidth, True).updateUI()
UnoDataAware.attachNumericControl(
cgpa, "cp_Height", self.numAddressHeight, True).updateUI()
UnoDataAware.attachNumericControl(
cgpa, "cp_X", self.numAddressX, True).updateUI()
UnoDataAware.attachNumericControl(
cgpa, "cp_Y", self.numAddressY, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PaperCompanyAddressReceiverField",
self.chkCompanyReceiver, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PaperFooter", self.chkPaperFooter, True).updateUI()
UnoDataAware.attachNumericControl(
cgl, "cp_PaperFooterHeight", self.numFooterHeight, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintCompanyLogo", self.chkUseLogo, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintCompanyAddressReceiverField",
self.chkUseAddressReceiver, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintLetterSigns", self.chkUseSigns, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintSubjectLine", self.chkUseSubject, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintSalutation", self.chkUseSalutation, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintBendMarks", self.chkUseBendMarks, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintGreeting", self.chkUseGreeting, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_PrintFooter", self.chkUseFooter, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_Salutation", self.lstSalutation, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_Greeting", self.lstGreeting, True).updateUI()
RadioDataAware.attachRadioButtons(
cgl, "cp_SenderAddressType",
(self.optSenderDefine, self.optSenderPlaceholder), True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_SenderCompanyName", self.txtSenderName, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_SenderStreet", self.txtSenderStreet, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_SenderPostCode", self.txtSenderPostCode, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_SenderState", self.txtSenderState, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_SenderCity", self.txtSenderCity, True).updateUI()
RadioDataAware.attachRadioButtons(
cgl, "cp_ReceiverAddressType",
(self.optReceiverDatabase, self.optReceiverPlaceholder),
True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_Footer", self.txtFooter, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_FooterOnlySecondPage",
self.chkFooterNextPages, True).updateUI()
UnoDataAware.attachCheckBox(
cgl, "cp_FooterPageNumbers",
self.chkFooterPageNumbers, True).updateUI()
RadioDataAware.attachRadioButtons(
cgl, "cp_CreationType",
(self.optCreateLetter, self.optMakeChanges), True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_TemplateName", self.txtTemplateName, True).updateUI()
UnoDataAware.attachEditControl(
cgl, "cp_TemplatePath", self.myPathSelection.xSaveTextBox,
True).updateUI()
except Exception:
traceback.print_exc()
def saveConfiguration(self):
try:
root = Configuration.getConfigurationRoot(self.xMSF,
"/org.openoffice.Office.Writer/Wizards/Letter", True)
self.myConfig.writeConfiguration(root, "cp_")
root.commitChanges()
except Exception:
traceback.print_exc()
def validatePath(self):
if self.myPathSelection.usedPathPicker:
self.filenameChanged = True
self.myPathSelection.usedPathPicker = False

View File

@@ -0,0 +1,150 @@
#
# 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
if sys.version_info < (3,4):
import imp
imp.load_source('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc'))
import strings
elif sys.version_info < (3,7):
# imp is deprecated since Python v.3.4
from importlib.machinery import SourceFileLoader
SourceFileLoader('strings', os.path.join(os.path.dirname(__file__), '../common/strings.hrc')).load_module()
import strings
else:
# have to jump through hoops since 3.7, partly because python does not like loading modules that do have a .py extension
import importlib
import importlib.util
import importlib.machinery
module_name = 'strings'
path = os.path.join(os.path.dirname(__file__), '../common/strings.hrc')
spec = importlib.util.spec_from_loader(
module_name,
importlib.machinery.SourceFileLoader(module_name, path)
)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
sys.modules[module_name] = module
strings = module
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)