diff options
Diffstat (limited to '')
-rw-r--r-- | wizards/com/sun/star/wizards/agenda/AgendaWizardDialogImpl.py | 384 |
1 files changed, 384 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogImpl.py b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogImpl.py new file mode 100644 index 000000000..372dad055 --- /dev/null +++ b/wizards/com/sun/star/wizards/agenda/AgendaWizardDialogImpl.py @@ -0,0 +1,384 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# +import traceback +import os.path +from .AgendaWizardDialog import AgendaWizardDialog, uno +from .AgendaWizardDialogConst import HID +from .AgendaDocument import AgendaDocument, TextElement +from .TemplateConsts import TemplateConsts +from .TopicsControl import TopicsControl +from .CGAgenda import CGAgenda +from ..ui.PathSelection import PathSelection +from ..ui.event.UnoDataAware import UnoDataAware +from ..ui.event.RadioDataAware import RadioDataAware +from ..ui.event.CommonListener import TerminateListenerProcAdapter +from ..common.NoValidPathException import NoValidPathException +from ..common.SystemDialog import SystemDialog +from ..common.Desktop import Desktop +from ..common.HelpIds import HelpIds +from ..common.Configuration import Configuration +from ..common.FileAccess import FileAccess +from ..document.OfficeDocument import OfficeDocument + +from com.sun.star.util import CloseVetoException +from com.sun.star.view.DocumentZoomType import OPTIMAL +from com.sun.star.awt.VclWindowPeerAttribute import YES_NO, DEF_NO + +class AgendaWizardDialogImpl(AgendaWizardDialog): + + def __init__(self, xmsf): + super(AgendaWizardDialogImpl, self).__init__(xmsf) + self.filenameChanged = False + self.pageDesign = -1 + + def enterStep(self, OldStep, NewStep): + pass + + def leaveStep(self, OldStep, NewStep): + pass + + def startWizard(self, xMSF): + self.running = True + try: + #Number of steps on WizardDialog + self.nMaxStep = 6 + + self.agenda = CGAgenda() + + # read configuration data before we initialize the topics + root = Configuration.getConfigurationRoot( + self.xMSF, "/org.openoffice.Office.Writer/Wizards/Agenda", + False) + self.agenda.readConfiguration(root, "cp_") + + self.templateConsts = TemplateConsts + + self.initializePaths() + # initialize the agenda template + self.terminateListener = TerminateListenerProcAdapter(self.queryTermination) + self.myAgendaDoc = AgendaDocument( + self.xMSF, self.agenda, self.resources, + self.templateConsts, self.terminateListener) + self.initializeTemplates() + + self.myAgendaDoc.load( + self.agendaTemplates[1][self.agenda.cp_AgendaType]) + self.drawConstants() + + # build the dialog. + self.drawNaviBar() + + self.buildStep1() + self.buildStep2() + self.buildStep3() + self.buildStep4() + self.buildStep5() + self.buildStep6() + + self.topicsControl = TopicsControl(self, self.xMSF, self.agenda) + + #special Control for setting the save Path: + self.insertPathSelectionControl() + + # synchronize GUI and CGAgenda object. + self.initConfiguration() + + if self.myPathSelection.xSaveTextBox.Text.lower() == "": + self.myPathSelection.initializePath() + + # create the peer + xContainerWindow = self.myAgendaDoc.xFrame.ContainerWindow + self.createWindowPeer(xContainerWindow) + + # initialize roadmap + self.insertRoadmap() + + self.executeDialogFromComponent(self.myAgendaDoc.xFrame) + self.removeTerminateListener() + self.closeDocument() + self.running = False + except Exception: + self.removeTerminateListener() + traceback.print_exc() + self.running = False + return + + def insertPathSelectionControl(self): + self.myPathSelection = PathSelection( + self.xMSF, self, PathSelection.TransferMode.SAVE, + PathSelection.DialogTypes.FILE) + self.myPathSelection.insert(6, 97, 70, 205, 45, + self.resources.reslblTemplatePath_value, True, + HelpIds.getHelpIdString(HID + 24), + HelpIds.getHelpIdString(HID + 25)) + self.myPathSelection.sDefaultDirectory = self.sUserTemplatePath + self.myPathSelection.sDefaultName = "myAgendaTemplate.ott" + self.myPathSelection.sDefaultFilter = "writer8_template" + self.myPathSelection.addSelectionListener(self) + + ''' + bind controls to the agenda member (DataAware model) + ''' + + def initConfiguration(self): + self.xDialogModel.listPageDesign.StringItemList = \ + tuple(self.agendaTemplates[0]) + UnoDataAware.attachListBox( + self.agenda, "cp_AgendaType", self.listPageDesign, True).updateUI() + self.pageDesign = self.agenda.cp_AgendaType + UnoDataAware.attachCheckBox( + self.agenda, "cp_IncludeMinutes", self.chkMinutes, True).updateUI() + UnoDataAware.attachEditControl( + self.agenda, "cp_Title", self.txtTitle, True).updateUI() + UnoDataAware.attachDateControl( + self.agenda, "cp_Date", self.txtDate, True).updateUI() + UnoDataAware.attachTimeControl( + self.agenda, "cp_Time", self.txtTime, True).updateUI() + UnoDataAware.attachEditControl( + self.agenda, "cp_Location", self.cbLocation, True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowMeetingType", self.chkMeetingTitle, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowRead", self.chkRead, True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowBring", self.chkBring, True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowNotes", self.chkNotes, True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowCalledBy", self.chkConvenedBy, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowFacilitator", self.chkPresiding, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowNotetaker", self.chkNoteTaker, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowTimekeeper", self.chkTimekeeper, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowAttendees", self.chkAttendees, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowObservers", self.chkObservers, + True).updateUI() + UnoDataAware.attachCheckBox( + self.agenda, "cp_ShowResourcePersons",self.chkResourcePersons, + True).updateUI() + UnoDataAware.attachEditControl( + self.agenda, "cp_TemplateName", self.txtTemplateName, + True).updateUI() + RadioDataAware.attachRadioButtons( + self.agenda, "cp_ProceedMethod", + (self.optCreateAgenda, self.optMakeChanges), True).updateUI() + + def insertRoadmap(self): + self.addRoadmap() + self.insertRoadMapItems( + self.resources.RoadmapLabels, [True, True, True, True, True, True]) + self.setRoadmapInteractive(True) + self.setRoadmapComplete(True) + self.setCurrentRoadmapItemID(1) + + ''' + read the available agenda wizard templates. + ''' + + def initializeTemplates(self): + try: + sAgendaPath = self.sTemplatePath + "/wizard/agenda" + self.agendaTemplates = FileAccess.getFolderTitles( + self.xMSF, "aw", sAgendaPath, self.resources.dictPageDesign) + return True + except NoValidPathException: + traceback.print_exc() + return False + + ''' + first page, page design listbox changed. + ''' + + def pageDesignChanged(self): + try: + SelectedItemPos = self.listPageDesign.SelectedItemPos + #avoid to load the same item again + if self.pageDesign is not SelectedItemPos: + self.pageDesign = SelectedItemPos + self.myAgendaDoc.load( + self.agendaTemplates[1][SelectedItemPos]) + self.drawConstants() + except Exception: + traceback.print_exc() + + #textFields listeners + def txtTitleTextChanged(self): + self.myAgendaDoc.redrawTitle("txtTitle") + + def txtDateTextChanged(self): + self.myAgendaDoc.redrawTitle("txtDate") + + def txtTimeTextChanged(self): + self.myAgendaDoc.redrawTitle("txtTime") + + def txtLocationTextChanged(self): + self.myAgendaDoc.redrawTitle("cbLocation") + + #checkbox listeners + def chkUseMeetingTypeItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_MEETING_TYPE) + + def chkUseReadItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_READ) + + def chkUseBringItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_BRING) + + def chkUseNotesItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_NOTES) + + def chkUseCalledByItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_CALLED_BY) + + def chkUseFacilitatorItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_FACILITATOR) + + def chkUseNoteTakerItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_NOTETAKER) + + def chkUseTimeKeeperItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_TIMEKEEPER) + + def chkUseAttendeesItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_PARTICIPANTS) + + def chkUseObserversItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_OBSERVERS) + + def chkUseResourcePersonsItemChanged(self): + self.myAgendaDoc.redraw(self.templateConsts.FILLIN_RESOURCE_PERSONS) + + def insertRow(self): + self.topicsControl.insertRow() + + def removeRow(self): + self.topicsControl.removeRow() + + def rowUp(self): + self.topicsControl.rowUp() + + def rowDown(self): + self.topicsControl.rowDown() + + def cancelWizard(self): + self.xUnoDialog.endExecute() + self.running = False + + def finishWizard(self): + self.switchToStep(self.getCurrentStep(), self.nMaxStep) + bSaveSuccess = False + endWizard = True + try: + self.sPath = self.myPathSelection.getSelectedPath() + if not self.sPath or not os.path.exists(self.sPath): + self.myPathSelection.triggerPathPicker() + self.sPath = self.myPathSelection.getSelectedPath() + + #first, if the filename was not changed, thus + #it is coming from a saved session, check if the + # file exists and warn the user. + if not self.filenameChanged: + answer = SystemDialog.showMessageBox( + self.xMSF, "MessBox", YES_NO + DEF_NO, + self.resources.resOverwriteWarning, + self.xUnoDialog.Peer) + if answer == 3: + # user said: no, do not overwrite + endWizard = False + return False + + xDocProps = self.myAgendaDoc.xTextDocument.DocumentProperties + xDocProps.Title = self.txtTemplateName.Text + self.myAgendaDoc.setWizardTemplateDocInfo( \ + self.resources.resAgendaWizardDialog_title, + self.resources.resTemplateDescription) + bSaveSuccess = OfficeDocument.store( + self.xMSF, self.myAgendaDoc.xTextDocument, self.sPath, + "writer8_template") + + if bSaveSuccess: + self.topicsControl.saveTopics(self.agenda) + root = Configuration.getConfigurationRoot( + self.xMSF, "/org.openoffice.Office.Writer/Wizards/Agenda", + True) + self.agenda.writeConfiguration(root, "cp_") + root.commitChanges() + + self.myAgendaDoc.finish(self.topicsControl.scrollfields) + + loadValues = list(range(2)) + loadValues[0] = uno.createUnoStruct( \ + 'com.sun.star.beans.PropertyValue') + loadValues[0].Name = "AsTemplate" + if self.agenda.cp_ProceedMethod == 1: + loadValues[0].Value = True + else: + loadValues[0].Value = False + + loadValues[1] = uno.createUnoStruct( \ + 'com.sun.star.beans.PropertyValue') + loadValues[1].Name = "InteractionHandler" + + xIH = self.xMSF.createInstance( + "com.sun.star.comp.uui.UUIInteractionHandler") + loadValues[1].Value = xIH + + oDoc = OfficeDocument.load( + Desktop.getDesktop(self.xMSF), + self.sPath, "_default", loadValues) + oDoc.CurrentController.ViewSettings.ZoomType = OPTIMAL + else: + pass + + except Exception: + traceback.print_exc() + finally: + if endWizard: + self.xUnoDialog.endExecute() + self.running = False + return True + + def closeDocument(self): + try: + self.myAgendaDoc.xFrame.close(False) + except CloseVetoException: + traceback.print_exc() + + def drawConstants(self): + '''Localise the template''' + constRangeList = self.myAgendaDoc.searchFillInItems(1) + + for i in constRangeList: + text = i.String.lower() + aux = TextElement(i, self.resources.dictConstants[text]) + aux.write() + + def validatePath(self): + if self.myPathSelection.usedPathPicker: + self.filenameChanged = True + self.myPathSelection.usedPathPicker = False |