123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- #
- # 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)
|