diff options
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/com/sun/star/wizards/common/Helper.py | 63 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/common/NumberFormatter.py | 232 | ||||
-rw-r--r-- | wizards/com/sun/star/wizards/text/TextDocument.py | 32 |
3 files changed, 258 insertions, 69 deletions
diff --git a/wizards/com/sun/star/wizards/common/Helper.py b/wizards/com/sun/star/wizards/common/Helper.py index 5e52a0c2811a..d1ebdfcb787a 100644 --- a/wizards/com/sun/star/wizards/common/Helper.py +++ b/wizards/com/sun/star/wizards/common/Helper.py @@ -1,13 +1,13 @@ import uno -import locale +import calendar import traceback +from datetime import date as DateTime from com.sun.star.uno import Exception as UnoException from com.sun.star.uno import RuntimeException +from NumberFormatter import NumberFormatter class Helper(object): - DAY_IN_MILLIS = (24 * 60 * 60 * 1000) - def convertUnoDatetoInteger(self, DateValue): oCal = java.util.Calendar.getInstance() oCal.set(DateValue.Year, DateValue.Month, DateValue.Day) @@ -165,16 +165,13 @@ class Helper(object): class DateUtils(object): - def __init__(self, xmsf, docMSF): - defaults = docMSF.createInstance("com.sun.star.text.Defaults") + def __init__(self, xmsf, document): + defaults = document.createInstance("com.sun.star.text.Defaults") l = Helper.getUnoStructValue(defaults, "CharLocale") - jl = locale.setlocale(l.Language, l.Country, l.Variant) - self.calendar = Calendar.getInstance(jl) self.formatSupplier = document formatSettings = self.formatSupplier.getNumberFormatSettings() date = Helper.getUnoPropertyValue(formatSettings, "NullDate") - self.calendar.set(date.Year, date.Month - 1, date.Day) - self.docNullTime = getTimeInMillis() + self.calendar = DateTime(date.Year, date.Month, date.Day) self.formatter = NumberFormatter.createNumberFormatter(xmsf, self.formatSupplier) @@ -187,56 +184,12 @@ class Helper(object): return NumberFormatter.getNumberFormatterKey( self.formatSupplier, format) - def getFormatter(self): - return self.formatter - - def getTimeInMillis(self): - dDate = self.calendar.getTime() - return dDate.getTime() - ''' @param date a VCL date in form of 20041231 @return a document relative date ''' - def getDocumentDateAsDouble(self, date): - self.calendar.clear() - self.calendar.set( - date / 10000, (date % 10000) / 100 - 1, date % 100) - date1 = getTimeInMillis() - ''' - docNullTime and date1 are in millis, but - I need a day... - ''' - - daysDiff = (date1 - self.docNullTime) / DAY_IN_MILLIS + 1 - return daysDiff - - def getDocumentDateAsDouble(self, date): - return getDocumentDateAsDouble( - date.Year * 10000 + date.Month * 100 + date.Day) - - def getDocumentDateAsDouble(self, javaTimeInMillis): - self.calendar.clear() - JavaTools.setTimeInMillis(self.calendar, javaTimeInMillis) - date1 = getTimeInMillis() - - ''' - docNullTime and date1 are in millis, but - I need a day... - ''' - - daysDiff = (date1 - self.docNullTime) / DAY_IN_MILLIS + 1 - return daysDiff - def format(self, formatIndex, date): + difference = date - self.calendar return self.formatter.convertNumberToString(formatIndex, - getDocumentDateAsDouble(date)) - - def format(self, formatIndex, date): - return self.formatter.convertNumberToString(formatIndex, - getDocumentDateAsDouble(date)) - - def format(self, formatIndex, javaTimeInMillis): - return self.formatter.convertNumberToString(formatIndex, - getDocumentDateAsDouble(javaTimeInMillis)) + difference.days) diff --git a/wizards/com/sun/star/wizards/common/NumberFormatter.py b/wizards/com/sun/star/wizards/common/NumberFormatter.py new file mode 100644 index 000000000000..eff9f16c220c --- /dev/null +++ b/wizards/com/sun/star/wizards/common/NumberFormatter.py @@ -0,0 +1,232 @@ +import traceback +from com.sun.star.lang import Locale +from com.sun.star.util.NumberFormat import DATE, LOGICAL, DATETIME, TEXT, NUMBER + +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): + print "yepa" + 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) + + ''' + @param dateCorrection The lDateCorrection to set. + ''' + + def setNullDateCorrection(self, dateCorrection): + self.lDateCorrection = dateCorrection + + def defineNumberFormat(self, _FormatString): + try: + NewFormatKey = self.xNumberFormats.queryKey( + _FormatString, self.aLocale, True) + if NewFormatKey is -1: + NewFormatKey = self.xNumberFormats.addNew( + _FormatString, self.aLocale) + + return NewFormatKey + except Exception, e: + traceback.print_exc() + return -1 + + ''' + returns a numberformat for a FormatString. + @param _FormatString + @param _aLocale + @return + ''' + + def defineNumberFormat(self, _FormatString, _aLocale): + try: + NewFormatKey = self.xNumberFormats.queryKey( + _FormatString, _aLocale, True) + if NewFormatKey == -1: + NewFormatKey = self.xNumberFormats.addNew( + _FormatString, _aLocale) + + return NewFormatKey + except Exception, e: + traceback.print_exc() + return -1 + + def setNumberFormat(self, _xFormatObject, _FormatKey, _oNumberFormatter): + try: + xNumberFormat = _oNumberFormatter.xNumberFormats.getByKey( + _FormatKey) + FormatString = str(Helper.getUnoPropertyValue( + xNumberFormat, "FormatString")) + oLocale = Helper.getUnoPropertyValue(xNumberFormat, "Locale") + NewFormatKey = defineNumberFormat(FormatString, oLocale) + _xFormatObject.setPropertyValue( + "FormatsSupplier", + _oNumberFormatter.xNumberFormatter.getNumberFormatsSupplier()) + if _xFormatObject.getPropertySetInfo().hasPropertyByName( + "NumberFormat"): + _xFormatObject.setPropertyValue("NumberFormat", NewFormatKey) + elif _xFormatObject.getPropertySetInfo().hasPropertyByName( + "FormatKey"): + _xFormatObject.setPropertyValue("FormatKey", NewFormatKey) + else: + # TODO: throws a exception in a try catch environment, very helpful? + raise Exception + + except Exception, exception: + traceback.print_exc() + + def getNullDateCorrection(self): + if not self.bNullDateCorrectionIsDefined: + dNullDate = Helper.getUnoStructValue( + self.xNumberFormatSettings, "NullDate") + lNullDate = Helper.convertUnoDatetoInteger(dNullDate) + oCal = java.util.Calendar.getInstance() + oCal.set(1900, 1, 1) + dTime = oCal.getTime() + lTime = dTime.getTime() + lDBNullDate = lTime / (3600 * 24000) + self.lDateCorrection = lDBNullDate - lNullDate + return self.lDateCorrection + else: + return self.lDateCorrection + + def setBooleanReportDisplayNumberFormat(self): + FormatString = "[=1]" + str(9745) + ";[=0]" + str(58480) + ";0" + self.iLogicalFormatKey = self.xNumberFormats.queryKey( + FormatString, self.aLocale, True) + try: + if self.iLogicalFormatKey == -1: + self.iLogicalFormatKey = self.xNumberFormats.addNew( + FormatString, self.aLocale) + + except Exception, e: + #MalformedNumberFormat + traceback.print_exc() + self.iLogicalFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.LOGICAL, self.aLocale) + + return self.iLogicalFormatKey + + ''' + @return Returns the iDateFormatKey. + ''' + + def getDateFormatKey(self): + if self.iDateFormatKey == -1: + self.iDateFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.DATE, self.aLocale) + + return self.iDateFormatKey + + ''' + @return Returns the iDateTimeFormatKey. + ''' + + def getDateTimeFormatKey(self): + if self.iDateTimeFormatKey == -1: + self.iDateTimeFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.DATETIME, self.aLocale) + + return self.iDateTimeFormatKey + + ''' + @return Returns the iLogicalFormatKey. + ''' + + def getLogicalFormatKey(self): + if self.iLogicalFormatKey == -1: + self.iLogicalFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.LOGICAL, self.aLocale) + + return self.iLogicalFormatKey + + ''' + @return Returns the iNumberFormatKey. + ''' + + def getNumberFormatKey(self): + if self.iNumberFormatKey == -1: + self.iNumberFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.NUMBER, self.aLocale) + + return self.iNumberFormatKey + + ''' + @return Returns the iTextFormatKey. + ''' + + def getTextFormatKey(self): + if self.iTextFormatKey == -1: + self.iTextFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.TEXT, self.aLocale) + + return self.iTextFormatKey + + ''' + @return Returns the iTimeFormatKey. + ''' + + def getTimeFormatKey(self): + if self.iTimeFormatKey == -1: + self.iTimeFormatKey = self.xNumberFormats.getStandardFormat( + NumberFormat.TIME, self.aLocale) + + return self.iTimeFormatKey diff --git a/wizards/com/sun/star/wizards/text/TextDocument.py b/wizards/com/sun/star/wizards/text/TextDocument.py index c6ff21144337..c432ee7a1902 100644 --- a/wizards/com/sun/star/wizards/text/TextDocument.py +++ b/wizards/com/sun/star/wizards/text/TextDocument.py @@ -11,7 +11,9 @@ from com.sun.star.container import NoSuchElementException from com.sun.star.lang import WrappedTargetException from common.Configuration import Configuration import time +from datetime import date as dateTimeObject from com.sun.star.util import DateTime +from com.sun.star.i18n.NumberFormatIndex import DATE_SYS_DDMMYY class TextDocument(object): @@ -208,22 +210,24 @@ class TextDocument(object): fullname = str(gn) + " " + str(sn) currentDate = DateTime() now = time.localtime(time.time()) - currentDate.Day = time.strftime("%d", now) - currentDate.Year = time.strftime("%Y", now) - currentDate.Month = time.strftime("%m", now) + year = time.strftime("%Y", now) + month = time.strftime("%m", now) + day = time.strftime("%d", now) + currentDate.Day = day + currentDate.Year = year + currentDate.Month = month + dateObject = dateTimeObject(int(year), int(month), int(day)) du = Helper.DateUtils(self.xMSF, self.xTextDocument) - ff = du.getFormat(NumberFormatIndex.DATE_SYS_DDMMYY) - myDate = du.format(ff, currentDate) - xDocProps2 = self.xTextDocument.getDocumentProperties() - xDocProps2.setAuthor(fullname) - xDocProps2.setModifiedBy(fullname) - description = xDocProps2.getDescription() + 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 = JavaTools.replaceSubString( - description, WizardName, "<wizard_name>") - description = JavaTools.replaceSubString( - description, myDate, "<current_date>") - xDocProps2.setDescription(description) + description = description.replace("<wizard_name>", WizardName) + description = description.replace("<current_date>", myDate) + xDocProps2.Description = description except NoSuchElementException, e: # TODO Auto-generated catch block traceback.print_exc() |