385 lines
14 KiB
Java
385 lines
14 KiB
Java
#
|
|
# 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
|